发布时间:2022-10-26 07:42:21 文章来源:互联网
微博 微信 QQ空间

账户抽象算是最热的几个话题之一?

在刚刚结束的 Devcon 上,账户代表是最热门的话题之一。最近,AA / EOA / SCW / 4337等缩写和代号经常出现在各种谈话、小组和信息流中。再加上叙事开始朝着“Onboarding next billion users”的方向发展,一些新的形容词也开始出现在产品之前,例如无种子/无气体/社会恢复/非托管。相信看完这两句话,你已经开始头疼了,所以我尽量帮你理清这个词的概念代表什么。

阅读前:本文不是一份严肃的技术文档,可能会使用不精确但易于理解的语言进行讨论或隐喻。欢迎您以此为起点来探索这项技术的细节。

EOA中文称为外部账户,我们最熟悉的MetaMask生成的地址就是EOA。其特点是原理简单,例如生成规则为:

私钥 → 公钥 → Keccak256 哈希 → 最后 20 字节 → 十六进制字符串(EOA 地址)

可以看出,这个规则很直接,都是通过物理变换来估计的,生成的地址里面没有任何结构和逻辑。当节点验证交易是否得到地址所有者的授权时,也有固定的规则:

交易签名→ec_recover→公钥→(由上一条规则生成)地址→比较要操作的地址

如果比对结果一致,则验证通过,进行后续处理;

EOA的另一个设置是充当交易的发起者并支付gas,对应的CA(合约账户)只能被其他CA或EOA调用。也就是说EOA是交易的触发器。无论交易前有多少合约调用,它都必须由 EOA 发起并支付足够的 gas 才能继续进行。

需要强调的是,EOA 是一个仅存在于以太坊和其他 EVM 兼容链(或类 EVM 链)中的概念。严格来说,包括 BTC 在内的主流非 EVM 链都没有这个设置。

CA中文称为合约账户(也称为内部账户)。我们常见的 ERC-20 代币合约、DeFi 商业合约等都有一个和 EOA 很像的地址,也就是 CA。

在设定上,CA是以太坊世界的原住民,EOA和ETH是CA业务逻辑的触发器和燃料;在实际使用中,以太坊上除 ETH 外的所有资产都由 CA 承载,DeFi 等业务逻辑均由 CA 实现。但是,CA无法主动运营和支付gas的设定也限制了其能力。早在 2016 年,就有提议允许 CA 自行支付 gas 费用。

简单来说,CA就是一个有内部逻辑的以太坊账户,既可以是业务逻辑(Token合约用于记账,质押合约用于借贷清算),也可以是账户逻辑(如multi - gnosis 安全的签名逻辑)。),而后者就是我们要讲的“SCW——智能合约钱包”的概念。

CA的地址规则是通过估计生成的,有CREATE和CREATE2两种形式,这里不再展开。您只需要记住 CA 和私钥之间没有必要的对应关系。例如,在 gnosis safe 创建的 CA 中,您可以设置任意数量的私钥来解锁其地址对应的资产;当然,CA 也可以不设置任何密钥。,但是否可以解锁是由其他CA的逻辑决定的。例如,在 DeFi 借贷合约中,质押的资产只有在钱还清后才能收回。

智能合约钱包最好从字面上理解,也就是以CA为地址的钱包方案,而我们常用的EOA钱包方案就是使用前述的私钥转换结果作为地址。由于其内部逻辑,智能合约钱包可以实现许多EOA无法实现的功能,例如gas支付、批量交易、权限管理、离线授权、社会恢复等。

下面举几个例子来展示智能合约钱包的扩展潜力:

Gnosis safe 使用智能合约钱包架构实现多重签名逻辑;

用户可以在一次链上交易中同时向多个地址发送不同的token,也可以在使用uniswap时在一笔交易中完成approval和swap,从而获得尽可能多的授权,避免隐藏过多授权带来的安全性危险。

用户可以为不同的资产设置不同的操作权限,比如为 PFP 设置比普通 ERC-20 代币更高的操作门槛(比如需要一个硬件钱包管理的 admin key 才能转移),这样即使是日常使用密钥在环境中泄露,黑客难以转移高价值资产,在安全性和便利性之间取得平衡。

用户可以签署离线授权“谁能给我 100 ETH,就可以转移我的一个 BAYC”,这样用户就可以在没有第三方合约授权的情况下与其他 P2P 完成原子交易。

虽然账户表示不是一个新概念,但可以追溯到 2015 年的一些讨论。当时,Vitalik 认为至少应该替换以太坊用来验证交易的密码算法,比如用更好的 ed25519 替换它性能(细节)。见这里),可以说,Vitalik 和 EF 已经 7 年没有停止讨论和探索账户代表解决方案了。这是一个有组织的链接树,可帮助您查看历史记录。

那么如何理解账户表示呢?这里我引用了 ERC-4337 中对其目标的描述:

实现账户抽象的关键目标:允许用户使用包含任意验证逻辑的智能合约钱包而不是EOA作为他们的主账户。完全消除用户拥有 EOA 的任何需要(因为现状 SC 钱包和 EIP-3074 都需要)

可见,以太坊对账户表示的期望是改变目前大多数人使用 EOA 的现状,希望用户转向 SCW,彻底消除生态对 EOA 的依赖。除了上面提到的EIP-3074,还有一个更激进、影响深远的EIP-5003,它还引用了几篇原文(略):

EOA……在各种关键方面受到协议的限制。这些账户不支持为了安全而轮换密钥,不支持通过批处理来节省燃料,也不支持赞助交易来减少自己持有以太币的需要。拥有合约账户或账户抽象还有无数其他好处,例如选择自己的身份验证算法、设置支出限制、实现社会恢复、允许密钥轮换、任意和传递性委托能力,以及我们能想象到的任何其他事情。

......这个 EIP 提供了一条不供奉 EOA 的途径,而是提供一条从它们的迁移路径,一劳永逸。

不难看出,EIP-5003的目标是一次性将EOA转换为CA,让所有用户都能使用SCW,彻底解决前向兼容问题。(经过前面的名词解释,看看那些缩写是不是更流畅了?)

至此,您应该对 AA 的来龙去脉及其未来目标有所了解。但需要强调的是,AA 的概念并不是以太坊和 EVM 独有的,很多链原生已经具备不同程度的 AA 特性。比如 EOS / Polkadot / Near / Solona / Flow / Aptos ……甚至 BTC(单签/多签/Taproot),这些链已经让账户进入了具有内部结构甚至权限管理能力的状态。设计的,还有 StarkNet/CKB 等有更完善的账户表示能力。说到这里,你不难发现,以太坊的 AA 正在解决 EOA 意外流行造成的历史遗留问题智能合约收益是什么意思,使其在账户层面更加先进和灵活。

从对 AA 的讨论不难看出,ERC-4337 只是这个方向的众多提案中的一个,但为什么提到 AA 或 SCW 时又提到呢?我们来看看这份文件的副标题:

完全避免共识层协议更改的帐户抽象提案,而是依赖于更高层的基础设施。

也就是说,ERC-4337是AA的路线第一次从“暴力革命”转向“和平进化”。它不再追求借助共识层的变化来实现AA,而是使用SCW,一种用户级的解决方案。并且为了实现更好的互操作性,ERC-4337 定义了一些 SCW 应该实现的套接字,以及元交易打包和 gas 支付等基础设施的框架。它的出现让各种差异较大的SCW解决方案拥有统一的用户界面,共享一些生态层面的开放基础设施,帮助各种场景快速实现自己的SCW解决方案。另一方面,

这里的种子指的是助记词,也就是我们在创建钱包时经常被要求备份的助记词。那么seedless就是“没有助记词”的意思,也可以说是“没有公钥”。注意,这个“none”并不是说没有真正意义上的秘钥,而是用户不需要备份助记词/私钥或者感知它们的存在。

一个常见的问题是,如果用户不备份助记词,用户是否会失去对账户的控制权?一旦用户切换到新的设备环境,帐户是否难以访问?没错,仅仅切断用户备份助记词的功能只能被视为产品设计失误,而seedless追求用户“不需要”知道助记词的存在,同时仍然拥有对账户的完全控制权。换句话说,用户(并且只有用户自己)有能力在新设备上恢复账户控制,但不再依赖助记词。这些用户体验很差而且太极客。比如下面提到的社会恢复就是很好的一种。

这里的gas是指gas fee,所以gasless就是“gas fee-free”的意思。同样,gasless 并不真正需要支付 gas 费用,而是意味着用户不需要被迫理解 gas 的概念,更不用说提前订购各种原生代币来支付 gas。

那么谁来支付汽油费呢?有两种情况:

一种是当用户账户中已经有加密资产的时候,比如玩赚钱来获取代币,或者空投,或者从别人那里汇款,只要这个代币具有一定的价值和流动性,就会有中继者愿意接受他们并帮助用户支付gas以获取利润。

另一个是用户账户中没有有价值的代币,比如刚刚创建的账户。如果此时需要进行链上交互,应用端可以选择为用户捐赠一些“有针对性的”gas,帮助用户自举,从而减少用户流失。此时,虽然算上gas补贴的消耗,但整体用户获取成本可能会更高。低的; 或者可以通过让用户看广告等方式换取一些gas。这两种策略在gas成本低的L2上都很好。

社交恢复是指一种机制,可帮助用户在丢失密钥的情况下通过社交联系重新获得对其帐户的访问权限。如果你用陌陌登录新设备,你应该有过“让你的两个同学发xxx到你的账号登录”的体验——这就是社交恢复想要达到的效果,但是验证者从莫莫那里得到的。成为智能合约。

一个常见的误解是将借助社交账号创建/登录钱包的方案称为社交恢复,将“社交关系”等同于“社交平台账号”是错误的。老式的智能合约钱包 Argent 具有外部社会恢复能力。它需要您的监护人提供以太坊地址智能合约收益是什么意思,以便您在需要登录新设备时提供签名进行授权。但是,这个解决方案的潜在设置是:你的监护人必须比你更专业地管理你的以太坊账户,否则当你需要他们的签名时,如果他们自己的账户已经无法访问,你的账户也会受到影响。所以,

非托管可以说是加密行业中政治上最正确和最滥用的概念之一,因为很多时候每个都有自己的定义。这里我也分享一下我们对非托管的定义,主要是两个方面:

钱包开发者擅自操作用户账户失败

钱包开发者未能阻止用户操作他们的账户

如果你也同意这两点,那么判断一个钱包是托管、半托管还是非托管,可以直接测试这两条规则:

不满足 1 → 受管;满足 1 但不满足 2 → 半托管;1、2 都满意 → 非托管。

那么知道它是什么样的托管级别有什么用呢?用户可以不关心它背后的原理,只要好用就行!是的,其实我也部分同意这些观点。至少在这个阶段,行业还没有发展到用户感知范式转变发生的地步。其实我觉得三种方案适合不同的场景:

托管方案——适用于交易所、大型机构金融服务、合规性强等场景,如coinbase/fireblocks提供的一些服务。特点是用户数量少,无需处理高频交互,单价高,可以支撑服务商花费大量资金维护一系列高防系统。

半托管方案——适合相对低端的个人用户群体。他们明白服务器可以对自己的交易进行审核,并且有能力提前规划备份方案(比如导入公钥),从而在服务器主动或被动拒绝服务的情况下,不影响自己资产的安全。这样,您可以在日常使用中享受安全和便利,在极端情况下,资产可以得到保全。需要注意的是,这些方案对服务商的运维能力也有非常高的要求。毕竟个人用户众多,日常与各种应用的交互要求也更高。此外,对数据可用性的要求很高。毕竟一旦存储在服务器上的数据丢失,

非托管场景 - 用于面向大规模采用的场景。乍一看可能有悖常理,但在成本方面,非托管解决方案是唯一能够在低成本的每客户场景下保证足够安全性和可用性的解决方案。大规模用户场景的应用方如果要选择前两种方案,则必须考虑对方能够为其用户群提供足够安全可用的服务,否则一旦内部人员作恶、黑客入侵或不可抗力导致服务停止,它将涉及您的所有用户,您的业务可能会戛然而止。历史上无数案例讲述着一个故事,安全无小事,对用户负责就是对自己负责。

多方安全估计和零知识证明(ZKP)堪称当前 Web3 的两大“法宝”。一旦他们参与进来,似乎总能做到以前做不到的事情。其实在某些情况下是这样的,尤其是ZKP,可以用概率来交换可行性;MPC通过分散控制实现风控或容灾能力。

MPC其实是一个范式,包括很多技术方案,其中大部分是指当前Web3上下文中的tss。

阈值签名是一种分布式多方签名合约,包括分布式密钥生成、签名和重新共享算法,用于在不更改私钥的情况下替换公钥片段。

一个 tss 的 mn 是指一个私钥对应于 n 个公钥分片,其中 m 个分片的联合签名可以通过私钥成功验证。不难发现,这个逻辑和multi-sig类似,它们的区别主要在于私钥的数量。

比如2-2的多重签名就是一扇门上有2把锁,必须用两把钥匙才能开门;2-2的tss是1把锁挂在一扇门上,但是钥匙有两把,一起用可以开门。这里为了更好的理解,描述的并不严谨。虽然两个密钥的组合更符合Shamir Secret Sharing算法;tss算法下的秘钥碎片不会相遇,而是分别签名后,通过特定的算法使用对应的私钥来验证签名。

那么 tss 是必须托管还是非托管呢?其实没有必然联系,主要看最终方案是怎么设计和选择的。非托管方案要求用户具有独立操作账户的能力,因此用户必须持有不超过阈值数量的密钥碎片。比如2-3,用户需要持有2张,2-2方案无法实现非托管,最多可以是半托管(比如ZenGo);但如果用户管理的公钥碎片最多,必然会增加对用户能力的要求,难以实现大规模采用。

另一视角

换一换