定义

跨链简单来说就是信息从一条链到另外一条链。由于现在我们说起区块链,脑海中浮现的基本都是 token,所以其实更多的是作为资产的 token 从一条链去另外一条链。最容易理解的是拿 ETH 换 BTC,简单来说就是资产交换。
从互联网的角度理解,有点像信息从一个内网到另一个内网。这对于已经有了底层标准化传输协议互联网来说不成问题。可是区块链每一个网络都是一个相对封闭、且互不信任的系统,每发生一件事都要“投票”(共识)一下,怎么能轻易相信链外的东西呢?原来互联网上的各个后台信息都是可以相互传递,几乎无需验证。吕旭军认为,由于区块链的资产属性尤其明显,使得其跨链不同于传统互联网信息传递,参与者说谎的动机增强。

跨链的作用

跨链第一个“最痛”的应用场景就是去中心化交易所,解决了刚刚提到的第一个资产交换的问题。
现在很多人用中心化交易所的方式也能解决,加上现行的去中心化交易所交易体验差、速度慢、还不能跨链交易,小白用户都不喜欢,看起来实在没什么戏。不过理想主义者会说:作为一个追求去中心化的行业,话语权最大的却是一大堆中心化的组织,大家觉得这实在太诡异了,而且中心化交易所作恶多端。

另外一种应用场景就是部署在A链上的应用支持其他链的 token。比如以太坊上的智能合约想用比特币支付——听到这个场景我的同事马上一脸懵逼地问:“为啥呀?”他这个反应也是对的,因为这个听起来貌似没有必要,但是有人就是希望支持比特币或者其他token,希望扩大用户群。其实这个问题同样可以用中心化交易所解决。
这个问题也能泛化为,某个DAPP的不同模块可能部署在不同链上,那它怎么调用其他链上的模块、不同的模块之间怎么交互?也就是链A需要得知链B的才能进行下一步或者执行。说白了,这也还是可以用“链外”的方式解决,就像一个权威中介,这说起来很像预言机(提供链外可信数据)。

V神2016年给R3写的那篇报告里提到提到了五个use cases,都离不开以上三种,包括:1、资产(原子)交易(Payment-versus-payment or payment-versus-delivery - in technical circles, this concept is also often called “atomic swap”);2、可转移的资产(Portable assets,资产可以多链之间来回转移和使用);3、跨链数据预言机(Cross-chain oracles );4、资产留置或抵押(Asset encumbrance,某资产在链上被锁定,是否解锁取决于另一链上的结果)5、通用跨链合约( General cross-chain contracts )

跨链的应用场景其实都能用链外方式解决。 ArcBlock CEO 冒志鸿就对 “双向锚定” 的跨链比较悲观,一方面两条链能 “互读” 的难度非常高,“interledger 就是建起桥梁,两条链的东西还得是一致的,但是两条链确实是不一样的”;一方面实际应用需求很少,“99% 都只需要应用级的跨链,只有很少需要 interledger 级别的跨链,比特币和以太坊为了安全性,可能要这种”。

这个判断,是他以 “数据库历史” 为鉴得出。他介绍,在 80、90 年代,曾经有一个概念叫联邦分布数据库,愿景是:两家企业用的数据库供应商不同,该技术希望数据库的角度让交易保证数据交易的原子性,难度极其高,但是后来证明在现实中根本不需要。“既然可以通过应用层保证一致性,为什么一定要在底层做呢?因此我们其实在整体设计上比较实用主义。”

怎么跨链

其实不可能真正意义上某个币真的 “到了” 另外一个链上,大部分只是 B 链上生成了一个 A 链的锚定币,同时 A 链会将等值代币“锁定”。

从资产交互的角度出发

第一种

是双方都不知道自己在跨链,或者说双方不能 “读” 对方,比如中心化交易所这种的。

第二种

其中一条链能读别的链,比如侧链 / 中继链的方式,就是 A 能读 B,B 不能读 A;如果一条 C 链能读到所有链,按理说也能成为一个 “链上” 中介,整个过程就是“A-C-B”。当一条 “侧链” 链接了很多主链时,它就变成一条中继链。
其中资产交换的过程可能是用户把 BTC 和 ETH“充值”到这个链上,各个代币在这个网络中都能流通(其实就是给每个币在这个跨链网络里都有一个锚定币,类似以太坊的 ERC 20),然后分别“提现”。万维链和阿希链的模式有点像这种,他们能跟很多链交互,但是这些链之间不能直接交互。以阿希链为例说明:
用户将 BTC“充值”到阿希链上,需要先把 BTC 转到网关账户(就是比特币链上的一个普通账户,但是管理者是一组节点);跨链网关收到信息以后锁定网关账户并验证,经过大多数节点验证后;网关会在阿希链上给用户解锁等值数字资产,用户即可在阿希链上使用 BTC。BTC 和 XAS 好像是两个国家的商人,双方不能互相信任而且使用不同的货币,无法直接交易。因此,双方协商了一套规则(相当于跨链网关协议)并且设立了一个专门的交易场所来处理交易,由本国有声望的大商人(相当于网关节点)作为代表来共同管理,这些大商人还需要拥有足够数量的资产作为担保。

第三种

A 和 B 都能读到对方的,这种理论上可以通过统一的协议实现,不过现在还没有类似协议落地。
说白了,链下也能做“跨链”;只是有人认为链上更安全。
结合万维链的看法,这里的安全可以拆解为两个问题:一是保证跨链信息是正确的,即如何验证原链上的交易状态。如果要考虑到使用 POW 机制的区块链上没有终局状态(始终存在分叉的情况,只是随着确认块的增加,概率逐渐变小),这个问题的复杂度会更高。二是是保证交易的原子性,即如果交易处理的某个环节停止,整个交易能够撤销;否则,部分成功的情况可能会导致双花。

关于如何验证原链上的交易状态

现在我了解到的主要有两种方式(V 神的报告原文均有提到)

第一种

是有一组同时承担两条链节点的个人或联盟,也有可能是一条单独的链,告诉 B 链 A 链上发生什么事,或者告诉 B 某个消息的真的。比如 Ripple 开发的跨账本价值传输开放协议 Interledger,但它不是链,只是一套网关协议。V 神把这种称为公证人模式(Notary schemes)

第二种
侧链 / 中继(Sidechains/relays),与公证人模式的 “别人告诉 B 链 A 链上发生的事” 不同,中继模式则是更 “直接” 地 B 链自己读 A 链。比如通过验证 A 链区块头和默克尔树等信息验证 A 链上的交易,比如以太坊上的 BTC Relay。