随着web3世界迎来更多的用户,把钱包打造得更为安全和易用是开发者们不得不解决的问题。现有的自我托管钱包账户在赋予用户资产自主权时,却存在不安全以及难以使用的问题——小白用户面对天书一样的私钥地址和借记词往往不知所措,资深行业人士也常常被“钓鱼”以及黑客攻击从而损失大额财产。
账户抽象是以太坊钱包的一种技术解决方案,这几年一直被频繁提及,它的主要思路是让账户具备图灵完备的能力,让账户在赋予用户资产自主权等优势时,也能够像web2的账户那样,安全并且对用户友好。
我们在web3的世界一直在谈论“去中心化”以及“权利的普及”,但是很重要的一条原则是产品要做到易用,对普通用户都足够友好,才能够真正实现去中心化,才能够帮助权利去普及。
EOA与单点失败风险
分布式资本是以太坊早期投资人,照理来说,对区块链账户风险有较强的把控能力,但就在2022年11月23日,合伙人沈波表示,“个人常用894结尾钱包,共4200万美元价值资产,其中包含3800万枚USDC,在纽约时间11月10日凌晨被盗”,沈波表示,已经报案,FBI与律师均已介入。
接着,就在在1月份,一些资深技术人士也丢失大额资产。BitcoinCore有一位核心开发者,被疑似来自北朝鲜的开发者攻破了服务器,盗走了私钥,丢失了200多枚比特币;moonbird的创始人KevinRose就因为误点了一封钓鱼邮件,就丢失了几十个价值几百万的NFT。他以为这封邮件来自opensea,但是实际上是来自黑客。
理解技术和风险的行业资深人士都会频繁丢币,还是和目前区块链主流钱包的设计有关。
目前以太坊用户经常使用的,例如metamask小狐狸或者是硬件钱包Ledger,都是属于以太坊外部账户,简称EOA,根据使用环境钱包,EOA可以分为以下几种:
插件钱包:有浏览器插件钱包,Metamask,trustwallet,或者是Solana链上的Phantom;移动端:华人较常使用的TokenPocket等;硬件钱包:最知名的Ledger,Treasure等;EOA钱包之所以成为用户的重要选择有其固有的优势——用户掌握自己的私钥,就掌握了资产的自主权。对于用户来说,最大的便捷就是,不再需要依赖银行等机构,在任何一个地方都可以生成一对公私钥对,从而掌握自己的资产。在去年FTX暴雷事件中,交易所跑路卷走用户资产,就是因为资产实际上交给了交易所,“notyoukey,notyoucoin”也是加密货币领域一条重要的资产原则。
这种钱包最重要的逻辑就是依据非对称加密算法,获得一串公私钥对和自己的资产相绑定,逻辑如下:
私钥,只有自己知道,是一串随机的字符串;公钥,是公开的,由私钥经过一系列数学运算得出,而这个运算过程不可逆,知道公钥的人无法倒推出私钥;但风险也是在这里——巨大的单点失败的可能性。我们在web2中使用的账户,往往和手机号、身份证等多重信息绑定,如果忘记了密码,我们可以通过获得手机验证码等手段,找回密码。但是在EOA的钱包中,唯一和私钥相绑定的是12个或24个助记词,一旦用户丢失了私钥或者是助记词,钱包就无法恢复,资产就无法找回。
可以用个简单的例子理解这种单点失败的风险,假设你拥有一套上海汤臣一品的豪宅,但是你丢失了它的钥匙。在web2的账户世界,你可通过换锁来重新进入这套豪宅,因为房产证等在现实世界拥有法律效力的信息帮助你与这套房产锚定;但是在web3世界中,一旦你丢失钥匙,你就不能再进入这套豪宅,一旦其他人捡到了你的钥匙,这套豪宅就归他所有。
因此,web3真正走向大规模应用时,行业的开发者们必须一定要解决账户的安全性问题——假设用户成倍增大,这些风险也随之放大。
沈波在丢失巨额资产后,在当时的推文中表示:“文明与正义终将战胜野蛮与邪恶,这是人类社会的铁律,只是时间问题。”
MPC钱包和放弃部分自主权
在web3世界,相信codeisthelaw的领域中,技术迭代往往在解决问题中扮演了更重要的角色。
为了规避这种单点失败的风险,开发者们提出了MPC钱包。它本质上也是EOA钱包,但是它的签名方式跟传统方式有所不同——私钥并没有在用户侧完成签名,而是打碎成若干个碎片,由用户保存多个备份或是与钱包提供方提供方共同保存。当你需要签名的时候,几个碎片就拼接起来,经过计算,重构出整个私钥。
核心思路就是分散控制权,进而达到分散风险的目的,避免单点失败。举例来说,一个私钥分成了三片,黑客就要分别攻破三个人,难度就骤然上升。
比较知名的产品比如Fireblocks、ZenGo,包括Coinbase去年5月份也推出了它们的半托管方案——用户自己有一份私钥,Coinbase有一份,如果用户丢失备份,可以联系Coinbase确认身份,让它帮你恢复——但这相当于放弃了一部分自主性。
因此,衍生出了一个很大的问题,就是你需要相信MPC的提供方,相信第三方提供的计算能力。比如ZenGo也曾表示,如果它们的服务器出现故障,那服务也是无法继续的。与此同时,还有受到监管机构封停账号的风险。
开发者们一直都在寻求更为灵活的账户解决方案。
合约账户和账户抽象
在以太坊生态中,除了EOA和MPC钱包,还有另一种账户叫合约账户,简称CA。相比EOA账户是用密钥控制,合约账户是用智能合约的代码控制,比如常用的DeFi协议Uniswap、Compound、Aave等等。但是从目前情况来说,CA账户能力非常有限——它不能主动发起交易,只能作为一笔交易的回应去发起交易,所以通常CA账户都是和EOA账户一起使用,因此,以太坊开发者们一直在寻求技术解决方案,账户抽象就是一种。
理解账户抽象,需要从EOA钱包的工作原理来理解账户抽象,对每笔交易,EOA账户需要做以下三个判断:
第一个,确定交易是不是由持有私钥的人签名的;第二个,确认账户里面有没有足够的气费,因为转账需要气费;第三个,确认nouns,可以理解为计数器,防止双花攻击;在EOA钱包中,这些判断逻辑是写死在协议层的,也就会带来上述的EOA钱包的单点失败风险,而账户抽象的思路就是用一种可编程的方式来确认交易是不是有效,可以让开发者用验证私钥之外的其他的方式来认证交易。
实际上,Vitalik等以太坊的开发者一直希望用户的账户具备图灵完备的能力,为用户提供更多服务,这几年在多个以太坊改进协议中被提出:
EIP-86:由VitalikButerin在2016年提出,引入了智能合约的概念作为“转发合约”,并且只接受来自“入口点”地址的交易,任何人都可以从该地址发送交易,只要遵循特定格式。这需要对以太坊协议进行重大更改所以被放弃了。EIP-1014:VitalikButerin于2018年提出,它采用了EIP-86的核心思想,并促成了CREATE2操作码的创建,使得开发者能够预测将部署合约的地址,而无需实际部署它。这一点很重要,因为要让智能合约钱包发挥作用,必须确保智能合约地址在所有EVM链上都是相同的,即使它没有同时部署到所有这些链上。EIP-2938:由VitalikButerin、AnsgarDietrichs和MattGarnett于2020年9月提出,希望让智能合约的账户能够自己气费,以及执行交易,在当时的以太坊设计中,必须要有一个EOA账户发起交易以及支付气费才能够完成。这是一个巨大的协议变更,需要对以太坊的协议层做较大的改动,但是当时以太坊最重要的事情是完成合并,这个提案被暂时搁置。EIP-4337:Vitalik等人提出了账户抽象,AccountAbstractionviaEntryPointContractSpecifications,这个方案不需要修改协议层,利用了已经流行起来的Flashbots产生的架构,然后采用一个定制的Mempool去搭建一个基础设施,实现了把账户抽象的交易验证从协议层抽离出,放在了应用层。但是虽然在应用层,它还是属于一个技术标准,新开发的智能合约钱包们应该遵循这个标准。抽象在计算机科学里,就是指从一个大块抽出相关的部分,分成小部分,可以理解为“模块化”。举一个例子,网络协议TCP/IP,是互联网的基础,它其实是四层协议,它就是比较典型的抽象的例子,它不是把所有的代码在一个地方完成,而是每一层完成一部分,之间有一个比较明确的接口的定义。
新的协议和新的场景
以太坊几次大的繁荣,往往和标准的确立有关——2017年ICO的繁荣是因为ERC20代币标准的确立,而这几年NFT的繁荣则是因为ERC7721,而这一次账户标准的确立,也会给以太坊带来新的生命力。
多方验证:合约账户通过账户抽象方案,具备图灵完备能力之后,就能够加入其他的验证要素。例如授权另一个私钥去验证账户,这个私钥可以是自己持有的另一个私钥,或者是朋友家人持有的私钥,甚至是机构持有你的私钥,解决了EOA账户单点失败的风险——不会在丢失私钥之后就丢失账户里全部的资产。
值得注意的是,这种账户抽象的多方验证功能,与同样拥有多方验证功能的Cobinbase的半托管钱包方案不一样。通过账户抽象实现的这种功能,无论你授权给谁,仍然是可以将授出的权限收回,整个资产还是被用户所最终控制。但是半托管的方案中,是由中心化交易所控制着你的资产,账户不是跑在智能合约上,不能排除中心化交易所作恶的可能性。
为不同角色设置不同的支出策略:具备图灵完备能力的账户能够让多人共同管理账户,达到传统金融账号的能力。举个例子,在一个公司或是DAO组织,为不同角色设置不同的支出权限,比如普通出纳人员每个月可以发一次工资,CFO可以随便花,超过一定金额需要一个更高级别的人的授权。或是DAO组织内部需要投票,可以拿去Snapshot里投票,但是不可以用来转账等等一系列复杂功能。
更便捷的气费支付场景:以太坊在转账时通常需要支付气费,过去经常会遇到支付不方便的问题,比如在Polygon的链上,你需要Matic代币,但有时候你恰好没有这个代表,就需要去换。除此之外,很多时候新手也不知道该如何支付气费。引入抽象账户之后,就可以用账户里其它代币支付,甚至是由另外一方代为支付,可能另一方是游戏开发商,或是社交类产品帮助用户支付,从而大大降低了用户门槛。
授权批量交易:举个例子,在跟链上的DFI交互时,通常需要完成很多操作,例如在compound上质押altcoin,借出usdc,至少要完成3个操作:首先授权compound合约能够调用该用户的altcoin;第二步要把altcoin存到compound的合约账户;第三步会根据质押率算出你能借出多少usdc。过去,这三步每一步都需要弹出确认,在账户抽象中,这三笔交易可以打包成一笔交易,不仅增加了便捷性,同时节省气费。
这个场景最近在去中心化协议Lensprotocol上有较好的体现。Lens用以太坊的账户做社交图谱里的签名,在其中设计了一个dispatcher调度器工具,用户可以把一个签名权限委托另外一个账号,这样,在lens上的社交互动都是写在链上的,同时lens作为产品方可以代付气费,大大降低了用户的使用门槛。
会话密钥:在链上游戏场景中,经常需要你批准某个功能,但是有时你可能不希望被打断,可能希望在10分钟或是一个小时内,所有的交互由游戏开发者帮忙代行操作就可以,因为游戏游玩过程不会涉及到数量较高资产的操作,那么就可以设置一个时间段,做一个临时会话,生成一个会话密钥?(Sessionkey),就不会被打断。
Web3行业的新开端
账户抽象也并非没有弊端,它最大的弊端就是兼容性问题,因为它依赖于智能合约,而智能合约是部署到某一条链的,所以它跟这某条链绑定。如果部署在以太坊上,那么像BTC,Solana上的交易就无法支持。
第二个问题是费用问题。账户抽象是跑在链上的,它的计算要消耗链上计算资源高于传统钱包。目前以太坊主网的Gas费目前也比较高,所以账户抽象钱包可能在以太坊主网上还需要等待一段时间,会先在Layer2上落地发展。
相比传统方案,比如MPC,账户抽象有时反而显示出了弱势。MPC私钥是在链下完成,所以它天然支持不同的链,它只要支持对应的加密曲线算法就可以,大部分是由ECDSA椭圆曲线签名来支持,所以它有更好的兼容下。其次,它在算的过程中不消耗Gas费,因为它是在链下完成计算。显而易见的是,不在链上的那部分就存在信任风险。
因此,一些新的项目,比如AxtroX,会选取包括账户抽象、MPC等各种技术方案的优势,提出全新的方案——把MPC有信任风险的那部分在一条独立的链上完成,完成密码学的计算。简单来说就方案选了一些公链,在链上搭建了这一套计算,来去支持不同的链的这种私钥的管理,同时就实现了这种跨链的账户抽象的能力。
我们在web3世界里经常谈论去中心化,谈论权利的普及,但是背后有一个不能忘却的道理——只有把产品做到容易使用,符合小白用户的使用习惯,才能够帮助权利去普及,才能够真正实现去中心化。举个简单的例子,在1990年代,打开电脑一个纸牌游戏,都需要写代码,写basic语言,和机器交流的权利实际上掌握在会写代码的人的手上;到了90年代后期,微软发明了图形界面系统,人们点击电脑里的图标,就能够打开网页——使用电脑的门槛大大降低;到这几年AI迅速发展,到chatgpt出现,人们用自然语言就可以和机器交流。如果把和机器交流,获得知识信息看作一种权利,那么这就是一个权利普及的过程,人们为之努力了几十年。
对于web3来说,现在还处于需要写basic语言的时代,而像EIP4337这种标准一推出,开发者们又回到同一起跑线,现在的巨头Metamask等如果不思进取,很可能就会被后来者超越,所以对于从业者来说,这又是一个新的起点。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。