本节书摘来自华章计算机《区块链开发指南》一书中的第2章,第2.4节,作者:申屠青春 主编 宋 波 张 鹏 汪晓明 季宙栋 左川民 编著更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.4 Sidechains
Sidechains(侧链)实质上不是指特定的某个区块链,而是指那些遵守侧链协议的所有区块链,这个词是针对比特币主链来说的。侧链协议是指可以让比特币安全地从比特币主链转移到其他区块链,同时又可以让其他区块链上的货币安全返回到比特币主链的一种协议。
所以从某种程度上来说,现在市面上的所有区块链,例如以太坊、莱特币、狗狗币等区块链都可以成为侧链应用。侧链的实现具有重大意义,它意味着比特币可以在不同的区块链上流通,其应用范围和应用前景会更加广泛。一旦侧链的应用流行起来,有创意有想法的人就会研发出各种不同的侧链协议来和比特币进行对接,很显然这种方式会进一步巩固比特币在区块链中的地位。
2.4.1 侧链背景
侧链的提出主要是基于以下几个原因。
(1)应对其他区块链的应用威胁
现在市面上出现了几种非常流行的区块链,例如以太坊区块链、比特股区块链等,这些不断产生的新的区块链势必会对比特币区块链产生很大的威胁。以太坊区块链更是提出了智能合约这个有望颠覆整个区块链的应用,而到目前为止,基于比特币的应用开发项目还不多,已有的项目难度也很大。
(2)比特币核心开发组不欢迎附生链
比特币现有的应用中已经存在合约币和彩色币等附生链应用,但是基于一些原因比特币核心开发组并不是很欢迎这些应用。他们的考虑是这些应用会在一定程度上降低比特币区块链的安全性。
(3)Blockstream商业化的考虑
有了以太坊众筹的前车之鉴,比特币核心开发组也希望能以某种商业化的方式来实现更高的回报,所以基于比特币的侧链应用也激发了一群人开始尝试商业化这些应用。
基于以上三个原因,提出侧链协议,把比特币从主链上安全地转移到了其他货币区块链,这样既增加了区块链的多样性又可以应对二代币的竞争,同时这些应用本身确实具有比较大的商业前景,一旦实现商业化,这一块也将成为一块很大的蛋糕。
2.4.2 技术原理
楔入式侧链技术(pegged sidechain),它将实现比特币和其他数字资产在多个区块链间的转移,这就意味着用户们在使用他们已有资产的情况下,就可以访问新的加密货币系统。目前,侧链技术主要由Blockstream公司负责开发。
这里先列出“侧链”所需具备的属性,具体如下。
在侧链间移动的资产应当能够被当前持有者移回,但除此之外的任何人都不行(包括前持有者)。
资产的移动应当是无交易对手风险的;也就是说,不诚实的一方无法阻止转移的发生。
资产转移应当是元操作(原子操作)的,即要么完全完成,要么根本不发生。不存在会导致资产损失或允许欺诈产生的失败模式。
侧链应当设有防火墙:一个会使某条链发生资产铸造(或偷盗)的缺陷(Bug),不应导致其他任何链出现资产的铸造或偷盗。
区块链重组时应当处理干净,即使是在资产转移的期间也要如此;任何破坏应当只发生在它所处的侧链上。总的来说,理想情况下,侧链应当完全独立,其他链上所需的全部数据应由用户提供。侧链的验证者应当只有在侧链本身的显式共识规则有要求时,才去跟踪其他链。
不应要求用户去跟踪他们未主动使用的侧链。
早期“转移”钱币的解决方案是用一个可公开识别的方式来销毁比特币的,新的区块链能够检测到,以允许铸造新币[Bac13b]。这解决了上面提到的部分问题,但由于这种方法只允许单向转移,因此还不足以满足我们的目的。我们提出的方案是由资产转移的交易本身提供所有者证明,从而实现资产转移,以避免让节点有跟踪发送方链的需求。从上层实现的角度来说,当资产从一个区块链向另一个链移动时,我们在第一个区块链上创建交易锁定资产,然后在第二个区块链上创建一笔交易,该交易的输入中包含一个锁定已正确完成的密码学证明。这些输入可用某种资产类型来标记,比如创生出资产的区块链的创世哈希(genesis hash)。
第一个区块链称之为父链,第二个则简称为侧链。在某些模型中,两条链可对称地来处理,因此这一术语是相对而言的。如果打算将资产从(初始)父链转移到一条侧链,期间可能会再转移到别的侧链,最终还能转回至父链,并保全初始资产。一般情况下,我们把父链看成是比特币系统,侧链则是其他区块链中的某一个。当然,侧链的币(coin)也可以在侧链间传递,并非只能与比特币系统进行往来;不过,由于任何一个最初从比特币系统移动的币都可以移回去,所以不管变成什么样,它仍是个比特币。
此外,由于侧链是从父链中转移现有资产的而不是另铸新资产,因此,侧链不会引起未经授权的铸币,维护资产的安全和稀缺性是依靠父链来实现的。
更进一步地说,参与者不必再担心他们的持有物会被一个实验性竞争链锁住,因为侧链币能够用等额的父链币来赎回。这就提供了一个退出机制,减少因无人维护软件而造成的损失。
前面已经提到楔入式侧链技术,它的双向挂钩(2WP)允许将比特币从比特币区块链转移到辅助区块链,反之亦然。“转移”实际上是一种错觉:比特币其实并没有转移,只是在比特币区块链上被暂时锁定了,而且同时在辅助区块链上有相同数量的等价令牌被解锁。当等量的令牌在辅助区块链上被再次锁定时,原先的比特币就会被解锁。这实质上就是双向挂钩所要实现的功能。但这一功能也存在一个问题,即理论上只有当辅助区块链最终结算时才能实现这一功能。因此,任何双向挂钩系统都必须做出妥协,并且依靠于双向挂钩的相关参与者都是诚实的这一假设。最重要的假设是,主要的区块链是无须审查的,而且大多数比特币矿工都是诚实的。另外可能需要的一个假设是,大多数监管锁定比特币的第三方也是诚实的。如果这些假设不成立,则比特币及等效辅助区块链的令牌就有可能被同时解锁,那么恶意的双花就变得可行了。任何双向挂钩系统都必须选择一种措施,使得被假设要诚实的各方都能在经济和法律方面被鼓励依章办事。这包括分析这些关键方对区块链网络进行攻击的成本及后果。双向挂钩实施的安全性取决于激励机制,以便参与双向挂钩系统的关键方能够真正执行双向挂钩所应实现的功能,如图2-1所示。
双向锚定分为四个阶段,具体如下。
1)发送锁定交易,把比特币锁定在比特币主链上。
2)等待确认期。确认期的作用是等待更多区块确认锁定交易,可防止假冒锁定和拒绝服务攻击,等待时间是1~2天。
3)在侧链上赎回比特币。上述确认期结束后,用户在侧链上创建一个交易花掉锁定交易的输出,并且提供一个SPV工作量证明,输出到自己侧链上的地址。这个交易也称为赎回交易,SPV工作量证明是指赎回交易所在区块的工作量证明。
4)等待一个竞争期。竞争期的作用是防止双重支付,在此期间,新转移过来的币不能在侧链上花费。竞争期的目的是防止重组时出现双花,在重组期间会转走先前锁定的币。在这个延迟期内的任何时刻,如果有一个新的工作证明发布出来,且对应的有着更多累计工作量的链中没有包含那个生成锁定输出的区块,那么该转换将被追溯为失效。我们称此为重组证明。
图2-1 双向锚定示意图
竞争期结束后,这个赎回交易将被打包到区块中,用户就可以使用自己的比特币了,从侧链转移比特币的过程也是如此,当用户想把币从侧链上转回父链时,与原先转移所用的方法相同:在侧链上将币发送至一个SPV锁定的输出,并产生一个充分的SPV证明来表明该输出已经完成,然后使用这个证明来解锁父链上先前被锁定的那个等面值的输出。
由于楔入式侧链可能会从很多链中搬运资产,且无法对这些链的安全性做出假定,因此,不同资产不可相互兑换是非常重要的(除非是一个显式声明的交易)。否则,恶意用户可以通过创建一条资产毫无价值的无价值链进行偷盗,即将这样一种资产移到一个侧链,再用它去兑换别的东西。为了应对这种情况,侧链必须有效地将不同父链中的资产处置为不同的资产类型。
总之,我们提议让父链和侧链相互做数据的SPV验证。由于不能指望父链客户端能看到每条侧链,因此为了证明所有权,用户必须从侧链导入工作量的证明到父链。在对称式双向楔入中,反向的操作也是如此。
为了让比特币系统成为父链,需要有一个能识别和验证SPV证明的脚本扩展。最起码的要求是,这种证明需要做得足够小,以便能放进比特币系统一个交易之中。不过,这只是一个软分叉,对于不使用新功能的交易不会产生影响。