四种跨链技术:HTLC、共识跨链、中继跨链和分层多链深入了解

HTLC(Hash Time Lock Contract)

HTLC原理比较简单:

如果Alice和Tom之间想交换资产,Alice先创建HTLC,Tom接着创建具有同样Hash的HTLC。简单的说,Tom和Alice创建了具有同样秘钥的“锁”,锁住各自资产。当Alice用秘钥打开Tom的资产时,Tom用同样的秘钥可以打开Alice的资产。当然,Tom和Alice都需要确认资产和锁的时间。

通过HTLC实现跨链,简单并且保证了交易双方的原子操作,但是要求两条链都支持智能合约,限定了两个交易方并且交换的资产不可分割。事实上,为了保证交易双方有效交易,交易双方需要额外的沟通渠道预先达成共识。

1.跨链桥 : 基于共识

基于其他共识的跨链桥逻辑上比较好实现,由共识确认一个链上的事件,并在另外一条链上执行。整个桥的安全性取决于共识的强弱。共识,除了传统意义的共识机制(BFT,PoS等等)外,还包括多方计算(MPC)和多签。

2.跨链桥 :基于轻客户端

为了在一条链上能验证另外一条链上的信息,在这条链上“运行”另外一条链的轻客户端。通常轻客户端都是基于SPV(Simple Payment Verification)协议。SPV源自BTC,主要用在PoW共识的链中。Celo和Harmony也针对自己链的共识算法实现了轻客户端。纯粹的PoS共识的链比较难实现轻客户端,因为共识依赖Staking,而Staking由交易组成。为了实现轻客户端,穷举Staking交易不现实。

跨链桥的两个链互相通过轻客户端验证对方链的状态。这种跨链桥依赖Relay(中继),及时同步链的区块头信息。因为要同步区块头,需要如下的一些因素:

1.同步频次和费用:在另外一条链上存储区块头信息需要费用。特别是tps比较高的链,区块比较多。

2.确认主链以及区块确认:根据链的共识,通过区块头信息确定主链。以PoW的链为例,区块确认一般通过后续区块个数确认。

优化同步费用有几种思路:1/ 随机挑战(NiPoPOW,FlyClient)2/ zk-SNARK (包括recursive zk-SNARK)。选一些典型介绍:

BTCRelay

采用传统的SPV轻客户端的实现方式实现从BTC到ETH的跨链。显然为了同步BTC的区块头,在ETH消耗Gas。在以太坊Gas price比较高的情况下,同步费用比较高。

FlyClient

FlyClient采用随机挑战和MMR(Merkle Mountain Range)的技术,降低轻客户端同步区块的个数。随机挑战的目的是在一定范围的区块并不需要全部同步到链上,随机抽取一些区块同步。为了在链上能验证没有抽取到的区块,所有的区块信息通过MMR组织在一起。MMR是一种变种的Merkle树,适用于追加节点的场景。MMR,相对于普通二叉的Merkle树,具有更新叶子结点代价小的特点。

zkRelay

zkRelay也尝试降低链上轻客户端同步区块的费用。和FlyClient不同,zkRelay采用的是zk-SNARK证明。将一段范围内的区块有效性,通过将链下证明提交到链上,链上只需要检查证明是否有效。

Celo

Celo是个有意思的项目。Celo项目本身和跨链没有什么关系,但是给轻客户端提供了一些新思路。为了实现更轻客户端,Celo采用递归零知识证明技术,将区块头的连接信息进行递归证明。一个证明就能证明从创世区块到当前区块的合法性。一个轻结点,只需要同步最新的证明就能确定所有区块的有效性。

Summa (Stateless SPV)

上述的项目,还都是在降低轻客户端链上同步代价方面做优化。Summa提供了一个全新的思路:

摘抄自Summa介绍的PPT。Summa项目观察到一个有趣的事实:一条链的区块头在另外一条链上同步了,但是很多区块有可能是浪费的。原因是并没有需要证明的交易在这些区块中。Summa假设了一种“Ecnomic“安全的做法:证明一个交易在一个区块中,并且区块后有若干区块确认。Summa认为在伪造的区块后连续出块是一个非常不经济的做法,有这样的算力应该去计算真正的区块。使用这种方式,在链上不需要存储轻结点信息,只需要在一个交易需要证明时提供相应区块以及确认区块的证明即可。这样的方式也称为Stateless SPV(无状态SPV)。当然这种经济安全假设需要推敲,特别是在难度较低的情况下,伪造区块以及确认区块相对比较容易。

Xclaim

针对传统的没有链上计算能力的链,不可能在链上实现其他链的轻客户端。也就是说,如果只是通过链上轻客户端的方式,在这些链上只能实现单向的跨链。为了在这些链上也实现双向跨链,Xclaim在引入抵押角色的情况下实现资产双向映射。Xclaim在论文中提出了三种操作:issue(发行),swap(交换),redeem(赎回)。以issue和redeem为例,看看抵押角色的作用:

大部分链都支持转账功能。抵押者作为中间人,在另外一条链(支持智能合约)有抵押的情况下,接受其他人的资金的转账。转账发起者,可以通过轻客户端验证的方式在另外链上证明交易合法。在另外一条链上,验证合法的跨链交易后,进行转账。

在一条链上提出burn操作后,抵押者观察到后,主动先发起转账。并在转账成功后,向另外一条链上的智能合约提供交易证明“赎回”资金。简单的说,在两条链只要有一条支持智能合约的基础上,通过抵押者角色,可以完成双向跨链的操作。根本原因就是链上的转账交易能够被确认验证。

Thinkium(太空猫)

从实现的角度来看,太空猫的链结构是分层多级链结构。

太空猫的链按功能分为主链和业务链两种,每条链都是具有自己状态的完整独立系统。主链充当整个系统的领导者和协调者,它作为业务链的切入点和信任来源,记录每条业务链已确认区块的元数据和摘要,产生所有链的委员会选举中使用的随机种子,并记录选举结果。同时,来自业务的工作负载由所有业务链共同承担,并使用基于 Actor 模型的消息驱动协议进行合约并行计算。系统中的所有节点都保持主链的状态,通过更新和验证主链的区块,节点可以验证已经包括在主链中的业务链的任何区块数据。该结构具备以下主要优点:

节点加入系统只需要从可信源获取主链的当前状态,或者从创世块重建,并不需要同步整个系统的所有数据,这使得整个系统的负载大大降低。

每条链的共识是独立和并行执行的,大大降低了对网络带宽和计算处理要求。

主链可以充当系统的协调器,它提供跨链同步,并允许整个系统拓扑是动态调整的。

节点可以使用主链中的摘要和 Merkle 证明来验证从另一个业务链发起的事务。因此,业务链的区块生成者不需要来自其他业务链的任何信息来处理链间交易。

可以按照不同的事务类型或商业主体,划分出不同的业务链进行单独运行。他们之间可以完全无关的独立运行,通过主链提供的佐证进行跨链通信,也可以把有从属关系的链组成有依赖的父子关系链,其中子链继承部分父链的属性,例如在这条链上的账户余额的货币类型、链的选举方式等。

这种关系在逻辑上是相关的,对链的属性以及网络连接产生直接影响,这使得兄弟链之间可以更容易的进行数据交换。太空猫的设计原则是允许每条业务链向下扩展自己的子链,但实际使用中,基本会在三层以内都可以解决问题。

无论是主链还是业务链,都有可能因为请求过多而拥堵变慢。当发生拥堵时,可以通过将该链分片的方式,把请求分散到不同的分片上,以求提高该链的吞吐能力,随着分片的数量增加,该链的吞吐量线性增加。分片本身也是一条独立运行的链,分片之间会有针对跨分片交易请求的优化,大大提高分片链间的跨片交易执行速度。

这种分层多级的结构具有很好的灵活性和可扩展性,并且可以动态调整,因此每个链都不会成为整个网络的性能瓶颈。此外,随着链的数量增加,整个系统的吞吐量线性增加,而不会产生太多的冗余消息。

基于上面的分层多级链结构,太空猫从系统角度设计了一种四层实现框架,以方便系统将来的可扩展和升级。

「整合层」是四层系统架构的第一层,采用“master共识算法”,主要解决全系统总体共识。

「处理层」是四层系统架构的第二层,采用“TBFT共识算法”,主要解决单链共识问题。负责处理分配的请求并生成日志。

「数据层」是四层系统架构的第三层,采用“Siamese共识算法”,主要解决多链之间的共识问题。

「网络层」是四层系统架构的第四层,它是在节点之间建立连接并提供通信的基本层。