作者:雾月,极客web3
编辑:Faust
自2022年AA叙事在以太坊社群火热以来,帐户抽象概念便流行於Web3社群。它实际上是一种关於帐户体系的设计理念,旨在更高层次上建立标准,增强帐户的功能性。而在以太坊等主流区块链中,由於有固定规则的限制,帐户体系的弹性和通用性非常差,比如说:
- 你的帐户中要事先有ETH等Gas Token,不然无法发起交易,显然这对新帐户非常不友善;
- 以EVM系为代表的公链仅支援单一的帐户体系,其他公链或Web2用户需要使用新的帐户工具和入口。
先前在以太坊社群风靡一时的EIP-4337提案被认为可以解决上述问题,但受制於其技术模型、历史包袱与生态发展、开发者认知等因素,EIP-4337的修补方案更像是在打补丁,而不是从根本上解决问题;尝试为EVM添加新操作码的EIP-3074,则被认为存在安全隐患,在解决旧问题的同时带来了新问题,可行性备受争议。
碍於各种原因,以太坊创始团队在主网启动之初,没有对帐户体系进行周全考虑,留下了大量的包袱,如:EOA帐户与合约帐户分野、不支持无gas交易、不支持多种加密原语等。这些历史包袱对以太坊AA路线图的实施造成了明显阻碍,甚至可以说,以太坊的AA方案并不能让其帐户体系超越後来的新公链,而只是在弥补两者间的差距。如果一条公链在最初设计时就充分考虑帐户设计,就不用像以太坊一样走弯路了。
与EVM系公链所不同,Nervos在设计初就深入考虑了帐户体系的问题,在进行了调查後,我们认为,Nervos的帐户体系更偏向AA的底层和本质,其UTXO帐户模型及支持多种验证方式的OmniLock,从始至终都与AA的目标深度契合,且没有历史包袱,天生支持BTC、ETH乃至Solana等其他公链的帐户体系。
此外,对於近期火热的BTCFi而言,由於其本身就是为原生比特币资产引入Defi等场景,要让比特币持有者获得无缝的产品体验,有必要兼容主流的比特币钱包等周边设施,而CKB的原生AA方案天然实现了这一点,为BTCFi的大规模采用创造了必要条件。
以下我们将从设计理念、系统架构、应用、生态等多个角度解读Nervos的帐户抽象体系。
比特币UTXO与Nervos的Cell模型
大多数人都知道,基於UTXO模型的公链,其资料储存结构并非基於「帐户—余额」体系,而是采用了一种独特的形式。具体而言,UTXO像黄金一样可以被熔化或铸造,每次交易都会有旧的UTXO销毁,新的UTXO诞生。此外,UTXO资料并未储存在某个集中式位址下,而是分散储存在生成UTXO的那笔交易里,要读取过往区块的记录才能找到。
毫不夸张的说,比特币开创了一种区别於传统Web2平台「帐户-资讯」体系的储存范式,这可以解决状态爆炸、资料读写效率低下、所有权模糊化的问题。在UTXO模型下,不同人的资产资料储存位置与所有权划分十分清晰,对并行/并发比较友好,也便於支援储存租赁等功能,可以避开传统帐户体系的许多坑。
Nervos公链的帐户体系在设计之初,便充分吸收了比特币UTXO的优点,其Cell模型实际上是比特币UTXO的升级版,提供了图灵完备的可编程性。此外,无论是CKB或其他资产都是一等资产,都不像EVM公链一样把原生资产与ERC-20区别对待。
CKB的Cell在运作机制上与比特币UTXO大致相同:都是被“锁定脚本”和“解锁脚本”驱动的,每个UTXO/Cell在产生时,都会有一个“锁定脚本”,就像一道密码锁;而「解锁脚本」是对应的密钥,可以解开「锁定脚本」。只要你能提交“锁”对应的“密钥”,其关联的UTXO就会任你差遣。
但与比特币UTXO不同的是,Cell在锁定脚本之上增设了「TypeScript」栏位。如果说LockScript是身份验证器,决定你是否有资格改写这个Cell,那麽TypeScript就是附着在Cell中的智慧合约,DEX、借贷协议的程式码都可以部署在TypeScript内。
如果开发者要在CKB上实作类似AMM的流动性池,只需要在一个专用Cell的TypeScript中写好合约程式码,然後在这个Cell的Data栏位中,存放流动性池的状态资讯(例如池子里各类资产余额),之後用户和TypeScript中的程式码互动就行了。
CKB的这种设计在比特币UTXO模型之上拓展了更丰富的场景,可编程性强得多,且由於CKB本身采用RISC-V虚拟机,支援多种程式语言写的程序,能够支援的各种逻辑远比比特币强大。
至於Cell的锁定脚本LockScript,则与我们今天的核心主题AA正相关。因为AA所主张的一大特性,在於让链上帐户支持灵活多样的身份验证方式。对於UTXO而言,要实现这项功能,就要在充当身份验证器的LockScript上下功夫,CKB为此推出了专门支援多种身份验证方案的OmniLock脚本。
下面让我们来了解下OmniLock的具体设计。
OmniLock与帐号抽象
在前面我们曾提到,CKB的Cell与比特币UTXO,其使用权限都是由锁定脚本来定义的,LockScript中会确定哪些人可以改写这个Cell,起到身份验证的作用。为了支援多种认证方法,CKB提供了名为OmniLock的通用型锁定脚本,可以相容於多种签章演算法和验证机制。
OmniLock将不同的验证逻辑进行了模组化处理,只要设定不同的参数,就可以灵活地配置不同的验证演算法。用户可以分别使用BTC、ETH甚至WebAuthn等帐户、钱包/监权方式,直接操纵CKB链上的资产。
那麽OmniLock具体是怎麽实现和使用的呢?其实要通俗的解释,OmniLock是Nervos官方直接在CKB链上布置好的一段程式码,这段程式码写在了某个特定的Cell上,可以被其他Cell使用,就好像EVM公链中的「系统合约」一样。如果某个Cell要使用OmniLock,可以在自己的锁定脚本中宣告引用OmniLock。
下面我们可以透过一段伪代码来理解锁定脚本和OmniLock的工作原理。
CKB的锁定脚本包含Code hash、hash type和Args三个字段,由於Code hash和hash type与本节内容关联性不大,这里不作解释。以下我们着重介绍Args字段,透过对Args进行灵活配置,就可以使用OmniLock中定义好的不同验证演算法。
Args字段对应的内容可以分为两部分,一部分是auth,专门用於身份验证,其长度为21字节,包含1字节的flag标识符,以及20字节的监权数据。 auth的监权资料包含一段预设的公钥哈希,只有公钥哈希对应的公钥主人才能通过身分验证,有资格改写Cell中的资料。
Auth中的flag则是一个标识符,用於选择不同的监权方式,此处所说的监权方式不仅指密码学验签,还包括资讯处理等综合流程:如flag为0x01时,代表以太坊外部讯息的监权方式。除了以太坊,OmniLock也支援Bitcoin、Dogecoin、Tron、多签等丰富的讯息验证形式。
Args中的另一部分叫Omnilock args,它就像一个按钮,可以在OmniLock预设好的功能模式中进行选择,如用管理员模式(如USDT的管理员冻结功能)、用於小额支付的anyone -can-pay模式(小额捐款使用)、时间锁模式等。 Anyway,只要对Omnilock args进行调整,就可以使用OmniLock中预先写好的不同功能。
综上,我们可以在Cell锁定脚本的Auth和Omnilock args栏位输入不同的参数,来选择不同公链或平台的身份验证方法,为CKB引入多种多样的身份验证方式。当然,除了OmniLock中预先定义的几种监权方式外,开发者也可以自行定义身分验证方案。
Nervos帐户抽像生态:CCC、Mobit和JoyID
上面我们已经知道,OmniLock是Nervos实现帐户抽象的基础,而基於OmniLock的钱包如Mobit、.bit、Omiga和中间件CCC(Common Chains Connector)等则构成了Nervos丰富的BTCFi帐户抽像生态,此外还包括提供安全隐私保护与身分管理服务的DID平台Did.id,以及去中心化Dobs资产交易平台Dobby等。
AA的良好特性为BTCFi生态应用也带来了极大的便捷性,使得CKB生态内的专案可以直接支援BTC钱包交互,降低了使用门槛。在下文中,让我们以具体的案例切入,来检视CKB的AA生态。
Common Chains Connector(CCC)
首先我们以CCC为例,这是一个钱包连接中间件,专门为钱包和dApp提供各种公链对CKB的可操作性。
下图是CCC的连线视窗。这里我们以MetaMask为例,如果你拥有一个以太坊帐户,如何操作CKB链上的对应帐户。
当使用CCC进行CKB链上交易时, 该demo会调起MetaMask钱包的personal_sign 方法来进行签名,这种方法用於签名一段不直接上链的文字讯息。
我们可以看出该资讯包含的内容是CKB transaction的一系列十六进位码。透过MetaMask签署後的讯息,将提交至Nervos CKB链上,并透过OmniLock等机制进行验证。
而前面我们曾提,Nervos本身就支援验证以太坊的讯息格式,可以说CKB从底层就考虑好了对接其他公链生态。对使用者而言,你可以透过既有的、熟悉的入口和工具进入CKB生态;
而对於开发者,Nervos在底层定义好了OmniLock标准,并透过CCC抽象化了多链钱包的实现细节,大大降低了开发难度,让上层应用程式开发者可以更好地专注於上层业务逻辑的开发而不必过度关注底层细节。
Mobit
Mobit是基於Nervos的DID和资产管理平台,如果用一个比喻,Mobit就像是外界进入Nervors生态的一道大门,而这道大门的门槛很低。借助Mobit,使用者几乎不需要任何前置知识,只需要一些简单操作,就可以用其他公链的帐户在Nervos生态中完成互动。
下图是Mobit的连线视窗。可以看到目前Mobit已经支援多个主流公链的帐户体系,而这个清单仍在持续扩张。
仍以Metamask钱包为例。连接後的介面同样可以看到用户的EVM和CKB位址,并展示该位址在CKB链上持有的Token和DOBs资产。
这里说下DOBs,它是Nervos生态特有的,类似NFT的资产,但DOB与NFT有本质不同。首先,DOBs的资料完整地保存在链上,可以看成是“全链NFT”,而许多以太坊NFT的资料并未完整储存在链上;
另外,每个DOBs都可以设定Chatbot,可以与持有者进行对话等互动场景,随着不同持有者各异的养成路径,相比於传统的NFT,每个DOBs将具有更显着的个体差异。
至於Omiga是Nervos生态中DOBs的交易平台,使用者可以直接在Mobit的Apps介面一键跳转进入。
Omiga同样利用了Nervos的帐户抽像功能。
Mobit的操作简单、功能全面,将有助於BTCFi的互动。 BTCFi产品本质是为原生的比特币资产提供多样性的Defi体验,能否兼容主流比特币钱包将会是BTCFi周边设施需要考虑的重要因素,而CKB目前已经做好了准备。
对WebAuthn的采用
WebAuthn是一种由万维网联盟(W3C)和FIDO(Fast IDentity Online)联盟共同开发的网路标准,目标是提高使用者验证的安全性、简化登入流程,减少对传统密码或私钥的依赖。
一些主流的桌面或行动作业系统如iOS和Android中内建的金钥管理软体,可以使用本地的安全模组或云端储存来储存金钥并进行签署。目前WebAuthn主流实务中一般会支援P-256,P-384,P-521等,由於Nervos的OmniLock支援自订的密码学原语,所以也可以覆写这些。
以下是一些WebAuthn支援的客户端:
CKB生态钱包JoyID就是利用WebAuthn技术所实现的应用。透过JoyID,使用者可以直接透过生物辨识(如指纹或脸部辨识)方式进行身份验证,实现无缝且高安全性的登入和身分管理。
Nervos生态中的.bit也是利用Apple的WebAuthn实作来登入并使用区块链的场景。
从上面的案例我们可以看出,CKB的AA方案天生就支援其他公链和Web2用户。对於广大Web2用户而言,支援WebAuthn是至关重要的,它摆脱了私钥和助记词管理的包袱,大大降低了使用门槛。越早在这个方向上发力的公链生态,日後就越有优势。
总结
以太坊受限於其历史包袱问题,现有的AA解决方案基本上治标不治本,无法从根源上解决问题;而Nervos在启动主网之初就充分顾及了帐户体系的设计,提供了OmniLock功能,可以支援任意形式的身份验证方式。
Nervos的Cell模型实质上是对比特币UTXO的功能拓展,其锁定脚本可以支援多种验签演算法,OmniLock则以类似於系统合约的方式,支援任意Cell在锁定脚本中直接调用,为广大开发者和使用者提供了Web2层级的体验;
目前Nervos帐户抽像生态内已经有CCC、Mobit、Joyid等产品,基本上比较完备;
BTCFi本质是为原生的比特币资产提供多样性的Defi体验,能否兼容主流比特币钱包将会是BTCFi周边设施需要考虑的重要因素,而CKB作为BTCFi生态中的重要设施,采取了包容并蓄的做法,尽可能在开发者侧和用户侧都为BTCFi的mass adoption创造必要条件。