侧链
侧链(Sidechain)协议允许资产在主链和其他区块链之间互转。
一开始,侧链诞生之前,众多“山寨币”的出现正在碎片化整个数字货币市场,再加上以太坊等项目的竞争,一些比特币开发者希望能借助侧链的形式扩展比特币的底层协议。
简单来讲,以比特币区块链作为主链(Parent chain),其他区块链作为侧链,二者通过双向挂钩(Two-way peg),可实现比特币从主链转移到侧链进行流通。
这里的关键技术点是如何进行特殊锁定主链上的币,然后是如何实现双向挂钩。
侧链出现的背景
侧链(sidechain)的正式定义是缠绕链,负责缠绕对接应用链和结算链。另外两个又是什么鬼,不要紧,先知道这样设计是实现功能分层,松耦合,各自为政,又各自透明,可以对接协同工作。
结算链是负责不可逆记账,去中心化安全共识。比如比特币就是典型的结算链。这种链要求节点多,充分离散化分布,协议可迭代而不会造成兼容问题,高安全壁垒。结算链作为区块链架构里面的底层基准代表,目前已经锁定了一系列的事实上的标准,我相信近期不会有变动的需要,长期也可以做到稳定不变,灵活性、扩展性、功能性将会由侧链(缠绕链)、应用链来实现。
在技术创新领域,分层次,松耦合的协议标准开发更能够激发生态活力,有利于技术分工和协作,这也是市场自然选择的结果,结算链的底层事实标准很快会被锁定,以不变应万变,留下的所有的缺陷也好不足也好,统统让位给侧链、应用链去处理。
侧链从技术上讲,就是缠绕结算链和应用链,使应用链数据和结算链数据无缝对接,承上启下。
侧链的主要功能有:
- 结算链离链交易
- 应用链的基础用户数据(用户账号,权限,代币账本)
- 应用链的运行承载(智能合约虚拟机,运行平台)
侧链是什么?
侧链可以是一个独立的区块链,有自己按需定制的账本,共识机制,交易类型,脚本和合约的支持等。侧链不能发行比特币,但可以通过支持与比特币区块链挂钩来引入和流通一定数量的比特币。当比特币在侧链流通时,主链上对应的比特币会被锁定,直到比特币从侧链回到主链。总之,侧链机制可以将一些定制化或高频的交易放到比特币主链之外进行,实现了比特币区块链的扩展。侧链的核心原理在于能够冻结一条链上的资产,然后在另一条链上产生,可以通过多种方式来实现。当然最容易想到的就是SPV证明的方法。
SPV证明
在比特币系统中验证交易时,涉及到交易合法性检查、双重花费检查、脚本检查等。由于验证过程需要完整的 UTXO 记录,通常要由运行着完整功能节点的矿工来完成。
而很多时候,用户只关心与自己相关的那些交易,比如当用户收到其他人号称发来的比特币时,只希望能够知道交易是否合法、是否已在区块链中存在了足够的时间(即获得足够的确认),而不需要自己成为完整节点做出完整验证。
中本聪设计的简单支付验证(Simplified Payment Verification,SPV)可以实现这一点。SPV 能够以较小的代价判断某个支付交易是否已经被验证过(存在于区块链中),以及得到了多少算力保护(定位包含该交易的区块在区块链中的位置)。SPV 客户端只需要下载所有区块的区块头(Block Header),并进行简单的定位和计算工作就可以给出验证结论。
侧链协议中,用SPV来证明一个交易确实已经在区块链中发生过,称为SPV证明(SPV Proof)。一个SPV证明包括两部分内容:一组区块头的列表,表示工作量证明;一个特定输出(output)确实存在于某个区块中的密码学证明(特殊锁定)。
双向挂钩
侧链协议的设计难点在于如何让资产在主链和侧链之间安全流转。简而言之,接收资产的链必须确保发送资产的链上的币被可靠锁定。

上图演示了侧链和主链双向挂钩的过程
侧链技术协议采用主侧链双向挂钩机制实现比特币从主链向侧链转移和返回。主链和侧链需要对对方的特定交易做SPV验证。完整过程如下:
- 当用户要向侧链转移比特币时,首先在主链创建交易,待转移的比特币被发往一个特殊的输出。这些比特币在主链上被锁定。
- 等待一段确认期,使得上述交易获得足够的工作量缺人。
- 用户在侧链创建交易提取比特币,需要在这笔交易的输入指明上述主链被锁定的输出,并提供足够的SPV证明。
- 等待一段竞争期,防止双重花费攻击。
- 比特币在侧链上自由流通。
- 当用户想让比特币返回主链时,采取类似的反向操作。
- 首先在侧链创建交易,待返回的比特币被发往一个特殊的输出。
- 等待一段确认期。
- 在主链用足够的对侧链输出的SPV证明来解锁最早被锁定的输出。
- 竞争期过后,主链比特币恢复流通。
联合楔入(Federated pegs)
在比特币区块链上锁币,然后在侧链上进行体现是可行的,但是由于比特币协议的局限性,体现的过程无法达到完全的去中心化。侧链的运作是双向的,二级资产的体现仍然无法转换到比特币网络中。因此,双向楔入的另一个部分去中心化(semi-decentralized)选择就产生了:联合楔入。
联合楔入将体现功能委托个一个有信用保证的团体,在二级区块链交易中,比特币网络不负责资金的冻结或者解冻。要进行侧链内外的资产转移,用户可以将这些资产转移到一个由federation控制的多重签名(multisig)地址中。
一旦这个地址接收到了一定数量的比特币,这个二级区块链将以完全去中心化的模式发放这部分资金,整个过程无需federation的审核。
如果用户想要把币从侧链转移到比特币区块链,他只要把这部分比特币转移到侧链中一个特定的地址中,并且在侧链中附上比特币区块链中的输出值信息。
接着,联合楔入会为输出创建交易。这笔交易必须由大多数密钥持有者进行签名,这样计算联合楔入的某位成员心怀不轨也不至于危及整个系统的安全。
侧链引发的再思考
比特币出现后,其提供了充足的分布式节点和算力壁垒,但其拥堵和高延迟导致其无法实现商用落地,而以太坊有了智能合约的功能,但也有太拥堵的问题。根本原因都是在区块链设计之初没有从分层的角度去思考整个问题集。
- 第一,应用数据和结算数据是否都应该在一个区块链上并存?
- 第二,多种应用数据是否应该在一个区块链上混合并存?所有智能合约都跑在主链的一个虚拟机上,是获得了同等的安全保障,但带来的耗费是不合理的。
- 第三,应用规模是否足以保障区块链数据安全?就是从零开发公链,面临分布式节点太少,根本谈不上去中心化的安全,很多功能还不如直接用微信小程序来实现。
- 第四,任何应用运算都需交等额的手续费?这个问题是第二个问题的延伸,如果只是一条主链,那么其对于所有的智能合约中的操作的价格估算是同质的,其价格是缺少分层规划的。
- 第五,是否所有的交易操作都需要等额的挖矿耗费?不同的交易具有不同的价值,这是事实,如果采用侧链技术,将绝大部分的交易存储放在侧链上,而挖矿采用主链联合挖矿的方式,也即是运用主链的强大共识机制,侧链搭顺风车,比如主链上有1万个节点达成了强大的共识,而侧链只有10个节点负责存储侧链数据,但10个节点存储的数据量是整个网络的99%,反正验证交易等行为在挖矿节点上进行都是很快的,只是出块的时候,将侧链数据推送到侧链上进行保存,而侧链10个节点不需要进行挖矿,这10个节点完全听主链上1万个节点就OK了。
- 第六,主链上统一的计算虚拟机是否是不必要的?对于不同的智能合约,其重要性的差别是不言自明的,其需要保存的数据的重要性也是同样道理,如果采用一条主链垂直实现,就会出现像以太坊类似的严重的性能扩展问题,数据量同步负担过重也会造成安全问题。而侧链能负责这两部分,计算虚拟机拆分解决主链性能不足问题,数据存储拆分解决数据治理的扩展性问题。
网友评论