状态通道和侧链技术,是以太坊社区的两种扩容技术,但是很多人经常会傻傻分不清楚,因此导致很多困惑。
今天,这篇文章试着解释其中的道理,希望让大家能够理解。这篇文章的主要目的,是说清楚:
• 什么是状态通道技术?
• 什么是侧链技术?
然后试着比较这两个技术:
• 他们试图解决什么问题?
• 这两者谁是更好的扩容解决方案?
不浪费太多时间了,让我们赶紧开始吧。
什么是状态通道技术?
状态通道是非常广泛和简单的方法,来在区块链上对其进行扩容,但是这是在区块链链下进行的,并没有显著增加区块链参与者的风险。这种方案最出名的案例就是比特币的支付通道,它可以让两者之间直接发送快速以及手续费很低的支付。
状态通道是支付通道的统称,可以把这个技术应用到任何状态更改的操作,大多数情况下是在区块链上进行。
将计算移动到链下,就不需要多余的信任,可以导致成本的降低和速度的极大提升。状态通道是区块链扩容技术的重要组成部分,可以支持更高级别的使用。
状态通道基本的组成部分有以下:
1. 区块链的部分状态通过多个签名和部分智能合约锁定,所以这部分参与者必须要完全同意对方去更新它。
2. 参与者通过产生以及签名转账来自己更新状态,这最终会上传到区块链上,而不是直接在链上进行计算。每个新的更新会刷新之前的更新。
3. 最终,参与者将状态传回到区块链上,然后关闭状态通道,并且再次锁定状态(通常是按照和开始不同的设置)。
如果参与者之间更新的“状态”是数字货币余额,那么我们就会有支付通道。第一步和第三步,就会开启和关闭这个通道,包括区块链操作。但是第二步,无限的更新就会快速进行,而且不需要区块链的干预- 这就是状态通道的力量,因为只有第一步和第三步需要公开到网络上,支付手续费,或者等待确认。其实,有了精心的计划和设计,状态通道可以几乎保持无限开启,并且被用作中心和分支系统,来助力整个经济和生态系统。
尽管我们是很简单地描述,其实状态/支付通道是很复杂的。这里有几个原因,其中一个就是这三步背后有很复杂的分散步骤。让我们仔细来看看,这些都是什么,让我们从以下开始:
可以提交到区块链。
为了让状态通道工作,参与者必须要保证他们可以在任何时候公开通道目前的状态。这就会导致很多重要的限制,例如有人必须要在线去保护每个参与者,直到通道关闭。
想象下,当我们开启支付通道,我通过100个比特币开始,但是你是通过10个比特币开始。如果我们开始签名一个更新,转账10个比特币给我,然后又签名一个更新,转账50个比特币给你,那么之后的更新很明显是比早前的那个更有利益。如果你不幸地没有网络连接了,那么假设第二个更新永远不会发生,那么我就可以将第一个转账更新到区块链上,然后从你那边偷走50个比特币!你需要做的,就是有人在线,并且有之后转账的复制,从而他们可以“覆盖”前个转账,并且保证你的比特币是被保护的。不一定非要是你- 你可以这个备份传送给很多随机的服务器,它们都是通过智能合约同意地,并且只要需要,就可以公开转账(当然,需要很少的手续费)。但是无论你怎么做,你需要保证最近的签名更新是可以覆盖所有其他的。这就到我们的第二个步骤:
每个新状态“覆盖”之前的更新
为了完成状态通道的这部分工作,锁定和解锁机制必须要能够合理地设计,从而提交到区块链的旧状态更新有机会被替代他们的更新状态所纠正。最简单的方法,就是让任何解锁都开启计时器,在这段时间里,任何更新的更新能替代旧的更新(同时也重新启动计时器)。当计时器完成的时候,通道就会关闭,并且状态就会反应收到的最后一个更新。计时器的长度会为每个状态通道特定选择,从而平衡一个长通道的关闭时间,同时也增强安全性,这会防止网络连接或者区块链问题。另外,你可以通过金融惩罚的方式来构建通道,从而任何向区块链公开不准确更新的人,通过假设之后的转账不会发生,让这些人失去更多。
但是这个机制并不是很重要,因为(回到之前所说的点)这个情况下的博弈论会让事情变得很糟糕。这个机制可能只是理论上听起来没问题,但是可能从不会使用。其实通过计时器/惩罚过程,也许会导致多余的费用,延迟或者其他不方便;如果让某些人进入到这个机制,并不能给你任何好处,状态通道的更方可能只是通过人工同意最终的状态通道,从而关闭通道。最终的关闭操作需要和正常的“中介”更新不同(因为它会绕过上面的“覆盖”机制),所以一旦在某个通道的部分状态锁定,参与者会只是签署最终的转账。
这些“细节”不是特别重要。它最终分解开,可以理解为,参与者通过设置一个“法官”智能合约来打开通道,互相签署协议,如有必要,裁判可以强制执行,然后通过在其中达成共识关闭通道,那么法官的判断就不需要。只要“法官”机制是可靠的,这些承诺就可以被认为是即时转账,法官只在特殊情况下上述,例如一方参与者消失。
当然,这些细节只是人们认为状态/支付通道复杂的愿意之一。更多地是,比特币支付通道是很复杂的。在比特币中建立“法官”机制是非常错综复杂的。但是一旦你对状态通道有清晰的理解,你可以看到这仅仅来自于在受限的上下文中实现这个想法。基础的智能合约机制,例如计时器机制以及根据上传的签名信息来选择两个不同的道路,这其实在比特币中更难做到。某些功能是逐渐添加和建立的。通过看到支付通道只是特殊的广泛“状态通道”概念的子案例,我们发现这是更快宽泛的技术,并且这个状态通道能够应用到任何智能合约中,它们和定义的参与者之间进行高频的更新。你可以预见,这种方式会在很多分布式应用中出现。
现在,我们应该对什么是“状态通道”比较清楚了,接下来我们来看看侧链技术。
什么是侧链技术?
侧链技术是一种分开独立的区块链,其会使用一个双向锚定来依附于主链。
换句话说,你可以将资产移动到侧链上,也可以转移回主链。
这个双向锚定可以在主链和侧链之间按照预先设定的速率进行资产的内部交换。初始的区块链通常代表着主链,而且所有新增的区块链都被定义为侧链。
主链上的用户首先需要将代币转移到输出地址,在那里代币会被锁定,从而用户不能消费它们。一旦转账完成,在经过安全时间的等待之后,信息就会在链上传递。在等待时间之后,相同数量的代币就会在侧链发布,让用户能够获得并且消费它们。当从侧链转移到主链的时候,相反的事情就会发生。
联盟
联盟是指作为主链和其中一个侧链中间点的群体。这个群体在用户锁定和释放代币的时候,就会确定。侧链的创建者可以选择联盟的数量。但是联盟结构的一个问题在于,它会在主流和侧链之间添加一个层级。
侧链对于他们自身的安全性是需要负责的。如果没有足够的算力来确保侧链的安全,就可能会被黑客侵入。因为每个侧链都是独立的,如果被入侵,那么损害就会包含在侧链上,不会影响主链。
相反地,如果主链被入侵了,那么侧链仍然可以允许,但是锚定就会失去价值。
侧链需要他们自己的矿工。这些矿工能够通过“联合挖矿”来获得激励,同种算法,同时挖矿,并且可以获得两种不同的数字货币。
现在,我们对侧链也有所了解了。那么,让我们来比较它们之间的区别。
它们试图解决什么问题?
侧链和状态通道是用于来提高区块链的扩容性。
它们都符合类似的模型。
• 锁定状态/资产。
• 在链下进行转账
• 在状态通道/侧链解锁状态/资产
但是尽管这样类似,其中也有很多区别,主要是在状态通道中,我们不使用单独的区块链,但是在侧链中,我们使用单独的区块链。那么我们来看看,最终的结果是什么。
这两个,谁是更好的扩容方案?
为了得到答案,让我们来看看他们各自的优势和劣势。
状态通道的好处
状态通道有很强的隐私性能:这是因为任何事情都是发生在通道中的,而不是公开广播并且记录在链上。只有打开和关闭转账必须是公开的。但是在侧链系统中,每笔转账都是发布在侧链上的,然后侧链上的每个参与者都会收到,然而事实上,你并没有和侧链上所有参与者交互。
• 状态通道有即时的最终确定性,也就是说只要两方签署了状态更新,就能认为状态结束了。双方对其能够有很高的保证,如有需要,他们可以“强制”将状态放入在链上。但是就像上面讨论的那样,状态通道关闭,考虑到转账的安全性等级,可能会需要花费各种时间。然而在侧链中,你在另一边有区块链。所以,最终结果取决于侧链的挖矿算力。
状态通道的缺陷
• 状态通道需要所有参与者100%的在线:就像我们讨论的,如果任何参与者变得不在线,那么对他们来说成本是很高的。参与者可以使用别人来作为代表,如果他掉线,但是代表被攻击的可能性成了状态通道的问题。但是在侧链中,你就不需要一直在线。
• 状态通道最好是用于一系列参与者:这是因为法官合约(用来锁定状态的合约)必须总是知道参与者/个体(也就是地址)是这个通道的一部分。我们可以添加和移除参与者,但是需要每次都对合约进行改变。但是在侧链,对于参与者的转移就没有这类限制。
• 状态通道对于要长期进行很多状态更新的参与者来说,尤其有用:这是因为在部署法官合约的时候,创建通道有初始成本。但是一旦部署了,通道内部每个状态的更新都非常便宜。
侧链的好处
• 侧链是永久的。如果现在已经有了,你不需要为了特定目的,来创建你自己的侧链:侧链在完成的时候,就被创建并且维护。我们不会关闭侧链,而是在侧链上锁定资产,然后转移到主链。这对于那些想在链下进行特定任务的情况,是非常有帮助的(例如,狗狗币转账),因为最终都会到同个侧链。所以,你不必为每个新的参与者来创建不同的侧链。但是在状态通道,你总说需要创建新的通道,然后添加新的参与者。但是,有些项目也使用了别的方法,可以不用为每个参与者都创建新的通道。你可以通过其他参与者不直接地在你和接收者之间建立通道。
• 侧链可以让数字货币和对方交互: 他们会添加了灵活性,同时也让开发者在把数据推送到主链之前,能够进行软件测试。传统银行功能,例如发放跟踪股权的所有者,可以在将他们转移到主链之前,在侧链进行测试。
侧链的坏处
• 侧链需要很多的初始投资才能开始:为了创建侧链,我们需要有足够的矿工,从而网络可以防止攻击者,保持安全。同时,我们必须要保证它们是在线并且运行的。但是在状态通道中,没有区块链。所以,也不需要这类需求。
• 对于侧链来说,联盟是需要的:这会在主链和侧链之间增加另个层级。这对于攻击者来说,是另一个脆弱的点,因为可以攻击联盟。因此在状态通道中,我们只需要智能合约来这样做。
其实这两个扩容方案之间的竞争是很大的。尘埃落地,但是这两者仍然还发展地很好。由于研究还在继续,现在很难决定到底谁是获胜者。也许他们会合作来形成另外的混合解决方案,来为解决扩容问题。现在只能等待,看看时间会给我们带来什么。