以太坊的地址空间有两百多个字节那么宽,但真正靠近零地址的那一小段格外拥挤:从0x01到0x09住着一串预编译合约,做哈希、验签名、配对运算。EIP-7587已经定稿,做的事很朴素——把紧接其后的0x100到0x1ff整段划走,注明这段留给RIP流程,也就是Rollup改进提案。看起来只是一句备注,实际拆掉的是主网与第二条链之间一颗定时撞车弹。
撞车是怎么发生的
预编译不是普通合约,它写死在客户端代码里,用固定地址指代。以太坊主网在很长一段时期把预编译地址连续排布,0x01是ECRECOVER、0x03是RIPEMD160,编号递增。当一批Layer2网络开始搭建自己的执行环境时,沿用了同样的习惯:需要一条原生功能就在低位地址上放一个系统合约。Rollup的改进提案走RIP流程而不是EIP流程,编号和登记处都独立。于是出现了这样的场景——某条Rollup在0x111放了自己的原生资产预编译,而主网在未来的某一天也需要给某个新预编译挑一个地址。如果两边都往这段低位区间伸手,同一段字节在两条链上指向完全不同的东西,跨链的合约代码、签名域分隔、地址派生全部会踩坑。
EIP-7587的解法是干脆的:与其事后协调谁挪窝,不如事先划线。规格原文把0x100到0x1ff这段范围整体保留给RIP使用;理由段说明,这样RIP可以维护自己的预编译登记表,而不必和EIP流程抢地址。整段两百多个地址全部划给RIP,EIP一侧则被期待绕开这段往后找位置。
为什么是留给RIP而不是收编RIP
一个自然的疑问是:既然都在一个生态里,为什么不把Rollup的预编译也纳入EIP流程统一管理?答案藏在治理边界里。Rollup的升级节奏、安全委员会、发布窗口都独立于以太坊主网,把它们的功能提案拉进EIP流程意味着Rollup要等主网的评审周期,这条路在协调成本上根本走不通。反过来让EIP去逐条问Rollup有没有占用地址也不现实——Rollup数量多、上线快,有些链还会在创世阶段自定地址。所以EIP-7587选的是一条最低约束的中间道:主网主动放弃这段地址,换来Rollup可以自由支配,双方从此井水不犯河水。
地址预留这种做法在工程上属于命名空间分区:用一次性的空间浪费换永久的协调成本消除。代价是主网未来若要大量增设预编译,得跳过这段往后排;好处则像规格里写的那样,登记主权留在各自流程内。
快速问答
问:这段地址现在能使用吗? 答:在以太坊主网上,这段地址目前没有对应的预编译,也没有普通合约能通过常规部署拿到零地址低位区间的地址。它是留给RIP流程的,而不是给普通用户的。
问:我怎么知道某条Rollup用了这段地址? 答:查该链自己的文档或RIP登记处。EIP-7587不规定具体哪个地址对应什么功能,只规定这段区间归RIP使用。
问:RIP是不是以太坊官方流程? 答:不是。RIP由Optimism等Rollup生态维护,与EIP流程并列。EIP-7587的意义恰恰是在两个流程之间划了地址边界。
一次冲突的推演
假设没有这条预留:某Rollup在链上放了地址0x150的原生桥预编译,两年后以太坊主网给新的配对预编译挑地址,恰好也选0x150。一条同时服务两条链的合约会遭遇签名域混乱——同一份哈希在两条链上被不同预编译验证,重放防护的假设悄悄失效;而部署工具在两条链上用同一条创建交易算出的地址可能不再对应同一功能。这些事故都不会报错,只会安静地产出错误结果。预留段的本质,是把这类静默故障的可能性在纸面上清零。
一笔直觉账
把地址空间想成一栋大楼的门牌号。主网在低楼层装好了自己的设备间,Rollup要在隔壁楼装设备,最省事的方案不是每次去主网问“三号房能用吗”,而是主网贴张告示:一层东侧整排留给你们。EIP-7587就是那张告示。
风险提示:本文内容为协议机制科普,不构成任何投资建议;地址分配以官方规格与各项目文档为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。