交易也能写仅限条件成交吗
日常转账里,交易发出后命运就不在汇款人手里了:进哪个块、被谁打包、何时失效,都由节点与出块者决定。2021 年 4 月 20 日,Isaac Ardis 提交 EIP-3534,想把成交条件写回交易本身:这笔交易只允许出现在某个历史区块之后的链段里、只允许被名单上的出块者打包、或者过了某个时间点自动作废。提案给这类字段起了统一的名字:链上下文。它在 EIP 仓库里的状态是 Stagnant(停滞),从未进入任何升级议程,但条件交易这个思路在后来各类提案里反复出现,值得作为解剖标本读一遍。

信封外形:一个字段位换四种约束
3534 设计了一个新的类型化交易,负载按 rlp 列表排布,依次是链号、chainContext、nonce、gasPrice、gasLimit、to、value、data、访问列表,最后是三元素签名。它和同时代带访问列表的交易几乎同构,真正的区别在链号之后多出的 chainContext。这个位置不存密钥不存金额,只存”在什么条件下承认这笔交易有效”。验证节点除了常规检查,还要按注解去核对当前链段、出块者地址和时间戳,任何一条不满足,这笔交易对当前链就是无效消息。
四个子类与它们的编号规则
chainContext 由四个子类组合而成,每个子类有自己的前缀位。ancestorId 前缀 1,存一段 4 到 12 字节的祖先引用,由区块号与目标区块哈希的前 4 字节拼接而成,表达”我只认接在这个区块后面的链段”。eligibleMinerList 前缀 2,是一份最多 3 个地址的白名单,提案解释过取 3 的理由:按撰写时的公开统计,前三家出块者已产出约 52% 的区块(该口径为 2021 年提案原文数据,不代表现在的市场结构)。ineligibleMinerList 前缀 4 是黑名单。expiry 前缀 8,是一个区块时间戳上限,交易只在时间戳低于它的区块里有效。前缀相加表达组合,例如 9 表示祖先引用加到期时间;而 2 加 4 被明令禁止——白名单与黑名单同时出现逻辑上不自洽。提案还推演了出块者行为:发现自己不在白名单里的节点,应当立刻把这笔交易从交易池丢弃。
类型号 0x04 后来的主人
3534 给新交易占的类型号是 0x04。这个编号真正的归宿在几年后揭晓:EIP-7702 让普通地址附加一段可执行委托,状态已是 Final(定稿并随升级生效),它规格里的交易类型常量正是 SET_CODE_TX_TYPE = 0x04。也就是说 3534 圈走的号码最终被另一个提案用掉。类型号从 0 排到 4 的完整路径见 从六十四到四:以太坊交易类型号的演进史。同一个编号上的两次提案恰好说明交易格式是标准竞争最激烈的一层:号段有限,先到后到都不算锁定,看编号不看年头才是硬规矩。
过期这件事后来走了另一条路
单看到期作废这个子类,后来还有更轻的尝试:EIP-5081 不想新造信封,只想在现有交易类型上加一个 expire_by 字段,详见 取消不掉的交易能让它自己过期吗:EIP-5081 的 expire_by 字段。两种路线的差别在动刀深度:加字段动的是现有类型的负载定义,新信封动的是节点的分派逻辑与验证顺序。两者都没有生效,今天主流钱包里的超时或取消按钮仍是客户端本地行为——它替你用同一序号重发一笔替换交易,而不是让旧交易获得协议级到期能力。理解这一点,也就理解了为什么钱包里的取消永远不能保证旧交易在某时刻前绝不进块。
怎么读这类提案
3534 的价值在概念层:它把”我对这笔交易被谁、在何时、在哪段链打包有什么要求”第一次写成可编码字段,这在 2021 年是少见的产品视角。读法上仍是提案考古基本功:先看状态字段,再看它想占的类型号有没有被别人用掉,最后核对它援引的统计数字带着什么时间口径。风险提示:本文为提案历史分析,不构成投资建议;任何宣称能指定出块者保证加速到账的付费服务都不属于当前协议能力,请按营销话术对待。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。