为了防止这种不良行为。为了让状态通道更有用。这样的证明往往伴随着对恶意者的惩罚。
00:0000:00
编者按:本文来自区块记(ID:BlockchainInsights),星球日报经授权发布。
在这篇文章中,我们将了解状态通道如何工作的基础知识,以及为什么它们的实现很复杂。我们将讨论它们如何用于比特币的闪电网络的支付,以及在以太坊智能合约的支持下,如何利用它们来实现更复杂的应用。最后,我们将探讨为什么状态通道到目前为止还没有被广泛采用,以及为什么这种情况可能会发生变化。
状态通道如何工作
状态通道的核心前提是出奇的简单易懂。不再使用链上交易,希望定期进行交易的各方可以先在智能合约中锁定资金,然后在链外交换签名的消息,这些消息用来更新谁拥有哪些资金的状态。任何数量的交易都可以在链外发生,其速度只受限于各方交换签名信息的能力。无论何时,任何一方想要退出通道,都可以将最新的签名状态提交给链上智能合约,智能合约会验证签名,并按照约定的分配方式分配资金。
我们来看看最简单的状态通道的例子:双方之间的简单支付。我们请上我们的老朋友,Alice和Bob。我们假设这两个人有理由定期交换资金exchangefunds。他们都向基础链上的智能合约存入资金-在这个例子中,比方每个人存5个ETH。Alice对支付给Bob1个ETH的消息进行签名,这意味着她将自己的余额更新为4ETH,Bob的余额更新为6ETH。Alice将签过名的消息发送给Bob,Bob对更新后的状态进行签名并返回。之后,Bob向Alice支付0.5ETH,将自己的余额减为5.5ETH,将她的余额增为4.5ETH。他对这次的支付信息进行签名,并发送给Alice,然后她也对这个信息签名并将其发送回去。
只要Alice和Bob愿意,这个过程就会重复。值得注意的是,小额支付在这个系统中是可以的。由于在通道结算之前没有任何费用,所以发送1000笔0.001ETH的付款和发送一笔1ETH的付款从成本上是一样的。
最终,Alice和Bob的交易告一段落。双方最后签了名的余额是,Alice有7个ETH,Bob有3个ETH。她将这最后一个共同签名的状态提交给基础链,基础链首先验证双方确实是用私钥签名的,然后根据所表明的余额发放给双方。简单又简洁,对吧?是的,但我们忽略了一些关键细节。
细节中的魔鬼
就像区块链世界中的许多事情一样,当所有各方都按照他们所期望的方式行事时,状态通道就会顺利运作。但如果各方总是以他们所期望的方式行事,我们首先就不需要去中心化的加密货币网络了!区块链存在的全部原因是让各方以信任最小化的方式进行交易,而这就必须防止在争议下的恶意行为。
对于状态通道来说,即使是在我们简单的双方支付通道的例子中,对这些争议性因素的考量也会增加大量的偶然复杂性。考虑一下这个场景。如果Bob付给Alice2个ETH作为商品或服务的回报,但当他收到商品后,他使用了一个过时的状态-一个在他最近一次付款前签了名的状态-来关闭链上通道。Alice和Bob都对这个之前的状态签了名,而智能合约并不知道这个状态是之前的。这将使Bob可以索取Alice认为属于她的资金。
为了防止这种不良行为,我们的系统可以要求两个用户都对一个特殊的\”最终\”状态进行签名,这个状态明确地将通道标记为关闭,并且只有当这样的状态被提交时才会进行资金的发放。那么,如果一方拒绝对这样的最终状态签名,或者干脆消失或长时间离线,会发生什么?双方的资金都会被卡在智能合约中。
为了避免这样\”悲催\”的结果,需要让各方能够退出通道,用中间状态提取资金。当双方没有明确关闭通道时,大多数的最终操作都会增加一个资金支付的等待期。这使得每一方都有机会通过出示双方签过名的较新状态来对取款提出异议,从而证明另一方试图作弊。这样的证明往往伴随着对恶意者的惩罚。
这是一个可行的解决方案,但我们可以看到它已经增加了多少复杂性。对于一个简单的双方支付通道,现在双方都必须不断监控这个链,以确保另一方没有试图作弊。他们必须维护其最新状态的缓存副本,并准备进行链上交易以证明发生了作弊行为。此外,如果另一方停止响应,用户必须准备好等待异议期过后才能拿回自己的资金。
多方支付
现在,事情是这样的-只有两方支付的状态通道在可用性上是相当有限的。有多少经济往来涉及到只是双方之间来来回回地重复支付,而且双方都会放心地把自己的一大笔钱专门用来与另一方进行支付的目的?大概是相当少的。
为了让状态通道更有用,我们需要扩展它们的作用。我们有两种方法可以做到这一点。一是增加可以使用通道的参与方数量。二是扩展状态通道的能力,不仅仅是支付,可以实现更多通用的状态种类,从而实现更复杂的用例。
我们先来看看参与方的增加。最简单的方法是有一个大的通道,所有参与者都向同一个合约存款,并对所有的状态进行签名。由于显而易见的原因,这种方法在少量用户之外无法发挥作用。我们需要的不是一个单一的通道,而是一个通道网络。
闪电网络:支付通道网络
为了让支付通道真正变得有用,比特币的闪电网络让它们变得可按特定的路线跳转。任何用户都可能用一个或多个节点打开通道(任何人都可以操作)。然后,支付在节点之间\”跳转\”,每个节点都会将资金转移到下一个节点,直到到达预定的接收方。对于这样的跳转,每个节点都会收取少量费用。
你可以想象,这样的系统伴随着复杂性的爆增,而闪电网络花了很长的时间来解决这样的困难。它仍有一段路要走,在过去的12-18个月里,闪电网络的采用没有什么起色。老实说,我不确定闪电网络是否会获得大量使用,但已经建立起来的技术还是令人印象深刻。
尽管闪电网络通过使整个参与者之间的支付成为可能而让状态通道变得更加有用,但其他人采取了不同的策略:将通道限制在一小部分参与方中,但扩大了它们的功能。
在状态通道中加入状态
通过包含关于允许什么样的状态转换的特定规则-在发生争议时,这些规则可以在链上智能合约中得到验证和执行-状态通道可以用来构建多方的去中心化应用,达到与传统应用相同的性能(链接:https://medium.com/)。
设想用这种状态通道可以实现的应用种类,最常见的例子往往是游戏。想象一下,假如Alice和Bob想玩一局象棋,并投入一些钱。通过一个对国际象棋规则进行编码的智能合约,以及一些用于表示棋盘状态的基本数据结构,Alice和Bob可以下注,并通过交换签名的信息,在链外下一盘国际象棋。当游戏结束时,通道可以被关闭,获胜方可以获得他的报酬。
如果任何一方试图作弊,另一方可以通过智能合约进行“调解“。通过出示最近的状态,他们可以证明有效的游戏状态,并最终关闭通道。不过,在正常情况下,这局棋将以任何基于网页的棋牌游戏预期的方式进行。唯一的区别是在游戏开始和结束时要进行链上交易来打开和关闭通道。
前景如何?
状态通道作为一个概念的相对简单性意味着它们是区块链世界中最早提出和研究的扩展解决方案之一。不过经过多年的研究,它们仍然没有以任何有意义的方式被广泛采用。这是什么原因呢?
正如我试图给你留下深刻印象的那样,状态通道的概念相对简单,但实际的实现涉及到相当多的复杂性,特别是当你试图构建一些实际有用的东西时。事实证明,处理与恶意行为相关的许多情况,同时也要实现人们真正想要的东西,这相当困难。我们还没有看到太多的采用这一事实是可能的,因为这花了很长时间来研究出强大的、可用的解决方案。
我还不会放弃状态通道。首先,闪电网络不断成熟,可能之后有更多的采用。此外,在以太坊生态系统中,有许多团队在开发通用化的状态通道,这会使得构建基于状态通道的应用变得更加容易(链接:https://docs.ethhub.io/)。
有个项目Counterfactual(但现在被简单地命名为\”状态通道\”,这让人困惑)取得的进展给我留下了深刻的印象。通过抽象掉争议解决等复杂的部分,它让开发者更容易专注于他们的应用所特有的规则和数据结构。(链接:https://blog.statechannels.org/)
如果开发者能够更容易地使用这样的工具包,那么我们可能会看到一些真正的创造性应用出现。
本文来源:星球日报原文标题:一文了解状态通道的现状