0x00 前言

随着以太坊 Pectra 升级的完成,EIP-7702 正式进入大众视野,围绕它的讨论与关注迅速升温。近期我对以太坊生态关注较少,所以关于 EIP-7702 了解的并不多。不过,在阅读了一些对该提案进行深入解析的文章后,我意识到其中也许蕴藏着新的机会。于是,便抽空对其进行了初步的了解和思考,并亲自体验了一次 EIP-7702 的交易。

本文将会对 EIP-7702 做一个简单介绍,然后通过实践的方式带大家直观地感受该提案带来的改变,本文约 3500 字,预计阅读时间在 10-15 分钟左右,适合对以太坊新技术感兴趣的开发者和爱好者。

0x01 EIP-7702 介绍

网上已经有大量关于 EIP-7702 的介绍,作为一个半路上手的初学者,我只能基于目前的理解,对它做一个简要的说明。如果大家想深入了解更权威或更系统的内容,建议参考社区中的其他技术文章或官方提案文档。

在介绍 EIP-7702 之前,我们先简单了解一下以太坊中的账户体系。以太坊中的账户分为两类:EOA(Externally Owned Account,外部拥有账户)合约账户(Contract Account)

EOA 是由私钥控制的账户,通常我们使用钱包(如 MetaMask)生成的地址就是一个 EOA。它本身不包含代码,只记录余额,主要用于主动发起操作,比如发送转账或调用合约。它无法像合约那样“被调用”或自动响应其他账户的操作,是一种非常“被动”的账户类型。相比之下,合约账户内部含有代码,可以根据外部传入的调用信息自动执行逻辑,是以太坊智能化的核心组成部分。

EIP-7702 的核心创新,就是让原本“被动”的 EOA 也具备临时的代码执行能力。

具体来说,EIP-7702 允许一个 EOA 在某笔交易中“加载”一段已经部署的智能合约代码,从而具备执行该代码逻辑的能力。这意味着,EOA 不再只是主动发起交易的参与者,也可以像合约一样,在特定上下文中被其他人调用,实现更复杂的交互逻辑。

举个例子,我可以部署一个“批量取消 ERC20 授权(approve)”的合约逻辑,某个用户(EOA)通过 EIP-7702 机制将这段逻辑加载到自己账户中,这样其他人就可以像调用合约一样去调用这个 EOA 的“解除授权”功能,从而一笔交易内批量取消多个 ERC20 的授权操作,用户本身不需要主动操作任何复杂内容。

上面的理解只是我对 EIP-7702 的初步认识,可能仍有不准确之处,欢迎大家指正或补充。

0x02 Hello World

看完前面的介绍,也许你和我一样,感觉对 EIP-7702 是似懂非懂——概念上大致明白,但仍然不够直观。那么接下来,不如我们亲自动手写一笔 EIP-7702 的 Hello World 交易,以代码的方式深入理解它的实际使用方式!

其实,EIP-7702 早已被一些主流的 Web3 库所支持,并配备了完善的开发文档。因此,如果你想动手实践,过程是非常方便快捷的。

在这个例子中,我们将使用 viem 来发起一笔基于 EIP-7702 的交易。官方文档提供了非常清晰的教程,我们只需要按照它的步骤操作,就可以顺利完成属于你的第一笔 EIP-7702 交易。

参考教程:https://viem.sh/docs/eip7702/contract-writes

让我们开始动手实践吧!

1. 钱包准备

首先,先创建两个钱包,并确保他们在 Sepolia 测试网有资金,然后导出他们的私钥,记录下来备用。

这里,我们定义其中一个钱包是 User,这个是我们智能合约需要挂载到的地址,另外一个是 Relayer,用于实际发起交易的,同时,我们也用这个钱包来部署我们的智能合约。

image.png

2. 合约准备