把老地址直接升级成智能钱包:EIP-7377 迁移交易的一次性设计 图 1
把老地址直接升级成智能钱包:EIP-7377 迁移交易的一次性设计 · 图 1

老地址的搬家难题

用钱包多年的人常有一个共同处境:老地址里躺着零散资产,新玩法都在智能账户那边——批量操作、社交恢复、代付手续费。搬过去的正确做法本应是”一个地址一个地址地把资产转走”,可这既花 Gas 又要逐笔核对。EIP-7377 提供了一个方向完全不同的答案:不搬资产,搬地址本身——让老地址原地获得合约代码。这份 2023 年 7 月提交的提案目前状态是 Stagnant,没有进入任何主网升级,但它对”迁移”这个问题的拆解,恰好能帮我们理解后来真正落地的方案在补什么洞。

把老地址直接升级成智能钱包:EIP-7377 迁移交易的一次性设计 图 2
把老地址直接升级成智能钱包:EIP-7377 迁移交易的一次性设计 · 图 2

一笔交易完成换代

提案设计了一种新的交易类型,字段表里最扎眼的是 codeAddrstorage 两项。执行分两拍:第一拍,节点把你账户的 code 字段直接设置成 codeAddr 指向的那份已部署代码,同时把 storage 里的键值对写进你的账户存储;第二拍,用你账户的上下文执行一次调用,让你顺便做点后续处理。注意它没有 to 字段——这种交易天生只服务”把自己变成合约”这一件事。为什么代码要放指针而不是直接内嵌?提案算过账:绝大多数人要挂的是同一批流行钱包合约,直接塞代码会把同一份字节码在链上复制千万遍,放指针只需改状态树里的一个引用。存储字段的定价也有讲究:因为你的账户存储保证是空的,写入不用先读,每格只收写新值的成本,比正常路径略便宜。

一次性的由来

真正决定这个设计气质的是”只能用一次”。EIP-3607 规定:已经有代码部署的地址不能作为发送方发交易。把两条提案拼起来,迁移交易发出去之后,同一地址再也发不出第二笔——换代是不可逆的单程票。这不是权宜之计而是刻意选择:能让账户随时换代码,意味着”这个账户的行为由哪份代码决定”重新变成一个需要每笔交易都重新确认的问题,提案作者认为保持简单更好。当然,这条不可逆红线在今天已被另一条路线实际绕开——EIP-7702 的做法与此前讲过的存储边界问题相关,见委托型钱包换 App 会丢什么:ERC-7779 与 EIP-7702 的存储边界。两条路的分野在这里:迁移交易是”永久成为合约”,借用式委托是”这笔交易临时像合约”。

盲签的风险被点名了

提案的安全部分专门谈了盲签。能替这个账户签名的私钥依然存在,如果钱包让你在毫不知情的情况下签了一笔精心构造的交易,恶意合约就能挂到你的地址上——签名者以为在转账,实际在换代。提案的原话是:钱包必须以”极度谨慎”的态度对待这类交易,在签字前尽量加摩擦、多做核验。另外还有一层跨链的提醒:你的私钥在别的链上依然控制着这个地址,“迁移完成”绝不等于可以公开私钥——这个地址在以太坊之外还是那个老样子。

停在提案库里的价值

EIP-7377 的动机部分有句话值得所有钱包产品复读:智能账户喊了这么多年,用户没迁移过来,不是观念问题,是”逐币搬运几百笔交易”的操作成本压垮了意愿。协议层若不解决存量迁移,新账户形态就永远是增量游戏。今天回看这份 Stagnant 提案,它对钱包的实际指令是三条核对纪律:第一,任何会改变”你的地址由什么代码控制”的操作,都应当以最高等级的确认界面呈现,而不是藏在普通授权弹窗里;第二,遇到自称”升级你的地址”的页面提示,先查提案状态与合约来源,别把没有主网实现的概念当成现成功能;第三,迁移话术若要求你交出签名,等价于委托控制权,参照连接钱包、签署消息、授权转账是三件事:各自动了你什么里”三件事”的分工逐项确认动的是哪一层。

本文为技术说明,不构成投资建议;涉及账户代码变更的签名请求风险极高,请先小额验证并核实来源。