巴比特论坛

状态通道概述、例子和相关项目

发布者: 币学院| 发表于: | 查看: 117| 评论: 0 |来自: 星海

117 0

本文是区块链扩展性讨论的第三篇,前两篇链接如下:
  1. 以太坊上的扩容方案:概述
  2. 分片概述、Zilliqa和QuarkChain

确定性的锚定

在讨论状态通道前,我们需意识到:公链的威力在于其加密经济学(cryptoeconomic)上的共识模型,即通过密码学,我们可以巧妙平衡参与方的利益并创建一个计算机网络使得参与节点对整个网络的状态达成共识。

这种基于密码学的共识机制提供了一种强大的确定性,即除非极端情况(如51%攻击)发生,否则链上的所有操作(例如智能合约)都将是可信的。

链外扩展(第二层解决方案)的根本假设在于,我们可以利用链上提供的确定性作为锚点,并于其上附加其他经济学模型以扩展公链已有的能力。


概述

区块链最根本的限制在于区块链是昂贵的:交易需要手续费、智能合约的执行消耗依赖于计算复杂度。为了处理这个问题,状态通道想把链外处理和区块链本质上可信这两者结合起来。参与者之间的双向通信通道使得通常在链上进行的操作能在链外进行。这将极大地减少交易时间,因为参与方不再依赖于第三方来验证此交易,并且可以选择在某个时间把最后状态(代表交易的集合)广播到区块链上。发生于状态通道内的事件具有非常高的安全性和确定性,出错了我们依然可以通过上文提到的锚定来确定状态。状态通道是比支付通道(payment channel,例如比特币上的闪电网络)更为通用的形式,不只用于付款,也能用于区块链上任何的状态更新。


交易步骤

状态通道的交易步骤如下:

  1. 基于参与方共识,通过多重签名或智能合约锁定一部分区块链状态。
  2. 参与方通过签名交易彼此交互,无需向矿工提交信息。
  3. 最终,整个交易集合被提交到区块链上。

关闭通道

状态通道的关闭由参与方定义,如下是常见的情况:

  • 时间。例如参与方约定在开启通道后两个小时关闭。
  • 交易内容。例如约定在价值为100美元的交易进行后关闭。

举例

考虑Alice和Bob之间进行的扑克牌游戏,胜利方将获得一个ETH。一个自然的想法是在以太坊上创建智能合约以实现此扑克牌游戏,参与者执行操作时将往智能合约发送交易;一方胜利后智能合约将提供最终奖励。这种方式是可行的,但是效率低下并且昂贵,因为Alice和Bob本质上是让整个以太坊网络处理他们的游戏,每次参与者想执行操作时都必须付出gas,并且还需等待矿工确认。

所以我们需要设计一个系统,使得游戏的进行尽可能少的发生在以太坊上。这需要Alice和Bob能在链外更新游戏的状态,并且最终可以把结果提交到以太坊上,这就是状态通道的典型应用。

首先,我们需在以太坊上创建一个名为Poker的智能合约,它能理解游戏规则并且明确Alice和Bob是游戏的参与方,它同时也拥有价值为一个ETH的奖励。

接着,Alice和Bob进行游戏。Alice将创建并签名交易、将其发送给Bob,Bob将签名、发送回签名后的版本并保存一份拷贝。接下来Bob创建并签名他的第一个操作,发送给Alice,后者将签名、发送回签名后的版本并保留一份拷贝。如此反复进行游戏状态的更新。每次交易都包含一个nonce,可以用于区分动作的先后顺序。

截至这里,这一切尚未发生在链上。Alice和Bob只是在两者之间发送交易,但这一切交易都能被发送到Poker智能合约,因为它们是合法的以太坊交易。这类似于两人互写支票,实际上跟银行之间没有金钱交易,但双方都有一叠支票可以到银行进行结算。

当Alice和Bob结束游戏时(例如Alice已经赢了),他们可以通过提交一个最终状态到Poker智能合约来关闭通道,只需付出一次手续费。Poker智能合约保证此最终状态由双方签名,并且会等待一定的时间来保证没有人可以合理地质疑此结果。最终,它把一个ETH的奖励发送给Alice。

为什么需等待一定时间

设想恶意Bob提交了一个过去的对他有利的状态,Poker智能合约无法得知这是否是最新的。等待一段时间允许Alice提交一个新的状态,从而使得Poker智能合约拒绝恶意Bob的请求。

特点

状态通道在很多应用场景是非常有效的,但我们也需要了解其特点以明确适用范围:
  • 状态通道需考虑可用性。假如Alice在上文提到的等待时间内被恶意Bob拔掉了网线,她可能无法在时间结束前提交最新的状态。当然,她可以让他人获得其状态拷贝以避免此问题。
  • 状态通道对参与方在长时间内大量状态交互特别有效。创建通道会有一定的开销,但部署后的平均状态更新开销是极低的。
  • 状态通道适用于拥有已知参与方的应用。这是因为类似Poker的智能合约需在一开始就知道哪些地址是参与方,增加或移除参与方将导致合约的更改。
  • 状态通道具有强隐私特点。因为所有一切都发生在通道内部,而不是被公开广播并记录在区块链上。只有开启和关闭通道是公开的。
  • 状态通道具有实时的确定性。意味着只要双方签名了状态更新,它就能被认为是确定的。双方都认为,假如有必要,他们能在区块链上执行此状态。

项目

雷电网络(Raiden Network)

Basically all blockchain based applications that want to scale to real world usage will benefit from Raiden. It can be used for applications like asset trading in gaming or finance, retail payments, micropayments for content (think the next YouTube or Spotify where creators are directly paid for every second consumed). But it’s also suitable as an infrastructure for cheaper, faster and more secure correspondent banking. — Heiko Hees, founder/CEO Brainbot technology.

雷电网络使得物联网和M2M(Machine-to-Machine)之间的微交易(micro transaction)成为可能。比起普通的状态通道,使用者将连接到由状态通道构成的网络中,并且可以和连接到网络上的其他参与方发起付款。雷电网络的简化版本,名为μRaiden,已部署在以太坊主网上。

其他项目

  • Liquidity Network: 链外支付系统,与μRaiden类似。
  • Counterfactual: 以太坊上的状态通道框架,模块化的设计使得开发者无需成为状态通道专家。
  • Funfair: 去中心化的博彩平台,开发了名为Fate Channels的状态通道。
  • Spankchain: 基于区块链的成人内容平台,开发了单向支付通道。
  • Decentraland: 基于区块链的虚拟世界,开发了基于状态通道的脚本系统(scripting system)。

代码例子(需科学上网)

如下链接通过50行Solidity代码实现了支付通道:

https://medium.com/@matthewdif/ethereum-payment-channel-in-50-lines-of-code-a94fad2704bc
| 邀请
网友评论

0条评论

已有0人参与讨论

巴比特图书
返回顶部
分享 发帖