# 跨链技术导论

## 概览

未来各个行业或者某个行业中的一些领域都会根据自身的产业结构构建不同区块链网络，每条链上也都流转着相应的有价值的信息和资产。但通常情况下，任何一个行业的价值都不可能完全孤立，往往有跨行业协作的业务需求，若各个区块链网络独立发展，难免会造成多链的信息孤岛。而要打破这个信息孤岛，使区块链能够发挥出更大的价值，跨链技术就有了重大的意义。

### 为什么要跨链

未来，区块链技术会被用在许多业务场景中，可能包含金融、数字版权、医疗健康等。由于不同的业务场景和需求对区块链本身的要求也不太一样，比如各个业务场景下对区块链上的存储、性能、隐私等都会有不同的要求，因此未来很难只通过一条链覆盖到所有的业务场景，更可能需要的是多条区块链来共同实现，需要具有不同架构和功能的区块链为不同的场景赋能。

而独立的区块链就像是一个个数据孤岛，彼此之间都无法产生现实的联系，数据和价值都无法在各个区块链系统内自由的传递。而要打破区块链之间的数据孤岛，使区块链上的价值能够在各个区块链内自由的传递以突破区块链的边界，就需要采用跨链技术来实现，**使得各个区块链之间实现价值的流动和彼此的互操作性**。

若能够实现跨链技术，就可以将各个业务场景更好的解耦开来，从而构建更适合某个具体业务的应用型区块链，然后再通过各个链之间信息的跨链就可以实现更加复杂的业务逻辑。因此，在这种情况下就能够更有效的**提升各个区块链的性能**。

### 什么是跨链

所谓跨链技术就是，**在链 A 上面的信息经过共识确定，能够安全可信地流转到链 B 中，且链 B 可以认证该信息，并且按照约定执行后续的跨链逻辑**。

举个简单的例子：

如果在一个区块链的金融平台上，流转着 Mike 的一笔应收账款的资产，假如现在 Mike 有转让的需求，但接收方 Tina 却在另外一个区块链平台上。这时如果这两个区块链平台具有跨链能力的话，那么就可以使 Mike 的资产在其链上销毁或者永久冻结，同时 Tina 所在链上能够确认 Mike 的资产已经冻结，并创建对等的合法的应收账款资产给 Tina。

这个例子中的关键点就是 Tina 所在的区块链平台能够真正的看到并且确认 Mike 有一笔应收账款资产并且已经被永久冻结了，这样这条链才可能放心的创建对应的资产给 Tina 并进行后续的业务逻辑。

因此，跨链的整个过程必须能够**在一个原子事务中完成**，即如果 Mike 的资产在其所在链中被永久冻结后，Tina 所在的区块链必须给她创建对应的资产，否则就决不能给她创建这笔资产。这两条链上的状态要能够在一定时间达成共识，不能永久的处在一个中间状态，否则将不再能够保证资产的守恒已经不可双花等基本要求。

### 跨链的分类

在当前众多的区块链中，如果根据其底层技术平台的不同可以将跨链分为**同构区块链跨链**和**异构区块链跨链**。

由于同构链之间的安全机制、共识算法、网络拓扑、区块生成验证逻辑都一致，它们之间的跨链交互相对比较简单。

而对于异构链的跨链就相对比较复杂，比如：EOS 采用 DPoS 共识算法而比特币采用 PoW 共识算法，他们的区块组成形式和确定性保证机制也都有着很大的不同，它们之间直接跨链的交互机制就不那么容易被设计，通常需要第三方“中间人”作为辅助服务进行跨链通信。

### 跨链面临的核心问题

要想实现不同链之间的跨链通信，就需要突破以下几个核心的问题：

* **跨链交易的原子性**

  在进行跨链交易时，两条链上的状态要能够在一定时间内达成共识，跨链交易要么成功，要么失败，不可能永久处于第三种中间状态，否则将会破坏整体资产的一致性。
* **跨链交易的可验证性**

  在进行一笔跨链交易的时候，B 链如何才能相信 A 链发送过来的交易是真实可信的呢。这就需要 B 链能够有效的对 A 链跨链过来的信息进行充分的验证，主要包括两个方面：

  1. A 链上的交易已经被写入账本且满足最终确定性
  2. A 链上的交易信息需要被某一方认证，比如引入公证人进行认证。
* **跨链交易的数据一致性**

  在一笔跨链交易中，所谓的跨链其实并不是指数据真正的 “跨” 到另一条链上，而是先在一条链上将待跨链资产销毁或冻结，再在另一条链上生成该资产，以此来锚定对应链上的资产。而如何能够正确的在不同链之间锚定资产以保证数据的一致性呢。这就可能需要通过设计相关的数据协议或者是引入桥接组件等方式来解决了。
* **跨链交易的安全性**

  通常情况下在进行跨链交易时，需要一个或一组能够同时看到两个链上发生的交易的人（节点）参与共识或认证，以此来促进两个链之间进行跨链的交易，那么能够保证这个 “中间人” 是足够可信的且是不易被攻击的也是跨链技术中遇到的一个重要问题，只有这样才能够更好的保证跨链交易的安全性。

## 主要的跨链机制

总体而言，跨链技术在过去的几年时间内得到了迅速发展，也有很多相关的项目层出不穷。且各个项目都采取了各种不同的方式以期能更好的解决在跨链中交易的原子性、可验证性、数据一致性和安全性等问题，当前主流的区块链跨链技术方案按照其具体的实现方式主要分为三大类，分别是**公证人机制**、**侧链/中继**和**哈希锁定。**

在这些跨链机制中，公证人机制和哈希锁定机制通常被用在异构跨链的情形下，而侧链/中继跨链方案通常即可以用在同构跨链中也可以用在异构跨链的情形下。

### 公证人机制 (Notary Schemes)

**公证人机制是指由一个或一组节点作为公证人进行数据收集和交易验证。**&#x516C;证人同时跟踪两条链的状态并告知对方，交易双方完全依赖于公证人进行验证和实现交易。

可以根据公证人的构成和签名方式，将公证人机制分为三类。其中公证人由一个节点承担的为**中心化公证人机制**，公证人由一组节点承担的可以根据其签名方式的不同分为**多重签名公证人机制**和**分布式签名公证人机制**。

* **中心化公证人机制： 单一节点或机构充当中心化公证人。**&#x4E2D;心化公证人机制是相对比较简单的模式，与传统的两个主体通过第三方间接交易类似，公证人同时兼容两个或多个系统，其优点在于处理速度较快，技术结构相对简单，但是这种方式的问题也很明显，即中心化的公证人的安全风险。
* **多重签名公证人机制： 多个公证人在各自账本共同签名达成共识。**&#x8FD9;种机制弱化了中心化公证人机制的中心化问题，安全性相对更高，前提是交易链需要支持多重签名功能。
* **分布式签名公证人机制： 与多重签名公证人机制的主要区别是采用了多方计算的分布式签名。**&#x5BF9;于跨链交易，系统仅产生一个密钥，密钥以碎片形式发送给每个公证人节点。

最传统的公证人机制是基于中心化交易所的跨链资产交换，这种跨链的方式比较单一，只支持资产的交换，如下图演示了Alice通过交易所，用比特币和Bob交换ETH的过程。

![https://ask.qcloudimg.com/http-save/yehe-2874029/k9um9zbgbn.png?imageView2/2/w/1620](https://ask.qcloudimg.com/http-save/yehe-2874029/k9um9zbgbn.png?imageView2/2/w/1620)

1. Alice 通过交易所钱包将自己的比特币打入交易所地址;
2. Alice 在交易所上挂上卖单 1 个 BTC 卖出 20ETH 价格；
3. Bob 需要将自己的 ETH 打入交易所的以太坊地址；
4. Bob 通过交易所挂出购买比特币的单子 20ETH 买一个比特币；
5. 交易所将 Alice 的卖单和 Bob 的卖单进行撮合；
6. 交易所将 Alice 在交易所存储的 1BTC  转移给 Bob 的比特币地址；
7. 交易所将 Bob 在交易所存储的 20ETH 转移给 Alice 的以太坊地址；

至此完成了 Alice 和 Bob 的 BTC 和 ETH 的交换（*案例中省去了交易所的服务费*）。通过该例子可以看出交易所的方式目前仅能够支持资产的交换，且资产交换的原子性、安全性完全由中心化的交易所保障存在较大的中心化风险。

![图片来源于：https://ask.qcloudimg.com/http-save/yehe-2874029/srxbh17yf6.png?imageView2/2/w/1620](https://814024302-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx14XJwBF6zyQLTY7M-%2F-Lx4YmHi8_zz5laXbJv7%2F-Lx4ZXSbR6pck0Xm9BqJ%2Fimage.png?alt=media\&token=674a7af7-7f5a-4a4b-aba8-f9fc321e2abf)

此外，著名的分布式账本技术 Ripple 也是采用类似公证人的机制来解决全球金融机构之间的资产交换的。Ripple 的系统架构如上图所示，在 Ripple 系统中的交易通过网络中的验证者进行验证，之后验证者验证的交易会被加密算法所保护，从而保证交易内容不能被验证者窥探从而保证交易的隐私性。

由此可以看到，采用公证人机制实现的跨链技术比较简单，且能够比较灵活地支持不同类型的底层区块链体系。公证人机制的主要问题在于公证人机制的安全性保障完全由公证人系统保障。参与跨链的相关方需要对中间人给予较大的信任，且这样会造成中心化的风险。

### 哈希锁定 (Hash-Locking)

哈希锁定也被称为哈希时间锁定（HTLC），最早出现在比特币的闪电网络中，该跨链机制源于 Atomic Swap，该跨链机制支持一定数量的 A 链资产和一定数量的 B 链资产进行原子交换。

哈希时间锁定机制巧妙的利用了哈希锁和时间锁，通过哈希锁和时间锁来保障跨链交易的原子性，即只有满足一定的时间条件和哈希条件交易才能够完成。

**哈希锁**：即通过哈希值加锁，该锁只能由这个哈希值的原值进行解锁。例如：字符串 "a" 经过哈希之后得到的值为“ai1j3o”，那么通过“ai1j3o”加锁后，在不考虑哈希碰撞的情况下，就只能由 "a" 进行解锁。

**时间锁**：即在规定的时间内才可以开锁。例如：规定时间锁的开锁有效时间为 1 个小时，开锁的条件为输入正确的哈希值。那么要想解锁这个时间锁的唯一条件就是在 1 个小时内输入正确的哈希值，若在 1 个小时后进行解锁，尽管哈希值输入正确了，该时间锁仍然不会被解锁。

它会迫使资产的接收方在设定的超时时间内确定收款并产生一个收款证明给打款人，否则该笔资产就会重新归还给打款人。而这个收款证明就能够被打款人用来获取接收方区块链上的等量价值的资产或者触发其他事件。

![图片来源于：https://ask.qcloudimg.com/http-save/yehe-2874029/9w0f33qrl1.png?imageView2/2/w/1620](https://814024302-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx14XJwBF6zyQLTY7M-%2F-Lx4YmHi8_zz5laXbJv7%2F-Lx4ZjZJLEUYaFz7eoxw%2Fimage.png?alt=media\&token=45543dd6-b6da-40ae-a9af-07498fc00877)

如上图所示，通过一个例子来阐述如何使用哈希时间锁定进行跨链的原子资产交换，假设 Alice 和 Bob 有资产交换的需求：Alice 想用 1 个 BTC 和 Bob 换 20 个 ETH。那么首先需要在两条链上设置哈希时间锁定合约，然后执行如下步骤：

1. Alice 随机构建一个字符串 s，并计算出其哈希 h = hash(s)；
2. Alice 将 h 发送给 Bob 的合约；
3. Alice 锁定自己的 1 个 BTC 资产，并设置一个较长的锁定时间 t1, 并设置了获取该 BTC 的一个条件：谁能够提供 h 的原始值 s 就可以得到该 BTC；
4. Bob 观察到 Alice 合约中锁定了一个 BTC，然后 Bob 锁定自己的 20 个 ETH ，并设置一个相对较短的锁定时间 t2，t2 < t1，Bob 也设置了同样获取条件：谁提供 h 的原始值 s 就可以获取 20 个 ETH；
5. Alice 将自己最初生成的字符串 s 发送到 Bob 的合约里取得了 20 个 ETH；
6. Bob 观察到步骤 5 中 Alice 的 s 值，将其发送给 Alice 的合约成功获取 1 个 BTC; 至此 Alice 和 Bob 完成了资产的交换。

从上述的过程我们可以看出哈希时间锁定合约有一些约束条件：

* 进行跨链资产交换的双方必须能够解析双方的合约内部数据，例如 s，锁定资产的证明等；
* 在设置哈希锁定的超时时间时需要保证存在时间差，这样在单方面作弊时另一方才可以及时撤回自己的资产。

哈希时间锁定的思想运用在支付领域较多，例如闪电网络、雷电网络等。但是哈希时间锁定目前看只适合偏资产或者关键数据的交换，甚至不支持资产的转移，因此其使用场景受限。

### 侧链/中继 (Side-chains/Relays)

“侧链/中继” 是目前跨链技术中应用比较多的，也是相对复杂的一种机制。

“侧链/中继” 模式下，目标链不依赖于第三方进行交易验证，**而是自行验证来自发送链的数据**，具体的验证方式有所不同，如 BTC-Relay 是通过 **SPV**（Simple Payment Verification，简单支付验证）进行交易验证，Cosmos 是通过**节点签名数量**。

其中侧链本身既是一种技术，也可以用来形容两条链的关系。侧链是相对于主链而言的，没有绝对的侧链。侧链相对主链而言能够验证和解析主链中的区块数据和账本数据。**侧链技术实现的基础技术是双向锚定（two-way peg），通过双向锚定技术可以将数字资产在主链上进行锁定，同时将等价的资产在侧链中释放。相反当侧链中相关资产进行锁定时，主链上锚定的等价资产也可以被释放。**

其中 BTC-Relay 应该是历史上第一个出现的侧链，它通过以太坊构建了一条比特币的侧链，是 BTC 到 ETH 的单向跨链。它运用以太坊的智能合约允许用户验证比特币的交易。如下图所示我们以 Alice 用 1BTC 和 Bob 交换 20ETH 为例来看一下这一过程。

![图片来源于：https://ask.qcloudimg.com/http-save/yehe-2874029/cjdia836ir.png?imageView2/2/w/1620](https://814024302-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx14XJwBF6zyQLTY7M-%2F-Lx4YmHi8_zz5laXbJv7%2F-Lx4ZsAS8EnyWvR7_Bfg%2Fimage.png?alt=media\&token=9dadf523-2fbb-4acd-a5da-49e6ca4da4f8)

1. Bob 将 20ETH 发送到 BTCSwap 的合约进行冻结（该合约只要能够确认 BTC 网络上 Bob 接收到来自 Alice 1BTC 就自动将 20ETH 转给 Alice）；
2. Alice 确认 Bob 冻结信息后，将 1 BTC 转给 Bob 比特币账户；
3. BTC Relayer 将比特币区块头推送到 BTCSwap 合约；
4. Alice 接下来就可以调用 relay tx；
5. BTCSwap 合约结合 tx 和 BTC 链的区块链进行 SPV 验证，验证通过则将 20ETH 转给 Alice 以太坊地址。

通过 BTC Relay 实现跨链的方式比较简单，但是 BTC Relay 需要额外的信任和维护成本，且智能合约内部的数据存储会有体积膨胀的问题。但是侧链的机制相对哈希锁定而言能够提供更多的跨链交互场景。

对于中继机制来说，在现实生活中中继常被用于基站与基站之间搭建的传输通路，主要服务于信号的多次转发。在区块链中，中继是链与链之间的通道，如果这个通道本身就是区块链，那它就是中继链了。在跨链中，中继技术可以不依赖于可信的第三方帮助其进行交易验证，接收方可以在拿到发送方的数据后自行验证。中继的形式可能有很多，比如：Cosmos 中的 Hub，Polkadot 中的 Relay Chain 都是扮演的中继的角色。关于 Cosmos 和 Polkadot 两个项目，后续有文章进行详细的介绍。

## 主流跨链项目解析

在这众多的跨链项目中， Cosmos 和 Polkadot 是其中两个比较被看好的项目，它们均是采用了基于中继链的多链多层结构实现的区块链之间的互操作性，但它们之间又有许多的不同。关于Cosmos 和 Polkadot 项目的具体解析可以参阅本文开头置顶的文章。

## 业务场景

目前，跨链技术在数字货币、数字资产、支付等相关场景中的应用较为常见，比如去中心化交易所、跨链资产锚定、互换或跨链资产转移等。结合跨链具体的实现形式，它可能运用在以下几个业务场景中。

* **供应链金融**

  如下图所示，在一个供应链的生态中，可能有以下几方的参与，可能包括采购方企业、供应链上游供应商企业、金融企业等，各个企业可能都在不同的区块链联盟中实现着自身的业务逻辑，但若要形成供应链，各个企业之间的价值交换就比不可少了。这时从技术角度来看，跨链技术就排上了用场。
* **企业业务模式的扩展**

  假设现有企业在一个业务联盟内通过某区块链平台实现现有 ToB 的业务。随着该企业内业务的发展，他们可能逐渐面临到 ToC 的业务。因此就会涉及到如何将 ToB 业务中的部分信息暴露给 ToC 业务中这样的需求。而 ToB 所在的联盟链和 ToC 所在的公链之间如何进行资产和信息的交换及转移就至关重要了，这其中就一定会用到跨链技术。
* **业务联盟的横向扩展**

  当前，随着各行各业对区块链的探索和应用落地的加速，未来将会出现越来越多的业务联盟链。例如：围绕地方海关、港口和相关进出口企业的跨国贸易链，围绕企业上下游的供应链金融链等。

  为了能更好地融合物流、资金流、信息流等信息。各个业务联盟之间一定会有许多横向协同和融合的需求。这时通过采用跨链技术可以很好地实现这些业务联盟之间的横向打通，让信息、数据、资产以一种可信的方式在更大的范围内流通，从而能够为企业增信，降低融资成本、扩大商机来源。
* **零售产业链上下游的打通**

  在零售场景中，一件商品从生产到销售的各个环节和上下游都有着许多不同的企业参与方，它们可能都处在不同的业务联盟中，这时就可以通过跨链技术将不同的业务联盟打通。以农产品溯源为例：

  在产品上游的生产加工环节，农场使用IoT设备检测和控制农情信息，保证农作物的生长环境。之后农产品经过收割、运输及加工流程之后，成为了可以准售卖的商品。从农产品种植到农产品加工，参与各方可以通过区块链技术保证原材料在生产运输以及加工各个环节的质量。

  在下游的供销环境，供应商将加工后的农产品通过物流网络运输到超市、商店等终端销售网点，完成销售流程。供应商、物流、零售商形成了完整的供销环节。各个参与方也可以通过区块链技术保证货物在加工源头、物流、销售各个环节的质量。

  通过跨链技术，将上下游区块链网络进行打通，将上游的生产加工信息同步至下游网络，可以提供商品全链路的信息给消费者，增加认可度。同时，将下游的消费数据同步到上游的生产网络，则能够帮助生产加工者更加准确地把握消费者需求和市场趋势。
* **行业标准化体系建设**

  在诸如互联网法院、数字版权保护、税务发票、财政票据等领域中，未来也会出现越来越多的行业性标准化区块链系统或平台。

  而不同行业的标准化而言，它们可能处于多类区块链技术体系，那么要在业务上保证它们能够互相协作，必须能够保证在技术上它们之间技术体系共存、互相兼容、且支持互操作。在这种场景下，跨链技术就能够很好地实现多种异构区块链技术体系之间的可信互连互通，实现更具包容性的行业标准体系。

当然，对于跨链技术可能的应用场景绝不仅仅包含上述几个情形。可以说**只要任何在不同区块链上有交换资产或信息的需求，跨链技术就可以派上用场**，助力这个需求的实现。

## 总结

跨链技术，也被称为区块链间的互操作性（blockchain interoperability），就是通过**连接相对独立的区块链网络，实现链上信息、数据、资产等跨区块链网络的流转以及区块链网络之间的互操作**。简单来说，就是把一条链上的可信数据真实可靠地告诉另外一条区块链，且**在传播途中也能像区块链本身数据流转一样保证数据无法被篡改**，那么两条链上的参与方就可以互信对方数据，就像是在一条链上一样进行可信的业务协作了。且通过跨链技术，不仅能够解决区块链间的互操作性，还能有效的提升区块链的性能。

总之，相信区块链技术能够有效的推动区块链应用的落地，带来区块链世界中商业模式的革新。

## 参考文献

1. [区块链跨链技术进展研究](http://www.jos.org.cn/html/2019/6/5741.htm)
2. [跨链：打破孤岛，万链互联--区块链技术引卷之七](https://www.chainnews.com/articles/878872000217.htm)
3. [【深度知识】跨链的3种机制和COSMOS/POLKDOT实现分析](https://cloud.tencent.com/developer/article/1415143)
4. [IRISnet跨链服务技术如何赋能行业应用场景？| 中国系统架构师大会记录](https://mp.weixin.qq.com/s?__biz=MzU4NTQwODEwMg==\&mid=2247485886\&idx=1\&sn=3a0ad8c3d8396d538ac3508bf25c550b\&chksm=fd8a42b7cafdcba10463ea49b9f0a6ce927f7a76af0db952954d6a3865ef5f657080491a9a2b\&scene=0\&xtrack=1)
5. [跨链治理的设想如何实现桥接安全，减轻远程攻击？](https://www.chainnews.com/articles/450920989766.htm)
6. [浅谈资产跨链：如何攻克「三难问题」](https://www.ccvalue.cn/article/200899.html)
