RJ

Posted on May 28, 2023Read on Mirror.xyz

RJ's 账户抽象研究分享

Twitter: 0xRJ_eth

subscribe://

任何用户进入web3的时候,遇到的第一层阻力通常都是保存私钥或者助记词。目前以太坊用户们的钱包账户基本都属于一个钱包地址对应一个私钥,也就是说我们都面临着但凡私钥或者助记词丢失泄露,就会资产全无的巨大单点故障风险,除了安全风险之外还伴随着用户体验差的问题。 因此实现更好的以太坊账户体系,一直以来都是以太坊网络对于冲击千万量级用户的瓶颈问题。

所以从2015年至今,以太坊开发人员一直在探索实现账户抽象,以解决普通用户使用web3应用门槛过高的问题,但一直没有实际的落地。直到今年以太坊基金会在3月1日的WalletCon活动上宣布,专门为实现账户抽象而设计的以太坊智能合约ERC-4337已经通过了OpenZappelin的审计,经过各项测试,已经顺利部署在以太坊主网,后续可以在各EVM兼容链上运作…

这是一个振奋人心的消息,我们终于正式开启账户抽象(account abstraction,AA)的新时代。

技术协议的正式落地,加上近两年频发的资产安全问题,导致账户抽象成为了眼下最热门的话题之一。今天就和大家聊聊账户抽象以及目前大火的的erc4337。

讲账户抽象之前,需要先说说目前以太坊上的账户类型。

如今,以太坊上有两种类型的账户:

  • 外部账户Externally Owned Account(EOA)

之所以被称作“外部”,指的是这类账户被以太坊主链的外部主体持有。如果再进一步按照运行环境可以再细分:浏览器插件钱包包括Metamask,Phantom。移动端的Tokenpocket;硬件钱包Ledger,Treasure,keystone 等等都属于EOA。可以说这类账户是以太坊用户最熟悉的账户类型,因为目前以太坊原生协议规定的所有交易都必须从一个外部账户 EOA 发起。咱们平时用来发送交易、与DeFi应用程序交互、或买卖NFT的钱包账户都属于这类。

通用的 EOA 账户运行原理是,用户在用这类加密加密钱包生成钱包地址时会获得一份12个或24个单词组成的助记词,这份助记词汇派生出对应的私钥,私钥再确定出公钥,公钥再算出账户地址。更具体地说,该地址是公钥经过一种哈希加密(Keccak-256 )后 的生成的一大长串哈希值的最后 20 个字节,将其十六进制生成的字符串就是EOA地址。

私钥 → 公钥 → Keccak256 哈希 → 一大长串哈希值的最后 20 个字节 → 十六进制字符串 = EOA 地址

有了账户地址后,如何去确保用户能控制自己的账户呢?用户用私钥来签署交易的参数,而公钥可以让任何人验证某个签名是由其对应的私钥签署的。当交易信息和签名被验证有效,交易就被执行。

签名和验证公式如下:

私钥+交易信息=签名

签名 → ec_recover → 公钥 → (用上面的规则生成)地址 → 对比要操作的地址

这里面的技术实现依靠非对称加密算法。咱们不需要了解具体怎么加密的,我们只需要知道:密码学背后复杂的数学技术可以保证:(从上面的公式也可以看出)如果我给你我的公钥,你没有办法推导出我的私钥,如果我给你一个用我的私钥签名的信息,你可以确信我是唯一一个可以签名的人。 这样我就可以通过控制私钥,来控制我自己钱包了。

EOA的主要缺点:

1. 到这里,大家是不是就意识到一个很明显的问题:就是账户与用户的私钥是紧耦合(强关联),某种程度上可以说你的私钥就是你的钱包账户,如果私钥丢失,你的的账户内资产就丢失了;如果私钥泄露给他人,相当于他们也就拥有你的账户,以及账户里的所有资产。

2. 除去私钥+账户强相关的问题,目前市面上的私钥保管方式也很不便捷,无论是把私钥或助记词抄写到纸上存放,还是买防火防潮私钥钢板进行保存,都存在风险。这些也都是新增量进入加密货币市场的门槛。

据 Coinbase 产品战略与业务运营总监 Conor Grogan 统计,约有 11.5 亿美元的加密货币因人为过失而永久丢失。Grogan 补充道,该统计数据远低于因丢失钱包访问权限而锁住的 ETH 数量,因为链上存在大量长期不动的资产,无法判断其中有多少丢失了私钥。所以对于eoa这类传统钱包,私钥就相当是一个单点故障 (Single point of failure),在私钥方面再小的闪失,都会带来巨大的资产风险。

除了私钥账户强绑定的单点故障问题,EOA账户其他缺点也包括:

3. 必须有所在区块链的原生代币来支付gas fee。 这对普通用户来说就很不友好,我明明是给别人支付usdc,为什么要支付eth作为手续费?我相信很多人刚开始使用钱包也都遇到过,明明钱包里有想要使用的代币,但就是无法转移。然后了解到还需要有足够的eth来支付操作费用,然后再去买eth,再把eth转移到钱包里。

4. EOA在操作时需要对每一次的交互进行签名(这个背后是为了防止重放攻击,但就不具体展开说了)。比如我在去中心化交易所uniswap借贷。我需要先授权要签1次名,质押资产要签1次名,贷款要再签1次名…

用户进入门槛高。密钥对这套体、私钥公钥助记词钱包地址等这些概念等关联、钱包的操作原理、私钥和助记词的保管 等等…对于新人来说是很高的进入门槛。尤其是习惯了web2的人用户们会更觉得复杂。而这也是除了扩容性能问题外阻碍以太坊用户爆发式增长的主要原因之一。

  • 合约账户(Contract Accounts,CA)

CA 也被称为内部账户,他们由合约代码控制。与EOA一样,每个合约账户都有一个唯一的地址。顾名思义,合约账户是基于合约的,因此具备可编程性、可以发挥EVM全部的图灵完备特性,从而实现比 EOA 外部账户更复杂的业务操作逻辑**。**比如实现defi协议的那些合约都属于CA合约账户。

但可惜的是,在合约账户钱包的设定里,他们无法主动发起交易,需要EOA账户钱包调用并支付Gas费而被动完成触发。UniPass的知县比喻得特别准确——在设定上,CA 是以太坊世界的原住民,EOA 和 ETH 是为 CA 的业务逻辑准备的触发器和燃料。

合约账户CA 与 外部类账户EOA的几大区别在于:

1)合约账户不受私钥控制,只受合约内部的代码控制;

2)合约账户无法自己发起交易。一个交易肯定有from和to,from肯定是所谓的EOA,to可能是EOA,也可能是合约账户,如果是后者,那么这个交易就是执行后者的code;

3)合约账户包含代码,而且有一块儿专门的磁盘存储空间,用来记录数据,而eoa类外部账户没有逻辑代码可以执行;

4)由于合约部署需要上链,创建只能合约账户需要付一定的gas fee(而且还不便宜)因为会用到链上空间 (Argent,Gnosis Safe 这些老牌钱包就是智能合约钱包),但EOA类就不用

合约账户 CA 根据其内部逻辑 可以再分成两类:

一类是业务逻辑(Defi合约都属于这类:Token 合约用来记账、质押合约用来放贷和清算 etc.);

一类是账户逻辑(比如 Gnosis safe 的多签逻辑)——这个用 CA 作为地址的钱包方案,也就是市场上所谓的“智能合约钱包 Smart Contract Wallet(SCW)“——也就是用 CA 作为地址的钱包方案。我们接下来聊账户抽象时,涉及到的智能合约账户指的就是这一类合约账户。

什么是账户抽象(账户抽象概念)?

账户抽象是基于智能合约钱包(SCW)的改进方案。简单来说,账户抽象是将EOA钱包变成一种全新的智能合约钱包,每一个钱包都成了可编程、图灵完备、同时可以发起交易的新(全能型)账户。

那如何理解“抽象”这个概念呢,举个现实例子,当我们看电视的时候,只需要通过遥控按钮来控制开关,切换频道…我们并不需要自己通过代码程序和操作无线电波来运行电视内部的系统。那么我们手中的遥控器,就相当于把电视内部运行的逻辑「抽象」至表面按钮。

账户抽象也是类似,将现有的 智能合约账户 和 外部账户 复杂的运行逻辑「抽象」,简化为全新的以太坊账户形式,这个账户因为是智能合约,所以可以自定义地将用户需求写入合约代码。从用户层面感受到的是可以在不了解或不关心底层技术的情况下,享受被封装后及其丝滑简易的用户体验。

ERC-4337,智能合约和账户抽象之间是什么关联:

  • 以太坊账户抽象 2015 年就已经被Vitalik提出了,但一直没有具体的落地。过去几年社区为了账户抽象的实现也提出了各种各样的方案,比如EIP-86,2938, 3074。咱也不需要了解这些eip具体包括什么,只需要知道这些协议都需要对以太坊主链,也就是共识层进行改动。这对以太坊来说工作量和风险都太巨大。更何况还有其他更迫在眉睫需要通过改变共识层来进行的升级(诸如去年完成的合并merge)…

  • 直到2021年, 一个名为EIP-4337 方案的提出才让市场真正看到实现的可能。关键原因就在于EIP-4337 方案无需改变以太坊底层原生协议,而是通过在以太坊主网层添加新层、部署新的智能合约。可想而知,4337方案注定是比直接修改底层原生协议(把账户抽象功能内嵌)更绕了些,但对以太坊这样复杂且庞大的网络来说是目前最优方案(但也因此这方案并不适用于其他非EVM网络) 。

  • 目前,由于EIP4337已经被正式授权成为以太坊主网上的标准,所以我们称他为ERC-4337更为准确。(现在还有文章仍然使用其原始术语 EIP-4337 来指代 ERC-4337)

  • 智能合约钱包早在EIP 4337之前就已存在。

  • 所以可以这样理解三者间等关系:EIP 4337的提出是为了标准化设计智能合约钱包及其相关基础设施的通用功能,以便更好地实现账户抽象这一效果。

ERC-4337具体运行逻辑

这部分很绕,但我会用清晰的逻辑和语言帮大家梳理,非技术背景的朋友但凡能耐心跟下来绝对能理解。我自己搞懂的那一瞬间有一种茅塞顿开的快感!!诸位跟紧了哈!

对技术原理不那么感兴趣的朋友也可以直接跳过。

让我们通过对比传统EOA类钱包运行原理来理解4337的运行原理。

首先我们要知道EOA交易逻辑是被硬编码/写死在以太坊共识层里的,任何人都无法修改替换:

(EOA交易逻辑,红色部分是写死在以太坊原生协议中的)

从图中可以看到EOA账户类型的钱包发起一个交易的步骤为:

  1. 首先,用户使用私钥对交易信息进行一种叫ECDSA方式的签名,我们不需要理解这ECDSA方式具体是啥,但知道这是写死的在原生协议里的,非这个方式不可

  2. 然后,带有签名的交易事务会被发送到处理待执行事务的内存池中等待处理。

  3. 矿工会在交易事务内存池中处理事务并将交易打包上链

  4. 以太坊共识层会来验证交易——a)确认签名是否“正确”,也就是确定交易是不是由私钥持有人签名(这部分前面提到了,非对称加密可以保证任何人通过你的公钥和签名信息能确定签名者是不是私钥持有人);b)确认账户里有没有足够的Gas费;c)判断是Nonce是否正确(也就是你这笔交易是不是前一笔交易+1,这主要是用来给交易排序、防止双花

  5. 验证通过后以太坊虚拟机EVM就会执行交易

ERC 4337 的运行逻辑可以理解为在原来的eoa架构基础上,头和尾都加衍生了新的模块(角色+机制)以达到自定义的效果。因为之前说过了,ERC-4337之所以被采纳是因为它无需改变以太坊底层协议,所以这些硬编码的部分它不会去改动,只能在写死的部分基础之上往上加。

ERC 4337 添加了以下这几个新的模块、角色和机制(此刻看到这些新的词和概念你应该和我当初一样懵,不过不急,接下来的5min你就能全搞明白了):

  • 交易意图/用户操作(UserOperation,UO):用户发起的新链下交易形式,区别于以前EOA账户发起的“交易事务Transaction, Tx”形式。具体来说UOU本质上和普通交易事务相同,只是基于EIP 4337的合约接口定义了额外的参数。(具体是啥对理解原理不必要,知道是一种新设计的交易形式就可以)

  • 用户操作内存池(UserOperation Mempool):和以太坊本身的mempool(交易事务内存池)性质相同,只是mempool是存放待执行Tx,而这个顾名思义,是只存放待执行的UO的。所以他是独立于以太坊交易事务内存池mempool的

  • 捆绑者(Bundler):负责将UO打包成一个bundle并传递给矿工,他们的账户都是EOA形式

  • 入口点合约 (Entry Point Contract):负责验证UserOperation合法性的合约,并与钱包合约进行沟通协调的合约

  • 钱包合约(Wallet Contract):是用户在链上的身份地址,属于智能合约账户(CA),负责执行UserOperation具体内容(实现自定义的钱包逻辑)

  • 代付人合约(Paymaster Contract):是可选的第三方Gas fee代付人的合约账户

  • 钱包工厂合约(Wallet Factory Contract):是一个创建智能合约钱包的合约

  • 签名聚合器(Signature Aggregator):一个将多笔签名聚合成一笔签名的合约

让我们来按照流程过一遍ERC-4337的操作原理:

  1. 从图中(这真的是吐血整理的图哈哈)可以看出现在发起交易的钱包持有者不再需要是eoa的形式,可以是任何形式,同样的签名也可以是任意形式的签名。

  2. 用户的交易会以新的交易形式——UserOperation, 在签名过后被发送到新设计的一个专门用于 UserOperations 的 UserOperations Mempool. 因为UserOperation 在结构上与传统的交易形式不同,这意味着它们无法被包含在现有的以太坊Mempool 中。EIP4337 就设计了个新的 UOMempool,专门用于存储签名过后待执行的UO。这边可以看到UO Mempool是位于以太坊的Mempool之前,所以如果称之为“pre-Mempool”可能更易于理解。(市面上绝大部分图都是直接对比UOmempool和mempool,但更准确的来说是前后顺序关系,UO mempool并没有取代Mmepool)

  3. 先前提到了,以太坊上的交易必须是由一个外部账户发起,现在UO mempool中的交易都是自定义对类型,那怎么上链?这就涉及到Bundler 这个新角色。Bundler 的账户都是EOA,他们的任务是把UOmempool中多笔UO打包成bundle,用自己的EOA签名bundle然后提交给矿工打包上链。而bundle也需要为他那笔bundle支付上链的gas fee。不过这笔钱会在后面从每一笔UO里收回来。从矿工对角度来看,这一步形式上和普通EOA用户提交交易没有区别。(Bundler可以是任何人,可以是但不限于矿工)

  4. (这部分和传统的过程一致)共识层先会将bundler发的1个bundle 看作是一个EOA钱包发起的一笔transaction进行验证——a)确认签名是否“正确”,也就是确定交易(但在这边值得上那一个bundle)是不是由私钥持有人(bundler)签名;b)确认账户里有没有足够的Gas费;c)判断是Nonce是否正确

  5. 验证通过后以太坊虚拟机EVM就会执行这个交易(bundle)。

  6. 但因为这个bundle包含多UserOperation,所以还需要新的额外的模块来执行bundle内每一笔UserOperation——在ERC-4337中 具体UserOperation的验证和交易过程被分离成两个智能合约:入口点合约 (Entry Point Contract) 和钱包合约 (Wallet Contract)

    • 入口点合约(Entry Point Contract) 主要是验证UserOperation的合法性,比如你需要调用的钱包合约是否存在,如果不存在会调用wallet factory先创建新的智能合约,如果存在就调用指定的智能合约钱包;是否涉及到paymaster,以及paymaster的信息是否正确,人家是否同意帮你支付;gas fee够不够 等等。

      这部分是OU框架性的检查,所有UO都需要先过这一关。

    • 如果框架性/合法性的这部分验证通过,入口点合约会调用UserOperations内指定的涉及到的钱包合约(们)进行具体的细节执行。比如一笔bundle包含20个UO,每个UO指定一个不同的钱包合约,那么这边就会需要调用那20个钱包合约 一笔一笔对应验证、执行UserOperations的具体内容

  7. 执行完毕,入口点合约会扣除每一笔UO执行所需的gas fee。将扣除后剩余的打回给bundle

  8. 最后再提一下erc-4337涉及到的三个新角色(接口):

    • 代付人 Paymaster。先前提到了用户可以在UO中选择要不要使用这样的角色。如果选择paymaster的话,那么图中最右侧入口点合约这部分就会在验证通过后调用出“代付人的钱包合约”。由代付人为用户支付gasfee。此功能可用于启用许多有趣的新功能以在以太坊上进行交易:

      • 应用程序开发人员可以轻松地为其用户补贴费用;

      • 用户可以使用 ERC-20 代币支付gas fee,由代付人完成erc-20 和 eth的转换

      • 用户可以使用信用卡或其他链下支付方式支付gas fee 等等

    • 钱包工厂 Wallet Factory。 这是一个创建智能合约钱包的合约。 当UserOpertion包含了Wallet Factory地址和新智能合约钱包的参数时,Bundler将触发相应的Wallet Factory使用指定参数创建智能合约。

    • 签名聚合器(Signature Aggregator)因为不同的智能合约钱包使用不同的签名算法,所以需要先将使用相同签名算法的UserOperations聚合起来,然后分别进行验证。此外,由于链上密码学计算会消耗大量gas,支持聚合的签名方案(如BLS)可以在链上验证过程中节省gas。

钱包合约是什么样的,entry point contract入口点合约是不管的,它的职能就只是做UO框架性的验证然后调用UO指定的钱包合约。这样以来具体的执行任务就被拆分出来 redirect到具体的钱包合约层面了。也就是市面上大家总会提到的 “4337将验证和执行拆分…“

(最神奇的部分来了!)

如果大家讲这两个流程放在一起对比…是不是惊奇地发现ERC-4337中间部分和传统EOA钱包发起交易是一致的!!新添加的是首尾(橙色字)的部分。(下图)

讲了这么多,如果你的思维和逻辑能一直跟到现在,那应该能很清楚地意识到4337是通过 1 在原始的EOA逻辑首尾添加新的模块和机制(上如图);2将交易的验证、执行拆分,以达到“自定义”的实现。

一段话总结就是:

ERC-4337自定义的环节:钱包持有者(交易发起方)的签名形式、账户形式、交易内费用支付形式,都会被bundler——一个EOA形式的账户打包签名…(毕竟以太坊共识只接受EOA作为交易发起方)。这就解决了自定义内容上链的环节。

上链后就到了具体执行的环节,考虑EVM角度接收到的只是一笔eoa发起的transaction。但这个transaction(bundle)内包含的多笔具体的UO才是真正需要被执行的,于是又设计了2个新的智能合约形式来验证、执行具体的交易。这又解决了自定义内容在链上被执行的部分。

至此,账户抽象理论上便可以根据个体的需求来任意定制,从而给普通用户一个不牺牲自我主权性和安全性且更流畅的用户体验。

账户抽象应用场景/优势

1. 通过去“助记词”,解决EOA账户的“私钥=单点故障”这个巨大痛点

前面提到过EOA交易逻辑是被硬编码/写死在以太坊共识层里的,任何人都无法修改替换:这里面包括了交易必须是一个外部账户发起,私必须用ECDSA形式签署交易才能生成签名。

而账户抽象因为是智能合约、具备可编程、自定义的能力,所以一个账户如何完成交易背后的逻辑是可以在智能合约代码中自定义的,不再是死在以太坊虚拟机里、只能通过使用单个私钥来验证的逻辑了。那么开发者可以指定由谁发起交易、以什么形式签名交易、在什么样条件下执行交易、以及自定义验证交易有效性的新逻辑判断:

  • 帐户恢复

    :在当下,这意味着用户的资产可能会被永远冻结。但通过账户抽象,用户可以设置一些预先批准的非私钥的方式进行验证和恢复账户,比如用自定义熟悉的web2 方式——邮箱/手机号/人脸/指纹识别/甚至web2社交关系 等方式来授权新设备并重置访问权限。

  • 帐户登录

    在上面的基础之上,如果每次登录用户都走一遍“邮箱/人脸识别恢复账户”,那么用户侧的体验就像熟悉的web2账户交互一样,完全不需要去助记词/私钥—…从而达到所谓的”干掉助记词“(这里不是真的干掉,只是用户体验不到助记词的痛)。

  • 多重签名授权

    用户可以在多个受信任的人或web2 设备之间共享授权。然后可以配置合约,以便超过某个预设值的交易需要一定比例(例如 3/5)的受信方的授权。例如,低价值交易由单个签名验证,高价值交易可能需要邮箱、手机和硬件钱包的批准,或分需要多位受信任家庭成员的签名批准。

  • 帐户冻结

    如果设备丢失或受到威胁,可以从另一台授权设备上锁定该帐户,从而保护自己的资产。

  • 设置交易限额

    指定每天/每周/每月可以从账户转移多少价值。这意味着如果攻击者确实获得了对用户帐户的访问权限,他们将无法立即耗尽所有内容,并且用户有机会冻结和重置访问权限。

  • 创建白名单

    只允许交易到您知道安全的特定地址。这意味着您的私钥被盗,攻击者也无法将资金发送到非白名单目标账户。这些白名单需要多个签名才能更改,这样攻击者就无法将自己的地址添加到列表中,除非他们可以访问您的多个备份密钥。

  • 欺诈监控

    一个账户可能需要第三方欺诈监控器作的第二笔签名,这个第三方欺诈监控器检查每笔交易是否存在已知欺诈、满足预定义的安全规则等。这个第三方不会控制用户的资产,只是交易批准特权。

这样一来,账户抽象便解锁了“钱包账户可以根据个体的需求来定制”的可能,从而给普通用户一个不牺牲自我主权性的、即安全又类似 Web2 般丝滑的交互体验。大大降低了互联网用户进入 web3 的门槛。

项目:

  • Genosis Safe其实就是最早的一款实现通过智能合约解锁逻辑抽象达到账户抽象程度的合约钱包。它通过添加多把私钥来解锁,实现了多个EOA共管一个合约账户的效果。

  • BLS Wallet和Argent也是使用多签技术(multisig)通过用户指定的多个EOA地址进行密钥恢复

  • UniPass实现了通过电子邮件进行社交恢复。用户在链上提交授信人的邮箱,并通过智能合约在链上验证邮箱的DKIM签名。DKIM(Domain Keys Identified Mail,即域名密钥识别邮件)是一种电子邮件身份验证协议,用于创建数字签名。UniPass还使用零知识证明对链上的用户信息进行脱敏处理。

  • Soul Wallet在链上验证受信任的邮箱地址以进行社交恢复。

2.Gas fee 的多样支付方式

先前提到了,传统EOA钱包进行交易时,需要用到主网 Token(ETH)作为 gas 费,比如外部钱包要在以太坊上交互的gas费只能通过钱包中的ETH来支付、在polygon上交易必须先有matic。当ERC-4337采用后,用户即使没有eth代币只有稳定币也可以进行交易——用户可以在UO中指定paymaster代付人合约来进行eth gas fee支付,然后自己以其他erc-20代币支付代付人。这样就有能达到用户使用账户中任何ERC-20代币来支付费用。

同时,通过paymaster第三方代付人,Dapp 开发人员也可以赞助交易并最大限度地减少新用户的入场摩擦。用户基本上可以在对“gas”一无所知的情况下使用 web3 应用程序。这将极大的降低Gas费给用户带来的使用门槛。

这边需要强调的是,账户抽象并没有消除支付 gas 费用的需要,它只是抽象出了用户如何以支付 gas 的细节。目前市场上所谓的无eth /无gas 的项目宣传,实际上指的也只是不再局限于eth作为gas fee(无ETH支付Gas费)/项目方可以选择补贴gas fee这部分。

项目:

  • 支付巨头 Visa 近日已经在以太坊 Goerli 测试网上部署了两组实验性 Visa Paymaster 合约,以展示如何重新设计区块链上的 gas 费以提高用户便利性。其中一个合约用来探索用户是否可以使用替代代币支付交易费用,例如美元稳定币,甚至是法定数字货币等;另一个支持为白名单用户完全赞助交易费用。

  • Biconomy、Candide和Soul Wallet都支持使用Paymaster支持无gas交易。

  • Soul Wallet也支持ERC-20 代币支付

  • UniPass 目前接入的 paymaster 还不支持 erc20;但有自己提供的 relayer 服务,项目方能代付,也能能提供 ERC20 支付

不过目前大多数ERC20支付gas的解决方案仅支持非常有限的代币类型(以稳定币为主)

3. 交易批处理(transaction batching)

原先 defi借贷,用户需要签名并支付gas fee三次——Token 授权、质押、借款,而现在账户抽象可以一步进行。通过批量交易,用户可以将多个操作合并到一个链上交易中,共同分摊一笔以太坊交易的gas fee,并降低与 dapp 交互的成本和复杂性。

除此之前,原先 EOA 的交易处理遵循先进先出 (FIFO) 的排序方式。假设你有两笔交易(A 和 B),Nonce分别为 0 和 1。你的交易B会一直等A被确认后才会被处理。A如果一直被卡住,后面的B会一直等。这也是目前用户在使用EOA钱包时“卡住交易”的一个重要原因。

账户抽象允许用户自定义并行处理多个事务。交易不再是先后顺序,而是并行进行。这将解决交易阻塞/卡住的问题,显著改善用户与 dapp 的交互。

项目:

  • Biconomy、Argent、Etherspot、Candide、Soul Wallet、Openfort和0xpass都支持交易批处理。

4.自动化运行

账户抽象可以实现自动化的操作。当用户设置交易条件后,达到相关条件,交易自动运行。这就可以实现类似自动化跟单、网格交易之类的原本只能在中心化交易所才能实现的功能。同样也可以实现支付宝的免密支付、按期订阅等。在游戏中,还可以设定达到要求后,自动授权签名,提高游戏体验。

综上所述,我们可以感知到帐户抽象有能力消除用户使用 web3 钱包和与 dapp 交互相关的大部分摩擦。这使 web3 更接近 web2 的理想状态——所有用户(包括新手和有经验的用户)都可以从相同程度的灵活性、安全性和易用性中受益。

Github 中汇总的账户抽象及衍生/相关项目(按首字母排序)

(大家感兴趣的可以去官网看看)

这边我简单过一下目前市场上比较主流的账户抽象项目、基建项目和在AA方面有较大进展的layer2:

1. 钱包项目:

2. 第三方基础设施:

账户抽象基础设施包括可以发送UserOperations的客户端SDK、打包器(Bundlers)、代付合约(Paymasters)和签名聚合器(Signature Aggregator)。这些基础设施通常由智能合约钱包自身实现,因此大多都不是为第三方使用而设计的。市场上也出现了第三方基础设施提供商来提供模块化和可定制的Bundler和Paymaster服务。一些知名的基础设施玩家比如Alchemy也进入了这个市场。

3. Layer 2:

鉴于最近L2公链的爆炸式增长,许多智能合约钱包也将开发重点转向L2公链。诸多layer2可以在诞生之初就在原生协议内设定用户账号都是智能合约CA形式,同时也可以发起交易,所以现在大趋势是新的链天然就是CA(AA)友好的。

  • Starknet

    与以太坊不同,Starknet所有的账户都是智能合约账户SCA(没有EOA)。Starknet 的账户抽象支持区块链层面的 2FA与任意代币支付 Gas 费。

Starknet的账户模型受到EIP 4337的很大影响,但 Starknet对账户抽象的实现和以太坊相比依旧存在显著的差异:

Starknet不区分常规交易和UserOperations,因为所有交易都是由合约账户触发的。在以太坊中,Bundlers执行UserOperation交易,而在Starknet中,序列器(Sequencer)执行所有交易。Starknet尚未实现类似Paymaster的交易手续费抽象协议。Starknet要求有代币余额的账户通过调用一个专门的deploy_account函数来创建新的合约账户。而在EIP 4337中,Bundler通过执行initCode参数不为空的UserOperation交易来部署合约账户,部署过程不必须有代币余额的账户,因为gas费可以由Paymaster代付。如果通过验证的交易在执行步骤失败,Starknet的序列器将无法抽取任何gas费,而以太坊没有这个问题。

更多细节可以阅读官方文档

zkSync的账户模型与EIP 4337 虽然有很多类似之处,但也存在很明显的差异:

zkSync允许validateTransaction函数调用已部署的外部合约,因为已部署的合约在zkSync中是不可更改的(immutable)。 以太坊禁止验证函数调用外部合约,以防止状态更改(state change)造成交易验证通过而交易执行失败。zkSync允许validateTransaction调用发出此交易合约账户的外部存储,例如合约账户在外部合约上的代币余额,理由同上。在交易验证期间,Paymaster可以调用外部存储,理由同上。

具体详情可阅读官方文档

随着Layer2的发展和账户抽象技术的成熟,相信我们会拥有更高的 根据需要迁移到不同签名 的灵活性。

市场现状:

目前支持erc-4337 的layer2和evm兼容layer1有这几条,上面的账户抽象账户数都处于很低的水平。这里面大部分还都是项目方自己的测试。这边没有显示zk是因为他们不需要通过4337就可以原生支持账户抽象。

每月的paymaster 付款数目(usd)

Bunder的盈利情况。就以太坊、optimism和BSC是盈利的。这里面大部分也都是项目方自己。

以太坊上的账户抽象账户数——一共39,这个月活跃的有10个 😂(证明真的很早期)

账户抽象目前的的缺点:

1. 高gas fee

智能合约钱包在链上运行,用到了昂贵的链上计算资源,所以需要花费比 EOA 钱包更多的gas fee

2. 兼容性问题

当将智能合约部署到某条链上时,将与该链(确切的说是该链的虚拟机)绑定,就无法适用于其他不同虚拟机(VM)的链。同时许多 Dapp 应用与智能合约钱包也不兼容

3. 复杂度带来潜在风险

首先,由于账户抽象的钱包合约和入口点合约都是智能合约,所以存在被黑客攻击的风险,这两个中任何一个合约出现问题都会影响甚大。

其次,随着账户抽象钱包的功能模块化组合 以及 新机制的不断增加,其代码执行逻辑会越加复杂,漏洞出现的风险也在加大。

可能的路线图:

(Vitalik 提出了账户抽象的可能路线图)

短期

  • 将 ERC-4337 全面投入生产。理想情况下,可以使用签名聚合功能对其进行扩展,以实现 rollup 友好性;

  • 应该有接入 ERC-4337 的易于使用的浏览器钱包;

  • 考虑实现签名聚合和压缩,以使 ERC-4337 对 L2 更加友好;

  • 在 L2 协议中引导 ERC-4337 生态,其中 gas 成本问题会较少;

中期

  • 实施 Verkle 树,添加 EIP 以降低 gas 成本;

  • 添加可选的 EOA-to-ERC-4337 转换;

  • 在提议者 / 建设者分离(Proposer/Builder Separation, PBS) 推出的同时或不久之后添加 crList 逻辑;

长期

  • 考虑强制转换,执行不规则的状态转换,将字节码部署到每个可能是 EOA 的帐户中,但这种方法的缺点是需要修改核心协议以及对于矿工 / 验证者来说成本很高。

(以太坊未来路线图 部分)

短期更多围绕如何将ERC-4337推广以及和roll up更好地结合,长期上考虑强制转换。最理想的情况是未来所有账户都是智能合约账户。

个人补充想法:

  • 账户抽象钱包可能需要更加合理的应用案例和巨大的场外增量才能得到大规模采用。

    现阶段各项目还是场内存量中挖掘需求,而老玩家们在经历过这么多的安全事件后最看重的是安全性而非易用性。加上目前多个项目的“无 Gas 费”宣传语也存在一定的误导性,其背后的逻辑只是允许用户使用 USDC 等非 ETH 币种来支付 Gas,或者项目方自己暂时性地补贴。账户抽象真的起来还要靠用户体验的完善和巨大的场外增量

  • 智能合约钱包正在成为趋势,细分赛道中还出现了其他竞争者。MPC钱包将私钥分散存储在多个设备中,通过多方计算实现无私钥、社交恢复等功能。例如,3 月 7 日宣布完成由 a16z 领投的 MPC 钱包 Capsule,通过引入可编程的 MPC 来扩展链上交易的使用场景。与此同时,拥有巨大用户基础的 Telegram 计划推出加密钱包,目前已支持在应用聊天界面直接交易 BTC、TON 和 USDT。这些竞争者也在争夺用户,并且在不断地推出新的功能和服务。

  • 帐户抽象可以通过多种方式实现,目前没有一种实现是整个行业的标准。

    首先4337并不等同于账户抽象,它是智能合约钱包的一个新标准。 目前的账户抽象钱包还无法摆脱对于需要EOA作为交易发起的依赖。原因之一是由于以太坊的账户抽象并不是原生的,这牵扯到以太坊的许多技术“债务”。但对于其他公链layer2来说,并不需要erc-4337这么绕,就可以实现原生支持账户抽象。

    再回到erc-4337这个新协议,它只是从技术上让keyless、无gas钱包客户端有更直接更简单的实现。但这些也并不是在4337之前就实现不了。只是需要通过更复杂的方式。

  • 未来账户抽象终局不一定就是erc-4337

    虽然ERC-4337目前因为它无需对以太坊协议进行大规模更改即可推进帐户抽象的实现而备受支持,但这还是一个非常初步的填和尝试。未来的最终方案并不一定就是ERC-4337。这个方案更多是一个重要的切入点,使得以太坊账户抽象普及这件事有了真实的可能。

  • 因此不可否认账户抽象这个市场还非常早期,但也正因如此,这个市场具备非常大的潜力。

    根据Web3Caff Research几个月前的一篇研报,以太坊中所有交易的发起地址(from参数)去重后的总数约为1.5亿。然而,截止到5月21日的数据以Gnosis Safe(138,325) 和Argent(75,233)账户的总和(这两个产品的用户最多)来估算智能合约钱包的总数,差不多21万。

    假设未来如vitalik所愿,EOA和智能合约钱包的数量相近,抛开场外增量对考量,我们可以预测智能合约钱包的市场规模有至少700倍左右的潜力。

    加上,现在像MetaMask这样的主流EOA钱包也开始探索ERC-4337。个人相信未来几年生态对智能合约钱包的采用会快速增加,从而推动整个账户抽象市场指数级的增长。

  • 未来随着增量入场,帐户抽象赛道会迎来自己的爆发。

    随着技术的成熟,账户抽象的安全性和确定性提升,无论是行业新人还是资深玩家都能根据需要迁移到不同签名方案,选择适合自己的灵活性。

结尾:

钱包一直被看作是进入Web3或加密世界的入口,因此Web3钱包的形式、门槛、功能也决定了行业发展的进程。智能合约钱包的推出,和账户抽象的落地无疑加速了行业的发展。

目前,ERC-4337的核心合约“账户抽象”已通过Open Zeppelin的审计,并将在每个以太坊虚拟机(EVM)上兼容,可用网络包括Polygon、Optimism、Arbitrum、BNB Smart Chain、Avalanche和Gnosis Chain。关于“账户抽象”的协议也在不断发展。这意味着,未来新用户将无需记忆复杂的助记词或具备钱包设置的相关专业技术,即可轻松进入去中心化的加密世界。

可以说,Web3正在朝着适用于每个普通人的方向转变。以太坊账户抽象协议的落地标志着一个智能账户的新时代已经开启。这对于加密钱包行业来说无疑是颠覆性的变革。

相信在一步步实现账户抽象的过程中,以太坊也会逐步变得更加灵活和面向未来。

纯研究分享,不作为投资建议。欢迎加Twitter一起探讨~

Twitter: 0xRJ_eth

subscribe://

Reference:

https://notes.ethereum.org/@vbuterin/account_abstraction_roadmap

https://medium.com/infinitism/erc-4337-account-abstraction-without-ethereum-protocol-changes-d75c9d94dc4a

https://www.theblockbeats.info/news/36322

https://www.panewslab.com/zh/articledetails/2tx7w80g.html

https://era.zksync.io/docs/dev/developer-guides/aa.html#introduction

https://notes.ethereum.org/@vbuterin/account_abstraction_roadmap

https://dune.com/johnrising/erc-4337

https://dune.com/niftytable/account-abstraction

https://www.theblockbeats.info/news/36322