账户抽象:再次兴起的背景、工作原理
贡献者: Hahaho@DAOrayaki
审核者:shaun @DAOrayaki
播客地址:https://m.ximalaya.com/sound/609315295?from=pc
简介
账户抽象的概念最早于2017年在协议EIP-86中提出,其目的是实现“交易来源和签名的抽象”。人类账户的改进是一项为期多年的实验。需要自我托管的钱包地址,既是用户在链上世界的「账户」,但又同时是阻碍用户进入Web3世界的一大障碍。
账户抽象使我们能够使用智能合约逻辑来指定交易的效果,费用支付和验证逻辑。这提供了许多重要的安全优势,包括多重签名,智能恢复钱包、无需更改钱包即可更改密钥的能力以及量子安全性。
账户抽象再次兴起的背景是怎样的,如何理解账户抽象中关于抽象的定义,其工作原理又如何?带着这些问题,我们今天特别邀请了来自AstroX的联合创始人Brutoshi,跟大家一起开启本期的播客话题:账户抽象,以太坊账户,去中心化的新路径。
主持人:Shaun
(DAOrayaki 负责人)
嘉宾:Brutoshi
(AstroX的联合创始人,深耕金融科技领域)
正文
Q:我们在聊账户抽象之前,可以先从以太坊现有的账户类型开始,那想请教您,以太坊现有的账户类型大概有哪些呢?它们大体是如何工作的?
大家持有的钱包在以太坊白皮书里叫EOA(Externally-owned account),简称外部账户,这属于正常用户的账户,被以太坊主链的外部主体持有,像Metamask或是硬件钱包Ledger创建的都是EOA账户。
对应的另一种账户,叫合约账户(Contract account),简称CA,CA只有在以太坊内部通过其它EOA或是其它CA创建,比如常用的DeFi协议Uniswap,Compound,Aave等等,用户可以与协议或合约账户进行交互,对代币进行一系列操作。
不过更常用到的还是EOA钱包为主。
Q:那EOA钱包对我们普通用户来讲,它都会有哪些优缺点呢?
我先解释一下EOA的工作特点,用户在用传统加密钱包生成钱包地址时都会获得一份12个或24个助记词,由助记词派生出对应的一个私钥或者多个私钥,这在生成与导入钱包时必不可少,这在以太坊体系里叫EOA钱包。依照运行环境不同有浏览器插件钱包,比如Metamask,Solana的Phantom。移动端有Tokenpocket,硬件钱包也包括Ledger,Treasure等等都属于EOA,即私钥唯一确定出公钥,公钥再算出账户地址,通过私钥控制自己的账户。其中的技术实现依靠非对称加密算法,这项技术在比特币诞生之前就已经比较成熟了,包括今天的电商也多采用这套加密手段。整个效果的实现还是非常便捷的,只要在用户端使用一个电脑或手机就可以生成一对公私钥。
但是有一个比较大的问题,就是账户与你的私钥硬绑定,某种程度上可以说你的私钥就是你的账户,如果私钥丢失你的账户也就丢失。举例来说,假设你有一套汤臣一品的豪宅,你的私钥就是你的家钥匙,如果你的家钥匙丢失,你也就无法访问的房子,或是你的钥匙泄露,别人也知道了你的钥匙长什么样,他就与你有相同的权限,就也可以访问你的房子,你也没办法换私钥,这就是今天这种传统钱包或EOA钱包最大的问题。
同时私钥的保管手段上也不是非常的便捷,如果你把私钥或助记词抄写到纸上放在某处,有可能出现失火或是长时间存留导致纸上的字迹淡化的情况。当然现在可以从网上买到私钥钢板将私钥进行保存,但目前这些手段都对小白或是普通用户不是非常友好,存在一定进入Web3的门槛。
另外几种钱包虽然现在普及度还不高,但和今天主题密切相关,叫智能合约钱包(Smart Contract Wallet),它是利用CA搭建的钱包解决方案,比如Argent,Gnosis Safe这种比较老牌的智能合约钱包,也有像UniPass Wallet这种华人团队项目,这部分后面可以展开讨论。
另一种钱包叫MPC(多方计算)钱包,它本质上也是EOA钱包,因为针对区块链来说,它的账户还是EOA账户,但是它的签名方式跟传统方式有所不同,它的私钥并没有在用户侧完成签名,实际上是把私钥分成若干个碎片,由用户保存多个备份或是与钱包提供方共同保存,多方完成计算。因为MPC是一个密码学概念,各方在不泄露自己的隐私的前提下,共同参与计算,得出结果,简单来说就是将私钥要打碎成两片或三片,每一方持有一个,不让对方知道的前提下可以共同计算,完成跟传统EOA钱包签名一样的效果,比较知名的产品比如Fireblocks,ZenGo,包括Coinbase去年5月份也推出了它们的半托管方案,用户自己有一份,Coinbase有一份,如果用户丢失备份可以联系Coinbase确认“你是你”,然后让Coinbase帮你恢复,但这相当于放弃了一部分自主性,Coinbase就会知道钱包持有者的具体身份。
大致是这几种方案,本质上也是EOA类型,有传统的,MPC的,以及基于区块链智能合约账户搭建的智能合约钱包。
Q:这让我想起了我初入这个领域的时候,当时申请Metamask钱包,因为我还算是互联网领域的一个“老鸟”,但在操作钱包,包括理解助记词这件事时确实也发现需要一些门槛和时间。而且我印象最深的是当时我没有把助记词当回事,后来真的丢失了,我也发现没有就真的没有了,无法找回。
事实上,丢失私钥或是助记词的事情在我身边很多人都发生过,包括一些从业者或是技术人员,你丢失的事情幸亏出现的比较早,所以你有警觉。因为钱包的安全性与便易性是有冲突的,大家在刚用的时候都会更倾向于易用性,除非有一天你碰到私钥丢失的事情,或是被盗了,那时你就会产生警觉。
我举另外几个例子,应该的去年12月份,分布式的老板沈波,他也是早在15年就给以太坊投了50万的OG,他在转币的时候钱包私钥泄露,被黑客监控了钱包,代币一到账就被转走,丢失了大约4000万美金的资产。还有另外一件事,发生在1月初,Bitcoin Core有一位开发者,因为自己的操作出现了一些问题,丢失了大概200多枚比特币。所以连这么早投资比特币或以太坊,或是像Bitcoin Core这种技术开发人员,都有可能会出现代币丢失的事件。
因为现在传统钱包的私钥像是一个单点故障 (Single point of failure),即使你犯了一个很小的错误,你钱包里的财产也无法找回。比如前几天Moonbird社区的创始人,因为被社会工程,误点了一个链接,导致将钱包授权给黑客,价值几百万的几十个NFT都被转走。
所以我觉得目前的钱包安全问题还是比较严重的,特别是去年发生的FTX事件,大家意识到交易所也是可以跑路的,于是大家就都想把资产尽可能自己托管,虽然作为从业者当然很希望大家这么做,大家也听说过Not Your Keys,Not Your Coins的说法,但实际上要想尽可能好的做到还是很难的,像前面提到的“老手”或是资深从业者都发生过丢币的事情,未来下个牛市进场的小白用户根本没有相应的理论基础和操作实践,即使有10%的资产丢失也是非常恐怖的,所以一定要解决这个问题。这也是如今抽象账户被频繁提及的原因。
Q:我看到实际上在2015年账户抽象的概念就已经出现了,但好像一直没有引起像今天这么强烈的关注,为什么账户抽象突然之间成为了一个业内讨论的热点话题呢?这种现象产生的背景是怎样的?
这是一个很好的问题,我从几个方面来讲。首先要讲的还是大环境,刚才我们讲到传统钱包的问题,对用户的影响还是很大的,还有其它方面的问题,比如Gas费模型,其实大多数小白用户对这件事情还是很难理解的,比如你在OpenSea上想买一个Polygon链的NFT,如果你没有Matic的话又无法操作,需要再去想办法弄Matic,这对很多新用户来说还是一个比较大的门槛。
此外大家也知道了账户抽象对应的其实就是智能合约钱包,它并不是一个全新的概念,其实在很早就有了,比较流行的比如Argent,其实在上个牛市,17,18年就已经开始做了,但是没有流行起来。此外智能合约账户其实是一个“二等公民”,它仍有一系列的问题,目前只是用在了DeFi与NFT领域上,目前其实是没办法通过智能合约实现资产管理的操作的。
而从以太坊的发展历史来说,以Vitalik为代表的人们很早就有一个愿景,就是希望用户拥有的是一个智能的账户,并不只是通过一个简单的签名就可以操作所有东西。最早在2015年,EIP101就已经设想了未来版本的以太坊账户体系设计,它的主要思想就是每个账户都应该有一个自己的代码(业务逻辑),但是因为这个方案改动较大,跟当时的以太坊的交易模型不是非常兼容,所以没有实现。
但是相关讨论每天都会有,包括以太坊基金会会提不同的EIP,比较知名的是2021年的EIP4337,2020年的EIP2938,它希望智能合约的账户能够自己付Gas费,以及执行交易,这在EVM里面是没办法操作的,因为在以太坊设计里,必须有一个外部的账号发起交易,支付Gas费,交易才可以完成。但因为当时以太坊的目标是要去先完成ETH2.0升级,所以这个EIP也就被搁置。直到2021年,Vitalik提出了一个比较巧妙的方案,这个方案并不需要修改协议层,利用了已经流行起来的Flashbots产生的架构,然后采用一个定制的Mempool去搭建一个基础设施,实现了把账户抽象的交易验证从协议层抽离出,放在了应用层,这个应用层其实是一个以太坊基金会发起的标准,大家如果要做新的智能合约钱包的话,就要遵循这个标准。所以我觉得以太坊基金会制定标准这件事一直做的很好,就像在2017年的ERC20(代币标准),NFT的ERC721,账户抽象的EIP4337,其实现在应该叫ERC4337,因为它已经进入了下一个实现的阶段。
这就是大概的历史背景,首先有大的环境,传统钱包的对普通用户的的门槛,而且不安全。二是以太坊基金会很早就希望用户的账户可以有能力执行一些逻辑,这个逻辑可以让用户来选,或是应用开发者来实现,实现更多的可能性。所以这个方案并不是最近才火的,而是经过很多年的不断讨论,不断的技术更迭,最后落到了EIP4337。
Q:如果把账户抽象理解成两个词组,账户和抽象,那怎么理解抽象的定义呢?
抽象在计算机科学里,就是指从一个大块抽出相关的部分,分成小部分。用另外一个词来解释的话会更好理解,其实就是模块化。我举一个例子,TCP/IP,也就是网络协议,是互联网的基础,它其实是四层协议,再早之前有个叫OSI七层协议,它们就是比较典型的抽象的例子,它不是把所有的代码在一个地方完成,而是每一层完成一部分,之间有一个比较明确的接口的定义。如果没有技术背景,可以就把它理解成模块化。
Q:那像这种模块化的账户,它与现有的账户相比会有哪些优势?
我们回到刚才讲的问题上可能会比较好解释,EOA(传统钱包)的功能逻辑是写“死”在以太坊虚拟机(EVM)里的,然后做出判断,第一个判断是确定交易是不是由私钥持有人签名,也就是确认签名是否“正确”,第二是确认账户里有没有足够的Gas费,第三个判断是Nonce,可以把它理解成计数器,用来防止重放攻击。这三个逻辑都要经过判断,Check一下,都完成了才会判定这是一个合理的交易,完成打包发送到区块里,完成交易。
而账户抽象可以将刚刚提到的判断抽象出,交给开发者,也就是让开发者定义账户做什么,其实就是用一种可编程的方式来设置验证交易有效性的标准。有了这个功能,开发者就可以通过验证非私钥的方式进行验证,实现更多很“酷”的功能。
此外账户抽象的名词乍一听可能会觉得非常“高大上”,事实上它就是智能合约钱包。所以从某种角度上来说,还是要赞叹Vitalik的造词能力,我举另一个例子,就是去年提出的SBT(SoulBound Token),实际上它就是一个不可转让的NFT,但如果当时就叫它不可转让NFT,大家又可能会觉得比较“无聊”,但如果说SBT,灵魂绑定代币,格局就完全不一样了。
所以账户抽象某种意义上就是用智能合约管理账户的能力,不用想的过于复杂。
Q:那么它会有哪些实际场景的用例呢?会和什么实际场景结合?
具有账户抽象能力的钱包账户,其实可以理解为它的账户就是一段图灵完备的代码。就像为什么人们会说以太坊是对比特币的一种“超越”,就是因为以太坊区块链可以运行智能合约,除了比特币也可以进行的转账活动,还可以做很多业务的判断,它是图灵完备的。但是今天的以太坊链上的账户是没有图灵完备能力的,只是合约具有图灵完备能力。所以如果能在以太坊上实现账户抽象,那么我们的账户就有图灵完备的能力,实现智能合约可以实现的一系列业务逻辑。那能够做哪些事情呢,我们一个个来看:
我们前面讲到传统钱包存在比较大的安全隐患,就是如果丢失了私钥,资产也就消失了,它是一种单点故障,一个微小的失误就会导致很大的损失。这时我们就可以引入多方验证,就像我们在传统互联网中,如果想登陆银行账户,需要输入手机收到的验证码,这就叫做MFA(多因素验证),通过引入这种方式升级账号,比如授权其它的私钥操作自己的钱包进行交易;还有一种功能叫做社交恢复,它的能力是如果你常用的私钥丢失,但是在丢失之前我已经授权了几个人(可以设置是谁,或几个人),那么我就可以联系这几个人帮我进行恢复。就像我们前面举的例子,如果你的豪宅钥匙丢失,通过这种方式就可以实现“换”钥匙,你还拥有豪宅的使用权限。
但这一点还是与前面提到的中心化交易所的半托管方案是天差地别的,也就是Coinbase的例子,因为通过账户抽象实现的这种功能,无论你授权给谁,仍然是可以将授出的权限收回,整个资产还是被用户所最终控制。虽然很多用户进入Web3是通过中心化交易所的路径,确实它们的体验现阶段也非常的好,但仍然无法完全排除其作恶的可能性,毕竟是由中心化交易所控制着你的资产,不是跑在智能合约上。通过将传统钱包升级成账户抽象的钱包就可以更加的安全。
第二个场景就是可以将账户配置给不同的角色或不同的支出策略,不同的人实现共同管理,比如一个公司或是DAO组织,不同的角色有不同的支出权限,比如财务部门或是普通出纳人员,有不同的支出限制,CFO可以随便花,超过一定金额需要一个更高级别的人的授权,出纳可能需要每个月发一次工资,或是DAO组织内部需要投票,可以拿去Snapshot里投票,但是不可以用来转账等等一系列复杂功能。
还有一个场景是刚刚谈到的Gas费,原有模式可能会影响用户的体验,造成一个门槛。而引入了账户抽象就可以支持多种支付方式,也就是不需要你的钱包账户里一定要有链上的原生代币,可以直接扣除钱包里的其它财产。或是由另一方代为支付,可能另一方是游戏开发商,或是社交类,这样的话就很大降低了门槛。
此外还有批量授权和交易的场景。如果大家与链上的DeFi协议交互过的话都知道,要完成一步步的繁琐操作,比如你想去Compound里质押借贷,至少要完成三个步骤,首先要授权Compound的合约,然后将代币进行质押,最后根据质押率进行借贷,每一步都要进行确认与操作交易,耗费Gas费。但如果可以将三步进行打包,只需要签一下就可以对应三笔交易操作,便捷的同时也节省了Gas费。
上面提到的功能在一个应用里已经比较好的实现了,就是Lens Protocol,它是一个去中心化社交图谱协议,主要运行在Polygon上。它做了一个比较有意思的创新设计,就是通过调度器的设计,用户可以签名授权给另一个账号,Lens Protocol也会为这个账号垫付Gas费,所以使用Lens Protocol进行一些社交功能是不需要交Gas费的,同时你的互动它也会写到链上。目前Lens Protocol已经处理了超过400万笔交易。
此外,如果在游戏场景中,有时你可能不希望被打断,可能希望在10分钟或是一个小时内,所有的交互由游戏开发者帮忙代行操作就可以,因为游戏游玩过程不会涉及到数量较高资产的操作,那么就可以设置一个时间段,做一个临时会话,生成一个会话密钥 (Session key),就不会被打断。
最后一种使用场景也是以太坊基金会经常提到的,就是通过账户抽象实现以太坊签名算法的升级,因为如果某一天量子计算机问世,它强大的计算能力可以攻破目前以太坊使用的ECDSA(椭圆曲线签名),而实现账户抽象后,就可以将签名算法进行模块化升级。
Q:那么如何不用过多技术层面的的词语,较简单的解释账户抽象的工作原理呢?
我们所说的账户抽象的原理,其实都是围绕着ERC4337的协议标准来讨论的。这个标准是由Vitalik跟以太坊基金会的一些开发者提出,它最大的一个特点就是不需要改底层的协议,不需要改EVM。
它利用了一个定制化的Mempool(内存池),你可以把它理解成一个还没打包的交易,在某个地方停留的状态,有点像坐火车(一个个区块),上车就代表这个区块写“死”了,在你没上车之前,你必须在候车室等待,而Mempool可以通过写一个智能合约,用户再通过User Operation的标准进行操作,调用刚才谈到的开发者定制的模块化验证手段,来确认这个交易是否合理,如果通过就会把交易写进区块。
具体的技术实现比较复杂,大家可以去看我之前写的一些科普文章。简单来说就是不需要更改EVM,但仍然还有很多工作要做,某种程度上是借助EVM运行起来的。
Q:既然谈到账户抽象和多方安全计算,因为我们前几期播客也有Cover相关的话题,包括MPC,隐私计算,包括DAOrayaki也有从事量子计算方面的研究。所以我们也讨论过当量子计算真正推广到民用阶段的时候,会不会就把目前整个区块链的底层打破。所以您怎么看待账户抽象和多方计算的技术结合呢?
我们刚刚简单讲了一下MPC钱包的定义,这里再重复一下,本质上它还是EOA钱包,但是私钥并不是在用户客户端完成签名,实际上是把私钥打成了多个碎片,碎片由用户或是MPC提供方各持有一部分,最终多方完成计算跟加密,当你需要签名的时候,几个碎片就拼接起来完成整个私钥的计算,这里面它的核心思路就是分散控制权,进而达到分散风险的目的,避免单点失败。
举例来说,一个私钥分成了三片,那对黑客来说它就要分别攻破三个人,难度就骤然上升。所以核心原理就是分散,那实现的方式就是通过算法,其实有不同的算法,有些算法发展较早,现在已经比较成熟,它会真的分成碎片,之后可以重构出一个私钥,这个私钥会在一定时间内,在某个计算环境中保持完整的状态。
还有一种最近提的也比较多,它实际上是利用了门限签名(TSS),它不会重构出私钥,它利用了比较高级的密码学原理,私钥并不会在某个计算环境里面保持一个状态,你可以理解成一个网络,这个网络由多方进行轮回的计算,这种方式会更安全,但是会有一些计算时间的问题。
其实MPC最近也比较火,因为大家也意识到了一个大前提,就是钱包真的很不安全,要么走智能合约的方向,要么走MPC的方向,刚才也举了Coinbase的例子,其实Coinbase之前也有很多成熟的公司,有个叫Fireblocks的公司也已经做了很多年,也有一定的这个市场。
其实MPC钱包跟智能合约钱包各有利弊,先说账户抽象的弊端,最大的弊端就是账户抽象钱包的兼容性问题,因为它依赖于智能合约,而智能合约是部署到某一条链的,所以它跟这条链绑定,如果部署在以太坊上,那么像BTC,Solana就无法支持。或是EVM也有很多种,Layer 2上的比如Arbitrum,Polygon,如果没有部署好也会有一些安全性问题。
第二个问题,就是账户抽象钱包,它的运行逻辑是跑在链上的,所以就又回到了Gas费的问题,因为它的计算要消耗链上计算资源,所以它的Gas费肯定比传统钱包要高。所以账户抽象钱包可能在以太坊主网上还需要一段时间发展,因为以太坊主网的Gas费目前也比较高,在目前的阶段,还有好多的工作要做,那它肯定会先在Layer 2上落地发展。
而MPC正好解决了这两个弊端,第一因为它的私钥是在链下完成,所以它天然支持不同的链,它只要支持对应的加密曲线算法就可以,大部分是由ECDSA椭圆曲线签名来支持,所以它有更好的兼容下。二是它在算的过程中不消耗Gas费,因为它是在链下完成计算。
但是这也衍生出了一个很大的问题,就是你需要相信MPC的提供方,相信第三方提供的计算能力,比如ZenGo自己也表示,如果它们的服务器出现故障,那服务也是无法继续的。包括Coinbase如果有一天受到了政府的通知,说要封停某个账号,它也可能会停掉。所以这种方式是在某种程度上牺牲了去中心化。
说到这里我也正好介绍一下我们的项目AstroX,因为在分析过这些情况后,我们觉得会有一个更好的方案,这个方案可以把账户抽象与MPC的优势都结合起来。我们的创新就是用第二条链来完成整个密码学流程,实际上就是把MPC的优势用智能合约跑在一个独立的链上来完成密码学计算。同时因为它是独立于目标链的,所以它对于目标链来说还是一个EOA,能保证兼容性,此外我们也支持智能合约钱包,实现了公链上的可组合性。所以我们的方案就是选了一些密码学能力较强的公链,在上面搭建一套计算模型,来支持不同链的私钥管理,同时实现跨链的账户抽象钱包的能力。
Q:最后我们聊一个开放式话题,您怎么看待账户抽象对未来Web3行业发展的影响?
我认为,账户抽象不仅仅是为了叙事而叙事,因为前面也聊到这个概念早在15年就已经出现了,我认为这个方案其实是Web3应用获得更大规模用户的先行基础。因为Web3能实现资产的自我掌控,但是用户体验不好,而Web2的体验服务很好,但数据资产不属于你。所以我觉得如果账户抽象如果能够实现,就可以将两者优势结合起来。比如在智能手机出现之前,互联网就已经存在多年,但直到智能手机真正出现,每个人都可以随时随地的上网,才真正有机会把互联网推向了更大规模的社会应用,改变了人类社会。所以我觉得我们目前还处于一个传统钱包的功能有限的“诺基亚时代”。
或者用另一个比喻,比如汽车,最早时候的汽车安全性不高,因为没有那些安全标配,安全带,气囊或是ABS系统,但汽车是实际意义上的将安全责任交给了用户,那后面就可能会出现很多意外,所以现在有了法律上要求一定要绑安全带。同理钱包也是一样,我们可以自己控制自己的资产,但是责任太大,所以有了账户抽象,我们就可以不断补充比如社交恢复,多签的设置,将其变成“标配”,有了标准,行业也会更好的发展。所以我们觉得这是一个很大的机会。
此外还有一个我的感触,就是现在钱包产品领域的竞争仍然很激烈,甚至不亚于Layer 1公链的竞争,而公链的竞争是底层基础设施上的竞争,而钱包是面向用户。包括最近也有消息称Opensea和Uniswap都要做自己的钱包,说明它们在获得了原有用户的基础上也在考虑扩大受众,这也会挤压传统钱包的市场空间。
但我们也觉得未来是一片光明的,因为现在还处于“诺基亚”时代,而且像EIP4337这种标准,以太坊基金会一推出,大家就会又回到同一起跑线。像现在大家会经常用Metamask,如果它们不思进取,很可能就会被后来者超越,所以对于从业者来说还是有非常多的机会的。所以也很期望跟社区的小伙伴,同业者们一起交流,发掘共建新的场景,我觉得在熊市做Builder是很好的,所以在熊市里大家要多抱团取暖,做更多的事情。
总结
谢谢Brutoshi老师的分享。
账户抽象值得大家期待的原因, 不仅是因为它会显着增加链上用户数量, 还会给开发者带来极高自由度去解决当前账户体系的痛点,创造新的应用、玩法和想象空间。
尽管类似像EIP-4337这样的折衷方案仍然存在gas高、兼容性差等实际问题,但大力推广EIP-4337也是概念推广和共识增强的一种选择。
随着概念的普及,账户抽象和合约钱包将从小众走向主流,从用户需求出发推动协议兼容,形成新的账户范式。最终,在广泛共识下,以太坊具备了直接更改底层代码实现账户抽象的条件。这种新的账户体系将更有利于为web3吸引新的用户和流量,刺激生态的蓬勃发展,从而形成良性循环。