以太坊划走过一段六位数的地址:EIP-1352 保留区与它没写完的规则 图 1
以太坊划走过一段六位数的地址:EIP-1352 保留区与它没写完的规则 · 图 1

一段被纸面划走的地址海域

2018 年 7 月 27 日提交的 EIP-1352 做了件听起来很威风的事:把一大片地址圈起来,宣布留给将来的系统组件。原文的规格只有一句话——从 0x00000000000000000000000000000000000000000x000000000000000000000000000000000000ffff 之间的地址范围,保留给预编译合约与未来的系统合约,普通账户和合约不应获得这些地址。这片海域有多大?地址共 20 字节,这里前 18 个字节钉死为零,只剩最后两个字节自由变化,总共六万五千五百三十六个地址,对 160 位地址空间来说精确等于沧海一粟。按 EIPs 仓库当前标注,这份提案的状态是 Stagnant——停摆,从未进入以太坊主网的共识规则。换句话说,它是一次成功的划界动议,却不是一条有强制执行力的法律。

以太坊划走过一段六位数的地址:EIP-1352 保留区与它没写完的规则 图 2
以太坊划走过一段六位数的地址:EIP-1352 保留区与它没写完的规则 · 图 2

为什么不加一道显式校验

原文有一处容易被略读带过的细节:提案明确说不建议在协议里加显式检查,去阻止外部交易签名或 CREATE 指令恰好落在保留区地址上。理由写得直白——概率极低,而且缺乏足够的测试手段。这个取舍值得展开一句:以太坊的合约地址要么来自创建者地址加 Nonce 的哈希,要么来自 CREATE2 的哈希,产出什么地址完全由哈希决定,谁也没法按需指定。想让哈希恰好吐出前 18 字节全零的地址,相当于每次抽奖命中二的 144 次方分之一,十进制写下是四十三位数。所以保留区的真实作用不是防谁,而是给协议留出干净的坐标系:以后新加预编译或系统合约,直接在这段里按顺序取号,永远不会和已部署的普通合约打架。提案的兼容性一节也确认,主网上当时不存在落在这些地址的合约,划界没有存量伤害。

停摆的规则,活跃的默契

有意思的是,EIP-1352 自己停摆了,别人却一直把它当地址簿用。2022 年 7 月提出的 EIP-5283 想在协议里加一个叫信号量的预编译合约,为智能合约提供不写存储的重入保护,其原文解释选址逻辑时直接写道:地址 0x0A 是 EIP-1352 所定义范围内下一个可用号。一个从未生效的提案,成了新提案分配地址的默认参照系,这种现象在标准文本里并不多见。对读者来说,正确读法是:主网现有的一批预编译(哈希、椭圆曲线运算这类内置功能)确实都落在这一低位区间,这是事实;社区新提系统地址时也确实沿用了这个约定,这也是事实;但把这段区间当成”协议保证不会有普通合约”的法律承诺,目前并不成立——除非哪天某个升级把保留规则正式写进共识。

普通用户什么情况下会碰到它

第一种场景是看交易记录:转账目标或代币合约地址若形如 0x0000 开头紧跟一小串十六进制,多半是预编译或系统组件,而不是某个人的钱包。第二种场景更值得警惕:有人发给你一个前导零特别多、长得”很官方”的地址,声称是项目方客服地址或空投地址。这类地址要么是撞大运生成的炫技地址,要么是话术道具,与协议保留区无关——真实协议组件的地址是代码写死的,不会出现在群聊截图里。钱包地址相关的安全常识可以先补两课:地址投毒是怎么用相似地址冒充转账对手的,以及为什么助记词推导出的地址前导零多少纯属随机。第三种场景是开发者读者:部署合约后不必担心撞上保留区,概率低到可以忽略,这正是 1352 不加校验的同一枚硬币。

它想省的是未来的麻烦

原文的动机部分只有一句话,信息量却很大:很多事情若不先划出特殊地址段,将来实现时就得逐条写例外条款。设想一下没有保留区的版本——每加一个预编译,都得先证明这个地址没有主人,再给链上历史写一串豁免说明。提前把一块地圈出来,所有后续功能共享同一条”这个范围内的地址不是普通账户”的假设,复杂度一次性消掉。这种划界思路在区块链里反复出现:先把命名空间分好,再让功能各就各位。EIP-1352 的宿命也说明另一件事:划界类提案往往因为太基础反而没有存在感——它不承诺新功能,不改变任何用户能感知的行为,社区自然缺少推进它的动力,于是文本停在 Stagnant,约定却在文本外活着。判断这类文本的效力,永远看两点:有没有实现它的代码被合并进客户端,有没有升级公告引用它。两条都没有,就当坐标系使用,别当规则引用。

风险提示

本文涉及的提案状态与地址范围按 EIPs 官方仓库原文核验,状态可能随社区推进变化,请以仓库当前内容为准。理解地址空间结构有助于识别仿冒话术,但不构成任何投资建议;转账前请逐项核对地址完整内容,不要凭前导零或长度判断对方身份。