知识库
返回
Nervos·
6 mins
86 views
我们要去的地方不需要账户:未来吸引圈外用户的方式

账户抽象是区块链正在努力实现的一个关键里程碑,旨在使其用户体验与传统互联网应用程序保持一致,并吸引数十亿用户进入 Web3 领域。CKB 具有独特的优势来欢迎这些用户。

cover

自比特币诞生以来的 14 年间,区块链的发展经历了多个阶段,每个阶段都反映了行业在各个时期所面临的不断变化的需求和挑战。最初,区块链的发展主要集中在共识算法的发展上,以优化分布式网络的安全性和去中心化。在这一时期,诞生了许多 Layer 1 网络,其共识机制、架构和价值主张要么完全新颖,要么略有调整。

接下来是可扩展性时代,区块链项目专注于通过各种链上和链下可扩展性解决方案(包括分片、状态通道、Rollup 和侧链)来提高交易吞吐量和数据可用性。过去两年中,市场上出现了许多成功的解决方案,人们对该领域的研究兴趣已经达到顶峰,转而慢慢转向另一个同样重要但并未解决的问题:用户体验。

具体来说,用户体验的关键涉及到一个被称为 “账户抽象” 的过程,它代表了一种让开发人员用与 Web2 账户相同的用户体验标准来封装 Web3 账户的方法。在吸引数十亿级用户进入 Web3 领域的过程中,账户抽象至关重要,然而,它在很大程度上依然被大众被误解和低估。

什么是账户抽象?

账户抽象旨在概括和改进区块链账户的逻辑,以提升用户体验,使区块链账户的管理和加密资产的托管更加便捷、安全。

为了理解账户抽象,我们需要明确两个概念,即 “抽象” 和 “区块链账户”。在计算机科学中,抽象指的是通过消除或概括物理、空间或时间细节的过程,将关注点集中在更重要的事物上。简而言之,抽象是为了隐藏复杂性而创建底层流程或数据的简化表示。编程语言的演进过程就是一个抽象化的例子,从 “机器语言” 到 “汇编语言”,再到 “高级语言”,不断提高编码的抽象层级。现在,开发人员不再需要直接使用 1 和 0 在硬件上编程,而是使用高级编程语言进行开发,这些语言抽象掉了底层硬件的所有细节。这使得程序员能够构建复杂的计算机应用程序,而不必深入了解中央处理器如何处理底层机器指令,这就是抽象的价值所在。

另外,关于 “区块链账户” 的概念,有一个常见的误解需要澄清,即区块链账户并非与区块链地址相同。实际上,区块链账户是一种链上身份,在区块链各个应用程序中广泛存在,并且它与所在的区块链密不可分。而区块链地址是通过特定的加密方式创建的身份标识。举例来说,以太坊地址是通过私钥使用 Secp256k1 标准进行椭圆曲线推导,得到一个公钥,然后使用 Keccak-256 哈希函数对该公钥进行哈希运算,最后截取哈希运算结果的最后 20 个字节,从而得到以太坊地址。在多个兼容 EVM(以太坊虚拟机)的区块链上,使用相同的地址可能对应着不同的账户。

alt_text

在基于账户模型的区块链中,账户是一种更加永久的实体。从用户的角度来看,它的功能类似于传统的 Web2 账户,比如用户在每个 Web2 服务或应用程序上都有一个账户,比如用于观看 Netflix 的账户。不同之处在于,区块链账户是通过私钥来控制的,而不是像 Web2 账户那样通过邮箱登录或可恢复的密码访问。因此,一旦私钥丢失,区块链账户将无法恢复。

深入理解以太坊账户

要了解当今许多基于账户模型的区块链项目试图解决的区块链账户问题,首先有必要更深入地理解区块链账户的工作原理。

在像以太坊这样的基于账户模型的区块链中,有两种类型的账户:外部账户(EOA)和合约账户(CA)。

alt_text

EOA 是可以发起交易的用户账户,很多人简单地称之为 “账户”。它有三个属性:(1)余额代表着账户里可用的加密货币数量以及支付交易费用所需的加密货币数量;(2)通过 nonce 用来确保每笔交易都是唯一的、合法的;(3)通过唯一标识的地址来表示网络中的账户。

从 EOA 发起交易显然需要一定的授权,否则任何人都可以使用任何 EOA 中持有的加密货币。从 EOA 发起交易或建立交易的 “所有权” 是通过 “signer” 完成的。这里的 “signer” 是一组密钥对,由一个私钥和一个公钥组成。

私钥是一串随机生成的十六进制字符串(256 位长的数字),是保护和控制 EOA 的唯一标识符。在以太坊等基于账户模型的区块链上,只有 EOA 才能发起交易,而发起交易需要用私钥签名。用 Web2 的术语来说,私钥就像用户访问银行账户等应用程序的密码,用户每次想进行汇款时,都需要使用密码 “签署” 交易。在以太坊上,用户的私钥在签名过程中永远不会暴露在网络上,因为签名是通过加密技术生成的,不会泄露私钥本身。与任何其他密码一样,区块链用户必须对自己的私钥进行保密,因为只要拥有私钥就能访问对应账户中的加密货币。

alt_text

另一方面,以太坊的公钥则是一串 512 位长的数字,由私钥通过椭圆曲线加密算法(具体来说,是 Secp256k1)推导出来,以太坊地址是该公钥的 Keccak-256 哈希输出的最后 20 个字节。公钥用于验证用相应私钥签署的交易的真实性。当用户发起交易时,他们用自己的私钥签名,然后以太坊网络用他们的公钥验证他们的签名。公钥与私钥不同,私钥必须保密,而公钥则可以公开共享。

当用户使用自己的以太坊账户发起交易时,他们使用自己独有的私钥签署交易,EVM 接收到交易并使用公钥验证他们的签名,验证交易 nonce 与账户 nonce 是否匹配,如果验证通过,则执行交易,并自动从用户的账户余额中扣除交易费用。

区块链账户存在的问题

区块链账户的主要问题,或者说至少目前在以太坊等基于账户模型的区块链架构存在的问题,是 signer 或者说被授权发起交易或花费加密货币的对象与持有加密货币的账户紧密耦合。换句话说,以太坊上的 signer 和 EOA 账户本质上是一回事。

alt_text

这意味着,一旦私钥丢失,账户也就失去了,给用户带来了极差的使用体验。每年都有数亿美元的加密货币因为私钥丢失或被盗而无法找回。管理储存在加密钱包中的私钥通常要求用户自己保存由 12、18 或 24 个单词组成的 “助记词”,这些助记词代表了生成私钥或分层确定性(HD)钱包中的一系列私钥。助记词旨在以 “用户友好” 的方式备份和恢复钱包,同时保护密钥的安全性和隐私性。然而,不幸的是,如果用户忘记了加密钱包的密码(密码用于对设备上的密钥进行加密),并且没有安全地存储助记词,那么该钱包或区块链账户将永远无法恢复。

以太坊账户(以及大多数基于账户模型的区块链)的第二个主要问题是,账户的构建和运行的加密逻辑是硬编码在 EVM 中的。这意味着,创建私钥、推导公钥、启动和验证交易的唯一方法是使用硬编码的密码学原语,即前面提到的 Secp256k1 椭圆曲线上的 ECDSA 签名方案和 Keccak-256 哈希函数。这使得 EOA 与本地多重签名方案、社交恢复方案等不兼容。

账户抽象是一种解决方案

账户抽象的核心思想是解耦 signer(密钥对)和账户之间的关系,使前者更易于管理,后者更加灵活。

在以太坊上,账户抽象最近通过 ERC-4337 得以实现。ERC-4337 是一个以太坊标准,旨在实现应用级的账户抽象,而无需任何硬分叉或者共识层的变更。该标准背后的理念是超越 EOA,允许创建智能合约钱包,这些钱包可以自行决定验证和执行交易的逻辑。

alt_text

使用 CA(合约账户)而不是 EOA 作为用户账户,意味着加密货币钱包现在可以定义自己的交易验证逻辑和执行逻辑。这使得它们不再受制于 EVM 的硬编码逻辑,并且可以使用不同的密码学原语,包括不同的签名方案、椭圆曲线和签名协议。这一变化为以太坊账户带来了巨大的用户体验优势,具体包括:

  • 社交恢复: CA 钱包由智能合约控制,它们有自己的逻辑,而不是单一的私钥,因此它们可以包含一个恢复机制,让钱包所有者信任的多个 “监护人” 或 “恢复联系人” 来帮忙恢复钱包。例如,可以在钱包中添加备份密钥,所有者使用主私钥,主私钥丢失时,则可以在获得持有备份密钥的可信监护人的许可后,用新的安全密钥替换主私钥。除了交易验证之外,CA 钱包还可以执行自定义的交易执行协议。例如,钱包里可以包含一套规则,允许通过单个签名验证低价值的交易,而高价值的交易则需要多个 signer 的批准。
  • 失能开关: CA 钱包的灵活性还允许安装所谓的失能开关,这本质上是一种规则或者说功能,在钱包原始所有者死亡或者不再能够访问其资金的情况下,自动转移所有权。例如,钱包可以包含一条规则,规定如果原所有者在一年内没有使用主私钥访问这个账户,另一个预先批准的密钥就会激活,让该密钥的持有人访问账户和账户内的资金。
  • 抗量子签名: 如前所述,CA 钱包可以使用除 EVM 硬编码之外的任何密码学签名原语。这就意味着,一旦量子计算机破坏了现有的 ECDSA 机制,我们就可以升级签名的逻辑,使用抗量子签名方案。
  • 设置自定义访问和消费条件: 账户抽象或 CA 钱包带来的另一个有趣功能,是创建各种自定义访问和消费条件。例如,用户可以将单个 CA 账户同时用作热钱包和冷钱包,低价值交易可以通过移动钱包应用无缝签署,而高价值交易则需要通过存储在 “冷钱包” 或 Ledger 等硬件钱包设备中的私钥来签署。此外,用户还可以创建商业账户或公司账户,为不同的密钥持有者分配不同的角色,并自定义访问条件。例如,可以允许公司的法律团队使用公司或 DAO 的代币进行链上投票,但无权使用这些代币;也可以允许 HR 团队向特定白名单地址上的员工发送薪资,并预设支出限额和时间限制。
  • gas 分离: 与必须持有 ETH 才能支付以太坊交易费用的 EOA 不同,账户抽象允许 CA 钱包可以用任何 ERC-20 代币支付 gas 费用。此外,应用程序也可以为用户支付交易费用,这意味着用户只需创建一个账户,就可以开始使用以太坊 dApp 了,而无需购买 ETH。
  • 捆绑交易: 账户抽象可以实现捆绑交易,从而提高速度和效率。目前,在去中心化交易所进行一次简单的 swap 至少需要两次交易,一次是授权要进行 swap 的代币,另一次是执行 swap。通过账户抽象,可以将多个交易捆绑成一个交易,用户只需进行一次操作或签名,从而简化了这一流程。此外,这种捆绑交易可以准确批准每笔交易需要的代币的确切价值,并在交易完成后撤销这些批准,从而提高安全性。

尽管如此,ERC-4337 实现的账户抽象只是应用层的抽象,这意味着智能合约钱包仍然是二等公民。换句话说,在协议层上,唯一能在以太坊上发起交易的账户类型仍然是原生的 EOA,ERC-4337 只是为智能合约钱包服务商提供了一种替代的、治标不治本的解决方案。

alt_text

智能合约钱包仍然需要利用各种技巧和自定义基础设施,包括链外中继器、替代内存池,以及新的第三方实体(如捆绑程序和付款人),来正确模拟账户抽象。所有这些都意味着,EVM 背后的底层逻辑保持不变,EOA 仍然是一等公民,对 “账户抽象” 的智能合约钱包和去中心化应用程序的支持仍然只是可选项。

值得强调的是,一些智能合约钱包,例如 Gnosis SafeArgent,在以太坊上已经存在多年,并为用户提供了社交恢复和元交易的便利,允许将 gas 费用转移给其他人支付。在以太坊上,ERC-4337 定义了允许以去中心化方式发送 CA 钱包交易的标准,并提供无需许可的钱包调用。然而,令人遗憾的是,由于系统设计的原因,与 ERC-4337 钱包交互的开销很大,以太坊社区的一些人猜测,开发者可能会无视新标准,继续构建自己的 CA 钱包。

因此,可以说账户抽象本质上是必须在协议层实现的东西。就以太坊而言,这将解决需要为每个钱包部署一个智能合约的要求(这会导致状态爆炸),并为真正的账户抽象打开大门,让交易可以从不同类型的协议中发起(如 zk-SNARK 的状态转换)。

幸运的是,其他区块链,例如 Nervos L1 CKB,从一开始就在协议层实现了账户抽象。

CKB:全方位的账户抽象

虽然以太坊目前正在通过 ERC-4377 来实现账户抽象,但这只是应用层的抽象,而其他二层网络(如 StarkNet 和 zkSync)也计划在更深的协议层 “奉行” 相同的模型,但值得注意的是,这种账户抽象的方式并没有实现最高级别的抽象。

目前业内最抽象的区块链是 Nervos L1 CKB。CKB 主要通过以下两点来实现协议级的账户抽象:(1)Cell模型,这是拥有强大编程能力的 UTXO 模型的通用版本;(2)完全抽象的虚拟机 CKB-VM。

CKB-VM 是完全抽象的,因为它没有内置预编译,这意味着它默认支持所有的密码学原语。与以太坊的 EVM 等其他虚拟机不同,CKB 上的默认哈希函数和签名方案并没有内置在虚拟机中,而是与应用开发者创建的智能合约运行在同一环境中。在以太坊上,这些密码学原语被预先编译在共识层中,这意味着如果有人想改变它们,即替换 Keccak-256 哈希算法,使用其他算法推导出以太坊地址,那么唯一的办法就是提交以太坊改进提案(EIP),并希望该提案最终会被考虑并通过硬分叉来实现。然而,硬分叉对以太坊而言是一个充满争议且繁琐的过程,通常需要数年才能实现,这使得使用不支持的密码学原语几乎不可行。

除了 CKB-VM 之外,Cell 模型本身也是抽象的。Cell 中存储的数据没有内部结构,其布局完全由开发人员决定。Cell 模型本质上是 UTXO 模型的通用版本,因此是抽象的。基于 UTXO 的区块链是面向资产而不是面向身份的,它通过 UTXO 来表示和跟踪加密货币的转账,而不是跟踪账户的余额变化。换句话说,在基于 UTXO 的区块链中,没有明确的账户概念。相反,“账户” 只是加密货币钱包(链外密钥对管理软件)创建的抽象概念,用于跟踪未使用的交易输出(即 UTXO)。

alt_text

也就是说,基于 UTXO 的区块链可以支持不同类型的锁定脚本(如 P2PKH、P2SH 和 P2WPKH),这些脚本定义了如何使用输出。在这种情况下,我们可以将 "账户抽象" 视为创建更灵活、可定制的锁定脚本的一种方式,从而在花费或管理 UTXO 时,实现高级用例,进一步增强安全性。

而这正是 CKB 所允许的。应用开发者可以像安装插件一样安装各种签名和哈希算法,如 ECDSA、Secp256k1、Keccak256、Sonnorr 等,而无需硬分叉。例如,开发者可以在一个 Cell 中部署以太坊的 Keccak256 哈希算法,并在 CKB 区块链上实现支持相同算法的密码库。然后,CKB 区块链就可以验证以太坊签名格式并执行交易了。

同样的事情也适用于其他任何区块链的签名算法。例如,CKB 与比特币的记账系统兼容,这意味着 CKB 可以验证使用比特币私钥签署的签名,允许用户使用比特币钱包在 CKB 区块链上交易和持有不同的资产。这才是正确的账户抽象的样子。CKB 上的账户(持有资产的对象)可以使用来自任何区块链生态系统的 signer 进行管理。

写在最后

毫无疑问,以太坊的 ERC-4377 在用户体验方面提供了显著的优势,它实现了社交恢复、失能开关、抗量子签名、设置自定义访问和消费条件、gas 分离和交易捆绑等功能。然而,这种抽象方法仍然让 CA 钱包停留在以太坊生态系统中二等公民的位置。

相比之下,Nervos L1 CKB 展现了真正的协议级账户抽象。凭借抽象的 Cell 模型(记账模型)和完全抽象的 CKB-VM,Nervos CKB 实现了卓越的账户抽象,支持所有密码学原语,而无需硬分叉。这种高度的抽象程度使得与不同生态系统的无缝集成成为可能,让用户可以使用来自任何区块链的 signer 来管理 CKB 上的资产。

归根结底,CKB 是区块链行业中账户抽象潜力的有力例证。通过这种协议级的抽象,CKB 不仅展示了为加密货币用户创造一个更安全、用户友好和可互操作的环境的能力,而且随着 CKB 技术的不断发展和成熟,它还凸显了区块链技术的未来发展方向。

end