浅谈互操作性2.0 :一个让 Nervos 走向全世界的基础设施

「如果区块链是一个更加进步的基础设施,他的使用体验怎么能比既有的互联网基础设施还要差呢?」

「如果说创造出一种点对点的数字资产系统是区块链的目标之一,那凭什么现在所有的区块链都重复造轮子,互不相通,各自为政?」

随着区块链链近几年以来的演变,我们逐渐的从比特币的点对点现金系统、以太坊的智能合约平台演变到了多链并存的区块链世界,我们可以看到有许多不同的公链开始在为性能等问题去进行探讨,例如基于以太坊的架构去进行性能优化(Near、Solana),以及针对特定的场景设计出属于他们的区块链的基础设施(Dapper Labs 的 Flow 是基于游戏和 NFT 的区块链,Filecoin 专门为了去中心化存储)。

目前区块链生态困境:用户进不来,资产低流动,dApp 难互通

但是,我们目前仍然所存在的环境,仍是离区块链能够改变世界,带来更好的去中心化服务有一段距离,我们可以发现,迄今为止区块链上的「各类型使用者」仍然都面临糟糕的使用体验和操作体验。我们可以看到:

  1. dApp 用户进入门槛极高:目前用户要使用区块链产品,脱离不开的依旧是需要助记词、公私钥创造的钱包,并且每用一条链,就得起一个新的钱包,并且做好助记词的备份和地址的管理。使用体验基本上已经逊于互联网产品的签名验证系统(例如指纹解锁、FaceID 可以直接微信付款)。
  2. dApp 开发者迁移成本极大:现在的 dApp 开发者面临到性能或高额 gas fee 等问题,众所皆知,ETH 1.0 性能不敷使用,但是迁移到其他可以保证性能的链上,势必又回遇到几个迁移的成本问题,一是得面对一种新的开发语言,不但需要学习成本,并且还需要审计成本,这对于发展节奏飞快的区块链世界而言,迁移加上审计可能就得花上两个月,两个月可能已经足以但区块链世界诞生以以一个市值千万等级的区块链产品。另外,第一点的用户学习成本,在此就是 dApp 迁移后的获客成本。
  3. 不同链之间的加密资产难以互通和流动:跨链其实不难,难得是怎么让所有的链在最小的成本下完成跨链很难。现在我们已经可以看到许多 Wrap BTC 的方案,例如 WBTC、tBTC、imBTC、BoringDao 等,也可以看到 Polkadot 和 Cosmos 可以在他们自己的 Substrate、Zone 等等架构下完成跨链,但是回过头来,是不是不按照 Polkadot 的标准,基于 Substrate 发行的链上的资产就到不了 Polkadot 之外的世界了呢?

这些基础的问题,基本上就有点像是在区块链世界上的货物(资产)无法流通,城市建设、商店(dApp)难以普及,以及人们日常的消费工具(dApp钱包)难以使用的景象,在这些问题层层包围的情况下,区块链之间、资产、dApp产品以及用户之间的交互变的困难,在不具备良善的互操作性的基础下,区块链世界就少了很多的可能性。区块链普惠世界的那一天可能也遥遥无期。

因此,必须有这么一套的基础设施,能够去解决多链间的资产、dApp、用户之间的互操作性的问题,并且是在这些利益关系人不需要作出任何改变的情况下,让他们能使用既有的设施来实现互操作,这套设施,我想就是 Nervos 上的互操作性 2.0。以下本文,笔者会告诉大家我所了解的互操作性 2.0 怎么解决这些问题,并且使用一些实际的案例,让大家体会到互操作 2.0 可以实现哪些现在市面上的区块链产品无法实现,但实现后可以创造大量且高频使用的骚操作。

互操作性 2.0 的三板斧:pw core、ForceBridge、Polyjuice

以下我会来介绍 Nervos 的互操作性 2.0,是如何透过三个重要的组件:pw core 、ForceBridge 以及 Polyjuice 分别来解决用户进入门槛高、资产跨链流通以及让 dApp 在不改变其代码的前提下,迁移到性能更快速的公链上,并不失去原本的生态用户。如果从下图来看,我们也可以发现到互操作性 2.0 的三个重要的组件是奠基于 Nervos CKB 的底层公链之上,并且透过 Nervos CKB 底层公链的赋能,去对于上层的开发应用、用户以及资产去提供互操作性 2.0 的服务。


PW Core: 让用户能够透过各种入口进入 Nervos dApp

如果区块链是一个更先进的技术,那么我们给一般人的体验,怎么能够比原本的互联网产品差劲呢?

长期以来用户门槛过高一直是区块链应用不能普及的一个心头之痛,相信如果长期关注 Nervos 的朋友们对于 Nervos 的生态团队 Portal Wallet 所展现的神奇功效应该也不陌生,可能也常常听到我们在说的,当前的区块链应用往往有两层问题:

  1. 要使用一条链的任何应用都必须安装该链的专属钱包
  2. 现行的区块链钱包对于一般的用户门槛过高

这两个问题,有赖于 Nervos CKB 底层虚拟机对于自定义密码学原语的支持,以及 Nervos 的编程模型 Cell Model 支持自定义资产的解锁规则的两大特性,以及社区团队 Lay2 对于 Nervos 的理解和对于应用层的高深造诣,因此打造了 PW-SDK 这套基础设施,PW-SDK 是一套针对于 dApp 开发者的基础设施,里面包含了部署了个各种密码学原语的 pw lib,以及包含各种解锁规则的 pw -lock,以及面向前端 dApp开发的 js sdk,在接入 PW SDK 的 pw core 以后,开发者的 dApp 就可以接入许多来自其他公链的钱包,或者来自于互联网的既有基础设施,作为他在 CKB 上的 dApp 的签名工具,这么一来就打开了用户使用 CKB 上面的任何 dApp 的方便之门。

目前我们可以看到 Nervos 上已经有基于 pw-core 的 dApp 了,那就是Lay2 的 Portal Wallet ,在 Portal Wallet 上我们已经可以看到许多只有 CKB 才能体现的互操作特性,包括用户可以直接使用以太坊的 metamask 等浏览器钱钱包,以及包括 imToken 等多款既有的以太坊移动端钱包来操作 CKB 上的 dApp,用户在账户管理上也显得更加方便,因为他的以太坊地址、ENS 甚至可以直接是 CKB 的收款地址。未来还有更多的区块链会被 PW SDK 集成,目前 EOS 、Tron 的签名算法和解锁规则已经集成,并进入测试阶段,详细的 Demo 可以奠基此链接:https://pay.lay2.dev/。

使用既有的其他链的区块链钱包只是第一步,因为按照「在链上存在解锁规则的 Cell 可以引用」+「链上已经存在该解锁规则所需的密码学原语」的逻辑,互联网上我们天天使用的密码学验证工具,例如指纹解锁、FaceID 等等,也可以在 CKB 上的 dApp 使用,而且很庆幸的是这些都已经被互联网业界集成为 WebAthun 这一个统一的正式标准,这么大的一个互联网集成的验证资源,当然在 CKB 上也必须被用上。

我们可以发现,有了 pw-core 这样的 SDK 出现,这一切对 CKB dApp 而言,要让这个 dApp 使用什么规则解锁,其实就像在选用一套解锁规则自助餐一样,因为只要在 PW-SDK 支持的范围内,CKB dApp 开发者就能够直接使用这些钱包、互联网验证工具做为他的 dApp 的入口。

这不是只有 Portal Wallet 可以做到,而是任何在 CKB 上的 dApp 都可以使用指纹验证、FaceID,以及邮箱验证等等主流的互谅网用户常常使用的工具来对 CKB 上的任何 dApp 进行签名,而且最酷的是,整个过程,CKB dApp 要接入的各种基础设施并不需要为了兼容 CKB 去作出任何的改动,同时用户也不需要花一丝丝精力去感知他使用的是 CKB dApp,因为和一般 dApp 的使用路径相比,用户几乎不存在任何为了用 CKB dApp 而需付出的学习成本,而且长期而言,这个账户甚至可以称为一个多链 dApp 统一身份路口,并且搭配着 lock 的设计给予多级的操作权限。

Force Bridge:让多链资产透过 Nervos 自由的流动

在打造了一个任何用户都可以进入 CKB dApp 的入口以后,我们也让所有区块链链上面的资产都开启了一道通往 Nervos ,或者说透过 Nervos 通往各地的方便之门,那就是 Force Bridge!
Force Bridge 是一个可以同时让 Nervos CKB 和多条公链、联盟链进行互操作的跨链解决方案。Force Bridge 这个名字来自于 dota 2 中的 Force 推推仗,也象征着能够把资产在链与链之间推来推去的意涵。

Force Bridge 采取的是 SPV 简单支付验证( SPV , Simplified Payment Verification )的方式,也就是说在两条要进行跨链的链上,都分别有以智能合约实现的只维护该链区块头(block header)的轻节点,去验证某笔带有另一条链交易的 merkle proof 以及交易信息等数据的交易。例如如果我们要以太坊验证 CKB 的交易,只要在以太坊的链上有 CKB 链上用来做序列化的 molecule ,以及用来进行加密的 blake2b 签名算法库, CKB 的轻节点就能在 ETH 上建构。

如此一来,在能够验证对方链的交易的前提下,就能够确保对方的链上曾经发生过哪些交易,传送了什么样的资产到指定的合约账户,进而可以让 CKB 上去做出相对的合约,并锁定这笔资产和产生相应的镜像代币(Mirror Token ) ,如果在你烧毁了这个 CKB 上的镜像代币资产之后,那么在以太坊等等另外一条链上的 SPV 就能够透过一笔包含这个 CKB 上的烧毁交易的交易数据和 merkle proof 去验证这个烧毁的交易曾经在 CKB 链上发生,然后我们就能够看到原本以太坊锁定的资产已经可以被解锁。

举个例子,今天资产在以太坊上的 Bob 如果要用他手上的 200 ERC USDT,去铸造 CKB 链上的 200 CKB USDT,那么透过 ForceBridge, Bob 会先将他的 200 ERC USDT 锁在一个以太坊的 Bridge Contract 上,并且在 CKB 上构建一笔交易,并在 Witness 中含包这笔 200 erc usdt 传送到 bridge contract 交易的数据和 merkle proof 等信息,如此一来,这笔在 CKB 上的交易在链上的轻节点验证后,就可以建构出 200 CKB USDT 这种镜像资产。
等到 Bob 哪天想要运用它的 200 erc usdt 了,他可以在 CKB 上透过 ForceBridge 的智能合约烧毁 200 CKB USDT,并且在以太坊上发送一笔含有这笔交易的数据和 merkle proof 的交易,让自己原本被锁定的 200 USDT 能够被解锁。如此一来就完成了 ForceBridge 的资产跨链的整个生命周期。

整体来说,ForceBridge 的架构如下图,我们可以知道的是,有赖于 Force Bridge 弹性的验证架构,左边的以太坊理论上可以替换成任何具有图灵完备的公链,甚至联盟链 。


最后,和大家稍微整理一下 Force bridge 的特征和优点:

  1. 安全:首先是足够的安全,因为任何交易的有效性基本上是透过两条链的轻节点以及它的 merkle proof 去进行验证,因此安全是两条链的矿工(或者节点)所赋予的。
  2. 具有高度的可延展性:有赖于 Force Bridge 足够简单的架构,以及 CKB 编程模型的灵活性,我们可以看到 Force Bridge 有很大的延展性:
  • 支持任何 ETH 和 ERC 20 资产,甚至在未来的版本还支持包含 ERC 721 等等在 CKB 链上可被 ETH 轻节点验证的资产。

  • 对于 ForceBridge 而言,将资产跨链给到 CKB 上的合约或者个人,意思是一样的,例如Alice 从 ETH 上把资产给到在 CKB 链上的 Bob ,和给到 CKB 链上的 DEX ,其实要做的事情都是一模一样的。

  1. 使用体验滑顺,有赖于 pw core , 一个以太坊钱包可以完成 ForceBridge 上两条链的交易和资产操作。

那让我们想象一下,PW Core + ForceBridge ,可能会有什么好玩的酷东东~~

案例一:用 Metamask 发送出 ETH 或者 ERC 20 token 换得 CKB 或者其他 sUDT
* 在 Forcebridge 搭配 Pw-core 的情况下,任何的 ERC 资产和 CKB 上的资产进行互换,只要有预言机和足够的流动性,其实都可以完成,而且还是在 以太坊的 metamask 等等用户已经比较熟知的既有工具下就能完成。对 ETH 上的用户来说,他只需要把它的 ETH 资产锁定在某个 ETH 上的 forceBridge 合约,CKB 上的 ETH 轻节点可以透过区块头和 merkle proof 进行验证,而让 CKB 产生相应的 mirror token ,这个 morror token 可以再去和 CKB 的任何资产进行交换。
案例二:长期而言,透过 Nervos 的互操作性 2.0 基础设施完成 CEX 般的多链资产交换也是可能的
* 想象一下,今天 Alice 在得知 Bob 的 EOS 地址后,可以用它的以太坊钱包中的 200 ERC-USDT ,透过 Force Bridge 和 Pw-core ,在 CKB 上换得 200 EOS USDT 的镜像资产,然后将他烧毁后,让 EOS 上的 CKB 轻节点验证这笔交易,并且将 200 EOS USDT 发送给只有 EOS 钱包的 Bob。

Polyjuice :让以太坊等多链的 dApp 不更动代码的前提下迁移至 Nervos

在拥有了让用户更自由进入 CKB 世界的 pw-core,以及让资产更轻易的在 CKB 上跨链流动的 ForceBridge 后,一套要让互操作性达到极致的系统,还有另一个让开发者可以避免重复造轮子的重要组件,那就是通用的账户模型,CKB 上的 EVM 兼容层 — Polyjuice

Polyjuice 不仅仅是 EVM 兼容层,而是通用的账户模型,长期而言它可以实现对于更多兼容更多基于账户模型的公链的虚拟机环境,这意味着,今天今天其他链上的开发者,如果要将他们的 dApp 迁移到 CKB 上面来,不会因为代码迁移而产生太大的开发成本,去为同一种业务逻辑写一套新的代码。

而 Polyjuice 为什么能够让开发者能够在 CKB 上直接用以太坊的 solidity 部署智能合约,这里有两个关键点,一个是 CKB VM 足够的强大,得以在其上建构 CKB- VM 可以解析、验证的 EVM(Polyjuice 使用的是 evmone ),那么我们就可以让 solidity 背后的 bytecode 让 CKB-VM 上的 EVM 先进行解析,;另外,在 cell model 下,透过将各种 cell 进行聚合,以及使用 Sparse Merkle Tree 的结构将合约数据进行哈希,就可以在整体的状态合理使用的情况下,将合约数据放置于 cell 的 data 字段之中,让 EVM 所需的账户模型能够在 CKB 上被建构与验证。


Source:ZengB 的 Polyjuice tech session
目前据 Polyjuice 公布的内容,我们可以得知整体的开发者体验,以及用户体验都会仿效以太坊的使用体验,但有一点是不同的,那就是 Polyjuice 将会直接搭载 GodWoken 这个 Rollup 技术 ,让 Polyjuice 所呈现的 EVM 兼容层能够比 Eth 1.0 拥有更好的性能。

这不禁让人想到最近以太坊上出现的致命痛点,就是爆款的 DeFi 应用问世之际,都会伴随着 Gas fee 的飙升,这个时候网络的速度也极度的拥挤,导致许多的以太坊 DeFi 应用必须寻求 Rollup 等等 Layer2 解决方案的协助,但是在寻求 Rollup 的协助的时候,又会面临到一个问题,那就是各个 DeFi dApp 在迁移到 Layer2 之际「开发者必须将智能合约重写,因为 Layer2 可能不兼容 solidity」以及「用户的资产必须要切换网络完成搬迁」,这些问题其实在 Polyjuice + Rollup(Godwoken)后可以比其他既有的 Rollup 解决方案来的更有优势,而且搭配 ForceBridge 和 pw-core ,用户甚至可以直接使用 metamask 来操作搬迁过的合约,甚至他们压根不需要知道他们使用的是 CKB 的互操作性2.0这套基础服务。这或许对 ETH 的 dApp 来说,互操作性 2.0 还能是更好的 Layer2 选项。

让我们来想一下,如果 互操作性2.0的是三个组件同时使用上了以后,一个从以太坊上 Fork 到 CKB 的项目是什么样的体验,举个例子,如果今天在 Ethereum 上的借贷协议,如 Compound 、Aave 觉得 Ethereum 太拥堵了,他能够选择迁移到 CKB 上,那么对他的用户来说,他如果要使用 YFI 去借出 USDC,那么他一样是把 YFI 锁在某个合约之中,然后领出 USDC,等他归还了 USDC 之后,在 Nervos 上的借贷合约,就能够透过 forceBridge 去解锁他的 YFI 返还给他使用。因此对用户而言,使用体验上一样没有任何影响,而且他只会觉得,为什么现在他用 metamsk 开启的以太坊 dApp 速度变快了,交易的 gas fee 还降低了?!
而且甚至此时这个借贷协议,还能够获得多链的有价值资产来进行抵押借贷,我们都明白在以太坊之外,其实还有许多有价值的资产,例如 BTC、DOT、EOS、FIL、TRX,如果这些公链也被 ForceBridge 成功整合,那么甚至我们可以看到一个能用 DOT 抵押,借出 DAI 的借贷协议,在 Nervos 上诞生。

结论:区块链底层设计的灵活性,决定上层应用的可能性

综合以上三种基础设施,笔者认为,之所以 Nervos 想对互操作性 2.0 大力的实现并且推广,一个很重要的原因是因为,这大大的增进了区块链资产的互联,以及让用户能够更容仪的使用 dApp,同时开发者也可以避免陷入老师需要重复造轮子的窘境,区块链上光是跨链协议就有太多种的标准,最后我们看到的只是一个又一个的圈层和割裂的世界,并不是我们在区块链世界想要看到的。

然而,凭什么 Nervos 能够有足够的能力,去推行互操作性 2.0,一个很大的重点,就是 Nervos 的底层架构足够的简单与弹性,另外就是 Nervos 的底层虚拟机 CKB-VM 足够的强大,套学姐的话说:

「CKB 上智能合约带来的最本质的优点,并不是多语言支持,也不是和约部署后可以更新,甚至不是我们支持自定义的加密算法。我们想通过 CKB VM 来提供的,是在大家的原生 CPU 上,尽可能薄的一层抽象,通过这一层抽象带来区块链需要的确定性与安全性。同时投入相当多的精力,让这一层抽象做到足够透明,赋予 CKB VM 与原生 CPU 一样的能力。」

也就是因为 Cell model 足够的简单和尽可能的低度抽象,他保证了不论什么样的解锁规则,都可以在 Cell model 上被实现,也是因为如此,所以能够看到不管是 UTXO 架构,还是所谓的以太坊的编程模型 Account model 都可以被 Cell model 演绎出来。这个特性在 Force Bridge 的设计上也能够看到。

总之,我们能够看到 Nervos CKB 的基础设施上,最大的价值是都保有了让后来的开创者挥洒自己的能力与才华的空间和可能性。

在经过了这一番对于互操作性 2.0 的学习和思考之后,慢慢的会有更多人也和我一样相信,Nervos 长期以来所说的「多资产价值存储公链」绝对不是口号,而是是实在的目标。在绝对安全的基础之下,Nervos 正在给予各种资产建构在 Nervos 上尽可能多的延展性和发展潜能。

最后谢谢 Wenchao、Xuejie、以及 Frank 等互操作性 2.0 组件的重要开发者给我的启示或是不厌其烦的解惑,所获良多,甚是愉快。当然,互操作性 2.0 的跨度甚大,如果有任何地方有待改进或加强,也恳请指正和交流,我将不胜感激。

12 Likes