状态通道
上次编辑: , Invalid DateTime
状态通道让参与者可以安全地进行链下交易,同时最大限度地减少和以太坊主网的交互。 通道对等节点可以进行任意数量的链下交易,并且只需提交两个链上交易以打开和关闭通道。 这样便实现了极高的交易吞吐量,并为用户降低了成本。
前提条件
什么是通道?
公共区块链,如以太坊,由于其分布式架构而面临可扩展性挑战:链上交易必须由所有节点执行。 节点必须能够使用普通硬件来处理区块中的交易量,为了保持网络去中心化而限制了交易吞吐量。 区块链通道允许用户链下交互并依靠主链的安全性完成最终结算,从而解决了这个问题。
通道是简单的对等协议,允许双方进行多笔交易,然后只将最终结果发布到区块链。 渠道使用加密算法证明产生的摘要数据确实是一组有效中间交易的结果。 “多重签名”智能合约确保交易由正确的相关方签署。
相关方通过通道执行和验证状态变化,最大限度减少以太坊执行层上的计算。 这就减少了以太坊拥塞,也提高了用户的交易处理速度。
每条通道都由以太坊上运行的多签智能合约管理。 要打开一条通道,参与者在链上部署通道合约并将资金存入其中。 双方共同签署一个状态更新来初始化通道的状态,之后他们就可以快速且自由地进行链下交易。
要关闭通道,参与者需要将各方一致同意的通道最终状态提交到链上。 然后,智能合约根据通道最终状态下每个参与者的余额分配锁定资金。
对等通道在一些情况下非常有用,比如,某些预先确定的参与者希望频繁进行交易,并且不会产生明显的费用。 区块链通道分为两类:支付通道和状态通道。
支付通道
将支付通道描述成由两个用户共同维护的“双向账本”最为恰当。 账本的初始余额是通道打开期间锁定在链上合约中的存款总和。 支付通道转账可以立刻执行,并且除了最 初建立一次性链上通道以及通道的最终关闭外,其余部分无需区块链实际参与。
账本余额的更新(即支付渠道的状态)需要渠道中所有各方的批准。 通道更新在所有通道参与者签署后被视为最终确定,这和以太坊上的交易非常相似。
支付通道是最早的扩容方案之一,用于最大限度减少因简单的用户交互带来的高成本链上活动(例如,以太币转账、原子交换、小额支付)。 通道参与者彼此之间可以进行不限次数的即时、无费用交易,只要他们的转账总净额不超过存入的代币。
状态通道
除了支持链下支付外,尚未证实支付通道可用于处理通用状态转换逻辑。 创建状态通道是为了解决这个问题,并使通道可用于扩展通用计算。
状态通道与支付通道仍有很多共同点。 例如,当用户通过交换加密签名的信息(交易)进行互动时,另一些通道参与者也必须对信息签名。 如果提出的状态更新没有获得所有参与者的签名,则认为是无效的。
但是,除了保存用 户的余额外,通道还跟踪合约存储的当前状态(即合约变量的值)。
这使得两个用户之间可以在链下执行智能合约。 在这种情况下,智能合约内部状态的更新只需由创建通道的另一方批准即可。
虽然这解决了前文描述的可扩展性问题,但它对安全性有影响。 在以太坊上,以太坊状态转换的有效性由网络的共识协议强制执行。 因此,不可能对智能合约的状态提出无效更新或者修改智能合约的执行。
状态通道没有同样的安全保障。 在某种程度上,状态通道是主网的缩影。 由于执行规则的参与者有限,发生恶意行为(例如,提出无效状态更新)的可能性增加。 状态通道的安全性来自基于欺诈证明的争议仲裁系统。
状态通道如何运作
状态通道中的活动基本上都是一系列涉及用户和区块链系统的交互。 用户大多数情况下在链下相互交流,只是在打开通道、关闭通道或解决参与者之间的潜在争议时才与底层区块链交互。
以下部分概述了状态通道的基本工作流程:
打开通道
打开通道需要参与者将资金存入主网上的智能合约。 存款还可以用作虚拟标签,因此参与者可以自由交易,而无需立即结算付款。 只有当通道在链上最终确定时,各方才能相互结算并提取标签的余额。
这笔存款还可以作为一个协定,保证每个参与者实施诚实的行为。 如果在争议解决阶段判定存款人有恶意行为,合约将罚没他们的存款。
通道对等方必须签署一个他们一致同意的初始状态。 该初始状态表示状态通道的开通,之后用户可以开始交易。
使用通道
在初始化通道的状态后,对等方进行交互,他们签署交易并相互发送交易进行批准。 参与者使用这些交易发起状态更新,并签署来自其他人的状态更新。 每笔交易包括以下内容:
随机数,作为交易的唯一 ID 并防止重放攻击。 它还标识状态更新发生的顺序(这对于解决争议很重要)
通道的原有状态
通道的新状态
触发状态转换的交易(例如,Alice 向 Bob 发送 5 个以太币)
通道中的状态更新不会像用户在主网上交互时那样在链上广播,这与状态通道最大限度减少链上足迹的目标一致。 只要参与者一致同意状态更新,它们就与以太坊交易一样最终确定。 如果出现争议,参与者只需依赖主网的共识。
关闭通道
要关闭状态通道,需要将通道的各方一致同意的最终状态提交给链上智能合约。 状态更新中引用的详细信息包括每个参与者所实施行为的次数和获批准交易的列表。
在验证状态更新有效(即由各方签署)后,智能合约最终确定通道状态并根据通道的结果分配锁定资金。 链下支付应用到以太坊状态,每个参与者都会收到其剩余的锁定资金。
上述场景代表了成功用例下的情况。 有时,用户可能无法达成一致并最终确定通道状态(失败用例)。 以下任何一种情况都可能是失败用例:
参与者离线并且未能提出状态转换
参与者拒绝共同签署有效的状态更新
参与者试图通过向链上合约提出旧的状态更新来最终确定通道
参与者提出无效的状态转换供其他人签署
每当通道中的参与者之间无法达成共识时,最后的选择是依靠主网的共识来执行通道的最终有效状态。 在这种情况下,要关闭状态通道,就需要在链上解决争议。
解决争议
通常,通道中的各方事先同意关闭通道并共同签署最新的状态转换,然后将其提交给智能合约。 一旦更新在链上获得批准,链下智能合约的执行就会结束,参与者会带着他们的钱退出通道。
但是,一方可以提交链上请求以结束智能合约的执行并最终确定通道状态 — 而无需等待对方的批准。 如果出现上述任何破坏共识的情况,任何一方都可以触发链上合约以关闭通道并分配资金。 这样就实现了去信任,确保诚实的参与方可以随时提取他们的存款,而不管另一方的行为如何。
要处理通道退出,用户必须将应用的最后一次有效状态更新提交给链上合约。 如果状态更新得到证实(即,带有所有参与方的签名),那么资金会按照有利于他们的方式重新分配。
但是,执行单用户退出请求会有延迟。 如果关闭通道请求获得一致批准,则立即执行链上退出交易。
由于存在欺诈行为的可能性,延迟在单用户退出中有了用武之地。 例如,通道参与者可能尝试通过在链上提交较早的状态更新来最终确定以太坊上的通道。
作为一种对策,状态通道允许诚实用户通过在链上提交最新、有效的通道状态来挑战无效状态更新。 状态通道的设计使得较新的、一致同意的状态更新优先于较早的状态更新。
一旦一个对等方触发了链上争议解决系统,另一方需要在一个时限内(称为挑战窗口)做出响应。 这样用户就可以挑战退出交易,尤其是在另一方应用过时更新的情况下。
不管是哪种情况,通道用户总是拥有可靠的最终确定性保障:如果他们拥有的状态转换由所有成员签署并且是最新的更新,那么它与常规链上交易具有相同的最终确定性。 他们仍然必须在链上挑战另一方,但唯一可能的结果是最终确定他们拥有的最新有效状态。
状态通道如何与以太坊交互?
尽管状态通道作为链下协议存在,但它们具有链上部分:打开通道时部署在以太坊上的智能合约。 该合约控制存入通道的资产,验证状态更新,并仲裁参与者之间的争议。
与二层网络扩容解决方案不同,状态通道不会向主网发布交易数据或状态承诺。 但是,它们与主网的连接比侧链等更加紧密,这使得它们更加安全。
状态通道依赖于以太坊的主要协议,实现:
1. 可用性
打开通道时部署的链上合约负责通道的功能。 如果合约在以太坊上运行,则通道始终可用。 相反,即使主网正常运行,侧链也会随 时失败,使用户资金面临风险。
2. 安全性
在某种程度上,状态通道依靠以太坊来提供安全性并保护用户免受恶意用户的侵害。 正如后面部分所讨论的,通道使用欺诈证明机制,允许用户挑战用无效或过时更新最终确定通道状态的企图。
在这种情况下,诚实参与方将通道的最新有效状态作为欺诈证明提供给链上合约进行验证。 欺诈证明使互不信任的各方能够进行链下交易,而不会让他们的资金在交易过程中面临风险。
3. 最终 确定性
由通道用户共同签署的状态更新被认为与链上交易一样有效。 尽管如此,所有通道内活动只有在以太坊上关闭通道时才能获得真正的最终确定性。
在乐观情况下,双方可以合作、签署最终状态更新并在链上提交以关闭通道,然后根据通道的最终状态分配资金。 在悲观情况下,有人试图通过在链上发布不正确的状态更新来欺骗,双方的交易在挑战窗口结束之前不会最终确定。
虚拟状态通道
状态通道的简单实现是在两个用户希望在链下执行应用程序时部署新合约。 这不仅不可行,而且还否定了状态通道的成本效益(链上交易成本会迅速增加)。
为了解决这个问题,创建了“虚拟通道”。 与需要链上交易才能打开和终止的常规通道不同,虚拟通道可以在不与主链交互的情况下打开、执行和最终确定。 甚至可以使用这种方法在链下解决争议。
该系统依赖于所谓的“账本通道”(已在链上获得资金)的存在。 双方之间的虚拟通道可以建立在现有账本通道之上,账本通道的所有者作为中间人。
每条虚拟通道中的用户通过一个新的合约实例交互,账本通道能够支持多个合约实例。 账本通道的状态还包含多个合约存储状态,允许在不同用户之间在链下并行执行应用程序。
就像常规频道一样,用户交换状态更新以推进状态机。 除非出现争议,否则仅在打开或终止通道时才需要联系中间人。
虚拟支付通道
虚拟支付通道的运作原理与虚拟状态通道相同:连接到同一网络的参与者可以传递消息,而无需在链上打开新通道。 在虚拟支付渠道中,价值转移通过一个或多个中间人进行,并保证只有预期的接收者才能收到转移的资金。
状态通道的应用
支付
早期的区块链通道是简单的协议,允许两个参与者在链下进行快速、低费用的转账,而无需在主网上支付高额交易费。 如今,支付通道仍然适用于专为兑换和存入以太币和代币而设计的应用程序。
基于通道的支付具有以下优势:
吞吐量:每条通道的链下交易数量与以太坊的吞吐量无关,而是受各种因素的影响,尤其是区块大小和出块时间。 通过在链下执行交易,区块链通道可以实现更高的吞吐量。