一条链上一个地址:EIP-7997 把 CREATE2 工厂写成链的必答题 图 1
一条链上一个地址:EIP-7997 把 CREATE2 工厂写成链的必答题 · 图 1

一句话定位

EIP-7997 创建于 2025 年 8 月 3 日、截至本文撰写时状态为 Review。它提议把一条已被广泛使用的规则写死:每条 EVM 链的状态里,地址 0x4e59b44847b379578588920cA78FbF26c0B4956C 必须存在一个特定字节码的 CREATE2 工厂合约——要么靠普通的无密钥部署交易放出来,要么直接写进创世状态。提案要求该账户 nonce 非零并携带规定的运行时代码,客户端不得在分叉边界检查其存在。

CREATE2 工厂解决什么

CREATE2 让合约地址由部署者的地址、一个盐值和初始化代码哈希共同决定,可以先算后部署。但算出的地址包含部署者地址——想在十条链上拿到同一个合约地址,你需要十条链上同地址同 nonce 的部署方。全社区最省事的公共答案是共用同一个工厂:所有人都调它部署,派生地址只随盐值变化。工厂本身从此成了多链世界的地基,而地基此前一直靠巧合维持。

工厂是怎么长出来的

提案的动机段列了这个工厂的四条 bootstrap 路线。第一条是无密钥交易:利用 CREATE 交易的特殊签名构造,任何人都能把它广播到新链上,这是历史上最成功的路线,但它固定了 gas 价格与上限,一旦目标链的 gas 参数不允许这笔交易就卡死——以太坊自己的开发网已因 gas 规则调整撞上这个雷。第二条是某机构持私钥逐链签名部署;第三条是故意泄露私钥换免许可;第四条是在创世或硬分叉里把合约直接搬进去。四条路线没有一条能给出可保证的承诺。

地址为什么长这样

细心的读者会注意到这个地址的字符分布异常——它正是无密钥创建交易的产物:合约地址取自发送方(一个由交易哈希推导的伪地址)与 nonce 的哈希,创建交易的签名部分被构造成全填充值,哈希结果恰好落在一个看起来像 vanity 生成的地址上。提案在规范里直接给出了工厂的运行字节码与反汇编:取 calldata 前 32 字节作盐、其余作初始化代码、调用值原样传递,失败则回退。逻辑小到一个函数,语义却重到生态级。

写进规范的收益

一旦这条规则成文,多链钱包与智能账户第一次拿到可验证的不变量:任何合规 EVM 链上都能指望这个地址存在并可用作统一工厂。提案特别点名了账户抽象场景——没有它,同一个智能账户合约在不同链上部署会落在不同地址,跨链 UX 直接碎裂,历史上也确实造成过转错损失。同时规范留了余地:已运行多年、gas 参数不再允许无密钥部署的链若要用这个地址,只剩协调的非规则状态转换一条路,提案明确表示这超出其范围。

一条使用侧的核对法

对终端用户,工厂标准化前后最实用的动作没变:转账前用同一条链上的浏览器同时核对合约地址与字节码哈希。多链同地址的红利是列表变短——一份十链应用的地址表从十条压成一条——但校验纪律反而不能松:地址相同只说明工厂合规,不说明你锁定的版本正确。EIP 把工厂写进链规范解决的是地址层的漂移,代码层的审计仍然要逐链看实现部署记录,两件事分属两层,不能互相替代。

快速问答

问:这个工厂有谁能控制或关停吗? 答:它没有私钥、没有管理函数,只是一段收到输入就调 CREATE2 的公共代码,谈不上被谁控制。

问:链不在创世加、也不部署,违反的是什么? 答:违反的是 EIP 层面的链行为规范;只要提案未被某条链采纳为强制项,该链技术上是自由的。

问:它和 CREATE2 是什么关系? 答:CREATE2 提供算法,工厂提供所有链共用的调用方地址——两者叠起来才是多链同地址。

一个常见误会

常见误读是把工厂地址当成某个团队的资产或商标。它恰恰是反资产:无密钥意味着无人能部署、无人能作恶,地址的”品牌”价值完全来自全体使用者。标准化机构对既有事实写确认书,正是这份 EIP 的全部戏份——先有社区把工厂用到到处都是,规范才追上去把巧合升格成规则。

风险提示:本文仅作技术科普,不构成任何投资建议。