交易就是一份凭证
它不是在请求“执行这个”。它陈述“我读了这些,我写了那些,证明在此”。任何人都可以重算并比对。
reads 为输入重新执行 program 得到的正是那些 writes,且 deposit 足以覆盖最坏情况。不碰磁盘,不看历史。reads 是否仍然成立?两个动词,两个阶段
整个设计就是把这两个问题分开 — 并在最便宜的地方各自作答。
它有效吗?
只看凭证本身就能回答。任何机器上都可以一次数千份。
- 严格 Ed25519 签名核对通过
- 重新执行的结果与 writes 相符
- 保证金足以覆盖最坏情况
- 无效:永不进入诚实的区块
它可应用吗?
在凭证于区块中所处的位置回答,把字节与状态表相比对。
- reads 仍然成立 → writes 被提交
- 读取过时或溢出 → 跳过,保证金提供者支付一笔固定费用
- 保证金没有资金或已被花费 → 丢弃,不收取任何费用
- 无论哪种情况,区块都保持有效
四种结果,以及由谁付费
凭证出了问题是一种结果,从来不是拒绝区块的理由。每一种结果都向选择了该风险的一方收费,而一个签名至多被收费一次。
已应用
每一个所声明的读取都成立,因此写入落地,费用按实际成本结算:基础费被烧掉,优先费支付给生产者。
已跳过
某个读取不再成立,或某个增量会超出 256 位范围。不写入任何东西。从保证金中烧掉一笔 0.01 ZCD 的固定跳过费,其余退回。该 id 被标记为已见,因此任何生产者都无法再次打包它。
已丢弃
保证金存储单元没有资金或已被花费,因此没有可以收取的东西。凭证被携带但不收费,也不标记为已见。
用户从不为跳过付费
读取是保证金提供者选的,所以由保证金提供者为它们负责。对于 fill,那就是一个定序器:为读取失败的那个合约声明了自己的定序器,或者,若没有,则是 fill 所指定保证金的那个定序器。用户付给每个定序器的款项只有在 fill 被应用时才会结算。那些无人可收费的失败 — 违反流水线顺序的 fill、已经变动的 fence、读取不成立的强制凭证 — 则会使区块无效,因为生产者正是本可以知道这一点的一方。
从诞生到入账的流程
钱包构建一笔付款,或签署一个意图
一笔付款不需要服务器:钱包对它持有的一个一次性存储单元加守卫、扣款、将其标记为已花费,向收款方的新地址入账,并把找零发到它自己的一个新地址。对定序合约的调用则是一个签名意图:调用什么、对结果的界限、付给定序器多少,以及为它出资的一次性付款地址。
定序器执行并确认
它在自己的视图之上运行该意图 — 链的最新端加上它已经构建的每一份 fill — 在几毫秒内以一份签名回执作答,并把结果作为一份以它自己的余额作保证金的 fill 发布。一次跨越绑定到不同定序器的多个合约的调用,由每个定序器联合签署,并作为一份原子的 fill 落地。
每个节点并行验证
每一份凭证在到达时、被转发之前,都从其字节进行核查:签名、针对所声明读取的重新执行、保证金。没有状态,没有历史,任何核心,任何机器。
生产者排序
工作量证明矿工挑选有效的凭证并求解区块;在切换到权益证明之后,改由为该时隙抽中的质押者为区块签名。它不执行交给它的任何东西,并记住 TTL 窗口内见过的 id,因为把同一份打包两次会让区块无效。在其区块末尾,它可以执行来自强制路径的开放意图。
串行折叠
首先是 fill,按流水线顺序;然后是其他所有凭证,按 (deposit address, seq, id);然后是强制凭证,按 id。这些都不由生产者选择。对每一份凭证:所声明的读取是否仍然成立?
状态:存储单元、地址、类型化访问
存储单元是位于某个槽位上的一个 256 位整数。不存在的存储单元读作零。并发不是在运行时发现的:它是逐个槽位声明的。
一次性地址与持久地址
一次性地址只花费一次:对它扣款的那份凭证会把它永久标记为已花费。钱包为每一笔入账付款提供一个新地址,这是零争用的路径。持久地址可以重复使用 — 即一个账户 — 挖矿奖励也应当进入持久地址:一次性地址一旦被花费,就会烧掉它持有的每一笔奖励,因此节点拒绝把一次性地址用作收款地址。合约有自己的地址种类,任何密钥都无法为其签名。
原生资产,无需机器
自区块 0 起:至多 32 笔转移的 TRANSFER,带供应上限的 ISSUE,受该上限守卫的 MINT,至多 64 个一次性地址的 RETIRE。向一个新存储单元入账就是打赏。一个区块里的一万次打赏就是一万次加法:零冲突,无需定序器,无需机器。
机器及其定序器
带守卫增量消解了付款之间的争用。剩下的是那些必须读取精确状态才能决定写什么的逻辑 — 订单簿、做市商 — 在那里,由合约选择它的串行化者。
cEVM
以太坊虚拟机的一种方言,因此 Solidity、它的编译器和它的审计者都可以沿用。存储是声明式的:SLOAD 和 SSTORE 是精确的,另有六个新操作码提供带守卫、可交换的规则。NUMBER 和 TIMESTAMP 读取纪元信标,在一天之内保持不变;没有对应物可指的操作码被移除。代码随凭证一起传输。一个代币、一个打赏罐和一个托管合约,以增量优先的方式编写,在机器开启时预先部署。
定序或开放
每个合约的记录都指定一把定序器密钥。如果它非零,合约的精确路径就需要该密钥的签名;如果它为零,任何人都可以走这条路径,合约只受其代码保护。带守卫增量从不受此限制:一个定序代币仍然接受来自任何人的每一笔转账。定序器目录说明每个定序器在哪里应答 — 是发现,而不是授权。
意图、fill、回执
意图就是用户的全部授权,在至多 8 个区块的窗口内有效:定序器可以改变它何时运行,但永远不能改变它做什么。fill 的 id 就是意图的哈希,因此同一意图的两份 fill 共用一个 id,只有一份能被收费。回执是一种预确认,是定序器在 fill 被应用之前的承诺;两份相互矛盾的回执就是任何人都能从字节核查的证明,而用户会离开。
流水线、fence、联合定序
链为每个定序器和合约记录最后一个已应用的 seq,而一份 fill 只能以下一个序号进入,因此流水线按其定序器签署的顺序提交。每个合约还保有一个 fence 计数器:一份设置其状态的强制凭证,或一次定序器的更换,都会推进它,而在被绕过的状态之上构建的每一份 fill 都无法进入 — 不向任何人收费,定序器重新构建。跨定序器的调用是一份带有每个定序器签名的 fill,按构造即是原子的。
强制路径:打包即应用
一个唯一入口就是其定序器的合约,一旦定序器审查、多收费或消失,就会变成一座监牢。每个用户都有一扇无需任何人许可的慢门。
每个区块按三类进行折叠,其顺序不由生产者选择
用户签署一个开放意图 — 一个未指定定序器、由用户自己的一次性付款地址出资的意图 — 并把它转发到网络。生产者持有其区块末尾的状态,它以该状态执行它所选择的开放意图,并把结果作为区块的最后几份凭证追加上去。没有队列、租约、配额或截止期限。意图的付款支付费用,因此生产者赚到的与定序器会赚到的一样多。
失败的调用照样落地
一次回滚、突破界限或耗尽 gas 的强制调用以 FORCED_FAILED 进入:它的付款地址付费,此外不写入任何东西。谁转发注定无法成功的意图,谁就为每一个意图付费,因此他们无法饿死一个正当的意图。
它会推进 fence
一份设置了某合约状态中某个存储单元的强制凭证,会推进该合约的 fence 计数器,于是在它所绕过的状态之上构建的每一份 fill 都要重新构建。只做读取、守卫或增量相加的强制凭证不会动 fence,失败的强制凭证也不会。定序器损失的是延迟,仅此而已。
按构造即有界
每个区块至多 16 份强制凭证,每份至多 4,000 个派生单位的并行预算(200,000 机器 gas):至多为创世并行上限的三分之一。给合约作者的规则是:提款必须符合这个预算。
谁做什么
安全性不需要任何角色。即使每个定序器都消失了,合约依然通过其增量方法和强制路径存活,用户借此提款,合约也可以借此绑定到一个新的定序器。
钱包
- 做什么
- 把付款构建为凭证;为合约签署意图
- 看得见
- 它需要读取的那部分公开状态
- 信任
- 没有人
定序器
- 做什么
- 为其合约执行意图,签署回执,发布 fill
- 被信任的部分
- 仅活性。若它说谎,它的 fill 会被跳过,由它自己的保证金赔付
- 攫取
- 它自己那个应用的订单流,且是明示的
验证节点
- 做什么
- 从字节核查每一份凭证,转发,同步
- 需要
- 核心数。只有运行折叠才需要状态
- 成本
- 验证分摊到它拥有的每一个核心上;折叠是一个在内存上的循环
区块生产者
- 做什么
- 用 RandomX 挖矿,对有效凭证排序,在其区块末尾执行开放意图
- 看得见
- 字节和状态,而不是含义
- 赚取
- 补贴的 94%,加上被应用凭证的优先费
强制路径
- 做什么
- 一扇无需许可的门:一个开放意图,由生产者执行
- 成本
- 每次都付强制价格,以及延迟
- 保证
- 没有哪个运营者是一座监狱
网络:两个 gas 市场
一条在单一拍卖里为一切定价的链,会让一次证明验证去和一次状态写入竞价。在这里,每一种资源都有自己的价格。
并行 gas
为验证付费:签名、字节、派生单位 — 繁重的证明、后量子方案。
串行 gas
为折叠付费:读取、写入、已花费注册表插入、已见集合插入。这是每个节点都要按序运行的那个唯一循环。
只有被应用的才付费,也只有被应用的才推动价格
基础费被烧掉,优先费支付给生产者,这只发生在被应用的凭证上,且仅限于它们;被跳过的凭证,其费用全额烧掉。如果一次跳过把费用付给生产者,那么组装区块的人就能靠安排别人的失败获利。烧掉它反转了激励:一次跳过占了位置却什么也赚不到。而且只有被应用的 gas 才推动基础费,因此用自相冲突的凭证填满区块,无法把任何人挤出市场。
时代:今天运行的,以及之后到来的
一个时代就是编译进发行版的一个高度,或一个在链上测得的条件。一个低于某道关口、却携带了该关口所启用内容的区块是无效的;一个新的时代永远不会改变较早区块的含义。
Era 0 — 挖矿与支付
自区块 0(2026年10月7日)起上线。遵循中本聪规则的工作量证明、原生资产、一次性地址和持久地址、两个手续费市场、94/3/3 的补贴划分以及国库:国库持续累积,且没有任何凭证能从中扣款;动用途径如果有的话,会经由日后的升级到来,且不早于高度 259,200。
Era 1 — 机器
高度 80,640,约在 2026年11月4日,已在发布二进制文件里。cEVM 及其标准库、带定序器和管理员的合约记录、意图、fill 与联合定序、定序器目录,以及强制路径。
Era 2 — 权益证明
质押在纪元 182 开启,约 2027年4月7日:权益可以被质押、解除质押或委托给一个权益池,最低质押额为 1,000 ZCD。一旦活跃权益在 30 个纪元内持有供应量的 10%,最迟从纪元 273 起,一段 90 个纪元的权益爬坡期开始:区块仍然是挖出来的,每个区块还由一个按权益抽中的质押者签名,该质押者获得生产者份额的 k/180。它是其自己的发行版,以硬分叉方式交付。
切换
在第 90 个通过闸门的纪元之后的那个纪元的第一个区块 — 闸门即该纪元 90% 的区块带有签名,且活跃权益至少为供应量的 10%。挖矿结束;被抽中的质押者为每个 5 秒时隙签名,而一个 17,280 个时隙的纪元支付的数额与之前一天支付的相同。区块按深度达到最终,即 120 个区块或 10 分钟。只有双重签名受到惩罚,且委托者永不受罚。
超越全面验证
一个方向,而不是一项规范。当每日交易量接近一个普通节点所能验证的量时,后来的某个时代可以抽取一部分权益来验证每一份凭证,而不是由每个节点验证,同时状态和折叠仍是一个,每一份凭证仍是原子的。在那之前,每个节点验证一切。
从上方看这个网络
四个互不重叠的层:谁构建、谁验证、谁排序,以及那扇谁也关不上的门。每一层随着不同的资源而扩展。
钱包与定序器
普通的 web2:websocket、队列、自动扩缩容。钱包自己构建付款;定序器执行意图,并在几毫秒内作答。它们在活性上受信任,在安全性上从不受信任,也从不托管数据 — 状态始终可以仅凭链本身重建出来。
转发与验证
每个节点在转发每一份凭证之前,都从其字节对它进行核查。区块以区块头加上一个哈希列表的形式传输,而这些哈希对应的内容接收方大多已经持有;区块体是链数据。节点朝着经过验证的最多工作量同步,而不是朝着声称的最高高度。
生产者与折叠
工作量证明矿工对凭证排序并求解区块,或者在切换到权益证明之后,由为该时隙抽中的质押者为它签名;每个节点运行折叠,折叠只做比较、相加和写入。折叠的顺序由规则固定,因此生产者唯一的选择是打包什么。
强制路径
开放意图,由生产者在其区块末尾执行。打包即应用 — 正是这个机制让网络能在任何运营者之后继续存在,包括作者本人。