最近沉迷在账户抽象的资料里。看了很多人写的科普和总结,但感觉把很多概念都混在了一起,不够明确和清晰。

所以我也尝试总结下三个核心问题,搞清楚些基础问题后,再看那些关于 EIP-4337 实现方式的文章可能就会更容易理解背景。

第一个根本的问题:「账户抽象」这个词,到底是指抽象什么?

根据 EIP-86 的初衷来看,原文是这么写的:「...抽象出『签名验证』和『nonce 检查』的方式,让合约账户可以执行任何的『签名验证』和『nonce 检查』,而不是写死在交易流程中的固定机制...」

所以,最需要抽象的是以太坊处理交易流程中「签名验证机制」所处在的层级:原来是写死在共识中的,但 AA 的提案希望这些应该发生在 EVM 中(这就是把签名验证机制抽象出来了),这样就可以支持更多的签名算法了。

来源:https://eips.ethereum.org/EIPS/eip-86

第二个问题:账户抽象的目标是什么?

至少在 Vitalik 看来,长期把 EOA 给干掉,将 EOA 和合约账户 合并成只存在 合约账户 这一类。当然,这个 EOA 怎么合并过去还要很多的讨论和 EIP 才可能。

来源:https://ethresear.ch/t/tradeoffs-in-account-abstraction-proposals/263

第三个问题:账户抽象最核心要实现什么功能?

其实并不是大家所说的可编程性,因为这件事早就可以通过智能合约实现了,所以具体的账户内的可编程性不是 AA 本身在关注的。 AA关注的是怎么让「合约账户」变成一类公民,所以实现的功能就是:可以自己发起交易,可以自己支付 Gas。

我们能看到现在 Argent、Gnosis Safe、http://Tornado.cash 都需要 EOA 发起交易和支付 Gas,这就是在 AA 之后能改变的地方,也是能让 合约账户 成为一等公民的最核心功能。

来源:https://eips.ethereum.org/EIPS/eip-2938