理清账户抽象的关键概念, 以及为什么 ERC-4337 很重要
- 原文链接: https://www.alchemy.com/overviews/what-is-account-abstraction
- 译文出自:登链翻译计划
- 译者:翻译小组 校对:Tiny 熊
- 本文永久链接:learnblockchain.cn/article…
正如ERC-4337所定义的那样,账户抽象 "允许用户使用包含任意验证逻辑的智能合约钱包,而不是使用EOA作为其主要账户"。
ERC-4337 带来许多用户体验的优化,最引人注目的是使人们能够使用智能合约作为他们的主要账户。
ERC-4337在区块链之上运行,不需要对区块链本身做任何改变。这使得它今天可以在以太坊或任何EVM链上使用,无需对底层区块链基础设施进行任何重大改变。
2023年3月1日,来自以太坊基金会的Yoav Weiss宣布,在EntryPoint合约首次部署时,ERC-4337已经在以太坊主网上运行。
账户抽象的关键概念是UserOperation, Bundler, Sender, EntryPoint, Paymaster, 和 Aggregator。这些概念结合在一起,使web3开发者能够建立智能合约钱包和使DApp与智能合约钱包(SCW)兼容。
图中显示了用户如何定义UserOperation,这些操作被捆绑起来,发送到EntryPoint合约,然后代表用户智能合约钱包执行。
UserOperation是一个 "伪交易对象",代表用户的交易意图。任何UserOperation都可以包含多个指令和附加数据,以执行由智能合约账户发起的智能合约调用。UserOperation 代表了 一个 4337 合约钱包交易的开始。
传统交易对象通常类似于这样的结构:
{
from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
data: "0x.....",
gasLimit: "21000",
maxFeePerGas: "300",
maxPriorityFeePerGas: "10",
nonce: "0",
value: "10000000000"
}
EOA 会对该交易对象签名,并发送到节点处理(mempool)。
UserOperation 结构如下:
struct UserOperation {
address sender;
uint256 nonce;
bytes initCode;
bytes callData;
uint256 callGasLimit;
uint256 verificationGasLimit;
uint256 preVerificationGas;
uint256 maxFeePerGas;
uint256 maxPriorityFeePerGas;
bytes paymasterAndData;
bytes signature;
}
UserOperation 和传统交易对象之间的三个主要区别是:
捆绑器会监控一个专门为UserOperation建立的 mempool。捆绑器将多个UserOperation捆绑成一个交易,并将该交易提交给入口点(EntryPoint)合约。捆绑器通过抽取部分 Gas 费用来获得补偿。
捆绑器是实现ERC-4337的基础设施的关键部分,由于所有以太坊交易都需要由一个外部拥有的账户(EOA)发起。捆绑器通过EOA 把多个UserOperation 作为交易提交上链,在一个账户抽象化的生态系统中,捆绑器是唯一需要EOA的参与者。ERC-4337的主要目标之一是钱包抽象(Web3不再关注使用EOA 还是 合约钱包),让web3 用户可以不再需要自己的EOA钱包。
EntryPoint是一个单例智能合约,用来接收来自捆绑器的交易,然后验证和执行UserOperation。
智能合约账户可以定义自己的验证,因此也可以定义自己的认证。在验证过程中,EntryPoint合约会检查钱包是否有足够的资金来支付它可能使用的最大Gas量,这是基于UserOperation中的Gas字段。如果钱包没有足够的资金,EntryPoint合约会拒绝交易。
在执行过程中,EntryPoint合约通过使用UserOperation中指定的 calldata 来执行UserOperation,并从智能合约账户中取钱给捆绑器报销合适的ETH来支付Gas。
Paymaster 是一个ERC-4337定义的智能合约,处理Gas 支付政策。支付政策为 Gas 的支付方式(例如,用什么货币)和由谁支付创造了灵活性,这消除了用户持有区块链原生代币才能与区块链交互的限制。
例如,以太坊的原生区块链代币是ETH,Polygon的原生区块链代币是MATIC。因此,用户可以用任何ERC20代币如美元币(USDC)或Tether(USDT)来支付以太坊交易的Gas费用,而不是用原生代币(如ETH)来支付。
图:EntryPoint合约如何与Paymaster合约交互以执行灵活的Gas支付政策。
Paymaster 从用户那里抽象出Gas支付,同时以一种稳健的方式让应用程序决定这种抽象应该是什么(例如,赞助交易,用稳定币支付Gas,等等)。
聚合器是一个智能合约,它实现了一个支持聚合的签名方案(即一个可以验证聚合签名的合约)。
如果多个消息用不同的密钥签名,那么可以生成一个单一的组合签名,验证组合签名,并确认(推导)所有的组成签名也是有效的。
通过将多个签名合并成一个签名,聚合器有助于节省calldata成本,多个捆绑的 UserOperation 在一个步骤中得到验证。
图:ERC-4337如何为UserOperation 使用 mempool和一个捆绑器,将一捆 UserOperations 组合成一个交易,并包含在以太坊的区块中。
ERC-4337 建立在之前的以太坊改进提案(EIP)2938 和 3074 之上。EIP-2938 提出了使智能合约可用来 "支付费用和发起交易执行" 一等账户的想法,而EIP-3074提出了将 "外部拥有账户(EOA)的控制权委托给智能合约 "的想法。
EIP-4337 使用了EIP-2938和EIP-3074引入的想法,并将其与使用独立 mempool 的想法和不需要改变共识层的实施路线相结合。
感谢 Chaintool 对本翻译的支持, Chaintool 是一个为区块链开发者准备的开源工具箱
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!