比特币的成功,带动区块链技术的迅速发展,然而,除了能应用在加密货币外,要将区块链技术实际落地,应用到其他领域,尤其是商业、金融科技方面,目前技术上仍遇到不少问题(比如说交易瓶颈、速度、吞吐量-这些因素造成的网络拥挤、匿名公开特性-造成的隐私问题等等)为了突破这些障碍,有效地解决这些问题就成为了大家一直讨论和研究的方向:

有人提出索性"砍掉重练",即再重新开发新一个新的区块链系统,也是重新再造个轮子,需要完成大量重覆性工作,同时要不断发行新的数字资产,这个工作量可是相当大的;

既然这个做法有问题,接着

又有人提出"直接在比特币上做修改",问题这些修改会造成比特币区块链出现分叉,令现有的用户受到影响。所以,要在原比特币区块链中作出一些改革或者扩展是相当困难的。

那有没有一种方法是,既不影响原有的区块链系统的基础上,而又能解决上述问题,扩展原有区块链系统的解决方案呢

从而侧链Sidechain亦应运而生!

侧链Sidechain

侧链Sidechain (又称楔入式侧链):是一种跨区块链的解决方案,透过这种解决方案,可以实现数字资产安全地从第一个区块链到第二个区块链的转移,又可以在稍后的时间点从第二个区块链安全返回到第一个区块链。

第一个区块链通常被称为或理解为主链;(主链是指独立的区块链系统,最初是指比特币区块链,现在任何区块链都可以是主链)

第二个区块链则是我们正在说的侧链;(只要遵守侧链协议的所有区块链都能是侧链)

简单来说,侧链协议就是允许让数字资产(加密货币等)在不同的区块链系统上互通,一般而言,大多数以比特币区块链作为主链,其他区块链作为侧链,两者通过双向锚定(Two-way Pegging),实现比特币从主链转移到侧链,从侧链返回到主链之间的流通。

侧链既可以是独立的区块链,具有自身的帐本、共识机制、智能合约等。大部份情况下,

侧链可以不需要有自己的代币(Token),侧链上所有的代币最初都会被锁定,直至来自其他某条侧链的资产转入将其激活。侧链亦可以自行发行代币,侧链会锁定主链中对应的代币,并以此作为基础,承诺与主链代币的兑换比例,直至主链代币从侧链返回主链。

因此,侧链协议可以扩展原来的主链,进行交易隐私保护技术、智能合约等新功能的添加,并将一些需要进行高频的交易或订制化的交易放到主链外进行,从而不需对主链进行修改更新。侧链也提供了一种更安全的协议升级方式,当侧链发生灾难性的问题时,主链依然安然无恙。

侧链技术诞生的历程

(同样地,如果不想看历史,可以直接跳到下一节)

2012年,在比特币聊天室中,首次出现了关于侧链概念的相关讨论。当时比特币的核心开发团队正在考虑如何可以安全的升级比特币协议,以增加新的功能,但是直接在比特币区块链上进行功能添加比较危险,因为如果新功能在实践中发生软件故障,则会对现有的比特币网络造成严重影响。另外,由于比特币的网络结构特性,如果进行较大规模的改动,还需要获得多数比特币矿工的支持。这时,比特币核心开发者便提出了侧链方案。这种技术允许开发人员将新功能附加在其他的区块链,但是这些区块链仍然附着在现有比特币区块链上。这些区块链中新功能可以充分利用现有比特币的网络特性,而不会对现有的比特币网络造成危害。

2014年,侧链协议诞生前已经出现了许多具有新功能的区块链,并产生了各种竞争币及"山寨币",如莱特币、狗狗币等。这时,比特币的核心开发团队担心这些竞争币的产生会稀释比特币的价值及对整个加密货币市场造成碎片化的情况,同时,以太坊等一些项目的加入竞争。他们认为,应该把比特币作为一种储备货币,并将新功能添加到侧链上,以侧链的形式扩展比特币的底层协议。这样如果用户想使用其他的新的区块链功能,就不需要购买其他代币。

2014年7月,以太坊众筹,获得了价值1.4亿人民币的比特币,还有20%的以太币,开发团队获得了巨大的回报。但是比特币核心开发组并没有因为他们辛勤工作获得可观回报,为应对其他创新的区块链,如以太坊区块链(Ethereum)区块链、比特股(Bitshares)区块链等带来的智能合约及各种去中心化应用的兴起,受到大量人们追捧,反观基于比特币的应用就因为开发难度大,项目少,而对比特币造成威胁。同时,比特币核心开发组亦不欢迎基于比特币区块链的附生链,以技术方法曾一度将OP_RETURN的数据区减少至40,逼使附生链的开发团队改用其他方式在比特币交易中附带数据。

因此,为了实现商业化价值,并将侧链由概念转化成现实,Adam Back、Matt Corallo等比特币核心开发者共同发起成立了BlockStream 公司。

2014年10月,BlockStream发布了白皮书《Enabling Blockchain Innovations with Pegged Sidechains》。首次明确提出了侧链的概念及其协议实现方案。中文意思是「用与比特币挂钩的侧链来提供区块链创新」。

核心观点是:比特币的区块链在概念上独立于作为资产的比特币。他希望通过技术能支持在不同的区块链上转移资产,这样新的系统可以重用原先的比特币。

Adam Back 提出一个侧链(Sidechain)的概念并列出了侧链的一些属性:

一个用户在一条链上的资产被转移到另一条链上后,还应该可以转移回到原先链上的同一用户名下; 资产转移应该没有对方卷款逃跑的风险,也就是不诚实的用户没能力阻碍资产转移的发生; 资产的转移必须是原子操作,也就是要么全发生,要么不发生。不应该出现丢失资产或欺诈性增加资产的情况; 侧链间应该有防火墙。一条侧链上的软件错误造成链上资产的丢失或增加不会影响另一条链上的资产的丢失或增加; 即使在资产的转移过程中发生区块链的重组,也不应出现问题。任何因区块链重组造成的中断,应该局限在本条侧链上而不应影响其他区块链。通常侧链之间最好能相互独立,用户可以从其他链条提供数据。只有当存在明确的侧链的共识规则时才需要去检查另一条侧链来对其验证; 用户不应需要跟踪不经常使用的侧链;

2017年1月,Blockstream发表文章《Strong Federations: An Interoperable Blockchain Solution to Centralized Third Party Risks》,对侧链早期白皮书的补充和改良。白皮书中着重描述了联合挂钩(Federated Pegs)的相关概念和应用。

侧链运作流程

侧链的核心运作原理为能够锁定一条链上的数字资产,然后从另一条链上产生。

首先回顾一下比特币支付过程:

拥有比特币的意思是指拥有比特币的移动权,拥有者透过私钥来移动自己的比特币。

原来支付比特币的两种情况:

1.支付到个人钱包地址(地址为1开头的普通地址):将1个比特币从地址A支付给地址B后。

协议约定:地址B的拥有者可以具有移动1个比特币的权力。

2.支付到联名钱包地址(地址为3开头多重签名地址):将1个比特币从地址A支付给3个人(两个签名可以做决定)的联名地址B后。

协议约定:联名地址B具有移动1个比特币的权力。

为了实现侧链机制,则是新增一种地址类型(此类型地址需要包含有侧链的相应信息)

3.支到到侧链类型的地址:将1个比特币从地址A支到给侧链类型的地址B后。

协议约定:侧链类型地址B具有移动1个比特币的权力,随后,这个比特币将被锁定在主链地址上,当锁定比特币的交易被确认后,就要给侧链发送一条消息,消息要包含做了比特币的转移而也被锁住了。当侧链同意后,就会在侧链会产生一个输入来源作为主链的交易,按约定的协议,向A提供对应的侧链代币,反之亦然。然而这个"比特币"可在侧链中流通,最后地址B的拥有者在主链再次移动这个币时,这个比特币又回到主链流通。

效果就像比特币能够流通到其他区块链上,但实际上A的比特币只是被锁定,没有销毁,如果想从侧链代币兑换回比特币,这个动作也是对称的。

例子

为了可以更好地、更简单地理解侧链,就以下这个例子介绍:

在现实世界中,如果你要去一个与你不同货币的地区旅行,假设你只能用现金,因此必须要以一定汇率兑换当地货币后,才可在当地消费,而当你返回原来的地区时,你也可以以一定汇率换回本地货币,这样一来一回,就类似侧链的概念,当然,实际上侧链的流程更复杂,但大致上可以如此理解。

可以将本地货币想像成主链,外地货币想像是侧链。一般而言, 主链与侧链是1:1,也可以其他的汇率。

双向锚定(Two-way Pegging)

侧链实现的技术基础是双向锚定(Two-way Pegging),通过双向锚定,可以实现暂时的将数字资产在主链中锁定,同时将等价的数字资产在侧链中释放,同样当等价的数字资产在侧链中被锁定的时候,主链的数字资产也可以被释放。

双向锚定实现的最大难点是协议改造需兼容现有主链,也就是不能对现有主链的工作造成影响,其具体实现方式可以分为以下几类:

1.单一托管模式

最简单的实现主链与侧链双向锚定的方法就是通过将数字资产发送到一个主链单一托管方(类似于交易所),当单一托管方收到相关信息后,就在侧链上激活相应数字资产。这个解决方案的最大问题是过于中心化。以比特币为主链的单一托管模式的工作原理示意图:

2. 联盟模式

联盟模式是使用公证人联盟来取代单一的保管方,利用公证人联盟的多重签名对侧链的数字资产流动进行确认。在这种模式中,如果要想盗窃主链上冻结的数字资产就需要突破更多的机构,但是侧链安全仍然取决于公证人联盟的诚实度。

以比特币为主链的联盟模式的工作示意图:

单一托管模式与联盟模式的最大优点是它们不需要对现有的比特币协议进行任何的改变。

3. SPV模式

SPV(Simplified Payment Verification)模式是最初的侧链白皮书中的去中心化双向锚定技术最初设想。SPV是一种用于证明交易存在的方法,通过少量数据就可以验证某个特定区块中交易是否存在。在SPV模式中,用户在主链上将数字资产发送到主链的一个特殊的地址,这样做会锁定主链的数字资产,该输出仍然会被锁定在可能的竞争期间内,以确认相应的交易已经完成,随后会创建一个SPV证明并发送到侧链上。此刻,一个对应的带有SPV证明的交易会出现在侧链上,同时验证主链上的数字资产已经被锁住,然后就可以在侧链上打开具有相同价值的另一种数字资产。这种数字资产的使用和改变在稍后会被送回主链。当这种数字资产返回到主链上时,该过程会进行重复。它们被发送到侧链上锁定的输出中,在一定的等待时间后,就可以创建一个SPV证明,来将其发送回主区块链上,以解锁主链上的数字资产。SPV模式存在的问题是需要对主链进行软分叉。

以比特币主链的SPV模式的工作流程示意图:

SPV证明

在比特币系统中验证交易时,涉及到交易合法性检查、双重花费检查、脚本检查等。由于验证过程需要完整的UTXO记录,通常要由运行着完整功能节点的矿工来完成。

而很多时候,用户只关心与自己相关的那些交易,比如当用户收到其他人号称发来的比特币时,只希望能够知道交易是否合法、是否已在区块链中存在了足够的时间(即获得足够的确认),而不需要自己成为完整节点做出完整验证。

中本聪设计的简单支付验证(Simplified Payment Verification,SPV)可以实现这一点。SPV 能够以较小的代价判断某个支付交易是否已经被验证过(存在于区块链中),以及得到了多少算力保护(定位包含该交易的区块在区块链中的位置)。SPV 客户端只需要下载所有区块的区块头(Block Header),并进行简单的定位和计算工作就可以给出验证结论。

侧链协议中,用SPV来证明一个交易确实已经在区块链中发生过,称为SPV证明(SPV Proof)。

一个SPV证明包括两部分内容:

1.一组区块头的列表,表示工作量证明;

2.一个特定输出(output)确实存在于某个区块中的密码学证明。

4.驱动链模式

驱动链概念是由Bitcoin Hivemind创始人Paul Sztorc提出的。在驱动链中,矿工作为'算法代理监护人',对侧链当前的状态进行检测。换句话说,矿工本质上就是资金托管方,驱动链将被锁定数字资产的监管权发放到数字资产矿工手上,并且允许矿工们投票何时解锁数字资产和将解锁的数字资产发送到何处。矿工观察侧链的状态,当他们收到来自侧链的要求时,他们会执行协调协议以确保他们对要求的真实性达成一致。诚实矿工在驱动链中的参与程度越高,整体系统安全性也就越大。如同SPV侧链一样,驱动链也需要对主链进行软分叉。

以比特币为主链的驱动链模式的工作流程示意图:

5.混合模式

上述1-4点的模式都是对称的,而混合模式则是将上述获得双向锚定的方法进行有效的结合的模式。由于主链与侧链在实现机制存在本质的不同,所以对称的双向锚定模型可能是不够完善的。混合模式是在主链和侧链使用不同的解锁方法,例如在侧链上使用SPV模式,而在主链网络上则使用驱动链模式。同样,混合模式也需要对主链进行软分叉。

比特币主链与侧链关系图双向锚定的几个阶段:

1. 发送锁定交易:由比特币持有者操作,发送一个特殊交易,把比特币锁定在区块链上。

2. 等待一个确认期:确认期的作用是等待锁定交易被更多区块确认,可防止假冒锁定交易和拒绝服务攻击,典型的等待时间是1-2天。当主链上生成了特殊输出后,用户等待确认期结束,然后在侧链上生成一个引用该输出的交易,提供出一个它已被创建并在主链上被足够工作量覆盖的SPV证明,确认期是一个依侧链而定的安全参数,要在跨链交易速度和安全性间做权衡。

3. 在侧链上赎回比特币确认期结束后,用户在侧链上创建一个交易花掉锁定交易的输出,并且提供一个SPV工作量证明,输出到自己在侧链上的地址中去。该交易称为赎回交易,而SPV工作量证明是指赎回交易所在区块的工作量证明。

4.等待一个竞争期:竞争期的作用是防止分叉(双花)

在此期间

1.赎回交易不会被打包到区块

2.新传输到侧链的比特币不能使用

3.如果有工作量更大的工作证明出现,即该赎回交易包括了比特币主链更大难度的SPV证明,则上一个赎回交易将被替换。

4.竞争期结束后,该赎回交易将被打包到区块中,用户可以使用他的比特币。

从侧链转到比特币到主链的过程也是如此,这就是侧链双向锚定协议。

市场应用

目前,比较著名的侧链包括基于比特币网络的侧链BTC Relay、Rootstock的Liquid,以及非比特币的侧链如Lisk和国内的Asch等。

BTC Relay

ConsenSys的推出的基于以太坊区块链的智能合约的侧链解决方案。BTC Relay把以太坊网络与比特币网络以一种安全去中心化的方式连接起来。BTC Relay通过使用以太坊的智能合约功能允许用户在以太坊区块链上验证比特币交易。以太坊DApp开发者可以从智能合约向BTC Relay进行API调用来验证比特币网络活动。被认为是区块链上的第一个侧链。BTC Relay进行了跨区块链通信的有意义的尝试,打开了不同区块链交流的通道。

Liquid

Blockstream的开源侧链项目,使用了比特币双向锚定技术,Liquid目的是实现使得比特币可以在主链和侧链中互转,旨在提高隐私性、降低成本、加速交易所和经纪商之间的价值转移及结算流程。

RootStock

建立在比特币区块链上的智能合约分布式平台。它的目标是将复杂的智能合约实施为一个侧链,为核心比特币网络增加价值和功能。RootStock实现了以太坊虚拟机的一个改进版本,它将作为比特币的一个侧链,使用了一种可转换为比特币的代币作为智能合约的「燃料Gas」根链和以太坊在功能上是高度重合的,它们都是一个点对点的分布式计算网络嘛,根链没有发行任何代币,它是和比特币一起挖矿的,叫联合挖矿。

Elements

Blockstream公司的开源侧链项目,是一个侧链的参考实现。元素链使用了比特币双向锚定技术,侧链协议的目的是实现双向锚定(Two-way Pegging),使得比特币可以在主链和侧链中互转。元素链给比特币快速带来许多创新技术,除了智能合约外,他还给比特币快速带来许多创新技术,包括私密交易、证据分离、相对锁定时间、新操作码、签名覆盖金额等等特性。这些技术可以被任意组合应用到任意侧链中。

Lisk

一个致力于为JavaScript开发者提供创建分布式应用程序的区块链平台,由德国的Max Kordek和Oliver Beddows于2016年初成立。它把每一个分布式应用程序都会在其自己且独一无二的区块链,也就是侧链上运行,这种封装使得主要的Lisk的主网高效,迅速和精简。LISK是新一代的区块链平台,它把每个应用加到LISK的单独侧链上。用过比特币和以太坊的朋友都知道,由于比特币和以太坊只有一条主链,所有功能和数据都加入这条主链导致区块快速膨胀,超大的区块体积,超长的同步时间,这个一个很痛苦的经历。Lisk的侧链模式给在处理高交易量下如何解决网络拥堵的问题提供了一种方法,用户只有用到相关的应用时才需要下载对应的侧链,大大减小了无效的同步数据,保持了整个Lisk网络的高效运行,而且,Lisk网络的速度随着时间的推移会继续加快,越显示他的特别优势。

Asch

是国内推出的一个基于侧链技术的去中心化应用平台,由单青峰于2016年初成立。Asch平台提供的服务包括一个主链和一套应用软件开发工具包。Asch的主链主要负责构建基础设施、应用间的数据共享以及资产路由,应用软件开发工具包内置了侧链协议,主要负责构建具体的应用,通过侧链协议可以与主链进行资产互通。

欺骗性转帐攻击

简单来说就是利用"时间差"进行欺骗。理论上,任意深度的重组都是有可能的,这让攻击者能制造一个比发送链的竞赛期时间长的重组,在发送链撤消该半侧的转帐前,将币在侧链间完全转移。结果将使接收链上币的数目与发送链上可赎回的锁定输出的数量不对等。如果允许攻击者将币转移回初始链,他将增加他自己币的数量,让该侧链上其他用户付出损失。

解决方法

通过简单地延长转移的竞赛期就可以使这种风险变得任意小。可以用两条链的相对哈希算力生成一个函数来决定竞赛期的持续时间:接收链可以仅在见到一个等同于该链1天工作量的SPV证明时才解锁币,这一证明可能相当于发送链上几天的工作量证明。类似这样的安全参数是特定于侧链的属性,可以针对每个侧链的应用进行优化。不管这种事件有多不可能发生,很重要的一点是,不能因侧链的责任造成灾难性故障。可以创建一个SPV证明见证这一事件,并且侧链可以接受这种证明。

优缺点

优点

侧链增加主链的扩展性-要增加主链的功能,只需开发相应的侧链即可。毋须每次升级更新都惊动主链。 侧链不影响主链性能-主链和侧链是互相独立的,不会增加主链的负担,避免数据过度膨胀,是一种天然的分片机制。所以如果侧链由于开发出错或者无人维护,导致失败,最坏的情况只是移动到侧链的比特币遗失,就相当于将比特币支付给一个私钥遗失的地址而已,而不会影响到主链(比特币区块链)的运行,更不会增加主链的负担; 侧链是独立的区块链-侧链可以灵活地设置各种区块链的参数(例如区块间隔、交易费、奖励等),而且有其独立的节点和验证,完全独立于主链。 侧链为主链实现无缝升级-侧链经过时间验证其可靠性及功能优越性后,大家会更倾向于从主链向侧链转移比特币,随着时间的推移,比特币区块链终有不再产生新的比特币时,大家都会向侧链(假设是一个与原比特币1:1 的汇率,拥有更多功能及更快的交易速度的新区块链)转移比特币,那么,原主链中再没有交易产生,也没有矿工,从而侧链也成功过渡升级为主链,原主链的比特币也终于过渡成为新主链的数字资产,从而达到无缝升级的效果。

缺点

1. 额外复杂度:侧链在以下几个层面引入了额外的复杂度。

在网络层面,我们有了许多独立的、非同步的区块链,支持相互间转移。它们必须支持可被后期重组证明宣布失效的交易脚本。我们还需要软件自动检测不正当行为,以及生成并发布相关的证明。 在资产层面,简单的「一条链,一种资产」准则不复存在了;有侧链的情况下,单条链可以支持任意多的资产,甚至包括该链首次被创建时还不存在的资产。这些资产的每一个都要标记上该资产的来源链,以确保资产的转移可以被正确地解析。 仅让区块链基础架构能处理高级功能是不够的:管理钱包的用户界面也需要重新考虑。目前,在竞争币的世界中,每条链都有自己的钱包,用以支持该链上币的交易。需要改写这些钱包以便支持多个链(可能带有不同的功能集)和链间资产的转移。当然,如果令用户界面过于复杂,完全可以选择不使用某些功能。

总结

侧链技术的出现意味着比特币不仅可以在比特币区块链上流通,同时亦可以在其他不同的区块链上互相流转,更重要的是将会令比特币区块链系统,甚至整个区块链技术的应用范围更广,交易效率更佳,提高交易速度后将能解决原区块链的"每秒只能完成7笔交易"困境。透过开发各种创新的应用并使用侧链协议与主链对接,这将使比特币的在市场上的地位更稳固,例如闪电网络会把很多交易放在侧链上,只有在做清算时才用主链,这样一来能极大地提升交易速度,又不会增加主链的存储负担。对系统本身而言亦是一个最佳的选择,以共融的方式扩展整个加密货币生态,而并不是选择排斥其他区块链系统,同时,未来亦能为比特币区块链本身进行无缝升级过渡。随着各类侧链的发展,这些侧链拥有各自的系统,在系统内所有的交易可以自行在系统内处理好。如果要在不同的侧链进行交易,那就需要用到跨链技术(Cross-chain),目前主流的跨链技术包含公证人机制(Notary Schemes)、侧链/中继(Sidechains/Relays)、哈希锁定(Hash-Locking)、分布式私钥控制(Distributed Private Key Control)。而使用侧链技术,将两条侧链和主链双向锚定,就是以主链作为双方完成交易的"中间人"。侧链技术及其他跨链技术,不单止可以用来转帐,而且未来还有机会进一步打通各不同区块链之间的资料联通,发展潜力不容忽视。