什么是跨链(下)

  • maxdeath
  • 更新于 2021-09-11 22:39
  • 阅读 4004

跨链的四种方法

在上周的文章中,我讨论了「理论上的跨链」、「现实中的跨链」和「资产跨链」本期文章,我将继续给大家介绍「跨链的四种方法」——

04 跨链的四种方法

A星大佬看完了C公司的做法之后,立刻召集下属开电话会议——

“C公司看起来也就那么回事嘛……这个跨链服务看起来很有前途,我们也要做!你们尽快调研调研,一周后把计划给我。”

于是,过了一周,四份方案放在了A星大佬面前。

第一份,叫“基于哈希时间锁的资产互换”。

01 基于哈希时间锁的资产互换

这份方案是公司里某位精通密码学的技术专家在很久之前就提出的,和其他所有跨链方案都大相径庭,仅仅针对资产跨链——

基本原理是这样的:

比如A星大佬某天开会的时候和某位B星大佬说好了,用一个A币换10个B币。

A星大佬先随便选一个数x,然后做哈希,算出H(x)。这样,他可以把H(x)作为谜题,而x作为谜底。

然后,A星大佬在A链上发了一笔交易给B星大佬提供的收款地址,但是这笔交易设置了一个谜题H(x),要求收款时提供x。当然,为了防止B星精英反悔,这笔交易将在某个时间之后失效,失效之后钱会原路退还给A星大佬。

当B星大佬看到这笔交易,并且相信这笔交易已经确认,就在B链上也发一笔交易给A星大佬提供的收款地址,同样用H(x)设置了谜题,需要A星大佬提供x才能完成交易。

这样,如果A星大佬看到这笔交易并且相信这笔交易已经确认,如果他想要10个B币,那么他就得提供x。而如果他提供了x之后,B星大佬就能够拿到属于自己的1个A币。

从原理上,这种资产跨链方案十分精巧——它甚至不需要依赖于信息跨链,整个过程中,没有任何信息被从A链上跨到了B链上。这是怎么实现的呢?实际上仰赖了双方的理性——B星大佬在不能确信A星大佬的交易已经在A链确认之前,是不会提交自己的交易的;而另一方面,A星大佬在不能确信B星大佬的交易已经在B链确认之前,也是不会公开x的。而当双方都确认并且公开x之后,交易就自动完成了。

这种方案巧妙地规避了“信息跨链”这件最麻烦的事情——双方都不需要说服对方的链上的共识节点“自己的某笔交易已经确认”,因为双方其实只要让彼此相信就够了。而因为涉及到自己的利益,双方也自然会尽最大的能力去验证,即便它们验证出了问题,也最多只是造成自己的财产损失——而这个风险是它们自担的。

这个方案其实从原理上类似比特币的闪电网络,也正是因此,闪电网络的所有问题它也有:

1.它不是个通用方案,仅限于双方有自身利益的资产跨链,而做其他用途的时候就可能需要更复杂的机制,甚至无法实现。

2.乍看上去,理性的双方在这个交易中是各取所需的;但实际上,主动发起交易的一方,也就是A星大佬,是吃亏的一方——因为如果在交易过程中币价发生波动,那么如果B币价格涨了,B完全可以不进行交易。也就是说,当A星大佬把交易上链了,B星大佬就可以一直观望——如果价格涨了就不交易,跌了再发布交易。而这个时候A只能吃哑巴亏,因为他的钱已经被锁定在交易里了——如果交易不进行,A星大佬的钱得要等很长一段时间才会退回来。因此,B币价格就算是跌了,可能A也之后按照约定价格卖掉。

而因为有了这个问题,实际上B星大佬要是理性的话,他最优的策略就是观望,等到价格对自己有利的时候再完成交易,否则就退出交易。于是导致的结果就是——一方面A想要买B币需要出高价,这点可能还能接受;但另一方面,如果B币一直上涨的话,A甚至在交易之初没法确认能否顺利成交。

因此,一方面,这种方案精巧地构筑在了“节点的理性”之上;但另一方面,这种理性又反过来导致了这种方案几乎不现实,尤其是,当我们有了可替代跨链方案的时候,这份基于哈希锁的资产互换方案,就立刻被弃置一旁了。

02 验证者跨链

第二个方案,就是验证者跨链,这次换做下属来给A星大佬讲。

“验证者跨链基本上和你遇到的C公司的方案类似——我们找个可信的节点,比如我们自己,作为验证者。这个验证人的工作很简单,他就正常地跑两条链的客户端就行了。然后,当A链上有跨链消息的时候,他负责在这条消息在A链上确认了之后,对这个消息签名,然后转发到B链完成消息跨链。当然,如果是资产跨链的话,那么这个消息就代表A链上资产被锁定,而转发的消息就可以在B链上解锁同样数量的镜像资产。”

“这我都知道了,那咱们的方案能不能做点改进呢?”

“我们可以采用‘门限签名’的方案——就是相比于C公司,我们可以在我们公司之外,在拉来几个大公司,比如H公司和Z银行,然后,让他们也来做验证者。然后,在跨链的时候,跨链信息需要携带的不是1个签名,也不是3个签名,而是一个3选2的门限签名——也就是说,这个签名需要三个人中至少两个人认可才有效。这样的话,即避免了单点故障的情况,又增加了这个签名的可靠性。”

验证者跨链,也就是C公司采用的方法,实际上是当下大多数跨链方案使用的方法。一个很现实的原因是——因为目前大部分跨链的需求都是发生在某条(类以太坊)公链和以太坊之间的,而对于跨链节点而言,额外运行个以太坊客户端是非常容易也是最简单易行的方法。而这些跨链方案,或者叫跨链桥之中,很多都采用了上述的门限签名的方案——也就是跨链信息的真实性,由几个权威机构中的多数担保,这样可靠性显然强过由单个机构担保。

03 中继者跨链

中继者(relayer)跨链的逻辑是——中继者不负责对于跨链信息提供背书,而仅仅负责将跨链的证据转发到另一条链上。

实际上,这就类似A星大佬第一次失败的跨链尝试的方案。而正如A星大佬吃瘪的原因,中继链跨链并不适用于所有的区块链,比如A星大佬所处的采用PoW共识的A链,由于共识不具备最终性,因此无法提供一个跨链消息在链上确认的证明,于是就不能采用中继者跨链。

但是,如果两条链都采用BFT类算法,有最终性,能够提供一个跨链消息的真实性证明,那么中继者需要做的事就是在收集到这个证明之后,把它和跨链交易一起“中继”到另一条链上。可见,相比于验证者,中继者的工作相当轻松,甚至于不需要运行两条链的客户端,只不过是负责传递一下消息就好了。

而按照这个思路延伸一下,其实中继者跨链甚至不需要某个特定的“中继者”,只需要一个通信协议——比如说,所有有最终性的区块链都将跨链消息和证据按固定的格式打包成一个链间通信信息,然后所有的区块链节点看到这个信息就会帮忙把这个信息转到它该去的链上去。

也就是说,只要认可这个协议的人,其实都是中继者。而Cosmos提出的IBC协议就是这样一个方案,但目前,首先主流的公链,尤其是以太坊,都还没有最终性。因此,IBC协议,以及中继者跨链,实际上能够使用的场景并不多。

04 “跨链”链

“你们眼界都太窄了。”A星大佬对前两份方案很不满意,“我们要做的可不是一个跨链方案,我们要打通区块链生态闭环和信息屏障,以跨链为抓手,聚焦区块链使用者的真实需求,为区块链使用者赋能,创造新的引爆点……”

“那么……我建议您详细了解下第四份方案。”

于是,A星大佬翻开了“跨链”链的方案,或者这上面有个霸气的名字——万链互联方案。

这个方案实际上就是验证者方案+聚合签名的扩展——

我们不仅考虑两条链的跨链,我们考虑很多条链的跨链。

我们不仅找3个验证者,我们找一堆验证者。

我们不仅用k选n的聚合签名,我们干脆用区块链——区块链共识算法不就保证区块链上所有消息都通过大多数验证者的验证了吗?

于是,这个方案就呼之欲出了——做一条新的区块链,这条链的共识节点都是可靠的验证者,而它们负责验证很多链上的跨链消息,并且负责发到链上。于是,这条链就成了一个可靠的“跨链信息来源”,而所有的链不需要额外的验证者跨链方案,也不需要和所有想跨的链各建一条跨链桥,而都只需要从这条链上获取信息就好了。

A星大佬看完这个提案眼里发光,当即拍板:“就它了!”

而事实上,这样的跨链方案,比如Wanchain,比如IRIS,都是非常受追捧的项目。

05 其他技术细节

除了四个方案的区别之外,各种跨链方案在实现方面有一些类似于各个rollup方案之间的差别——比如每条跨链消息都单独“跨”,还是几条跨链消息打包在一起“跨”,又或者定期“跨”这段时间内所有的跨链消息,并且单独开一个合约记录另一条链的当前状态。这几种方案,基本上就是在效率(每笔跨链的消息复杂度)和延迟(跨链交易的确认时间)上做取舍。

此外,另一个各个跨链方案间的不同之处在于——跨链的信息,究竟是谁负责发给目标链。

继续沿用之前的例子的话,就是A星大佬获得了C公司的认证之后,这个认证结果是C公司负责发给B链的海关,还是发给A星大佬让他自己交给B链海关。这个差别看似无关紧要,但在实际之中是非常关键的。这还是因为区块链不保证消息上链的时间的问题,以及网络堵塞时交易费的问题。

第一个方案看似是用户体验更好的,但如果C公司认证通过之后B链正好堵塞,那么如果C公司仍旧按照之前的交易费来提交跨链证据,那么就可能出现长时间无法上链的情况,而这对于有时间需求的用户是无法接受的。但另一方面,如果C公司收用户更高的服务费来保证上链时间,那么一方面不急用的用户并没有这种需求,另一方面如果遇到极端情况交易费涨上天,C公司还是需要冒风险。

因此,其实看似用户体验不好,但是实际上最合逻辑的方法,还是C公司只负责验证,然后把证据和负责上链的责任发回给用户,让用户根据自己的需求,决定愿意花多少交易费上链。

06 跨链与侧链的区别

在文中我们多次类比了跨链和二层网络方案,比如闪电网络和Rollup。那么跨链和侧链的区别在哪呢?实际上,两者在很多地方都有相似性,但核心逻辑上——跨链中两条链的地位是平等的而侧链不是。

跨链中双方链的节点都默认不知道对方的链,因此信息互通需要能够验证对方链上的真实性,或者由同时运行两条链的节点背书,而这里,背书节点理论上需要在两条链上都有经济抵押。而侧链中,所有侧链的节点默认是同时运行主链的。所以,验证信息是单方面的——只有侧链的信息提交到主链上需要验证,而经济抵押也只需要在主链上即可。

而以上的这种差别,也可以用来从逻辑上区分跨链和侧链。如果某个跨链方法只有单向信息通信,或者单向抵押,那么实际上这就是一个侧链方案而非跨链方案。

05 关于跨链的一点看法

以上,就是一个有点啰嗦的关于跨链的介绍了,但啰嗦也是有原因的——我可以像很多科普文章一样上来就丢出来四种跨链方案而不介绍跨链这个概念的来龙去脉,但我并没有这么做,因为我更想介绍的是“跨链应该是什么样子的”,而不仅仅是“跨链现在是什么样子的”。

实际上,正如A星大佬第一次遇到的杠精B星海关一样,人们最早对于“跨链”这个概念是很较真的,正如人们对于“去中心”“预言机”等等概念都很较真一般,毕竟,如果中本聪和密码朋克们不较真,那么中心化的系统就够用了,用区块链干什么?

也就是说,人们一开始是很小心翼翼地避免引入额外的信任假设,因此,验证者跨链尽管简单,但哈希时间锁才是最开始被提出的方案**。**但随着区块链的发展,跨链的需求越来越急切,我们采用了验证者跨链的方案,就如同对于链外数据的获取我们采用了预言机的方案一样。

实际上,如果仔细看现在跨链和预言机实现的方案,两者基本是一致的——从一个可信任的机构,到多个可信任的机构的聚合签名,再到一条链,比如Chainlink(预言机)和Wanchain(跨链)。两者一致的原因很简单,因为从被跨的那条链,比如B链看过去,两者是一样的——不管信息来自一条链也好,还是一个网站也好,总之是个不可靠的消息源,于是,我需要一个机构给这条消息的可靠性做担保之后,我才愿意相信这条消息把它放在我的链上。

这看起来似乎很合理不是吗?

但两者的可信程度真的是一样的吗?作为区块链从业者,我们一直在科普说“中心化机构不可靠,区块链是信任的机器,可以用算法来取代信任”,而背地里,我们在实际中自己都不信任另一条链上的数据,将一条链上的数据等同于从其他来源获得的数据,反而额外要求一个可信第三方对这些信息进行背书我们才愿意相信,这不是很讽刺吗?

当然,从逻辑上这非常正确,因为区块链之间的可信度也是有区别的,B链不可能完全相信A链上的数据。

但无论如何,A链上,通过所有A链节点共识的数据,总归比任何链外数据要可信吧,也应该比一个C公司要可信吧。虽然说,囿于当前的技术,我们不知道如何提供一个消息在A链上的有效证明,于是我们“取巧”和“折衷”地用了预言机一样的,引入可信第三方的方案。但在遥远的未来,理想状态下的跨链方案,更应该是不需要引入额外的信任就能够实现的方案,比如中继者的方案,而不是满足于用这种“取巧”的方法,引入第三方来完成所有搞不定的东西,例如跨链、预言机乃至MEV、DeFi攻击,并且还理所当然地认为,未来的一切都需要通过引入第三方,甚至要特地再拿一条链来做第三方,来解决这些问题。那样的话,是不是一开始我们就不需要区块链呢?

加入Colacoder,和区块链资深研究者和开发人员,一起用通俗的语言,聊一聊圈内热点话题背后的技术和逻辑,欢迎投稿!

点赞 3
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

2 条评论

请先 登录 后评论
maxdeath
maxdeath
代尔夫特理工大学 (TU Delft) · 区块链博士后 & 代尔夫特理工大学 (TU Delft) · 信息论博士