新类型交易怎么在节点间流通:EIP-2976的八卦传输规则 图 1
新类型交易怎么在节点间流通:EIP-2976的八卦传输规则 · 图 1

以太坊在2021年柏林升级启用的访问列表交易,以及后来各类新交易格式,走的都是EIP-2718那套类型前缀设计铺成的路。但有一个容易被忽略的环节:类型化交易能写进区块,不代表它能在节点与节点的交易广播里合法通行——八卦协议当年只认识老式交易结构。Micah Zoltu在2020年9月提交的EIP-2976补的就是这一环,标题朴素:类型化交易的八卦传输。提案状态Final,规则短到三条,却定义了之后所有新交易类型的上线通道。

规则本体:一串字节加三条纪律

规格把类型化交易定义为一段字节串:交易类型字节拼上交易负载,负载内容留给未来各EIP自定义。八卦协议的消息——Transactions、BlockBodies、NewBlock、PooledTransactions、Receipts——里的交易槽位一律改放这个字节串,而不是只放老式的字段列表。三条纪律配合这段格式:收到不认识的类型字节,应当断开送你这个字节的对端;类型对得上但负载解析不合法,同样断开;在自家认为的新类型启用区块到达之前,客户端不得发送该类型的交易,提前太久发送的节点,别人有权断开它。整套规则声明对所有协议版本追溯适用,devp2p版本号停在一个待定值不动——之后每来一种新交易类型,都不必再抬这个版本号。

为什么策略是断开而不是忽略

断开听起来凶,理由算得精。其一,交易八卦是尽力而为的扩散,节点错过某笔交易不会掉队:新区块到达时块体里自然带全所有交易,缺谁补谁。所以拒收的代价可控,不像区块同步拒收就会孤链。其二,如果改成“不认识就默默忽略”,一个节点会同时连着一批永远无法给它喂新类型交易的邻居,每轮广播都空转;断开则促使对端重连到版本匹配的邻居,让网络按能力自然分层。其三,也是EIP-2718一脉相承的安全哲学:对无法解析的东西给最响的反馈,绝不做宽容的猜测——静默忽略会把解析缺陷和恶意探测都藏进噪声里。提前发送禁令则保护的是升级现场:新类型在激活块之前对旧节点全是非法输入,谁提前广播谁就在给全网制造断线风暴,这条红线先划清楚。

版本号冻结背后的分层

提案有个容易被滑过的声明:客户端可以在不提升devp2p版本的前提下开始支持新交易类型的八卦。这来自类型前缀设计的初衷——把“这是什么交易”写进交易自己,八卦层退化为搬运字节的管道,管道本身不再需要认货。对照旧世界:每加一种交易结构,八卦消息定义就要改一版,协议版本协商跟着水涨船高。2976之后,交易层的演化和传输层的版本解耦,一份Final规则换来此后多年零成本的新类型通道。这也是规范里那句“负载解释由未来EIP定义”的分量:一条2020年的协议文本,给十年后的交易格式预留了插座。

一次新类型上线的时间线

用访问列表交易上线前后拼一个完整流程。升级前的开发期:客户端实现新类型但按规矩扣着不发,测试网先跑;八卦层照常搬旧类型,网络无感。到达激活块高度:节点开始把新类型交易装进Transactions消息随波扩散;老版本节点收到类型字节查无此据,照规则断开发送方,然后重连别的邻居——网络在几轮重连后自动把老节点路由到新节点之外,不阻碍出块。区块本身始终带着类型化交易的字节,验证时按各自的类型表解读。整场上线里,devp2p版本号纹丝不动,改动的只有交易解读表。这就是EIP-2976想卖的结局:新类型流通的成本,从此只是各客户端自己的解析工程。

快速问答

问:八卦协议是什么? 答:节点间做尽力传播的那层消息机制,交易、通道图信息、池内清单公告都靠它,特点是丢了不追责、由更高层兜底补捞。 问:断开策略会不会帮攻击者制造分区? 答:攻击者只能利用“发非法类型”触发别人断开自己,无法强迫诚实节点互断;诚实节点之间的类型认知在同版本内一致。 问:和交易哈希公告那条路线冲突吗? 答:互补。公告消息只发交易标识、按需拉取整笔交易,拉取时的载荷格式同样遵循这组的类型字节串规则。

风险提示:本文描述网络协议机制,不构成任何投资建议,也不涉及任何资产的买卖时机判断。消息格式以devp2p规范与EIP原文为准。