钱包作为进入加密世界的入口以及通行证在整个加密行业中有着不可替代的地位,使用钱包也是每一个想进入加密世界的人不可避免的一环,钱包的功能也从最初的纯记账功能演化至如今的多链多场景使用功能。但目前钱包的使用门槛对于新用户来说学习成本过高,这道门槛将许多想进入加密世界的人拒之门外,而钱包门槛的降低才可以为整个加密世界带来更多的新鲜血液以及生态的爆发,随着 EIP-4337 账户抽象提案的到来,账户抽象钱包带来的降低门槛是否会让钱包进入下一个时代引爆加密世界的用户爆发潮?
作者:菠菜菠菜
特别鸣谢十四君以及方军老师的支持以及指导
注:文章仅代表作者个人观点,不构成任何投资建议
目录
01/ 现阶段小白用户使用钱包的痛点是什么?
02/ 以太坊现有的钱包类型有哪些?
03/ 账户抽象是什么?EIP-4337 账户抽象有哪些优点?
04/ 为什么以太坊选择了 EIP-4337 账户抽象提案?
05/ EIP-4337 账户抽象钱包如何运作?与其他钱包账户类型有什么不同?
06/ EIP-4337 账户抽象存在着哪些不足和风险?
TL;DR
- 加密世界的知识门槛较高,人们普遍缺乏对区块链以及钱包知识的认知,钱包现阶段使用体验复杂,存在着许多因素阻碍着新用户的加入
- 现阶段小白用户使用钱包时会遇到一些痛点:使用钱包必须先有 Gas 费、需要寻找加密资产购买渠道、眼花缭乱的主网选择以及钱包安全问题
- 以太坊上的钱包存在两种不同类型的账户即EOA 外部拥有账户(Externally Owned Accounts)和CA 合约账户(Contract Account),EOA 外部拥有账户类型的钱包指由私钥以及公钥的密钥对控制的钱包,不具备可编程功能。CA 合约账户类型的钱包指以智能合约形式存在的钱包,合约账户类型的钱包本身不是由私钥控制也不存在私钥,而是通过编写代码实现各种功能,但不能主动发起交易
- 两种钱包账户类型各有利弊以及局限性,EOA 外部拥有账户只能按照以太坊规定的生成密钥对的方法来生成,不具备可编程性,需要拥有 Gas 费才可以操作,私钥丢失就无法找回,但相比 CA 合约账户类型而言,虽然 CA 合约账户类型可以自定义逻辑来实现更多功能的可能性,但是 CA 合约账户类型无法主动发起交易需要由 EOA 外部拥有账户来进行调用,并且生成 CA 合约账户类型的钱包需要额外的成本,这两种钱包账户类型目前都无法解决钱包使用体验复杂的问题
- 账户抽象(Account Abstraction)是以太坊上一种待实现的钱包技术方案,其最终愿景是让 AA 账户抽象钱包结合 EOA 外部拥有账户和 CA 合约账户两种账户类型的特征,使其合二为一替代 EOA 来作为主账户存在,除了拥有 CA 的可编程性外还可以摆脱 EOA 的依赖主动发起交易。
- EIP-4337 提案将原本以太坊钱包交易流程中写死在共识层中的【验证交易机制】抽离出来交给 EIP-4337 的新机制处理,新机制的出现使得账户抽象钱包实现了签名方式的可自定义,并且带来了更多应用场景
- 实现了账户抽象的钱包应用可以让用户无需拥有 EOA 也可以使用特定的签名方式发起交易来作为主账户使用,使得账户抽象钱包的所有权以及签名权解耦,账户抽象钱包的 EOA 所有者账户也仅仅是作为所有者存在,不影响实际账户抽象钱包的使用
- EIP-4337 之所以能被以太坊选择为最终方案,首先是因为EIP-4337 不需要进行共识协议层的修改就可以实现账户抽象,这就避免了不亚于类似从 POW 工作量证明机制转换至 POS 权益证明机制这种庞大的共识层修改
- 在 EIP-4337 中账户抽象钱包将【签名验证机制】交给了入口点合约来进行,这就使得账户抽象钱包可以使用任意签名形式的签名机制,钱包开发者可以选择相应场景的签名形式去开发钱包产品
- 目前的账户抽象钱包更像是一种智能合约钱包的新标准,还无法摆脱对于需要 EOA 作为钱包拥有者的依赖。并且目前账户抽象提案仍存在一些不足以及风险:智能合约风险、更高的 GAS、技术实现问题
(一)现阶段小白用户使用钱包的痛点是什么?#
由于加密世界的知识门槛较高,人们普遍缺乏对区块链以及钱包知识的认知,钱包现阶段使用体验复杂,并存在着许多因素阻碍着新用户的加入。
痛点一:使用钱包必须先有 Gas 费
当一个小白用户满怀期待想体验加密世界并下载了钱包准备大干一番的时候,小白惊奇的发现钱包居然不能使用,因为钱包里面没有公链原生通证(如以太坊的 ETH)作为 Gas 费,钱包无法进行任何操作,因为钱包的每一次链上操作都需要矿工来打包操作并支付 Gas 费给矿工作为辛苦费,这时小白就要开始寻找购买加密资产的渠道,而许多钱包产品并没有提供出入金渠道,大多数小白的选择可能就会是中心化交易所。
痛点二:加密资产购买渠道以及眼花缭乱的主网选择
当小白用户想购入加密资产时,他们可能会选择有出入金渠道的钱包产品、中心化交易所、场外交易等渠道购入加密资产,但对于选择中心化交易所和场外交易渠道的小白用户来说,在中心化交易所购入资产后想要转入钱包中的话小白用户又会被选择转账的各种各样的主网给搞晕了,学会选择主网就需要一定的学习成本,稍不小心转错网络处理起来极其繁琐,如果是场外交易的话则十分具有风险,小白用户极容易成为骗子的诈骗对象。
痛点三:钱包安全问题
对于小白用户来说,即便好不容易搞定了 Gas 费可以使用钱包进行交互了,但整个加密世界对于小白来说就是一片黑暗森林。小白用户需要学习关于钱包的密码学知识如私钥公钥等,还需要理解私钥是什么并思考怎么确保私钥的安全以及防范加密黑暗森林中的骗局,这些对于小白用户来说学习成本大且很容易上当受骗,最重要的是私钥一旦丢失或忘记就无法找回,不能像 Web2 应用找回密码那样重新找回,对于 Web2 用户来说这是他们很难习惯的。
(二)以太坊现有的钱包类型有哪些?#
目前以太坊上的钱包存在两种不同类型的账户即EOA 外部拥有账户(Externally Owned Accounts)和 CA 合约账户(Contract Account)。
EOA 外部拥有账户(Externally Owned Accounts):
EOA 外部拥有账户类型的钱包指由私钥以及公钥的密钥对控制的钱包,外部拥有钱包的作用基本只有接收、持有、发送 Token 和与智能合约进行交互的功能,不具备可编程功能,并且执行每一笔交易都需要支付 Gas 费。创建一个外部拥有账户类型的钱包是无需成本的,但只能通过生成私钥的方式创建。
CA 合约账户(Contract Account):
CA 合约账户类型的钱包指以智能合约形式存在的钱包,合约账户类型的钱包本身不是由私钥控制也不存在私钥,而是通过编写代码实现各种功能,如 DeFi 协议、多签钱包、保险柜、水龙头等等功能,常见的用处有多签钱包,即需要多个外部拥有账户钱包授权才可以进行交易的钱包,通常用于企业钱包管理。创建一个合约账户钱包是需要消耗 Gas 费创建的,合约账户钱包本身不能主动发起交易,而是需要外部拥有账户钱包调用并支付 Gas 费而被动发起交易。
这两种钱包账户类型各有利弊以及局限性,EOA 外部拥有账户只能按照以太坊规定的生成密钥对的方法来生成,不具备可编程性,需要拥有 Gas 费才可以操作,私钥丢失就无法找回,但相比 CA 合约账户类型而言,虽然 CA 合约账户类型可以自定义逻辑来实现更多功能的可能性,但是 CA 合约账户类型无法主动发起交易需要由 EOA 外部拥有账户来进行调用,并且生成 CA 合约账户类型的钱包需要额外的成本,这两种钱包账户类型目前都无法解决钱包使用体验复杂的问题。
账户抽象(Account Abstraction)是以太坊上一种待实现的钱包技术方案,其最终愿景是让 AA 账户抽象钱包结合 EOA 外部拥有账户和 CA 合约账户两种账户类型的特征,使其合二为一替代 EOA 来作为主账户存在,除了拥有 CA 的可编程性外还可以摆脱 EOA 的依赖主动发起交易。
本处讨论的账户抽象(Account Abstraction)指由 Vitalik 提出的以太坊 EIP-4337 提案,该提案将原本以太坊钱包交易流程中写死在共识层中的【验证交易机制】抽离出来交给 EIP-4337 的新机制处理,新机制的出现使得账户抽象钱包实现了签名方式的可自定义,并且带来了更多应用场景如:代付 Gas、聚合签名、隐私保护等。
EIP-4337 提案实现后的账户抽象钱包可以不局限于 EOA 外部拥有账户类型钱包使用的以太坊椭圆曲线数字签名算法(ECDSA)密钥对的签名方式,钱包应用的开发者们可以将任意类型的签名方案应用在账户抽象钱包应用上使得用户可以使用其他签名方式发起交易,从而可以降低用户的使用门槛。
实现了账户抽象的钱包应用可以让用户无需拥有 EOA 也可以使用特定的签名方式发起交易来作为主账户使用,使得账户抽象钱包的所有权以及签名权解耦,账户抽象钱包的 EOA 所有者账户也仅仅是作为所有者存在,不影响实际账户抽象钱包的使用。而所有权和签名权的解耦使得钱包产品可以为用户提供社交恢复等手段,人们即便丢失了私钥也不用担心无法找回了。
由于账户抽象钱包新机制带来的可扩展性,先有 Gas 才能使用钱包的痛点也可以得到解决,账户抽象钱包不仅可以允许第三方代付 Gas,还可以实现除原生代币以外的资产支付 Gas 费,这将极大的降低小白用户对于 Gas 费的使用门槛,在不久的将来似乎可以预见,账户抽象带来的更低门槛以及更多的自定义功能可能会引领钱包的一个新时代。
(四)为什么以太坊选择了 EIP-4337 账户抽象提案?#
账户抽象的讨论自以太坊上线之时讨论就没有停止过,从最早的 EIP-101 到 EIP-3074 再到现在最新的 EIP-4337,账户抽象的方案已经迭代过好几个版本,但由于大部分方案不成熟以及涉及到共识协议层的修改太复杂最终被搁置了。
从 2015 年至今经过了漫长的讨论和迭代后,最终以太坊在 EIP-3074 和 EIP-4337 这两个方案之间进行抉择,如果说 EIP-4337 是让 CA 智能合约账户钱包可以像 EOA 那样使用,那么 EIP-3074 就是让 EOA 外部拥有账户钱包可以拥有智能合约账户的可编程功能,最终随着以太坊创始人 Vitalik 公布的以太坊最新路线图中,EIP-4337 被正式纳入在 The Splurge(狂欢)阶段中实施,这也让 EIP-4337 成为了账户抽象的最终方案。
EIP-4337 之所以能被以太坊选择为最终方案,首先是因为EIP-4337 不需要进行共识协议层的修改就可以实现账户抽象,这就避免了不亚于类似从 POW 工作量证明机制转换至 POS 权益证明机制这种庞大的共识层修改,而 EIP-3074 涉及到共识层的改动,一旦出问题就需要使用硬分叉(hard fork)来解决问题,其次由于EIP-3074 是让 EOA 外部拥有账户拥有智能合约账户的特性,在签名机制上依旧使用固定的 ECDSA 签名,无法像 EIP-4337 那样可以使用任意签名方式,所以相比于 EIP-3074 来说,EIP-4337 似乎在钱包门槛的降低上更有优势。
(图片来源:ethereum.cn 翻译)
(五)EIP-4337 账户抽象钱包如何运作?与其他钱包账户类型有什么不同?#
账户抽象相比于之前的账户类型引入了一些新角色以及机制:
钱包合约 (Wallet Contract):账户抽象后的钱包智能合约,可以实现自定义的钱包逻辑。
入口点合约 (Entry Point Contract):与钱包合约进行沟通协调并负责处理验证和执行用户操作的合约。
用户操作(UserOperations,uo):用户发起的新链下交易形式,区别于以前的【交易事务 Transaction, tx】
捆绑者(Bundler):负责将用户操作打包并传递给入口点合约的链下计算节点。
用户操作内存池(UserOperation Mempool):一个专门用于堆积待执行用户操作的内存池,独立于交易事务内存池。
代付人(Paymaster):可选择的第三方支付 Gas 的代付人合约账户。
如果你不明白这些新名词是什么,接下来我会用简化版的流程图来进行展示,首先我们先了解 EOA 外部拥有账户类型的钱包的交易机制,EOA 外部拥有钱包需要签署一个 ECDSA 签名才可以发起交易。
从图中可以看到 EOA 账户类型的钱包发起一个交易的步骤为:
- 用户使用私钥对交易信息进行 ECDSA 签名产生一个带有签名的交易事务(Transaction, tx)
- 带有签名的交易事务会被发送到处理待执行事务的内存池中等待处理
- 矿工会在交易事务内存池中处理事务并验证有效性
- 当验证有效性为有效时,交易事务会被纳入区块中,反正则废弃交易事务
由于 CA 合约账户类型没有统一的交易流程标准,下图为某种依赖 Relayer 的智能合约钱包的交易流程,我们可以看到CA 合约类型账户的需要依靠一个 EOA 外部拥有账户类型的钱包签署 ECDSA 签名来执行交易,并且 Relayer 这个角色可能会伴随着中心化的风险。
从图中可以看到某种 CA 合约账户类型的钱包发起一个交易的步骤为:
- 用户使用私钥对交易信息进行任意形式的签名产生一个带有签名的交易信息(signed message)
- 带有签名的交易信息会被发送给负责传达消息的节点 Relayer
- Relayer 使用私钥对带有用户签名的交易信息进行 ECDSA 签名形成一个交易事务
- Relayer 将包含用户交易信息的交易事务通过 Relayer 的 EOA 外部拥有账户钱包发送给用户的钱包智能合约进行执行
- 用户的智能合约钱包执行操作并通过矿工验证后上链纳入区块
接下来我们再来看 EIP-4337 账户抽象后的钱包交易机制
从图中可以看到账户抽象后发起一个交易的步骤为:
- 用户发起一个钱包用户操作,使用任意形式的私钥对用户操作进行签名产生一个带有签名的用户操作(UserOperations,uo)
- 带有签名的用户操作会被发送到待执行用户操作内存池等待处理
- Bundler 将用户操作内存池中的用户操作进行打包处理成一个事务并提交给入口点合约
- 入口点合约处理所有用户操作:验证钱包是否存在 - 要求钱包验证用户操作 - 将用户操作发送至智能合约钱包进行执行
- 智能合约钱包将用户操作执行并纳入区块
通过对比下来我们可以发现,EOA 外部拥有账户发起交易需要依靠以太坊固定的 ECDSA 签名算法来进行签名,而 CA 合约账户最终也需要依靠 EOA 外部拥有账户的 ECDSA 签名算法来签署交易,而在 EIP-4337 中账户抽象钱包将【签名验证机制】交给了入口点合约来进行,这就使得账户抽象钱包可以使用任意签名形式的签名机制,钱包开发者可以选择相应场景的签名形式去开发钱包产品,用户可以直接通过钱包应用特定的签名方式操控账户抽象钱包进行操作,而这种签名方式可以是 Web2 用户也能轻松使用的方式或是专用场景下的定制方式。
并且由于任何矿工都可以充当 Bundler 这个角色,这就避免了 Bundler 这个角色的中心化风险,同时 Bundler 通过捆绑交易还可以预防 Flashbot 监听内存池进行 MEV 套利,并且这些新机制的出现还带来了更多的应用场景想象空间,例如第三方代付 Gas 费的 Paymaster。
从图中可以看到,交易事务(tx)与用户操作(uo)是两个独立的内存池,由于账户抽象的入口点合约的存在,代付人(Paymaster)合约便可以像乐高积木一样与入口点合约组合在一起,当入口点合约对用户操作(uo)进行验证之前先对代付人进行验证确认:是否同意代付?是否有足够支付 Gas 费的 ETH 进行质押?
除了代付人完全补贴之外,如果用户的账户合约中只有类似于 USDT、USDC 等非 Gas 费代币,用户也可以通过将 Gas 等值的其他代币转给代付人合约以达到无 ETH 支付 Gas 费的作用。
除了代付 Gas 之外,入口点合约还可以结合聚合签名验证合约实现聚合签名功能,通过多人签名的方式来控制钱包。
以上案例我们可以看到 EIP-4337 方案中的入口点合约模块化的可组合性带来的更多应用场景想象空间,似乎账户抽象钱包可以给整个加密世界带来非常多的好处,但现实真的会如此美好吗?
(六)EIP-4337 账户抽象存在着哪些不足和风险?#
虽然账户抽象的愿景十分美好,但现实却往往却很骨感,目前的账户抽象钱包更像是一种智能合约钱包的新标准,还无法摆脱对于需要 EOA 作为钱包拥有者的依赖。** 并且我们都明白一个道理:越是复杂的事物越容易出问题,目前的账户抽象提案仍存在一些不足以及风险:
智能合约安全问题
智能合约安全问题一直是困扰加密世界的一个难题,我们甚至可以看到许多通过了 “智能合约审计” 的合约往往也会出现安全漏洞,而每次出现合约安全问题往往都会伴随着巨大的财产损失,而对于 EIP-4337 账户抽象方案来说,账户抽象钱包的功能模块化堆积以及新机制的加入就会使得其代码执行逻辑更加复杂,而往往更复杂的代码执行逻辑可能就会伴随着潜在的安全风险。由于账户抽象钱包和入口点合约本身都是智能合约,一旦入口点合约或者钱包合约出现问题则有可能会酿成一场损失惨重的黑客事件,人们对使用账户抽象钱包的信任也会大打折扣。
更高的 Gas 费
除了潜在的合约安全风险之外,账户抽象钱包使得用户需要支付的 Gas 费更高了,因为账户抽象钱包相比于 EOA 外部拥有账户和 CA 合约账户来说处理交易的操作步骤变多了以及处理逻辑更复杂了,需要处理的操作变多也就意味着需要的 Gas 费更多,虽然 Vitalik 也提出可以通过 Layer2 来处理账户抽象的数据来降低 Gas 消耗的解决方案,但这也需要一段漫长的时间。
技术实现问题
目前距离 EIP-4337 的落地还有很长的一段时间要走,许多理论上可以实现的技术往往在实践中会困难重重遇到许多问题如:兼容问题,复杂的节点验证过程,如何防止 Bundler 作恶、技术逻辑无法实现等等,要解决这些技术问题需要进行长时间的尝试和讨论,这也是为什么 EIP-4337 被放在了以太坊升级的第六个阶段 Splurge(狂欢)中的原因。
道阻且长,加密世界需要更低门槛且安全的钱包来吸引更多新用户以突破用户量的瓶颈,相信随着账户抽象的实现会给加密世界带来一个全新的想象空间,甚至可能在不久的将来会有一个意想不到更好的替代方案来取代账户抽象,加密行业迭代更新的速度远超我们想象,这也是这个行业的魅力所在。