一万个一模一样的合约
工厂模式是以太坊的老日常:一个协议要给用户发上万个结构相同的代理或账户合约,每个都携带同一份运行时代码。代码每份都要付一次代码存款费,因为状态里确实要多存一段字节。当部署费开始按状态增长重新定价(EIP-8037 一类提案的方向),这笔”克隆税”会越来越贵。能不能让一万份合约只存一份代码?EIP-8298(2026年6月起草,Draft 状态)的答案是一条新指令:SETCODEFROM(source)。栈上给一个地址,当前账户的代码哈希就被设置为那个源账户现有已部署代码的哈希,新代码对之后的执行立即可见。代码本体不复制,复制的只是指向它的指针。
工厂剧本怎么改写
提案描述的新流程是:工厂部署一个极小的初始化器运行时合约,调用它完成这个实例自己的存储初始化,然后由它调用 SETCODEFROM 采纳共享的已部署代码。省下的正是每实例一份的运行时代码存款。对比既有工具:EIP-1167 极简代理把代码复制成一段跳板,仍然每实例有代码;EIP-1967 代理用存储里的实现地址转发,每次调用多一次委托跳转;EIP-7702 委托指示符类似指针,但提案特意区分——采纳后的账户拥有普通部署代码,不是 7702 的委托标记。
第二个用途更锋利
提案列的另一场景是关掉 ECDSA 的裸授权:协议若走向禁用外部拥有账户直接以 secp256k1 签名发交易,需要一个迁移台阶。迁移代码先在账户里存好钱包状态——包括后量子钱包状态——再 SETCODEFROM 采纳正规钱包代码。之后账户的权限由安装的代码决定;因为账户此时有真实部署代码而非 7702 委托指示符,7702 的授权处理无法再把它重新委托,ECDSA 交易发起权按 EIP-3607 类规则持续无效。一句话:这是一次性的代码收养,收养完成后路径焊死。
快速问答
问:源账户代码被删除怎么办? 答:这正是设计约束所在——source 必须是”现有已部署代码”;采纳后本账户持有的就是那份代码的生命周期承诺,源与副本共享同一份字节的语义边界在提案安全考量中讨论。
问:与 SELFDESTRUCT 的路线有何关联? 答:方向互补:销毁语义在逐轮收紧,部署侧则需要更便宜的重码方式,SETCODEFROM 属于后者。
一条判断线
判断这类指令是否真省钱,问三件事:省下的是代码字节存款还是每调用一次的运行费;新指针在存储、状态 gas 上是否引入新条目;采纳动作自身计费多少——提案给出了 SETCODEFROM 的 gas 条目表,逐项相加与旧剧本对比,结论一目了然,而指令号本身在参数表里仍标为待定。
一次克隆农场的账本
拿一个发一万个同质账户的协议算账:旧剧本中每个实例为几百字节的运行时代码各付一次存款费,费用与状态体积成正比;新剧本里一万个账户共享同一份源代码,唯一多出的状态是账户对象本身与初始化存储。差额恰好等于”代码字节的总克隆量”。这也是一切代码复用方案的共同公式:指针替代字节。需要警惕的是账本的另一面——共享源成为事实上的单点,源账户的可见性与生命周期管理由此成为协议运维的新事项;提案把采纳条件锁定在”现有已部署代码”,等于要求农场主先立一块永久的招牌,再让万块招牌反光,读这类提案时把’省下的费’与’新增的承诺’两栏一起填完,才算看完。
与迁移钱包的相遇
把 SETCODEFROM 放进更大的叙事里看:协议若走向关闭裸 ECDSA 发交易权,最难的从来不是技术上”能不能关”,而是数千万存量地址的台阶。带升级逻辑的采纳剧本给了一个自下而上的答案——用户主动执行一笔迁移交易,先存后量子钱包状态,再采纳钱包代码,权限就此与椭圆曲线签名告别,而资产地址一个字节都不用换。评估任何账户模型改革时,这种”每用户一次性、不可逆、有升级余地”的迁移台阶是否先于禁令设计好,是判断提案成熟度的试纸。
风险提示:本文为协议提案的科普介绍,EIP-8298 截至撰写时未在主网激活,定价与语义以提案原文为准;不构成投资建议或合约开发指导。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。