但是什么是帐户抽象呢?为什么账户抽象很重要?
首先,介绍一点背景知识。如今,以太坊上有两种类型的账户:
外部账户(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来说尤其有用。
如果UserOperation有效,EntryPoint将调用抽象帐户上的execute来执行所需操作。请注意,这些“抽象账户”就是智能合约。
Entry Point合约
Entry Point合约只有一个,这就是为什么Openzepplin的审计是重磅新闻。该合约将作为所有这些抽象帐户的中央信任锚点。
Entry Point合约分离了交易(UserOp)验证和执行的过程。该合约使用两条路径来验证用户操作。
handleOPs
handleAggregatedOps
以上两个函数都将使用UserOp提供的参数创建一个帐户(如无账户),并使用指定的抽象帐户验证UserOp。
最后,Entry Point合约将通过在帐户上调用“execute”来执行UserOp,并将UserOp的calldata作为参数传入。然后,该帐户使用给定的参数执行所编程的任何操作。
Paymasters
ERC还推出了“paymaster”概念。这是一个合约,将通过支付ETH来支持用户的交易。作为交换,用户通过向Paymaster发送预先指定的ERC-20代币来支付他们的交易。
结论
对以太坊用户来说,这是一个巨大的用户体验改进。dApp可以支付用户的gas费,这对非加密原生用户来说是一个很好的进入加密世界的工具,交易可以批量处理(不再有“10次点击交易”),还有“payment sessions”,这样你就不再需要批准每一笔交易了。
帐户抽象可以提高隐私工具的效用,允许用户使用他们想要的任何代币支付交易,并允许用户与区块链交互而无需处理私钥。今天你若丢失了私钥则意味着你的钱也丢失了。
而在一个账户抽象的世界里,丢失私钥并不意味着失去一切。
请特别注意围绕Visa的兴奋之情。他们的团队通过使用pull-based交易和自我托管钱包,发布了一种自动支付的设计。对于那些希望使用区块链进行经常性支付以补充服务的公司来说,这一直是一个巨大的问题。
以前,付款必须由付款人发起,但通过帐户抽象,服务提供商可以为他们的服务收费,而无需你自己进行交易。就像自动支付信用卡账单一样。帐户甚至可以被编程为在任何时间内接收发票,因此你可以设置订阅服务的时间限制。
钱包可以进行配置,这样你就可以有备份账户了,还可允许某些服务的更改。用户甚至可以在不知情的情况下与区块链进行交互。帐户创建可以由帐户发起人处理,所有用户所要做的就是使用web2类型的用户体验来管理自己的钱包。
简而言之,帐户抽象为以太坊的安全性和去中心化增加了效用。这是个大工程,而我们才刚起步。