W3
EIP-1167EIP接口Final(2018-06-22)

最小代理(Clone)

用固定的 45 字节字节码创建只做 delegatecall 的极简代理,部署成本从几十万 Gas 降到约 4 万。

适用链:全部 EVM 链

为什么重要:工厂模式批量创建同类合约(每个用户一个金库、每个订单一个合约)的成本可以降低一个数量级。

函数签名与选择器

选择器是签名的 keccak256 前 4 字节;事件则是完整的 32 字节 topic0。 点一下即可复制。

签名 / 字段选择器 / topic0说明
运行时字节码3d602d80600a3d3981f3363d3d373d3d3d363d73 + 实现地址(20字节) + 5af43d82803e903d91602b57fd5bf3
部署成本约 41,000 gas,与实现合约大小无关。
storage / 余额每个 clone 有独立存储与余额,但逻辑代码与实现合约共享。

代码模板

链上克隆(assembly)
链上克隆(assembly)Solidity

更省心的做法是用 OpenZeppelin 的 Clones 库,以及 ERC-1167 的 CREATE2 变体(cloneDeterministic)拿固定地址。

实现与使用时的常见陷阱

  • clone 不能有构造函数逻辑,初始化必须靠单独的 initialize 函数,且要防止被重复调用。
  • 实现合约应禁用初始化(构造函数里 _disableInitializers()),否则实现合约本身可能被劫持。
  • clone 的地址不包含实现地址,升级实现只对新建的 clone 生效,已存在的不会变。

相关标准

同属「接口」的其他标准
想把这个标准用起来?开发者路径的第 1–2 阶段讲了怎么把它写进项目;合约 IDE里有对应的可编辑模板与静态自检;链上 API 参考则给出前端调用它的三种写法。