跨链技术本质上是⼀种将A链上的数据D(或信息I,或消息M)安全可信地转移到B链并在B链上产⽣预期效果的⼀种技术。因为区块链系统本来就是⼀种特殊的分布式账簿数据库系统,所以这个转移的数据,最常见的就是资产的数据,如代币余额。
目前,主流的区块链跨链技术⽅案**按照其具体的两种架构(实现⽅式)**主要有:
⽬前,最有名的跨链项⽬有Cosmos和Polkadot,两者采⽤的都是基于中继链的多链多层架构。由此可⻅,侧链&中继链技术将会是未来跨链技术的主⼒。
本⽂⾸先简要介绍跨链的技术原理。其中简要介绍公证⼈机制、哈希锁定,详细介绍侧链&中继链技术。然后将介绍⼏个相关的跨链项⽬,包括基于ETH的Plasma、基于Polkadot的达尔文网络,基于Cosmos 的IRIS。
跨链交互根据所跨越的区块链底层技术平台的不同可以分为:同构链跨链和异构链跨链。同构链之间安全机制、共识算法、⽹络拓扑、区块⽣成验证逻辑都⼀致,它们之间的跨链交互相对简单。⽽异构链的跨链交互相对复杂,如Bitcoin采⽤PoW算法⽽Fabric采⽤传统确定性共识算法,其区块的组成形式和确定性保证机制均有很⼤不同,直接跨链交互机制不易设计。异构链之间的跨链交互⼀般需要第三⽅辅助服务辅助跨链交互。
跨链要达到安全可信必然对跨链机制、步骤等有⼀些要求,其中最重要的就是跨链事务的原⼦性。对于普通的链内交易来说,交易需要⽀持原⼦性——交易如果失败则需要回滚。⽽跨链的交易也是如此,其失败时要回滚涉及本次交易两条或多条链的交易。
公证人机制,也成为见证人机制,是一种中介的方式。设区块链A和B本身是不能直接进⾏互操作的,那么可以引⼊⼀个共同信任的第三⽅作为中介,由这个共同信任的中介进⾏跨链消息的验证和转发。很多时候,这个公证⼈/中介就是交易所。其优点在于⽀持异构的区块链跨链,缺点在于有中⼼化⻛险,只能实现交换不能实现转移。
跨链交易示例说明
假设A和B进⾏1个BTC换50个ETH的交易:
1. A将自己的1个BTC存入交易所的比特币地址;B将自己的50个ETH存入交易所的以太坊地址;
2. A在交易所上挂单:1 BTC for 50 ETH;
3. B通过交易所完成与A的交易,A得到50个ETH,B得到1个BTC。这里会有不少的形式:一种是B挂出购买比特币的单子,然后交易所撮合;另一种是B直接看到A挂出的卖单,然后直接要这个卖单。
4. A将从交易所得到的50个ETH提币到自己的以太坊账户中;B将从交易所得到的1个BTC提币到自己的比特币账户;通过引入中介完成A和B的BTC和ETH的交换。
通过该例⼦可以看出交易所的⽅式⽬前仅能够⽀持资产的交换,且资产交换的原⼦性、安全性完全由中⼼化的交易所保障,故存在⼀定的中⼼化⻛险。
哈希锁定的典型实现是哈希时间锁定合约HTLC(Hashed TimeLock Contract)。哈希时间锁定最早出现在⽐特币的闪电⽹络。哈希时间锁定巧妙地采⽤了哈希锁和时间锁,迫使资产的接收⽅在deadline内确定收款并产⽣⼀种收款证明给打款⼈,否则资产会归还给打款⼈。收款证明能够被付款⼈⽤来获取接收⼈区块链上的等量价值的数量资产或触发其他事件。哈希锁定只能做到交换⽽不能做到资产或者信息的转移,因此其使⽤场景有限。
跨链交易示例说明
以公证人机制示例中的需求为例:
1. A随机构建一个字符串s,并计算出其哈希h;
2. A将h发送给B;
3. A通过合约锁定自己的1个BTC资产,设置一个较长的锁定时间T1,再设置了获取该BTC的条件:B提供h的原始值s;
4. B锁定50个ETH到自己的合约,设置一个相对较短的锁定时间T2(T2<T1)。再设置50个ETH的获取条件:A提供h的原始值s;
5. A将字符串s发送到B的合约获得50个ETH;
6. B观察到步骤5中A的s值,将其发送给A的合约成功获取1个BTC;至此完成资产的交换。
7. 如果超时,则锁定的资产返回原主。
从上述过程看,哈希时间锁定合约有一些约束条件:
最初,主链特指比特币主网区块链。所谓侧链就是除了比特币区块链以外的,任何能遵循侧链协议并和比特币互通的一切区块链。侧链使得比特币有更好的流动性;而在比特币主网上开发应用很困难,现在通过在侧链上开发应用再使用互通方式与主链连接可以解决这个问题,也就是间接使用了比特币,从而进一步巩固了比特币的中心地位。
根据维基百科上的解释:侧链用来指代与主区块链并⾏的那条区块链。来⾃主区块链的entries可以向侧链连接,也可以被侧链连接;这样⼀来,侧链就可以独⽴于主区块链进⾏操作(例如通过使⽤备⽤的记录保持⽅式)。⼀个侧链模型是驱动链。”
这里包含三个要点:
从主链单链⻆度讲,侧链可以虚拟化地横向和纵向提升主链的性能。
从全局角度看,侧链作为跨链技术的一种,自然是为万链互连做出了重要贡献。实现万链互联有两者架构:
侧链是通过双向锚定技术实现的。将暂时的数字货币在主链中锁定,同时将等价的数字资产在侧链中释放。实现双向锚定的最大难点在于协议改造需要兼容现有主链,也就是不能对现有主链的工作造成影响。其具体的实现方式有:单一托管模式、联盟模式、SPV模式、驱动链模式、混合模式。
这⾥SPV模式是使⽤得最多的,也是最有前途的。SPV就是简单⽀付验证(Simplifified Payment Verifification),其能验证交易是否存在。
BTC-Relay是号称的史上第⼀个侧链,其通过以太坊构建了⼀个⽐特币的侧链,运⽤以太坊的智能合约允许⽤户验证⽐特币的交易。
SPV交易示例
以之前的需求为例
1 B将50个ETH发送到BTCSwap的合约进行冻结(该合约若确认B接收到来自A的1个BTC就自动将50个ETH转给A)
2 A确认B冻结信息后,将1个BTC转到B的比特币账户;
3 BTC-Relay将比特币区块头推送到BTCSwap合约;A将自己转BTC给B的交易tx发给合约BTCSwap合约,请求50个ETH;
4 BTCSwap合约结合tx和比特币区块链进行SPV验证,验证通过则将50个ETH转到A的以太坊地址。
侧链的机制相对哈希锁定⽽⾔能够提供更多的跨链交互场景,侧链以及类SPV验证的思想适合所有跨链的场景。
中继链算是公证⼈机制和侧链机制的融合和扩展,⽬前社区内最活跃的两个跨链项⽬ Cosmos 和 Polkadot 采⽤的都是基于中继链的多链多层架构,其中
为了⽀持平⾏链之间的跨链操作,Cosmos提出了⼀种跨链交互协议IBC(Inter-Blockchain Communication Protocol)。
以链A到链B转账10token为例说明使用IBC的跨链交互:
1 互相跟踪。如果A要和B进行跨链交易,那么A和B链需要分别运行相当于对方区块链的轻节点,这样可以实时接收到对方的区块头信息(方面后续执行类SPV验证);链A、链B初始化IBC协议;
2 链A冻结10token,并生成相应的证明发送给链B;
3 链B接收到相应的IBC消息,通过链A的区块头信息确定链A确实进行相应的资产冻结,然后链B会生成等价10token的资产。
以上是使用IBC协议的两个平行链直接进行跨链的基本过程,如果区块链很多,那么这种方式的两两跨链复杂度会呈现出组合级别增加,因此Cosmos网络又引入一种Hub的中继链,所有的平行链都通过IBC连接到Hub,让Hub辅助跨链交易的验证和资产转移(因此,某链能与Cosmos体系中的链进行交互=某链能连接到Hub)。目前Cosmos实现了一个官方的Hub称为Cosmos Hub,如图所示:
另外,Cosmos网络的详细架构图如下所示。⼀条链从层次结构上讲,分为⽹络层、共识层、应⽤层。为⽅便平⾏链开发,Cosmos提供了tendermint core(简称tendermint)和Cosmos SDK(Go语⾔)。其中tendermint 是指⽹络层、共识层的封装,⽽Cosmos SDK是应⽤层中常⽤的模块:账户、治理、Staking、IBC等等的封装。因此,⾃⼰开发⼀条新链可以使⽤Cosmos SDK+ tendermint,并且由此开发出来的链能直接与 Cosmos Hub连接(Cosmos Hub⾃⼰本身也是⽤Cosmos SDK+tendermint开发的)。
⽽对于⾮Cosmos SDK开发的区块链(如已经存在的这些区块链),如果要与Cosmos体系中的链进⾏交互 (即能与Hub连接),需要使⽤Peg Zone进⾏桥接,所谓的Peg Zone就是使⽤Cosmos SDK开发的,既能接⼊Hub的,⼜能和原链进⾏交互的⼀条链。如图中的Ethereum,如果要接⼊Cosmos Hub,则需要专⻔使⽤Cosmos SDK开发⼀条起Peg Zone作⽤的新链。
所谓Cosmos主⽹是指由Cosmos团队⾃⼰开发的第⼀个官⽅版Hub,也就是不同链进⾏跨链操作时的第⼀个中央枢纽。以太坊将是Cosmos最先连接的⾮Cosmos SDK开发的公链,⽬前有两个项⽬去实现这种连接:Cosmos 开发团队主导的Ethermint 项⽬,以及由 Loom Network主导的PlasmaChain。这两个项⽬其实就是开发⼀个连接以太坊和Cosmos Hub的、起Peg Zone功能的⼀条链。
协议应该是各⽅达成共识的,上面说到的“侧链协议”其实并不是真正的协议,因为侧链技术⽬前没有像计算机⽹络⼀样有⼀些共识的协议,所以其实只能说是侧链机制。⽽Cosmos为跨链带来的最⼤贡献在于IBC协议的设计,IBC协议提供了⼀种通⽤的跨链协议标准。IBC的设计使得跨链交易可以在多个Hub之间进⾏安全路由和转发,类似⽬前互联⽹的TCP/IP 协议。但是遗憾的是⽬前的Cosmos设计也只能够⽀持资产的跨链,⽽且由于不同区块链的业务不同其共识速率的不⼀致也会影响跨链交易有效性的证明。这⾥只讲了Cosmos的侧链技术,关于Cosmos更多的内容,请看其他资料。
Polkadot的平⾯体系结构下图所示,其中有三种链⻆⾊和四种参与⽅。
三种链角色
四种参与方
下图对这四种参与方进行了描述。整个过程是自动地、去中心化地执行。
用户在平行链发起交易,交易被收集人收集,打包成区块,交给一组验证人去验证。这组验证人并不是来自平行链,而是来自中继链统一管理的验证人池,通过随机分组指定给平行链。
每条平行链都有一个消息输出队列和一个消息输入队列。如果用户发起的是跨链交易,交易就会被放进输出队列。再被目标平行链的收集人放入其输入队列。目标平行链的收集人执行交易,生成区块,由验证人组敲定。
提名人是Polkadot基础通过DOT的持有者,它希望质押DOT获得收益。但是要么是因为DOT数量少,要么是缺少运行维护验证人节点的专业技能。因此系统提供了另一个参与途径,就是持币者选择它信任的验证人,把自己的DOT通过验证人质押,分享验证人收益。
钓鱼人是个软件进程,它监控网络上的非法行为,一旦发现就会向区块链提交举报交易。举报交易也要经过共识过程,通过2/3以上验证人验证,打包进区块,惩罚和奖励也都是区块链交易。
在Polkadot中如果Parachain A需要发送一笔交易到Parachain B的过程如下:
以上便是Polkadot跨链交易的主要步骤。Polkadot为应用链提供的工具是Substrate,目前支持Rust语言开发。