第二篇拆完了 EIP-8141 的交易本体,第三篇让一笔 Falcon 交易走完了协议内部的一生。但一笔交易不是活在真空里的。它身边有几亿个没迁移的邻居,有替它买单的人,有它必须借道的传播网络,有决定它能不能进块的市场,还有一堆原本由中介默默消化的风险。这一篇讲这个世界。
主线接着前几篇的账走。4337 时代,bundler 与 EntryPoint 这对中介消化了五种职责:对无码用户的兼容,代付的托管与结算,交易的传播,打包出块,以及 DoS 与抢跑风险的消化。8141 把中介蒸发之后,每一项职责都必须找到新的继承人。 这一篇就是这份遗产清单的逐项清点:无码用户交给 default code,托管结算交给协议直扣直退,传播交给公共池公约加私有通道的两级世界,打包交给 builder 市场,风险交给数学、纪律、管线排序与 p2p 信誉,由全体节点分摊。
无码者的席位:default code
帧交易的授权总纲是一句话:你的代码执行 APPROVE 了吗。这个设计有个天然的空洞:VERIFY 帧打到一个无码 EOA(codeHash 是空哈希)怎么办?没有代码,谁来作答?若直接判失败,几亿个存量 EOA 就被锁在新世界门外。
default code 就是补这个洞的。协议在客户端里内置一段写死的剧本,遇到无码账户被 VERIFY 时,「假装」那里有代码,替它作答。作答需要证据,而一笔帧交易里,证据只可能住在一个地方,随交易携带的签名列表。剧本翻译成大白话就是:到这笔交易自带的签名列表里,按固定座位查一条记录,看它是不是一张客户端已经盖过章的、署名恰好是我自己的、签的恰好是这笔交易的 ECDSA 凭证;找到,就代这个账户说出 APPROVE。
为什么必须是 ECDSA?这是状态模型的必然,不是设计者的偏好。无码 EOA 在状态层就是 [nonce, balance, 空存储, 空码哈希]:没有存储槽,没注册过任何公钥,没有任何代码来解释任何东西。这个地址与世界上任何密钥的唯一绑定,是它的出生证明,地址等于 keccak(ECDSA 公钥) 的后 20 字节。于是协议能替它检查的命题只剩一条:某个 ECDSA 签名恢复出的地址是否等于这个账户。这就是 legacy 时代的 ecrecover == sender,原封不动,换了一身帧交易的语法。旧宪法条款没有被废除,它被降格成了通用可编程规则下的默认模板:你不写代码,就按老规矩办。这也顺便把「default code 不支持后量子」的原因补全了:不是小气,是逻辑上不可能,无码账户没有存储,Falcon 公钥无处注册,协议无从得知这个 EOA 想认哪把后量子钥匙。想用 PQ,必先装码。惯性路径被钉死在 ECDSA 上,钉子就是状态模型本身。
剧本里的三个检查条件,各防一件事。scheme 必须是 SECP256K1,因为那是唯一存在出生绑定的方案。署名必须解析为本账户,这是身份等式的本体;注意分工,default code 自己不做任何密码学,SECP256K1 是协议方案,客户端在任何帧执行之前已经花 2800 gas 验完并恢复出签名者,default code 干的只是元数据比对,在已验证的事实清单里查第 i 条的署名人是不是我。msg 必须为空,因为授权必须锚定本交易;第二篇讲过,显式 msg 只导入事实、对本交易零承诺,单独依赖它就可以重放,防重放的锚就在这一条。
还有一个座位规则。帧的 flags 含执行批准时查签名列表的 index 0,纯付费批准时查 index 1。为什么按固定座位,还要分两个?因为一笔交易里可能同时有两个无码 EOA 在用 default code,各扮一个角色:sender 批执行,另一个当 paymaster 批付费。两条 ECDSA 凭证若抢同一个座位,这个模式就做不成。固定座位让凭证各就各位,还附带一个熟悉的性质:全静态可判定,内存池和钱包不执行任何东西,就知道每条签名该放哪、每个帧会查哪。
两个实例把抽象钉死。实例一,无码 EOA 自付转账,也就是官方那个 139 字节最小交易基线的真身:
sender = E(无码 EOA)frames = [F0: VERIFY, target=空(→E), flags=0x3], [F1: SENDER, →B, 1 ETH]signatures = [S0: [SECP256K1, signer=空(缺省→tx.sender), msg=空, 65 字节]]
客户端先验 S0(2800 gas,恢复出 signer == E)→ F0:E 是空码哈希 → default code:scope 含执行 → 查 index 0 → S0:方案对、署名是 E、msg 空 → 代为 APPROVE(0x3)→ F1 以 E 为 caller,转账这是什么?一笔 legacy 交易在帧语法里的转世。同一把钥匙,同一个密码学检查,同一个授权语义,换了包装,顺手获得新能力:想批量,往帧列表里加 SENDER 帧就行,签名还是那一条。signer 留空缺省解析为交易的 sender,又省 20 字节,139 字节就是这么一个字节一个字节抠出来的。
实例二,无码 EOA 当 paymaster:
sender = A(Falcon 智能账户), 代付人 = P(无码 EOA,持 ETH)frames = [F0: VERIFY→A, flags 0x2], [F1: VERIFY→P, flags 0x1], [F2: SENDER…]signatures = [S0: A 的 Falcon ARBITRARY 条目(坐 0 号), S1: [SECP256K1, signer=P, msg=空, 65 字节](坐 1 号)]
F0:A 有码,自己的代码验 Falcon → APPROVE(0x2)F1:P 无码 → default code:纯付费 → 查 index 1 → 三查通过 → APPROVE(0x1),payer = P座位分工在这里显形:A 的后量子凭证与 P 的 ECDSA 凭证各坐各位,一个批执行,一个买单。P 全程零部署,最普通的 EOA,靠 default code 就是一个合格的代付人。这个「买单」的角色,值得单独讲一章。
买单者的进化:paymaster 三代史
以太坊的创世铁律是:每笔交易的 gas 由 sender、用 ETH、在打包那一刻支付。这条规则锁死了三件事。冷启动悖论:给一个新地址转 100 USDC,对方「有钱」却一分钱动不了,转出要 gas,gas 要 ETH,而把 USDC 换成 ETH 本身也要 gas,你需要 ETH 才能动你的钱,你需要动你的钱才能得到 ETH。商业补贴不可能:游戏想替玩家付、企业想替员工付,协议里没有「我替他付」的语法。币种锁死:满钱包稳定币,gas 只收 ETH。需求于是很朴素,让 sender 与 payer 可以是两个人;而安全地实现这句话的全部难度,在一个不对称上:垫钱的人先掏钱,交易后成败;谁垫钱,谁就暴露在「垫了钱被戏耍」的风险里。 三代设计,全是在跟这个不对称搏斗。
史前史是中继者时代。协议不支持,社区就绕:用户不发交易,只签一条消息;中继者把消息包进自己的交易发上链、付 gas;目标合约验内层签名、以用户名义执行。GSN 一类试图把它标准化。能用,但处处漏水:中继者可以审查、可以拖延;用户的消息可以在中继者垫付之后执行失败,让它白烧钱;合约必须专门改造;签名不是交易,整个工具链看不懂。教训沉淀成一条:代付不能靠链下的君子协定,垫付方的风险必须有链上机制兜底。
4337 把 paymaster 变成标准角色,三件套各答一险,第一篇都见过它们的影子。预存托管:paymaster 先把 ETH 存进 EntryPoint。为什么必须?因为 4337 的结算人是合约,而合约没有能力伸手进任意账户扣钱,只能支配存在自己这里的钱;要保证跑完一定收得到,钱必须先押在结算人手里。两段钩子:验证期 validatePaymasterUserOp 审单(这个用户在赞助名单上吗,单子里有没有给我转够 USDC),执行毕 postOp 结账,垫付风险被夹在两段代码之间管理。质押与声誉:paymaster 的验证是任意代码、读共享状态,一次状态变化能让成千上万笔依赖它的 pending 集体失效,4337 的答案是经济治理,押金、声誉分、拉黑限流。一句话:合约角色加托管资金加经济惩罚,运行在协议旁边的平行体系里。
8141 对 paymaster 做的,与它对 EntryPoint 做的一样激进:取消角色,保留动作。 协议里不再有「paymaster」这个名词,只有一条指令语义:任何账户,在 flags 含付费位的 VERIFY 帧里执行 APPROVE,它就是这笔交易的 payer。合约可以,智能账户可以,上一章那个裸 EOA 也可以。围绕这一声发言,三件套被逐一替换成协议原语。
托管消失了。回看根源:4337 需要托管,是因为结算人是合约,够不着别人的钱包;8141 的结算人是协议本身,状态转换函数当然有权直接从任何账户扣款,它缺的从来不是能力,是授权,而 APPROVE(0x1) 就是授权。资金流简化成一条直线:
pay 帧 APPROVE(0x1) → 协议按最大成本从 payer 预扣→ 帧循环跑完 → 未用的 gas 直接退还 payer没有中间账户,没有事后追偿,没有任何人垫资,builder 打包不垫一分钱。协议自己就是托管方,托管作为机制随之蒸发。两段钩子换了形态:审单变成 pay 帧,而且多了第二篇讲过的利器,跨帧自省,代付者的代码可以当场检查后续帧的内容,确认「第 3 帧确实给我转了 5 USDC」再点头;结账变成排在用户帧之后的 post_op 帧,位置在付款线之后,不受任何前缀规则约束,结算逻辑多复杂都行。帧序还有一条铁律兜底:批付费的守卫要求 sender 已先批过执行,所以代付者审单时看到的,永远是一笔用户已授权、内容已冻结的交易,不存在「批了钱他再改单」。
质押与声誉被整体删除,替它的是纯结构化的两级治理。删掉经济治理,老问题原样回来:payer 的余额是共享状态,一笔转账能让一池子依赖它的交易集体作废,第一篇的失效攻击换个马甲。8141 的答案分两级。canonical 代付人是一等公民:规范钦定一份实现的字节码,任何账户的运行时字节码与之逐字节相同,就被认作 canonical,不是单例,是「同款」。认字节码的理由是,这份代码向节点做出了机器可验证的承诺,资金只有两条出路,付交易费,或者走时间锁提款。有了这个承诺,节点就敢做预留记账:
可用余额 = 链上余额 − 已为其他 pending 预留的最大成本 − 时间锁中待提款入池条件:可用余额 ≥ 本交易的最大成本余额不会被偷偷抽走(时间锁给节点反应时间),预留不会超卖,一个 canonical 代付人可以同时背任意多笔 pending。non-canonical 是二等公民:任意其他合约乃至裸 EOA,节点读不懂任意代码的资金承诺,于是不记账,只限爆炸半径,每个这样的代付人全网同时至多一笔 pending。治理哲学的更替看得很清楚:4337 用经济手段管坏人,押金、声誉、拉黑;8141 用结构手段防坏事,要么字节码同款到节点能替你算账,要么被限制到伤不了人。第一篇说协议的两件武器是镣铐和抵押品;到了 8141,连抵押品这件武器也被铸成了代码墙。
两级世界还有几条边界值得记下。全链上无信任的 ERC-20 代付模式(pay 帧自省「下一帧给我转了币」再批)要读代币合约的余额,越出了公共池「只读 sender 自己存储」的规则,于是共识有效、公共池谢客,与后量子交易困在同一个夹层;能走公共池大门的,是 canonical 的链下预签赞助模式。批准与打包之间,用户抢先清空承诺支付的 ERC-20,这条风险规范明说了归赞助者自担,靠链下审查、白名单、post_op 结算去缓解,商业问题,协议不兜底。最后是三个后量子缺口:当前草案的 canonical 实现用的是 ecrecover 授权,官方代付轨道自身就有量子缺口;想用 Falcon 做赞助决策的后量子代付人,pay 帧的 gas 计入十万预算,撞的是与后量子 sender 同一堵墙;EOA 靠 default code 代付,只认 ECDSA。迁移完备性的清单上,赞助路径同样要打勾。
这一章收束成一句:同一个死结,垫钱者如何不被戏耍,被层层下沉,先沉进标准(GSN),再沉进合约(4337 三件套),最后沉进协议本身(直扣直退加结构约束);沉到底的标志,是 paymaster 作为名词消失,只剩任何账户都能说出的那一声 APPROVE(0x1)。
公地与暗道:内存池的真相
前面两次说到「公共池谢客、只能走私有通道」。要真正理解这句话,得先拆掉一个错觉。
共识规则从头到尾只裁决一件事:区块。什么是有效区块,块里什么是有效交易。至于一笔交易怎么旅行到出块者手里,协议一个字都没有规定。所谓内存池,不是链上对象,不是全局数据结构,而是每个节点自己的候车室,一块本地内存,存着「我觉得将来可能进块、值得等一等」的交易。「公共内存池」是几千个候车室经 gossip 互相转发之后涌现出来的现象:没有边界,没有单一状态,没有权威版本。
那 8141 规范里洋洋洒洒的内存池规则是什么?公地的自我保护公约。 参与公共 gossip 的处境是:你在替陌生人免费转发交易,耗内存,耗带宽,可能还要模拟一遍,而这笔交易进不进块、给不给你一分钱,毫无保证。所以每一跳都必须用极低的成本判断「这个包裹值不值得搬」。公约因此必然保守、必然静态可判:四种前缀形状,不执行代码就能识别;十万 gas 硬预算,封顶白算量;禁用环境指令,保证模拟结论明天还成立;一个 sender 一笔,封顶候车位占用。这些规则约束的从来不是「交易是否有效」,而是替陌生人投机的成本上限。
私有通道为什么可以不守公约?因为信任拓扑变了,投机风险的承担者变了。把那笔 2.1M gas 的 Falcon 交易直接递给一个 builder:替你烧两百万 gas 做模拟的只有唯一一方,而且恰好是收款的一方,交易进块它吃你的费。这是一笔它自己能算的经济账,愿赌服输,没有任何第三方被迫补贴。对照公共池:同一笔交易要让几千个与你无关、永远收不到你钱的节点各自模拟、存储、逐块重验,公约拒绝的正是这种成本社会化。私有通道也并非法外之地,builder 自有准入,最低费用、客户关系、身份限速。DoS 没有消失,只是内部化给了一个有能力定价的对手方。
违规交易为什么照样能上链?因为全链只有一道强制关卡,区块有效性。builder 把任何共识有效的交易打进块,验证节点只问状态转换对不对,从不问这笔交易当年怎么旅行过来、守没守 gossip 公约。邮政类比一收:公约是邮政的包裹标准,让每个分拣站低成本处理;私有通道是自己开车把包裹送到收件人门口,包裹标准只约束邮政网络,不约束公路;区块验证是海关,唯一人人必过的关口,只查真伪,不查运输方式。三个层次排齐:local,自己节点的候车室,靠 RPC 提交,信任的是节点运营者;private,builder 和订单流关系,Flashbots 谱系;public,gossip 公地。两级世界不是 8141 的发明,今天主网已有相当比例的交易走私有订单流,4337 的 alt-mempool 本身就是一张自带公约的平行 gossip 网。8141 的贡献,是把这道边界第一次写成了规范常数(100000):「哪些交易注定走不了大门」从生态博弈,变成了可计算的命题。
出块的市场:随机选人,经济选块
私有通道的终点站是 builder,它属于另一个市场,区块生产市场,架构叫 PBS(提议者与构建者分离),今天以 MEV-Boost 的形态运行。开场先钉死一件事:这整套架构不在共识协议里,和内存池一样,是协议旁边长出来的市场基础设施;共识只认识两样东西,validator 和有效区块。
市场里有四个角色。普通全节点跑标准客户端,从公共 gossip 收交易,维护候车室,验证每一个区块,没有质押,永不出块。验证者(proposer)是全节点加质押,被抽中时提议区块。builder 跑的是标准客户端的魔改版,交易来源除了 gossip 还有私有订单流(直连 RPC、searcher 的 bundle、独家订单流),用自研算法建造价值最大化的区块,然后竞价卖给 proposer。relay 是 builder 与 proposer 之间那个双向不信任的公证人:验块、托管,只给 proposer 看区块头和出价。「大家跑的是不是同一套客户端」这个问题的精确答案:验证的那一半人人同款,必须如此,否则自己分叉出局,relay 也要跑完整验证才能向 proposer 担保出价背后的块真实有效;建块的那一半是自由市场,共识只定义什么块有效,不定义怎么造块,客户端自带的默认建块算法(按优先费贪心装填)只是市场上最朴素的参赛者。
一个槽位的十二秒是这样过的。RANDAO 按质押权重随机抽出本槽位的 proposer,整个流程里的随机只发生在这一步。被抽中的 proposer 有两个选项:本地自建,用自己候车室的公共交易加默认算法;或者问 relay 要出价,取最高价,盲签区块头,签完 relay 才释出完整块体并代为广播。盲签背后是一段精巧的信任工程:builder 不敢把整块先给 proposer,怕它拆开 bundle 偷走 MEV 策略;proposer 不敢轻信空头报价,块必须真实有效、钱必须真到账。relay 作为双方共同选择的公证人验块、托管、担保出价,用一个可信第三方换来了互不信任市场的流动性,也因此成了出块要道上的中心化环节,ePBS(EIP-7732)想把这一环也协议化,这是「协议化浪潮」的下一站。
关键的直觉校正:共识随机选的是人,不是块。 被抽中的 proposer 面前是一道比大小题,本地块的价值对最高出价,它取大者。于是「公共块对私有块」的比例不是概率分布,是几十万次经济决策的统计结果,而且常年一边倒:主网九成上下的区块出自 builder(精确份额随月份浮动)。一边倒的四个原因层层递进:同一池公共交易,builder 靠重排序能榨出套利与清算价值,本地贪心榨不出,同样的原料,块价值不同;更结构性的是视野差,私有订单流里的交易,本地候车室里根本不存在,不是不想打包,是从未见过;builder 之间互相竞争,榨出的价值绝大部分以出价的形式让渡给了 proposer,proposer 不需要懂 MEV,只需要会比大小;最后是超集关系,builder 的块通常包含本地块会装的公共交易,再加私有增量,几乎在任何维度都不小于本地块。剩下那一成也有名有姓:部分 proposer 出于抗审查立场设了最低出价阈值,宁可自建;偶发的 relay 故障回落本地。还有一个现实必须记下:builder 市场高度集中,头部两三家长期吃掉绝大多数份额。出块权名义上分散在几十万验证者手里,造块权实际收敛在个位数玩家手里,这是当代以太坊中心化辩论的靶心。
回到那笔 Falcon 交易,它的命运可以写成一个方程:收录概率 ≈ 愿意接收并处理它的 builder 的合计市场份额 × 这些 builder 的出价胜率。 好消息是,九成区块本来就出自 builder,「只能私有投递」在吞吐上不是死刑,builder 愿不愿意花两百万 gas 模拟你的验证,是它能自己定价的生意,比如要求更高的小费。坏消息是结构性的:这笔交易的抗审查性,从「几千个 gossip 节点中任何一个善意者愿意转发」退化成了「寡头名单上是否有人接单」。而且还要再磨锋利一刀:以太坊即将部署的抗审查重武器 FOCIL(EIP-7805)保护不到它。inclusion list 的机制,是让随机抽出的验证者把公共内存池里被冷落的交易强制塞进区块;后量子帧交易压根进不了公共池,不在取材范围。为公地设计的保护,天然照不到不在公地上的人。
把这一章收成一个三分法和一张漏斗。验证是共识义务,人人同款,只问有效性不问出身;建块是自由市场,默认算法只是最弱的参赛者;选块是经济行为,价高者得,九成归 builder 是市场结果不是协议规定;全程唯一的随机,只在 RANDAO 抽人的一瞬。第二篇结尾那句「共识有效的集合严格大于公共池可传播的集合」,现在可以补全成三层漏斗:共识有效(海关,永远敞开)⊃ 有人愿意打包(builder 的生意)⊃ 公共池可传播(gossip 公约)。 后量子交易卡在第三层,靠第二层活着,第一层的大门永远为它开着。
风险的三次安置
中介消化过的第一种风险,替陌生交易投机的风险,前两章已经安置完毕:交给自愿且收款的 builder,这就是两级池的全部来历。还剩两处接缝,恰是规范安全考量一节逐条盯着的地方。
第一处是 deploy 抢跑。第三篇讲过,deploy 帧必须排在认证之前,原因是鸡生蛋:认证靠 VERIFY 帧跑账户代码,而反事实新账户此刻还没有代码,代码要靠 deploy 帧装。于是一个刺眼的事实无法回避:deploy 帧执行的那一刻,世界上还没有任何人证明过任何事。保护你的是数学:地址对 initcode 的承诺,地址 = f(工厂, salt, keccak(initcode)),initcode 改一个字节,算出来的就是另一个地址。攻击者在数学上不可能把别的代码装进你的地址;他唯一能做的,是抢在你前面,用一模一样的 initcode,把你要装的东西装到你的地址上,免费替你干活。所以这种攻击是使绊子,不是抢劫:他抢先部署后,你交易里的 deploy 帧落空、整笔被拒,但资产零风险,地址上的代码分毫不差正是你要的,你损失一次往返延迟,部署 gas 还是他出的。规范给钱包派的活是一条重发纪律:检测到自己的地址已有码,摘掉 deploy 帧重发。
但「任何人代部署都安全」是一条纪律,不是自动性质,这才是这条安全考量真正钉死的东西。反例一秒钟就能构造:initcode 里写 owner = msg.sender,或者从外部可变状态里读 owner。此时地址没有变,地址只承诺 initcode 的字节,不承诺它的执行结果;但装进去的状态变了,抢跑者成了 owner。灾难在于,反事实账户的标准玩法恰恰是先把地址给出去收款、以后再部署,充值地址模式;收了半年款,然后攻击者部署了一个 owner 是他的钱包。纪律的完整表述:initcode 必须确定性、参数完备,owner 的公钥烧死在 initcode 的字节里,不依赖 caller,不依赖任何环境。 这也正是「地址能承诺主人」成立的前提。整套是 4337 反事实部署纪律的协议化转世,EIP-7997 把工厂那半边也标准化成了预部署。
第二处是读放大。先立参照系:legacy 的垃圾为什么便宜侦破?因为身份是从签名里恢复出来的。一笔垃圾交易让节点付一次 ecrecover,几十微秒的纯 CPU、零状态访问,恢复出一个随机地址,再做一次浅浅的状态读。关键性质是:攻击者无法指定节点去读谁的状态。8141 在两个轴上同时松动了这道防线。轴一,身份从恢复改为声明:sender 是明文字段,攻击者想让你读谁就填谁,可以点名状态庞大的真实账户,也可以枚举一百万个互不相同的地址逐个打穿缓存,把每次探测都变成冷数据库读。轴二,授权从无状态检查变成有状态检查:一笔只带 ARBITRARY 条目的帧交易,不存在任何无状态的密码学闸门,结构检查全过(海关只查运单),而「是否被授权」的答案住在状态里,codeHash、代码、存储,乃至一轮前缀模拟。放大不等式于是成立:攻击者的成本约等于网络字节,防守者的成本约等于数据库读。 这个不等式在 4337 里早就存在,UserOp 同样是显式 sender、同样靠模拟侦破,只是当年的承担者是少数、专业、有偿、可以挑客户的 bundler,一个封闭且能自我定价的群体;8141 删掉中介,这份负担社会化给了全体全节点。
两条缓解各有清晰的逻辑位置。管线排序:一切无状态检查前置,类型分流、RLP 形状、flags、费率、协议方案验签,状态读永远是最后一道;这是过滤器经济学,让最便宜的滤网吃掉最大的流量,昂贵的滤网只见幸存者。对等层限速与评分:交易本身匿名、伪造零成本,但 p2p 连接有身份,哪个 peer 持续喂「过了静态检查、死在状态检查」的垃圾,就限流、扣分、断线,把成本沿着唯一有身份的锚点推回去。一 sender 一笔和 nonce 紧邻规则在侧面收束单账户的探测空间。四级防御阶梯由此排齐:死于静态检查的垃圾近乎免费;迫使状态读的垃圾靠排序与信誉压制;进入前缀模拟的被十万 gas 封顶;合法但可批量失效的,由前缀形状、trace 规则与驱逐机制兜底。
这一章收束成一句:协议化不是风险的消灭术,是风险的重新安置术。 投机风险给了自愿收款的 builder,部署信任给了数学加纪律,侦破成本给了管线排序加 p2p 信誉、由全体节点分摊。三处安置的接缝,就是规范安全考量一节存在的理由。
总结
压回一段话。8141 蒸发掉 bundler 与 EntryPoint 之后,中介消化过的五种职责逐一找到了继承人。无码用户的兼容交给 default code,一段协议合成的作答剧本,把 ecrecover == sender 的旧宪法降格为默认模板,也因此把惯性路径钉死在 ECDSA 上。代付交给一声 APPROVE(0x1):托管消失,因为协议自己就是结算人,缺的从来是授权不是能力;审单靠 pay 帧加跨帧自省,结账靠付款线之后的 post_op 帧;对代付人的信任从押金和声誉,换成了 canonical 字节码同款加预留记账、non-canonical 限一笔的结构治理。传播交给两级世界:公共池是公地,公约管的是替陌生人投机的成本上限;私有通道把风险内部化给收款的 builder;而全链唯一的强制关卡只有区块有效性。打包交给 PBS 市场:随机只在抽人一瞬,选块是经济行为,九成区块出自高度集中的 builder 市场,后量子交易靠这个市场活着,却也因此把抗审查性押在了寡头名单上,连 FOCIL 都照不到它。风险被重新安置:投机给 builder,部署给地址承诺加 initcode 纪律,侦破给管线排序加 p2p 信誉。贯穿五项遗产的是同一个配方,前几篇反复见过:把经济墙铸成代码墙,把动态博弈换成静态可判,把中介的判断换成协议的常数。
下一篇往下再潜一层,进到重放发生的机器内部:一笔交易提交之后,谁在哪里为它烧 CPU,按什么价;为什么同一道数学题在 EVM 里贵一百倍;gas 究竟在为什么计价;以及一张叫「预编译」的补贴名录,如何决定哪些密码学配得上便宜。