编者按:本文来自蓝狐笔记(ID:lanhubiji),Odaily星球日报经授权转载。
前言:区块链的技术术语中,有很多概念经常会混淆使用。其中之一就是侧链和状态通道。两者都是区块链的扩展解决方案。但在社区的使用中,经常被互换使用。那么它们之间到底有什么不同,有什么优缺点,谁更好?本文有助于回答你的困惑。本文作者Vasa,由“蓝狐笔记”的“Moqi”翻译。
以太坊社区中“状态通道”和“侧链”这两个术语经常被互换使用,从而导致普通用户的混淆。今天我们将这个问题搞清楚。先煮杯咖啡,因为它会需要耗费一些时间。
本文的主要目的很明确:
什么是状态通道?
什么是侧链?
然后我们进行比较:
它们两者试图解决什么问题?
哪个是更好的扩展解决方案?
现在开始。
什么是状态通道?
状态通道是一种非常广泛且简单的思考问题的方式:思考将可能发生在区块链上的交易,在不显著增加任何参与者风险的情况下在链下执行。
这一策略最著名的例子是比特币的支付通道概念,它允许在双方之间直接发送即时的低费用支付。
状态通道是支付通道的一般形式,将相同的想法应用于通常在区块链上执行的任何类型的状态改变操作。(蓝狐笔记:也即是说,支付通道只是状态通道的一种特殊形式,它不仅仅是支付)
将这些交互移至链下,且无须要求任何额外的信任,可以实现成本和速度的极大改善。状态通道将是扩展区块链技术的关键部分,它支持更高级别的用户使用。
状态通道的基本组成非常简单:
双向状态通道
1.将区块链状态的一部分通过多重签名或某种智能合约锁定,因此,特定的参与者集必须彼此间完全同意才能对其状态进行更新。
2.参与者们通过构建和签名可被提交至区块链的交易,以更新他们之间的状态,而在此之前状态只是暂时保持在内部。每个新的状态更新都“高于”之前的更新。
3.最后,参与者们将状态提交回区块链,这将关闭状态通道,并再次解锁状态。
就这样。如果参与者之间更新的“状态”是加密货币的余额,那么,我们就有了一个支付通道。打开和关闭通道的步骤1和3涉及到了区块链操作。
但步骤2可以快速执行不限制次数的更新,且无须涉及到区块链。这就是状态通道可以发挥作用的地方。因为,仅有步骤1和3需要发布到网络上,以及支付费用或等待确认。
实际上,通过仔细的规划和设计,状态通道几乎可以无限期保持开放状态,且可用于大型枢纽系统的一部分,为整个经济或生态系统提供动力。
尽管这里描述看似简单,但人们通常认为状态/支付通道是非常复杂的。造成这种情况的原因有很多:其中之一就是在对这三个步骤的表述中隐藏了一些重要的微妙之处。让我们仔细看下这些简单的短语所隐含的含义:
可以提交到区块链
为了使状态通道正常工作,必须确保参与者可以在任何时候将其当前通道的状态发布到区块链上。这导致产生了一些重大的局限,例如这样的事实:在通道关闭之前,有人必须保持在线以保护每一方的利益。
想象一下,假设当我们开启一个支付通道时,我以100BTC开始,而你以10BTC开始。如果我们首先签署将10个BTC转给我的更新,然后又签署将50个BTC转回给你的更新,第二个更新明显比上个更新对你更有利。如果你意外地网络掉线,而我则可以假装第二次更新从来没有发生过,那么,我能将第一次更新发布到区块链上,从而有效地从你哪里窃取了50个BTC。
你需要的是有人保持在线,拥有最新交易的副本,以便于它们可以“高于”早前的交易,并确保你的比特币得到保护。不一定是你自己保持在线。你可以将副本发送到很多随机服务器,它们同意通过智能合约仅在需要时才发布它(可以节省费用)。但是,无论你如何做,你都需要确保最新签名的状态更新都是高于其他所有更新的。这使得我们进入下一个微妙的短语:
每个最新更新都“高于”之前的更新
为了使状态通道的这一部分正常工作,必须正确地设计锁定和解锁机制,以便提交给区块链的旧状态有机会被取代它们的新状态所纠正。最简单的方法是让任何解锁尝试启动计时器,在此期间,任何新的更新都能取代旧的更新(也重启计时器)。当计时器完结,通道关闭,并且状态将进行调整以反映最后一次收到的更新。
可以为每个状态通道选择计时器的长度,以平衡较长通道关闭时间的不便利性和不断增加的应对互联网连接或区块链问题的安全性。(蓝狐笔记:此处意思是权衡利弊,计时器过长,导致通道关闭时间过长,则会带来不便,而计时器过短,则可能带来安全问题)
或者,你可以通过罚款方式来构建通道,这样任何向区块链发布不正确更新的人的损失要比他们假装没有发生后续交易所获得的更多。
但是这个机制最终不会有太大关系,因为(回到上一点)这种情况的博弈论使得事情产生变化。只要这种机制在理论上是合理的,它就可能永远不必使用它。
实际上通过计时器/ 惩罚程序可能会带来额外的费用、时延或其他不便;考虑到迫使某人进入机制并不能给你带来任何好处,因此,一个状态通道的参与方可能会只是通过相互商定最终通道状态来关闭通道。
这种最终关闭操作跟普通的“中介”更新有根本上的不同(既然它将绕过上面提及的最新交易“高于”之前交易的机制),因此,参与者对于在特定通道内锁定的状态的每个部分仅是签署一次关闭交易。
这些“微妙之处”的细节并不是特别重要。最终归结为参与者通过设置“法官”智能合约来打开通道,相互签署如有必要“法官”可以强制执行和裁决的承诺,然后,相互协商关闭通道,这样法官的裁决就不需要。
只要“法官”机制被认为是可靠的,这些承诺就可以算作为即时转移,只有在特殊情况下法官才会出现,例如参与方消失时。当然,这些细节只是人们认为状态/支付通道是复杂的部分原因。更大的原因是比特币的支付通道是复杂的。在比特币上构建具有合理有用属性的“法官”机制是非常复杂的。
不过,一旦你对状态通道有一个清晰的总体概念,就能看到,这只是由于在一个受限的环境中试图实施这个概念而产生。基本的智能合约功能,例如计时器机制和根据提交的签名信息来允许采用两种不同路径,这些在比特币中很难做到。
其中的一些功能正在逐步添加或构建。支付通道只是更广泛“状态通道”概念的特殊子情况,我们可以意识到这是一种更广泛的技术,状态通道可以应用到任何智能合约,这些智能合约在定义好的参与者组中处理频繁的更新。你可以预期在很多(如果不是大多数)分布式应用中看到这种方法。
现在,我们对什么是“状态通道”有了更明晰的理解。因此,我们来看看侧链。
什么是侧链?
侧链是使用双向锚定关联于其父链(主链)的单独区块链。换句话说,你可以将资产移至侧链,并再移回父链。(蓝狐笔记:就是将主链资产在主链和侧链间来回移动)
侧链
双向锚定使得可以在父链和子链之间以预定的汇率进行资产互换。原始区块链通常成为“主链”,其他所有外加的区块链都称为“侧链”。区块链平台Ardor将其侧链称为“子链”。
父链上的用户首先必须发送其代币到一个输出地址,这些代币会被锁定,因此用户无法在其他地方消费它们。在交易完成之后,会通过跨链进行确认,然后等待一段时间,以提高安全性。
在等待期过后,侧链上会释放等量的代币,允许用户获取并在此处进行消费。当将资产从侧链移回主链,流程刚好相反。
联盟
联盟是一个组,它在主链和其一个侧链之间充当中间点。这个组确定何时锁定和释放用户使用的代币。侧链的创建者可以选择联盟的成员。联盟结构的问题在于,它在主链和侧链之间添加了另外一个层。
侧链要负责自身的安全。如果没有足够的算力来保护侧链的安全,它有可能会被攻破。因为每条侧链都是独立的,如果它遭受攻击或入侵,损坏会在该链中发生,而不会影响主链。相反,如果主链遭受攻击,侧链仍能运行,但其锚定资产将会失去大部分价值。
侧链需要它们自己的矿工。可以通过“合并挖矿”激励这些矿工,因此,两种独立的代币,基于相同的算法,可以同时开采出来。
现在,我们对侧链也有一个很好的了解。所以,让我们把它们放在一起。
它们想解决什么问题?
通常,侧链和状态通道都是用来提高区块链可扩展性的。他们遵循类似的模型。
锁定状态/资产
在区块链/主链之外进行交易
从状态通道/侧链中解锁状态/资产
但尽管有这样的类比,但两者间有很多不同,这是因为状态通道中我们不使用单独的区块链,而在侧链中我们使用单独的区块链。让我们来看看这会导致什么结果。
两者中哪个是更好的扩展性解决方案?
为了得出答案,我们来看看它们的优缺点。
状态通道的优点
状态通道有很强的隐私属性:这是因为所有事情都发生在参与者之间的通道“内部”,而不是公开广播和在链上记录。只有打开和关闭的交易必须是公开的。
而在侧链上,每笔交易都会发布到侧链上,无论你是否跟侧链上的所有参与者交互,交易都会被侧链上每个参与者接收。
状态通道有即时最终性。这意味着只要双方签署状态更新,它就可以被认为是最终状态。双方都有很高的保证,如有必要,他们可以在链上“强制执行”该状态。但正如上面提到的,考虑交易的安全级别,状态通道的关闭可能需要花费不同的时间。
而在侧链中,另一边有一条区块链,因此,最终性依赖于侧链的挖矿算力。
状态通道的缺点
状态通道需要所有参与者100%的在线(可用性):正如我们上面讨论的,如果任何参与者不在线,那么,这可能对他来说要付出代价。如果参与者不在线,参与者可以使用其他人来代表TA。但代表被攻击或被贿赂的可能性让会它会成为状态通道的问题。而在侧链上则你不必总是在线。
状态通道最适合用于有已定义好参与者集的应用:这是因为“法官”合约(用于锁定状态的合约)必须了解特定通道部分的参与者/主体(即地址)。我们可以添加和移除人,但它要求每次对合约进行更改。而在侧链中,参与者变化方面没有这种限制。
状态通道在这种情形下尤其有用:参与者将要在长时期内交换很多状态更新:这是因为创建通道部署“法官”合约会产生初始成本。但是,一旦部署,在状态通道内每次状态更新的成本会非常低。
侧链的优点
侧链是永久的。如果存在有侧链,你无须为特定目的而创建专属的侧链。侧链一旦创建,就是完成构建并进行维护。我们不会关闭侧链,而是锁定在侧链上的资产以移回主链。这是非常有用的方式,任何在区块链/主链外做特定任务的人都会来到相同的侧链。
因此,你不必为每个新参与者创建独立的链。而在状态通道,你通常必须创建新的状态通道来添加新参与者。但诸如闪电网络、雷电网络这些项目为此提出了出色的解决方案。他们创建了参与者网络,由此你不必为与之互动的每个新参与者创建新的通道。
你可以跟参与者进行间接互动,方式是在你和接收者之间通过你们之间共同的其他参与者来创建一个通道:你和接收者。
侧链允许加密货币相互交互:它们增加了灵活性,并允许开发者在山寨币的Beta版本或软件更新上线主链之前,可以在侧链上实验。像传统的银行功能(如发行和跟踪股份所有权)可以在侧链上测试,然后再移至主链。
侧链的缺点
侧链需要很多初始投资来启动:为了创建侧链,我们需要足够的矿工,以使网络免遭攻击者的攻击。此外,我们必须确保它们已经启动和在运行。然而,在状态通道中没有区块链,因此,没有这些要求。
侧链需要联盟:这在主链和侧链之间增加了额外的层。这可能是攻击者可以攻击的另外一个弱点:可以贿赂或攻击联盟。然而在状态通道中,我们只需要一个智能合约就可以为我们完成这项任务。
两者之间的竞争是伟大的。尘埃落定,但两者依然站立。由于研究依然在持续,实际的使用还没有传播,我们无法确定谁会是赢家。或许它们会融合,形成一种混合解决方案,来解决扩展性问题。直到实现之前,我们还需要等待,看看什么时候能看到。