什么是EIP-7702?深入分析EIP-7702对智能账户wallet带来的影响
什么是EIP-7702?
EIP-7702是一项旨在增强外部账户(EOA)功能的提案。EOA是以太坊网络中的基础账户类型,能够发送交易并与智能合约交互,但缺乏交易批处理和Gas费赞助等高级功能。
该提案让EOA在单笔交易中临时具备类似智能合约账户的能力,从而支持通常由智能合约钱&包才能完成的操作。它旨在弥补EIP-3074的局限性,并解决一些备受争议的问题。虽然目前尚未正式上线,但EIP-7702已获得广泛社区支持,并有望在计划于2024年底进行的以太坊Pectra升级中实施。
EIP-7702如何运作?
EIP-7702在以太坊网络中引入了一种全新的交易方式,其中包含一个名为contract_code的特殊字段。通过该字段,EOA在交易期间可以暂时拥有部分智能合约的属性。其运作原理分为四个阶段:
交易准备
用户需要提供目标地址、Gas费限额、发送的数据等常见信息,并在contract_code字段中加入一段特殊的智能合约代码,该代码定义了将临时赋予EOA的智能合约功能。
小提示:
授权
用户对交易进行签名,该签名至关重要,用于验证交易并包含授权列表。授权列表详细说明了contract_code的内容及其执行条件,实际上是在验证并授权临时将智能合约代码分配给EOA。
执行
交易提交到以太坊网络后,系统会临时将指定的contract_code分配给EOA,用于处理交易。在此阶段,EOA能够利用contract_code提供的功能,以类似智能合约的方式处理交易。
撤销
交易完成后,以太坊网络会自动从EOA中移除临时的contract_code,使其恢复到原始状态,失去临时智能合约功能。
场景类比
假设Bob是一名送货司机,他驾驶一辆普通汽车,只能运输小型包裹。有一天,他接到一个配送大型包裹的请求。Bob并未拒绝订单,而是临时租用一个货箱挂在车上。完成配送后,Bob将货箱归还给租赁店,继续驾驶他的普通汽车。
普通汽车代表EOA;
临时货箱对应提供额外功能的contract_code;
配送过程类似于交易;
货箱的租借与归还体现了contract_code的临时性,仅在交易期间有效。
EIP-7702的优势
安全性
通过在交易完成后自动删除临时的contract_code,EIP-7702有效降低了未经授权操作的风险。额外功能仅在交易过程中有效,从而减少潜在漏洞的可能性。
灵活性
EIP-7702支持多种应用,例如交易批处理(将多个操作合并为一笔交易)以及Gas费赞助(一个账户代替另一个账户支付交易手续费)。
推动智能钱&包的普及
通过暂时为EOA赋予智能合约功能,EIP-7702能够推动智能钱&包功能的应用,同时避免了因EOA永久变更而可能带来的安全风险。
EOA私钥的新角色
在EOA被赋予智能合约逻辑成为Smart Account后,其私钥即成为账户的“超级管理员”,具有两项关键权限:
使用私钥签名,可以吊销或更改映射到该账户的智能合约,从而改变账户的执行逻辑;
使用私钥签名,可以直接转移账户下的ETH或ERC20代币,绕过合约逻辑设置的限制。
这意味着账户中的资产将拥有两个“管理员”:新增的智能合约逻辑以及原有的私钥,而私钥拥有更高权限。随之带来了两个重要考量:
账户下关键数据的存储
由于映射的智能合约逻辑可随时更换,第一个需解决的问题是账户已有的关键数据和合约状态。新合约可能读取或覆盖任何旧合约的数据,产生“存储冲突”的风险。
开发人员可能认为“存储冲突”并非难以解决,因为在开发“可升级合约”时有很多范式可避免此问题(如使用ERC-7201或类似的存储命名空间)。但需强调的是,
“切换账户代码”和“升级账户合约”的本质不同
小提示:
新的账户控制模式
“无钥即无币”(Not Your Keys, Not Your Coins)是加密行业广泛流传的安全原则。在自托管需求下,使用硬件冷钱&包保存私钥是良好的安全实践,但这也使交易签名变得复杂,用户需随身携带硬件设备,给使用带来不便。
在EIP-7702升级之后,我们有了一个全新的账户控制方式:用户可以将拥有“超级权限”的私钥放置在硬件冷钱&包中,同时使用基于合约逻辑的“分级权限”来控制账户上的资产。这样,用户不仅获得了更佳的安全实践,也平衡了良好的钱&包使用体验。
简洁与强大并存
EIP-7702是一次对EOA的升级,“原生EOA”所具有的功能在变成“7702-EOA”后保持不变。对于已拥有EOA的用户,在多数场景下仍会按照原有方式使用钱&包,但在某些原生EOA无法实现的特殊场景下,“7702-EOA”将提供更好的使用体验:
1. 批量调用合约
习惯使用DEX进行链上交易的EOA用户需发送approve和swap两笔交易才能实现代币兑换,这不仅支付更多gas,还可能因approve交易延迟导致价格滑点增加。“7702-EOA”允许通过合约调用的批量处理,将approve和swap合并为单笔交易,大幅节省gas支出。
小提示:
2. Gas抽象
在原生EOA中,账户需拥有足够原生代币支付gas才能发起转账,这常导致初次使用EOA的用户因原生代币不足而无法转账ERC-20代币。“7702-EOA”可以通过Gas抽象实现由第三方替用户发起交易并支付gas。Gas代付的过程可以是有偿或无偿,用户和第三方可灵活决定费用结算方式(使用原生代币、ERC-20代币或法币),极大优化了链上交易体验。
3. 利用会话(Session)实现账户资产访问权限的下放与隔离
在“7702-EOA”上,用户可以通过签署“会话(Session)”来灵活实现账户资产访问权限的下放与隔离。每个会话可加入精细的控制条件,如有效时间、资产类别、访问者地址和数量等限制。
会话能在保障账户安全的前提下提供便捷的权限管理,适用于定期转账或授权dApp进行定投等多种场景。
4. 在“优化Gas开销”上的考量
虽然优化Gas开销并非EIP-7702本身功能,但最小化gas开销是推进大面积采用的关键。绝大部分用户对交易成本敏感,如果合约账户消耗过高的gas,许多用户将会放弃使用合约而继续停留在原生EOA账户生态之中。
在后续文章里,我们将讨论如何设计7702账户合约及相应钱&包服务,在保证最小化gas成本的前提下实现上述强大功能,以推动智能账户的广泛采用。
常见问题(FAQ)
问:EIP-7702与EIP-3074有什么区别?
答:EIP-3074通过引入“authority”键和“invoker”合约来实现类似功能,但其设计存在权限滥用和签名重放等争议。EIP-7702直接在contract_code字段中临时赋予EOA合约逻辑,且交易完成后自动撤销,设计更为简洁、安全,社区普遍认为EIP-7702将取代EIP-3074。
问:EIP-7702是否会影响现有EOA的安全性?
答:在交易期间,EOA临时拥有合约代码,但该代码仅在此交易内有效。用户的私钥仍是最终控制者,可随时撤销代码映射。只要用户不签署恶意授权的交易,原有安全性不会降低。但需要注意,一旦授权了恶意合约,该交易期间资产可能面临风险,因此用户应只对可信的合约进行授权。
问:如何防止“存储冲突”导致数据丢失?
答:建议开发者在设计合约时使用标准化的存储布局,如ERC-7201(命名空间存储),并确保每次切换代码前清理或迁移关键数据。同时,钱&包服务应提供合约代码的审计报告和版本管理,减少恶意切换的可能。
总结
EIP-7702标志着以太坊生态对账户概念的重大转变,它弥合了EOA与智能账户之间的差距。理想的智能账户应在复杂性和功能性之间取得平衡——简洁而强大。合约批量调用、Gas抽象、基于会话的权限管理和Gas优化等特性,不仅使“7702-EOA”更加实用,也使其成为原生EOA的有力替代。同时,谨慎的存储管理和精细的账户控制模式对维持安全性、防止滥用至关重要。
我们的最终目标是为习惯使用EOA的用户提供一个平滑的过渡路径,并在相应场景下释放智能账户的全部优势。本系列的后续文章将深入探讨以上提到的特性,以及对相关权衡取舍的看法。