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