撰文:MIDDLE.X,Paka Labs研究员
审阅:Shawn Lin, 1PAR Research创始人
鸣谢:Bifrost 系统架构师 BuffaloDarwinia 、技术教育专家 Robin、WeiChainX 技术负责人 徐留成 在本文写作过程中提供了咨询帮助本篇为全篇的第一部分,约14000字,建议阅读时间35分钟;全篇共四部分,将陆续发布。
1 前言 跨链技术被认为是区块链领域的圣杯,是实现万链互通的关键技术。人们往往将其重要性和互联网的TCP/IP进行类比。正是因为 TCP/IP协议簇 提供了点对点链接的机制,将资料应该如何封装、寻址、传输、路由以及在目的地如何接收,都加以标准化,才使得全球的终端连成了一张网,演变成了我们今天所称的互联网。 随着区块链行业的迅猛发展,各类公链,许可链不断涌现,百花齐放。然而,绝大多数链与链之间由于技术、生态、竞争等原因无法连接互通,这带来了用户、资产、应用、数据的割裂,形成了「孤岛效应」。从根本上讲,形成这种局面的原因主要是:用户需求的多样化和区块链扩展性的限制。 为了将孤岛连成大陆,业界对跨链技术展开了积极的探索。本文将对当前跨链的主要技术形态进行阐述和分析,并对当前致力于解决跨链问题的典型区块链项目进行举例。关于跨链的研究报告已经有很多,但本文会在前人的研究基础上,力求做到
深入技术本质,辨析易混淆概念,把握脉络框架,囊括最新进展。 2 跨链究竟要跨什么? 每条区块链上都有自己的原生通证。通证因其封装了某种权益,而成为价值的载体。链内的通证可以进行可信的交换,然而链间的通证交换却“隔链如隔山”。只有实现链间通证的可信交换,才能实现区块链作为“价值互联网”的重要作用。 目前通过中心化交易所可以实现跨链通证交换,例如将BTC充值到交易所,换成ETH之后,再提现到ETH钱包。但人们不满足于中心化的方案,希望能够直接在链上进行可信交换,例如用户A想要用BTC,交换用户B持有的ETH,这个过程会有个问题,如果两人约定了交易,但A进行了转账后,B食言而肥怎么办?这就需要用到跨链技术,通过系统的撮合,让两笔转账能够同步进行。基于哈希时间锁的原子交换,是实现这一场景的典型技术。 通证传递是指,一条链上的原生资产,流通到另外的链上。这是无法直接实现的,任何通证都只能依附于其宿主链。一般而言,通证传递是靠在源链上锁定原生资产,同时在目标链上发行等量模拟原生资产的锚定资产来实现的。如何保证这一过程的安全可靠,是跨链技术的一大挑战。 通证传递和通证交换,都可以解决链间价值交换的问题,但这两者不完全是一回事。如果A想用1个BTC交换B的10个ETH,这个过程只需实现通证交换,但如果A想要将这1个BTC拿到以太坊上使用,则需要通证传递。通证传递除了解决价值交换的问题,还有额外的效用。我们可以通过通证传递,实现链A上的资产参与链B上的DeFi应用,构建一个更普惠的开放金融,也可以将通证从一个昂贵的链,转移到一个经济链,节省交易费用,或者从一个缓慢的链转移到快速的链,实现扩容,亦或者,从一个非隐私链,转移到一个隐私链,实现交易隐私。可以说,
通证传递能解决的问题,是通证交换所能解决的问题的超集。 完全意义上的跨链其实应该能让链间的任何消息进行可靠的传递。任何跨链事务本质上都是一连串跨链消息传递组合而成的,例如,通证传递作为一类跨链事务,是由两次跨链消息传递组成的,先后是: 因此,我们可以说,跨链信息传递包含了跨链通证传递。
跨链信息传递所解决的问题是跨链通证传递的超集。
通过跨链信息传递,一条链可以读取和验证另外一条链的状态和信息,一条链的智能合约可以将其他链的某个状态和信息作为执行的触发条件。因此,通过跨链信息传递,可以实现丰富的跨链功能,例如跨链借贷,跨链众筹,跨链支付,跨链衍生品,跨链DAO等。如果区块链间能够灵活调用彼此功能,使用彼此的服务,那么链与链将组合成一个巨大的服务协同网络,实现我们预期的万链互联的状态。 3.跨链技术概览 现在的跨链技术形态,有些只是实现了通证交换,例如哈希时间锁和跨链DEX;有些则通过建立一组链上角色来转发消息,验证状态,有些是提出了一套通信协议, 实现区块链间的通信;有些是提出了新的系统架构和造链协议, 支持更多区块链的接入。 由于链和链之间互相独立,无法建立直接连接,链之间无法直接感知对方状态变更。因此需要搭建通信桥梁。在通信桥梁选择上,通常来说分为五大类技术形态,分别是
基于哈希时间锁的原子交换,见证人,轻节点侧链,中继链,共享验证人,在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操作码来实现哈希时间锁,在以太坊等图灵完备的链上,则可以通过智能合约来实现哈希时间锁。事实上,智能合约可以实现远比哈希时间锁更多元、更复杂的条件成功交易和条件失败交易。 我们可以看到,哈希时间锁实现了跨链双方去中介的原子交易,无需任何信任假设。同时,我们也意识到,这种交易方式在用户体验上并不友好,主要体现为以下三方面: 另外,在跨链的实现程度上,哈希时间锁有其局限性,只能实现跨链的通证原子交换,无法实现通证传递及更广泛的跨链信息传递,因此在实际跨链应用中,往往和其他跨链技术组合使用。 见证人,英文为Notary,有时也被译为公证人,是为传递跨链信息,托管跨链资产而设置的一个特殊角色。2012年Ripple发布了InterLedge Protocol(ILP),首次通过第三方见证人的方式实现了跨链转账,在此之后,见证人机制陆续被应用在以BTC锚定资产为主的诸多跨链项目中。
不同的跨链项目对见证人有不同的设定:见证人可能是单个主体,但大多数情况下是多个主体;见证人的产生方式可能是许可式的,也可能是自由准入的;为了实现资产跨链,见证人将不得不管理一个托管账户,管理托管账户的方法可能是独立控制或是多方控制;用户对见证人的信任基础,可能来源于见证人自身的信用,也可能来源于见证人做了超额抵押。 最简单的方式是组建一个许可式的见证人组,成员基本固定,成员的加入与退出,则由当前成员审核表决。这种方式是相对中心化的,比较去中心化的方式是自由准入的方式,任何主体,只需符合既定的条件,例如抵押相应资产,即可成为见证人。自由准入带来了额外的风险敞口,可能带来恶意见证人,产生串通作恶的风险。因此,有的跨链协议选择加入一个随机抽取机制:每次的操作,不是由所有见证人签名,而是从符合条件的见证人集中随机抽取一组见证人,如此一来,可以增加见证人串通作恶的成本。 见证人可以通过超额抵押来获取信任,这意味着见证人抵押的价值,必须大于托管的账户资产价值,如果托管的资产发生损失,用户将从抵押金中获得赔偿。超额抵押使得用户托管的资产具有极高的安全性,但是超额抵押给见证人带来了资金成本,见证人的资金成本将转化为高昂的跨链手续费用。 见证人也可以靠自己的商誉来背书,尽管含有信任假设,但其优势是跨链费用低廉,甚至可以做到免费,因此还是吸引了大批用户。 见证人可能各自控制一个独立控制地址,形成托管地址矩阵,来承接用户的托管委托。需要注意的是
独立控制地址不一定是单签名地址,见证人出于安全考虑,可能会采用多签和私钥分片技术来管理独立控制地址,例如,某个见证人在链下是一家人数众多的公司,该见证人的地址有可能会由公司的多名高管或股东通过多签和私钥分片共同管理。然而,不管使用什么技术来管理地址,只要是由单个主体控制的地址,我们都称为独立控制地址。 更多的情况下,托管地址是由多方共同控制的地址。有可能是所有见证人共同管理一个地址,也有可能是将见证人分组,每个组共同管理一个地址。这种情况则必须用到多签或者私钥分片这样的多方控制技术。 3.2.3.1 多签 多签,或称多重签名,英文为Muti-Sig,是由多个私钥共同控制一个账户的技术,多签技术可以实现一个地址必须由M-of-N个签名人签名才能转账,1≤M≤N。 在BTC中,多签地址是P2SH类型的地址,普通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上,则无法对一个P2SH多签地址的签名人组成员进行编辑,如果某个签名人的私钥泄露或者需要退出,只能重新创建一个新的P2SH多签地址,将资产转到新的地址里。 整体上,见证人模式是一种相对容易实现,且通用性强,适配成本低的跨链方式。见证人模式的最初版本是相对中心化的,但人们不满足于此,于是通过各种方法对其进行了改进,使其具有去中心化的特性,例如使用更加去中心化的见证人准入机制和分组机制,使用更加分布式的资产托管地址等。由此,产生了各种各样的改进方案。这些改进方案在实现去中心化的同时,也带来了一定的复杂性。 侧链的产生,源于人们对于BTC扩容的努力。2014年10月,BlockStream团队发布了《侧链白皮书》,首次提出了“锚定”式跨链方案。锚定(Pegged),有时被翻译为“楔入”,表达的是被锚定链对锚定链的可读状态,这种状态也被称为“锚定链是被锚定链的侧链”。 人们最早希望通过将BTC的交易从BTC主链,转移到侧链上,来降低BTC主链的压力,2016年由RootStock团队开发的RSK被认为是BTC最早的侧链。侧链技术的本质是通过在侧链上融合主链轻节点来实现主链对侧链可读。该技术稍加转化,即可被应用于跨链,我们只需在目标链上部署源链的轻节点合约,即可将目标链改造为源链的侧链,实现由源链到目标链的单向跨链。
所谓轻节点,是指一个体积较小的,只存储区块头信息的节点。轻节点并不存储链上的全部交易,但是可以通过区块头信息,验证某个交易是否存在于链上。轻节点合约则是包含了轻节点的智能合约。通过在目标链部署源链的轻节点合约,即可实现对源链来的消息进行真实性验证。其过程大致如下:当源链A有请求传递一笔跨链交易信息给目标链B时,交易发起者将该交易的明细内容、区块高度、以及该交易SPV证明(指该交易的Mekre路径)一并提交到B链;部署在B链上的A链轻节点合约,通过SPV证明,重新计算该交易所在区块的区块头哈希值;得到的哈希值与轻节点中对应的区块头哈希值进行比较,如果一致,则表明该交易确实发生在该区块中,若不一致,则说明该交易并不存在于该区块。