主页 > imtoken正版 > 浅谈以太坊中的账户抽象和ERC-4337

浅谈以太坊中的账户抽象和ERC-4337

imtoken正版 2023-04-22 05:04:54

以太坊系统中实际上有两种类型的账户:

一种是由私钥控制的外部拥有账户(EOA),例如我们使用的钱包中的账户,它有自己的余额。 所有者可以通过创建和签署交易从他们的外部账户发送消息;

另一种是由部署到区块链的代码控制的合约账户(contract account),由存储在智能合约账户(有时也称为智能钱包)中的以太坊虚拟机代码控制。 当合约账户收到信息时,其内部代码被激活,允许其读写内部存储、创建新合约等。 根据目前的以太坊协议,只有外部账户才能发起交易,并且只有账户的所有者才能修改其账户状态。

什么是账户抽象?

账户抽象是对上述两类账户的改进。 它试图模糊两者的界限,将其变成逻辑复杂的通用账户,让账户同时具备合约账户和外部账户的功能。

这种方式相当于允许用户以合约账户的形式定义外部账户,用户可以在智能合约钱包中包含任何逻辑验证。 由密钥控制的帐户也可以由代码支持。

账户抽象的各种方案

实现账户抽象一直是以太坊开发者社区的愿景。 社区也提出了各种解决方案,例如:EIP-86、EIP-2938等。

EIP-86是账户抽象的技术准备,定义了一种新的账户类型,允许用户基于智能合约创建账户。

以太坊协议本身要求将所有内容打包到源自 ECDSA 安全外部账户 (EOA) 的交易中,并且每个用户操作都需要由来自 EOA 的交易进行包装,这会产生 21,000 gas 的成本。 用户需要在单独的 EOA 中拥有 ETH 来支付 gas。

与必须有 EOA 作为发送方的传统交易相比,EIP-86 提出的账户抽象带来了没有发送方的新型交易。 此类交易破坏了交易哈希的唯一性。 EIP-86原计划在Metropolis阶段进行升级,但由于上述问题,开发商决定推迟在Metropolis阶段引入。

EIP-2938 提供了一个账户抽象的解决方案。 通过更改以太坊协议的一部分,合约账户可以像外部账户一样发起交易。 但由于该方案需要在共识层对以太坊协议进行修改,因此并未被广泛接受。

后来提出的新协议ERC-4337提供了一种不需要改变共识协议的解决方案,试图达到和EIP2938一样的效果。 这种更加安全的实现方式目前在社区中受到了更多的关注。

ERC-4337是如何实现的?

ERC-4337 并不试图修改协议共识,而是在系统中复制内存池的功能。

用户发送一个 UserOperation 对象,其中包括用户的意图、签名和其他数据。

有一个单独的内存池用于用户操作,连接到该池的节点执行特定于 ERC-4337 的验证以过滤操作,以确保它们只接收支付费用的操作。

这些用户操作由矿工或打包者使用 Flashbots 服务分批收集,打包成单个捆绑交易,并包含在以太坊区块中。 打包者为以太坊中的捆绑交易支付汽油费以太坊账户存储了哪些,并通过每个单独的 UserOperation 支付的费用获得补偿。 打包器将使用成本优先逻辑来选择要包含的 UserOperation 对象。

用户操作 UserOperation 看起来像一个事务,但它是一个 ABI 编码的结构,包括以下字段:

1. Sender:执行操作的钱包;

2. nonce和signature:传递给钱包验证函数的参数,以便钱包验证操作;

3. initCode:如果钱包还不存在,用于创建钱包的初始化代码;

4. callData:实际执行步骤中调用钱包的数据。

而每个钱包都是一个智能合约,必须包含两个功能函数:

1. validateUserOp,接受 UserOperation 作为输入。 该函数要在UserOperation中验证签名和nonce,验证成功则支付费用并增加nonce以太坊账户存储了哪些,验证失败则抛出异常;

2. op执行函数,将calldata解析成一条或多条指令供钱包执行操作。

ERC-4337带来的变化

如果提案被普遍采纳,则将签名验证转移到以太坊虚拟机(EVM)中,validateUserOp函数增加任意签名和随机数验证逻辑,使验证逻辑更加灵活。

这样,在签署交易时可以使用新的加密工具,钱包也可以提供一些新的功能,例如:

1.多重签名;

2.社会恢复;

3、更高效、更简单的签名算法(如Schnorr、BLS);

4. 后量子安全签名算法(例如Lamport、Winternitz);

5.钱包可以升级。

这种方式也开放了其他各种交易权限管理,比如允许交易通过智能合约支付gas费用。

目前外部钱包在以太坊上交互的gas费只能通过钱包内的ETH支付。 如果你的钱包里只有 ERC-20 Token 而没有 ETH,你将无法转移这些

代币

转出。 当采用ERC-4337时,用户可以使用账户中的ERC-20

代币

支付费用,矿工节点以合约为中介支付链上的ETH并获得用户的ERC-20

代币

.

实现抽象后,外部账户的所有者将不再是通过签署交易和广播交易来发起交易的唯一途径。 这将打开以太坊作为元交易中继器的可能性。 目前以太坊上的许多应用程序都依赖中继器在区块链上发布用户交易并向中继器支付费用。 如果可以在钱包中内置更复杂的合约,一些中继器将不再需要,也不需要向它们支付额外费用。

虽然有很多优点,但新方案也面临一些问题。

最突出的一点是gas成本较高。 基本的 ERC-4337 操作需要大约 42,000 gas,而常规交易需要 21,000 gas。 原因如下:

1. 你需要付出大量的个人存储读/写成本。 在 EOA 的情况下,这些成本将被捆绑到一次支付 21000 gas 中:

(1)编辑包含pubkey+nonce(~5000)的storage slot;

(2) 用户操作调用数据成本(约4500,可通过压缩降低至约2500);

(3) 恢复 (~3000);

(4) 首先访问钱包本身 (~2600)

(5)首次访问收款人账户(~2600)

(6) 将ETH转入受益人账户(~9000)

(7) 编辑存储支付费用(~5000)

(8) 访问包含代理的存储槽(~2100),然后访问代理本身(~2600);

2. 除了上面的存储读写成本,合约还需要执行“业务逻辑”(解包UserOperation,hash it,shuffle variables等) 3. 需要消耗gas来支付日志费用(EOA做不发布日志); 4. 一次性合约创建成本(约32000 gas,代理中每个代码字节加200 gas,代理地址设置加20000 gas)

简而言之,账户抽象地址的每一步都需要计算,这会消耗更多的资源并增加额外的成本。

幸运的是,这并非无法解决。

由于 Rollup 擅长数据压缩,它与复杂数据的账户抽象方案有着天然的契合。

在Vitalik的最新提案中,提出将账户抽象​​产生的数据通过layer 2进行处理,改进之处在于将只能一步一步实现的功能打包成批量交易,并使用SNARK技术保证交易的有效性。

结语

既然以太坊专注于 Layer 2 开发的格局已经定下,Vitalik 升级以太坊的后续计划也开始转向账户抽象。 最新提案展示了rollup+account抽象的技术路径。 各种 Rollup 提供商也引入了新版本的兼容帐户抽象。

今年6月,zkSync发布V2更新信息:增加“账户抽象”功能,增加与以太坊EVM的兼容性。 10月,发布新版ERC-4337,加入包括BLS签名算法在内的签名聚合。 签名聚合允许构建者和批量提交者也可以聚合签名(例如 BLS、SNARKs),大大减少链上数据并降低 rollups 的数据成本。

以太坊账户存储了哪些_sitehqz.com 以太坊和以太坊贸易的关系_sitejianshu.com 以太坊账户创建

我们有理由相信,账户抽象带来的变化也蕴含着生态爆发的可能。 随着 Rollup 的发展,能够与 Rollup 结合的账户抽象也必须开发出更好更精细的解决方案。