ERC-8152 CALM 逻辑模块:同一句代码在所有 EVM 链上同一个地址 图 1
ERC-8152 CALM 逻辑模块:同一句代码在所有 EVM 链上同一个地址 · 图 1

ERC-8152 CALM 逻辑模块:同一句代码在所有 EVM 链上同一个地址

多链部署的人对这一幕不陌生:同一套合约在十条链上是十个地址,验证某条链上的代码是否与其他链一致,只能靠字节码比对加人工核对。ERC-8152 提出一种把代码地址变成内容指纹的模块规范,代号 CALM:只要两个 CALM 的运行时字节码相同,它们的地址必然相同,而且必然在所有支持 EVM 的网络上相同——地址从此成为代码的密码学承诺,标准原话是 Runtime Bytecode is Identity。按照以太坊 ercs 仓库的记录,这份提案名为 Content-Addressable Logic Modules,状态为 Review,创建于 2026 年 1 月 18 日。

地址等于代码是怎么做到的

普通合约地址由部署者地址加随机数(或 CREATE2 的盐)派生,与代码内容无关,这是同码不同址的根源。CALM 通过一组部署约束绕开这个变量:模块不允许有初始化代码(没有构造器)、不允许使用 immutable 变量,代码里不存在任何依赖部署上下文的字节。去掉这些之后,字节码可以在任何链上原样落地,地址按只依赖内容的规则派生。执行方式是 delegatecall:代理合约把调用转进 CALM 模块,逻辑在代理的存储上下文里运行。标准把这一点和存储定位规范连在一起——钻石存储这类约定保证同一份模块被不同代理复用时数据不会串位。

ERC-8152 CALM 逻辑模块:同一句代码在所有 EVM 链上同一个地址 图 2
ERC-8152 CALM 逻辑模块:同一句代码在所有 EVM 链上同一个地址 · 图 2

运行时约束与调度模型

标准对模块运行时的行为也划了线:CALM 不得依赖自身的地址、余额或链上身份,不得自行部署合约,因为这两类行为都会让同一地址在不同环境下产生不同结果。调度上支持几种模型,包括按选择器分派和带兜底的转派,代理在遇到未实现的选择器时可以选择回退到默认逻辑,这决定了未升级部分会不会以 revert 的形式暴露。此外标准还要求模块能声明自身的影响范围、所需能力与依赖关系,使代理或者审计工具能在挂载之前判断兼容性——这一段是 CALM 与单纯的字节码相同即同一最实质的增量:地址指纹负责我是谁,能力声明负责我能被装在哪。

对合约升级风险的实际影响

拿它对照现有多链审计流程

现成的多链合约审计大体靠两条腿:逐链拉源码做等价性核对,以及维护一张部署地址表。CALM 把第一条腿自动化了——字节码比对脚本对着同一指纹扫十条链,不一致直接报警;第二条腿也简化成模块注册表加代理指向两件事。审计成本的重心由此转移:代码本身的一致性不再贵,贵的是权限拓扑——谁能替换模块指向、变更走没走时间锁、有没有多签门槛。这解释了为什么标准要在能力声明与影响范围上花笔墨:架构把逻辑做成可换卡带,审计对象就从卡带内容转向插拔权限。对普通持有人,看多链协议安全页时有了一条新问法:各链代理挂载的模块地址列出来,同一功能各链是否同一个地址?答得出且一致,说明内容寻址的红利用上了;支支吾吾只给一句同一套代码,等于让你继续用信任代替验证。

三点变化值得留意。其一,跨链一致性可验证:用户只要拿到模块地址,就能在各链的字节码库里比对,多链代码漂移从信任问题变成查询问题。其二,代理与逻辑分离得更干净:逻辑模块本身无状态,替换模块就像换卡带,卡带内容可预先在别的链验证。其三,风险换了位置:因为逻辑完全外置于代理,谁有权改代理的指向、改动前有没有预告,就成了最要紧的权限问题——挂载恶意模块的破坏力和直接升级合约一致。看这类架构时该读的是代理侧的授权路径与模块注册表,而不是逻辑模块自身。按 ercs 仓库口径该提案为 Review。本文为机制说明,不构成任何投资建议。