孙宇晨多个链上钱包地址
金色观察 | 一文看懂ERC-4337账户抽象
文/Jake&Stake,BanklessDAO作者;译/金色财经xiaozou
在OpenZeppelin最近的审计之后,ERC-4337的“Entry Point”合约在主网上线,你可以在身边的EVM上使用帐户抽象了。
但是什么是帐户抽象呢?为什么账户抽象很重要?
首先,介绍一点背景知识。如今,以太坊上有两种类型的账户:
外部账户(EOA)。外部账户是以太坊用户最熟悉的账户,它们被用于发送交易、与DeFi应用程序交互、或买卖NFT。MetaMask、CoinBase和其他钱包应用程序等产品向用户提供了可使用的EOA。这些帐户发起交易,并拥有授权交易的私钥(通过产生ECDSA签名)。
合约账户。这些是不受私钥控制的智能合约账户。它们具有关联代码,当用户发送有效的交易时,代码将执行交易。合约账户不能自己发起交易。为了向区块链写入数据,必须签署交易,而合约帐户不能这样做,因为它们没有私钥。
帐户抽象的目的是不需要使用EOA发起交易,而是允许用户使用合约帐户执行交易,开启帐户的设计空间和可定制性。
用户可以为他们的抽象帐户实施任何授权逻辑。
多重签名
非ECDSA验证
优化的隐私解决方案
想要提款限制?可以!
想要帐户恢复以防丢失私钥?可以!
想要使用你选择的ERC20代币支付交易?可以!
帐户抽象概念至少在2017年就已经出现了,并且已经有了一些实现尝试。
EIP-86
EIP-2938
EIP-3074
然而,上述每一个协议都需要共识改变,一些现有的关于可扩展性的共识层更新是优先事项(Danksharding)。因此,我们只有继续沿着这个方向继续走下去才能看到协议级别的帐户抽象。
然而,EIP-4337(现在是ERC-4337)没有共识层变化。相反,4337引入了一个智能合约系统和一个名为“UserOperations”的伪交易。
UserOperations
UserOperations由用户提交到UserOperation内存池,并由“Bundlers”(捆绑者)收集到“捆绑交易”中。这些Bundlers可以是选择处理这些交易的区块提议者或区块建设者。像Stackup、Alchemy、Biconomy、Blocknative、Etherspot和Candide Wallet这样的实体已经进行了Bundlers的建设和部署。
捆绑交易被发送到名为“EntryPoint”的智能合约,该智能合约通过指定的智能合约钱包验证每个UserOperation。这些钱包必须实现两个功能:
validateUserOps(验证UserOps)
execute(执行)
EntryPoint合约将调用每个智能合约钱包的validateUserOps来确定交易是否有效。智能合约可以随心所欲地实现这个功能,支持上述的一些可定制性。
或者,EntryPoint合约可以使用签名聚合器。抽象帐户信任此合约以创建UserOperation签名,该合约还被Bundlers用于创建一个“aggregateSignsignature”(聚合签名),它是多个UserOperation的签名。这将众多签名转换为一个值,压缩验证所需的数据。这对于占用大部分数据成本的rollup来说尤其有用。
EntryPoint合约将在“handleOps()”进程中使用该聚合器合约来验证聚合签名。
如果UserOperation有效,EntryPoint将调用抽象帐户上的execute来执行所需操作。请注意,这些“抽象账户”就是智能合约。
Entry Point合约
Entry Point合约只有一个,这就是为什么Openzepplin的审计是重磅新闻。该合约将作为所有这些抽象帐户的中央信任锚点。
Entry Point合约分离了交易(UserOp)验证和执行的过程。该合约使用两条路径来验证用户操作。
handleOPs
handleAggregatedOps
以上两个函数都将使用UserOp提供的参数创建一个帐户(如无账户),并使用指定的抽象帐户验证UserOp。
最后,Entry Point合约将通过在帐户上调用“execute”来执行UserOp,并将UserOp的calldata作为参数传入。然后,该帐户使用给定的参数执行所编程的任何操作。
基于Entry Point的方法清晰地分离了验证和执行过程,允许帐户处理执行。所有这些使用户能够以一种可预测且精妙的方式与帐户交互,而不需要帐户所有者发起交易。