原文作者:MIDDLE.X,Paka Labs 研究员
原文编辑:Shawn Lin, 1 PAR Research 创始人
鸣谢:
Bifrost 系统架构师 Buffalo
Darwinia 技术教育专家 Robin Wei
ChainX 技术负责人 徐留成
在本文写作过程中提供了咨询帮助
本篇为全篇的第一部分,约 14000 字,建议阅读时间 35 分钟;全篇共四部分,将陆续发布。
跨链技术被认为是区块链领域的圣杯,是实现万链互通的关键技术。人们往往将其重要性和互联网的 TCP/IP 进行类比。正是因为 TCP/IP 协议簇 提供了点对点链接的机制,将资料应该如何封装、寻址、传输、路由以及在目的地如何接收,都加以标准化,才使得全球的终端连成了一张网,演变成了我们今天所称的互联网。
随着区块链行业的迅猛发展,各类公链,许可链不断涌现,百花齐放。然而,绝大多数链与链之间由于技术、生态、竞争等原因无法连接互通,这带来了用户、资产、应用、数据的割裂,形成了「孤岛效应」。从根本上讲,形成这种局面的原因主要是:用户需求的多样化和区块链扩展性的限制。
为了将孤岛连成大陆,业界对跨链技术展开了积极的探索。本文将对当前跨链的主要技术形态进行阐述和分析,并对当前致力于解决跨链问题的典型区块链项目进行举例。关于跨链的研究报告已经有很多,但本文会在前人的研究基础上,力求做到深入技术本质,辨析易混淆概念,把握脉络框架,囊括最新进展。
每条区块链上都有自己的原生通证。通证因其封装了某种权益,而成为价值的载体。链内的通证可以进行可信的交换,然而链间的通证交换却“隔链如隔山”。只有实现链间通证的可信交换,才能实现区块链作为“价值互联网”的重要作用。
目前通过中心化交易所可以实现跨链通证交换,例如将 BTC 充值到交易所,换成 ETH 之后,再提现到 ETH 钱包。但人们不满足于中心化的方案,希望能够直接在链上进行可信交换,例如用户 A 想要用 BTC,交换用户 B 持有的 ETH,这个过程会有个问题,如果两人约定了交易,但 A 进行了转账后,B 食言而肥怎么办?这就需要用到跨链技术,通过系统的撮合,让两笔转账能够同步进行。基于哈希时间锁的原子交换,是实现这一场景的典型技术。
通证传递是指,一条链上的原生资产,流通到另外的链上。这是无法直接实现的,任何通证都只能依附于其宿主链。一般而言,通证传递是靠在源链上锁定原生资产,同时在目标链上发行等量模拟原生资产的锚定资产来实现的。如何保证这一过程的安全可靠,是跨链技术的一大挑战。
通证传递和通证交换,都可以解决链间价值交换的问题,但这两者不完全是一回事。如果 A 想用 1 个 BTC 交换 B 的 10 个 ETH,这个过程只需实现通证交换,但如果 A 想要将这 1 个 BTC 拿到以太坊上使用,则需要通证传递。通证传递除了解决价值交换的问题,还有额外的效用。我们可以通过通证传递,实现链 A 上的资产参与链 B 上的 DeFi 应用,构建一个更普惠的开放金融,也可以将通证从一个昂贵的链,转移到一个经济链,节省交易费用,或者从一个缓慢的链转移到快速的链,实现扩容,亦或者,从一个非隐私链,转移到一个隐私链,实现交易隐私。可以说,通证传递能解决的问题,是通证交换所能解决的问题的超集。
完全意义上的跨链其实应该能让链间的任何消息进行可靠的传递。任何跨链事务本质上都是一连串跨链消息传递组合而成的,例如,通证传递作为一类跨链事务,是由两次跨链消息传递组成的,先后是:
源链锁仓通证,并将锁仓的消息及其证明,传递给目标链;
目标链接收到信息,验证其真实性之后铸造映射通证,并将回执发送回源链。
因此,我们可以说,跨链信息传递包含了跨链通证传递。跨链信息传递所解决的问题是跨链通证传递的超集。
通过跨链信息传递,一条链可以读取和验证另外一条链的状态和信息,一条链的智能合约可以将其他链的某个状态和信息作为执行的触发条件。因此,通过跨链信息传递,可以实现丰富的跨链功能,例如跨链借贷,跨链众筹,跨链支付,跨链衍生品,跨链 DAO 等。如果区块链间能够灵活调用彼此功能,使用彼此的服务,那么链与链将组合成一个巨大的服务协同网络,实现我们预期的万链互联的状态。
由于链和链之间互相独立,无法建立直接连接,链之间无法直接感知对方状态变更。因此需要搭建通信桥梁。在通信桥梁选择上,通常来说分为五大类技术形态,分别是基于哈希时间锁的原子交换,见证人,轻节点侧链,中继链,共享验证人,在 3.1-3.5 小节将展开叙述:
哈希时间锁是一套密码学方法,该方法可以实现去信任的跨链资产交易。比如我用的 1 个 BTC 和你的 10 个 ETH 交易,就可以通过哈希锁来实现交易的原子性。其原理大致如下:
用户 A 生成随机密码 r, 并计算出 r 的哈希值 m=hash(r) ,将 m 值发给用户 B;
与此同时,用户 A 发起一笔交易,向用户 B 转 1 BTC,该交易的成功是有条件的,须用户 B 出示密码 r 才能成功,否则超过预设的时间,交易将自动失败;
用户 B 看到 A 发起的交易之后,也发起一笔交易,向用户 A 转移 10 个 ETH,该交易的成功也是有条件的,需要用户 A 出示 r 才能成功,超过预设时间,交易也将自动失败。这里的关键是,用户 B 创建这样一个以出示 r 值 为成功条件的交易,并不需要拿到密码 r 的值,只需要知道 m 值即可创建,而我们知道,哈希运算是不可逆的,知道 m 无法推算出 r ;
用户 A 看到 B 发起的交易之后,出示 r 值,使得 B 发起的交易成功,获得 B 转账的 10 个 ETH,r 值被披露;
用户 B 在上个步骤中也拿到了 A 出示的 r 值,使得 A 发起的交易成功,获得 A 转账的 1 个 BTC。
通过以上机制,在两条不同链上的交易,被耦合为一个事件,只能整体成功,或者整体失败,不会出现 A 给 B 的转账成功,而 B 给 A 的转账失败的情况,反之亦然。
这种机制的实现,依赖于两个技术,那就是 「条件成功交易」和「条件失败交易」,在以上案例中,交易成功的触发条件是出示哈希原像 r,交易失败的条件则是超过预设时间未出示哈希原像 r ,我们也可以分别称为哈希锁和时间锁。
在 BTC 中,可以通过 CLTV 操作码或 CSV 操作码来实现哈希时间锁,在以太坊等图灵完备的链上,则可以通过智能合约来实现哈希时间锁。事实上,智能合约可以实现远比哈希时间锁更多元、更复杂的条件成功交易和条件失败交易。
我们可以看到,哈希时间锁实现了跨链双方去中介的原子交易,无需任何信任假设。同时,我们也意识到,这种交易方式在用户体验上并不友好,主要体现为以下三方面:
交易双方必须同时在线,严格执行参与流程,因此,交易发起方,如果无法找到一个在线的交易对手方,则必须等待。
对于 BTC,创建带有哈希时间锁的交易,在底层是通过创建两笔交易完成的,由于底层机制比较复杂,在前文所述的交易过程中被简化表述为了一笔交易。如果交易成功,两笔交易都要上链,需要多付手续费。
实际交易中,会存在汇率问题,交易对手方可以根据汇率是否有利于自己来选择是否完成交易。尤其在金额较大时,交易对手方有很强的动力这么做,这导致原子交易可能不适用于大额交易。
另外,在跨链的实现程度上,哈希时间锁有其局限性,只能实现跨链的通证原子交换,无法实现通证传递及更广泛的跨链信息传递,因此在实际跨链应用中,往往和其他跨链技术组合使用。
见证人,英文为 Notary,有时也被译为公证人,是为传递跨链信息,托管跨链资产而设置的一个特殊角色。2012 年 Ripple 发布了 InterLedge Protocol(ILP),首次通过第三方见证人的方式实现了跨链转账,在此之后,见证人机制陆续被应用在以 BTC 锚定资产为主的诸多跨链项目中。
不同的跨链项目对见证人有不同的设定:见证人可能是单个主体,但大多数情况下是多个主体;见证人的产生方式可能是许可式的,也可能是自由准入的;为了实现资产跨链,见证人将不得不管理一个托管账户,管理托管账户的方法可能是独立控制或是多方控制;用户对见证人的信任基础,可能来源于见证人自身的信用,也可能来源于见证人做了超额抵押。
3.2.1 见证人产生方式
最简单的方式是组建一个许可式的见证人组,成员基本固定,成员的加入与退出,则由当前成员审核表决。这种方式是相对中心化的,比较去中心化的方式是自由准入的方式,任何主体,只需符合既定的条件,例如抵押相应资产,即可成为见证人。自由准入带来了额外的风险敞口,可能带来恶意见证人,产生串通作恶的风险。因此,有的跨链协议选择加入一个随机抽取机制:每次的操作,不是由所有见证人签名,而是从符合条件的见证人集中随机抽取一组见证人,如此一来,可以增加见证人串通作恶的成本。
3.2.2 用户对见证人的信任基础
见证人可以通过超额抵押来获取信任,这意味着见证人抵押的价值,必须大于托管的账户资产价值,如果托管的资产发生损失,用户将从抵押金中获得赔偿。超额抵押使得用户托管的资产具有极高的安全性,但是超额抵押给见证人带来了资金成本,见证人的资金成本将转化为高昂的跨链手续费用。
见证人也可以靠自己的商誉来背书,尽管含有信任假设,但其优势是跨链费用低廉,甚至可以做到免费,因此还是吸引了大批用户。
3.2.3 资产托管方式:独立控制地址与多方控制地址
见证人可能各自控制一个独立控制地址,形成托管地址矩阵,来承接用户的托管委托。需要注意的是独立控制地址不一定是单签名地址,见证人出于安全考虑,可能会采用多签和私钥分片技术来管理独立控制地址,例如,某个见证人在链下是一家人数众多的公司,该见证人的地址有可能会由公司的多名高管或股东通过多签和私钥分片共同管理。然而,不管使用什么技术来管理地址,只要是由单个主体控制的地址,我们都称为独立控制地址。
更多的情况下,托管地址是由多方共同控制的地址。有可能是所有见证人共同管理一个地址,也有可能是将见证人分组,每个组共同管理一个地址。这种情况则必须用到多签或者私钥分片这样的多方控制技术。
3.2.3.1 多签
多签,或称多重签名,英文为 Muti-Sig,是由多个私钥共同控制一个账户的技术,多签技术可以实现一个地址必须由 M-of-N 个签名人签名才能转账, 1 ≤M≤N。
在 BTC 中,多签地址是 P 2 SH 类型的地址,普通 BTC 地址是由公钥哈希后得到的,而多签地址则是基于脚本哈希。该类地址对 N 值有一个限制,N≤ 15 ;在以太坊等具有图灵完备性的区块链中,则可以通过智能合约来实现多签地址,N 值也可以无限大。
3.2.3.2 私钥分片
私钥分片技术,也称分布式密钥技术,是一个具有更高理论安全度的多方控制技术,该技术脱胎于图灵奖获得者姚期智先生提出的安全多方计算(sMPC,Secure Muti-Party Computation),结合门限技术(TSS),也可以实现 M-of-N 签名管理。该技术支持将一个账户的私钥拆分成若干个碎片,分配给多个签名人,当已签名的碎片私钥数达到阈值时,即可对账户资产进行操作。具体实现上,私钥分片有多种技术实现方式,涉及到复杂的密码学知识,本文不展开。
私钥分片之所以更加安全,是因为分片是不断刷新的,也就是每隔一段时间,分片会重新进行,给到每个人的碎片会产生变化。恶意者如果想要通过获取所有人的分片来盗取资产,必须获取到不同签名人在同一个时间单元里的私钥,否则驴唇不对马嘴,无法合成完整私钥。
3.2.3.3 签名人组成员管理
无论是多签还是私钥分片,签名人组都不可能是一个成员始终固定的群组,所以会涉及到签名人组的成员增减。在私钥分片技术中,只需要重新分片,把碎片分发给增减后产生的新签名人组即可。在多签技术中,则分为两种情况:
在以太坊等图灵完备的区块链上,可以通过智能合约编程来设置签名人组成员管理规则,例如超过 2/3 的现有签名人签名同意,即可批准新的签名人的加入,或者批准剔除某个老的签名人。
在 BTC 上,则无法对一个 P 2 SH 多签地址的签名人组成员进行编辑,如果某个签名人的私钥泄露或者需要退出,只能重新创建一个新的 P 2 SH 多签地址,将资产转到新的地址里。
3.2.4 向去中心化方向改进
整体上,见证人模式是一种相对容易实现,且通用性强,适配成本低的跨链方式。见证人模式的最初版本是相对中心化的,但人们不满足于此,于是通过各种方法对其进行了改进,使其具有去中心化的特性,例如使用更加去中心化的见证人准入机制和分组机制,使用更加分布式的资产托管地址等。由此,产生了各种各样的改进方案。这些改进方案在实现去中心化的同时,也带来了一定的复杂性。
侧链的产生,源于人们对于 BTC 扩容的努力。2014 年 10 月,BlockStream 团队发布了《侧链白皮书》,首次提出了“锚定”式跨链方案。锚定(Pegged),有时被翻译为“楔入”,表达的是被锚定链对锚定链的可读状态,这种状态也被称为“锚定链是被锚定链的侧链”。
人们最早希望通过将 BTC 的交易从 BTC 主链,转移到侧链上,来降低 BTC 主链的压力, 2016 年由 RootStock 团队开发的 RSK 被认为是 BTC 最早的侧链。侧链技术的本质是通过在侧链上融合主链轻节点来实现主链对侧链可读。该技术稍加转化,即可被应用于跨链,我们只需在目标链上部署源链的轻节点合约,即可将目标链改造为源链的侧链,实现由源链到目标链的单向跨链。
所谓轻节点,是指一个体积较小的,只存储区块头信息的节点。轻节点并不存储链上的全部交易,但是可以通过区块头信息,验证某个交易是否存在于链上。轻节点合约则是包含了轻节点的智能合约。通过在目标链部署源链的轻节点合约,即可实现对源链来的消息进行真实性验证。其过程大致如下:
当源链 A 有请求传递一笔跨链交易信息给目标链 B 时,交易发起者将该交易的明细内容、区块高度、以及该交易 SPV 证明(指该交易的 Mekre 路径)一并提交到 B 链;
部署在 B 链上的 A 链轻节点合约,通过 SPV 证明,重新计算该交易所在区块的区块头哈希值;
得到的哈希值与轻节点中对应的区块头哈希值进行比较,如果一致,则表明该交易确实发生在该区块中,若不一致,则说明该交易并不存在于该区块。
尽管任何人都可以向目标链提交交易明细及其 SPV 证明,但实际跨链应用中,往往会有专门的角色来做这件事,而不是交易发起者来做。我们在本文中,我们称该角色为 Relayer(中继者)。Relayer 除了要负责帮助用户传递跨链消息,还需要负责将源链的区块头传递到目标链,以建立轻节点合约。
Relayer 和见证人一样,都是为传递跨链消息而设的一个特定角色,但 Relayer 和见证人有两点不同:
Relayer 不负责托管资产,如果采用侧链机制来实现跨链,跨链过程中锁仓的通证会被托管到一个特定的托管合约中。
对于 Relayer 的信任假设,相比见证人而言更为宽松。我们必须相信大多数的见证人都是诚实的,但众多的 Relayers 只要至少有一个是诚实的,我们就可以相信跨链消息传递是可靠的。这点我们将在 3.3.3 小节进一步论述。
不同跨链项目中对 Relayer 的称呼不同。有些项目中,Realyer 的角色被拆分,负责传递区块头的 Relayer(Head Relayer)和负责传递交易消息的 Relayer(Message Relayer)被定义为两种角色。有些项目中不存在一个专门的 Relayer 角色,Relayer 的职能被合并入了其他角色,例如由源链的验证人直接承担 Relayer 的角色。不过,万变不离其宗,轻节点式侧链方案的技术本质始终是:Relayer 将源链的区块头传输到目标链,建立轻节点,然后 Relayer 从源链搬运交易信息到目标链时,用轻节点上的区块头信息验证交易信息的正确性。
3.3.1 双向锚定
我们需要理解的是,主链和侧链的关系是相对的,两条链可以互为侧链。我们在前文中提到的“源链”和“目标链”也是相对概念,在一个跨链消息传递事件中,消息的源起方往往被称为源链,消息的接收方则被称为目标链。
跨链双方通过互埋对方轻节点,即可实现互相读取对方链上的信息,互联互通,这种形态被称为双向锚定(Two-Way-Pegging),这种形态下,两条链成为了彼此的侧链。两个方向都有 Relayer 组负责向对方传递信息,当然,两组 Relayer(B→A Relayer & A→B Reayer)也有可能是同一批人,被合并为同一个角色,兼负责双向的信息传递。
3.3.2 侧链与子链
谈到侧链,有必要和另外一个容易混淆的概念做一下辨析,那就是子链。子链没有自己的共识机制和原生通证,其安全性完全依托于主链,具有单向性。而侧链本身是一条独立运行的区块链,侧链与主链的关系,是相对概念,具有双向性。
以太坊的扩容链,有些是侧链形态,有些则是子链形态。采用 Plasma 方法和侧链方法的扩容链是以太坊的侧链(Plasma 侧链是另一种侧链形式,不是轻节点式侧链),而采用状态通道和 Rollup 方法的扩容链,则是以太坊的子链。
子链通过将交易从主链挪到子链进行,并定期向主链同步最终状态来实现对主链性能的扩容,所以,子链也被称为「提交链」,提交链的叫法比子链的叫法更贴近其技术本质。
子链的目的是为了扩容,扩容的本质是节省主链的资源,因此主链不会花费计算资源对子链提交的交易进行验证。子链自身需要一个机制在提交时证明其所提交内容的真实性。其中,状态通道,Optimistic Rollup,Arbitrum Rollup 采用欺诈证明的方式来证明,而 Zk Rollup,Validium 则采用零知识证明的方式生成有效性证明。
子链和主链之间,这种单向的信息提交式互动,在有些文献中,也被认为是跨链技术的一种形态,但 Paka Labs 认为,尽管侧链和子链都诞生于对区块链扩容的努力,但子链相关的技术只能用于创建扩容链,无法应用于两条独立区块链之间的跨链,不应归类为跨链技术。
3.3.3 轻节点侧链的优越性
如果说见证人机制重在 Trust(信任),那么轻节点侧链技术则重在 Verify(验证)! 通过区块头验证交易信息,其可靠性是在密码学上被保障的,交易是否存在,一验即知,确定无疑。
Relayers 传递的区块头也不可能造假,因为轻节点合约可以像全节点一样,对区块进行严格的验证,虚假的区块头无法通过验证。轻节点的验证程序和源链网络中的矿工节点验证程序是完全相同的,以 BTC 为例,需要经过以下步骤验证:
区块的数据结构语法上有效;
验证工作量证明,区块头的哈希值小于目标难度(确认包含足够的工作量证明);
区块时间戳早于验证时刻未来两个小时(允许时间错误);
验证区块大小在长度限制之内,即看区块大小是否在设定范围之内;
第一个交易(且只有第一个)是 coinbase 交易,即一个区块,矿工只能给自己奖励一次;
验证区块内的交易并确保它们的有效性:验证 MerkleRoot 是否是由区块体中的交易得到的,即重构区块 Merkle 树得到的树根,看是否和区块头中的 hashMerkleRoot 值相等。
恶意的 Relayers 如果串通作恶,唯一可行的方法是传递一个分叉链上的区块的区块头,但对于一个健康的网络,分叉链最终不会成为最长链,轻节点合约只需等待足够多个区块的确认即可(对于 BTC 轻节点,等待 6 个区块即可)。对于 BFT 类的链,轻节点合约只需验证区块的签名数即可知区块是否具备最终性。
只有源链或者目标链的本身出现重组,才会影响到轻节点合约的安全性。Relayer 能够给网络造成的危害最多止于集体罢工,让网络停止服务。
此外,Relayer 不负责管理托管资产,恶意的 Relayer 无法像恶意的见证人那样,有盗取托管资产的可能。因跨链而锁定的资产托管在合约中,合约中托管的资产,如果合约代码没有问题,其安全性就是合约所在链级别的。
由于 Relayer 作恶的条件苛刻,且危害性较小,轻节点式侧链中的 Relayer 并不需要像见证人那样做超额抵押。可以用更小的代价实现更多的跨链锚定资产发行。
由此可见,轻节点侧链方案,在跨链的成本上和安全性上,比见证人方案更有优势,是实现两条链之间跨链优先要采用的技术方案。但是有的链不支持智能合约,无法部署轻节点合约和托管合约,这种情况,只能退而求其次,采用见证人方案。
3.3.4 轻节点技术的发展:“瘦身”与“减负”
我们知道 BTC 的区块大小为 1 M,其区块头只有 80 byte,直到本文发布的时间,BTC 的历史区块头大小也尚未超过 60 M(高度约 69 万),但诞生较晚的以太坊的历史区块头加起来已经超过了 5 个 G(高度约 1300 万),随着区块链的多元化发展,部分新兴区块链更侧重于高 TPS,出块速度极快,其历史区块头的体积将可能很快超过以太坊。
这样的趋势,给轻节点式侧链带来了挑战,主要体现在两方面:
较大的区块头,将使得轻节点合约变得笨重,占用目标链的巨大存储空间;
源链较快的出块速度,将导致轻节点合约需要频繁的同步和验证新区块。
这两者,都将造成轻节点合约在目标链上巨大的 Gas 消耗,严重时会使得采用轻节点侧链技术实现跨链变得不具备经济可行性。
怎么办?回到见证人方案吗?但轻节点式侧链技术的优越性如此诱人,我们还是希望继续使用它。有没有办法让轻节点合约在不丧失其 SPV 验证能力的前提下,对其进行改造和扩容?
区块链行业的研究者们在两个方向上对轻节点侧链技术做了改进。首先是对轻节点合约进行“瘦身”,使其体积变得更小,且不随区块增加而线性增长,其次是对轻节点合约进行“减负”,将区块验证环节挪到链下,让轻节点合约只做交易的 SPV 验证。
3.3.4.1 轻节点合约的“瘦身”
我们需要了解一个新的协议,名为“FlyClient”,该协议由斯坦福大学的 Benedikt Bunz 等人在论文《FlyClient: Super-Light Clients for Cryptocurrencies》中提出的一种新型轻节点协议。Flyclient 轻节点不需要存储所有的区块头,而是只需存储最新的区块头。通过最新的区块头,即可随时“恢复”所有的历史区块头。该功能是通过一种叫“默克尔山脉”的密码学算法实现的。
默克尔山脉(Merkle Mountain Range)简称 MMR,是默克尔树(Merke Tree)的一种变体,我们将一条区块链的所有历史区块的哈希值作为叶子节点,通过 MMR 算法,生成一个 MMR 根值,并将该值写入最新的区块头,即可用该值去验证所有的历史区块头。
FlyClient 轻节点可以不断删除历史区块头,只保留最新的区块头,保持“轻盈”。当需要恢复某个区块头时,可以通过 Relayer 重新从全节点获取,并用最新区块头里的 MMR 根值,去验证恢复过来的区块头是否正确。
如果源链是概率最终性链,Flyclient 轻节点在接收 Relayer 传递的最新区块头时,会多一个验证步骤,那就是要求 Relayer 随机提供某个历史区块头,以供抽查。这样做是为了防止一种针对 Flyclient 轻节点的特有的新形式的欺诈。具体的欺诈方式和抽查算法比较复杂,本节先不做展开,在后续的案例介绍章节,将结合具体的跨链项目进行介绍。
Flyclient 轻节点真正实现了“把大象压缩成饼干”,让部署在目标链的源链轻节点合约可以轻装简行,让轻节点侧链式的跨链具有更好的经济可行性。但对于目前大部分的区块链而言,MMR 根值并不是区块头的固定部分,因此,Relayer 必须自己运行全节点,计算 MMR 根值,将 MMR 值加入区块头一并传递到轻节点中。一些较新的区块链已经将 MMR 根值作为区块头的固定部分了,现有的比较成熟的公链,也在有人提案软分叉升级,将 MMR 根值加入区块头固定结构中。区块头中固有 MMR 值的区块链,将对跨链开发更加友好。
3.3.4.2 轻节点合约的“减负”
对于轻节点合约,对最新区块头的验证是消耗 Gas 最多的环节,该环节的消耗和用户的跨链请求次数没有关系,只与源链的出块速度有关系。如果源链出块速度快,该环节的 Gas 消耗量将可能大到不可接受。
研究者们想到了通过将 Gas 消耗最多的新区块验证环节挪到链下进行。参考以太坊 layer 2 的扩容方案,zkRelayer 和欺诈证明两种方案先后被提出来。zkRelayer 采用零知识证明的方法在链下生成区块验证证明,并提交到链上,欺诈证明则是通过一套经济激励机制来激励 Relayer 提交正确的区块:挑战者时刻监督 Relayer 提交的区块,如果发现有恶意 Relayer 提交了不正确的区块,经轻节点验证后,挑战者可以获得恶意 Relayer 的押金,如果 Relayer 提交的区块没有被挑战,则默认为是正确的区块,轻节点合约直接收录,不再做验证。
中继方案是侧链方案的变体,和侧链归为一类技术方案,也是合理的。中继方案具有很高的扩展性,是当前最被广泛应用的跨链方案,本文为了将中继方案充分展开阐述,将其单独列了出来。
有时候,在双链跨链模型中,Relayers 会作为一条独立区块链的验证者而运行,该独立链被视为一个整体承担区块头搬运和跨链消息搬运的职能,Relayers 则在其内部对搬运的信息达成共识。这类独立区块链往往被称为桥接链,但它不是中继链。例 Polygon 的 PoS 桥,Near 的 PoA 彩虹桥,都只是桥接链,不是中继链。
区分两者的关键,在于其跨链通信路径的不同:
可以把桥接链理解为只是 Relayers 的容器,其职能依旧是搬运区块头和跨链消息,而中继链则是与各接入链都建立互为侧链关系的消息中转站。很多文献并没有对这两个概念做严格的区分,但这两者的实质是完全不同的。
3.4.1 连接现有区块链
中继模式中,往往由中继链的验证人,负责承担 Relayer 职能,转发链间消息。相比双向锚定,中继链模式具有更多的扩展性,与中继链相连接的链,我们称为接入链。
为了连接既已存在的区块链,需要用中继链去分别适配接入链。尽管中继链模式已经大大节约了连接成本,但依旧面临以下挑战:
要根据不同的接入链的特性,制定不同的适配方案,做主动兼容,工作量较大;
不同的链安全性有差异,会涉及到不同接入链的跨链授信问题,以保护整个跨链网络的安全;
新的区块链层出不穷,如果出现新特性的接入链,则需要开发新的适配方案
3.4.2 通信协议簇 造链协议
与主动兼容相比,有更省事的办法,是创造一个全新的区块链造链标准,依据该标准开发的区块链,具有相同的密码原语(Cryptographic Primitives)、共识机制和通信架构,可以很轻易的接入中继链,实现被动兼容。跨链双雄 Polkdot 和 Cosmos 便实践了这样的思路,两者都创建了一套造链标准,Polkadot 创造了 Substrate,Cosmos 则创造了 Cosmos SDK。尽管如此,对于已存在的重要区块链,还是需要主动兼容。Polkadot 和 Cosmos 中都设计了异构跨链模块,用来连接以太坊链和 BTC 链。
通信协议簇 造链协议类的跨链项目被看好,关键原因在于有望一劳永逸的解决跨链问题。或许我们所期待的万链互联愿景,最终不是一个网状结构,而是树状结构,那就是让某个中继链成为区块链世界的 layer 0 ,其他的链,包括占多数的同构链,和占少数的异构链,以 layer 1 ,layer 2 …的形式接入。
在以中继链 接入链的多链架构中,中继链已经不再只是一座桥梁,而是一个中枢,我们可以称之为“链枢”。链枢在承担跨链消息传递的任务的同时,还需处理好链间消息路由,消息时序等问题。
同样作为通信协议簇 造链协议的 Cosmos 和波卡,都蕴含了中继的思想,但稍加留意我们便发现,两者区别十分巨大。
Cosmos 的 Hub 和 Zone 之间建立的是典型的“双向锚定”关系,Cosmos 的跨链消息传递协议 IBC,依旧是靠内置在接收链上的轻节点合约来对跨链消息做 SPV 验证,但波卡的跨链消息传递协议 XCMP 中,并没有采取轻节点式的技术来验证跨链消息的合法性,而是采用了另外一种方法,Paka Labs 将其提炼出来,称之为「共享验证人」,列为跨链技术的一个单独分类。(关于 XCMP 和 IBC 的更多辨析,将在后续的举例章节展开。)
共享验证人方案是指多个链共享同一组验证人,并由这些共同的验证人负责验证跨链消息的方案。波卡将区块的搜集和验证解耦为两个职能,由两组角色负责,分别是收集者(Collator)和验证人(Validator),每条平行链都有自己的收集者,但平行链没有自己的验证者,区块验证由中继链的验证者负责。这相当于每条平行链都让渡了共识过程的一部分给中继链。因此,波卡的平行链间可以像同一个区块链的不同分区一样交互,不再需要额外的信任机制。
需要说明的是,波卡并没有让所有的验证人验证所有的链,而是采取了一个更经济的做法。在一个具体的时刻,每条平行链的验证人组是不一样的,每条平行链的验证人组由中继链随机分配,每隔一段时间都会重新分配,通过这样随机分配的机制,让恶意的验证人集难以联合作恶。这种机制,可以拿中国古代宋朝的军事制度来类比:兵无常将,将无常兵。
波卡的共享验证人本质上是一种分片机制,与以太坊 2.0 ,Harmony,Near 等采用分片机制提高可扩展性的区块链是类似的。但不同的是,分片链与信标链是终身一体的,而波卡的平行链可以和中继链随时解耦,随时耦合,当解耦时,平行链是一条可独立运行的区块链。
这个问题指的是,一个完整的跨链事务,必须作为一个整体,执行成功,或者执行失败,不能存在部分成功,部分失败的情况,否则使用跨链功能的用户将有可能面临资产损失。有两个思路可以实现这一点:一种就是通过密码学手段对一个跨链事务中的多个子交易进行耦合,例如基于哈希时间锁的原子交换方案;还有一种方法是让跨链事务的多个子交易具有严格的时序性,时序性包含三层含义:
只有子交易 1