以太坊作为第一个实现智能合约的平台,它带来的影响是巨大的,但以太坊本身仍旧存在不少的问题,一个以太坊养猫游戏就已经让以太坊网络拥堵,这对于定位是全球计算机的以太坊平台是不可接受的。
1. 引言
以太坊为作为一个公有链,允许任何人发布智能合约,但使用以太坊网络的成本很高,无论是普通交易或是智能合约都需要一定费用。尤其对于大批量的小额交易来讲,如果频繁的执行智能合约,不单单会增加以太坊网络的负担,光交易手续费一项,就让人望而却步。
状态通道为此提供了一种新的思路,通过将部分流程移出到链外来提高区块链的效率,但这并不会增加参与者的风险。目前状态通道的应用仍然是纯粹的支付通道,如闪电网络,该研究旨在解决小额交易高昂的手续费和极低的效率问题。但状态通道的应用不应仅限于支付领域。
2. 什么是状态通道?
首先,先看一下什么是状态机。状态机是一个很简单的概念,维持着世上很多软件的各种表现形式,可以总结为:f(state, action) => state’,也就是说,这个函数采用当前的状态和一次操作(即更改状态的方法),并返回执行完该操作之后的状态。
以太坊是一个全球化的基于交易的状态机,在链上的每一步操作都会产生最新的状态。不同的是,状态通道是在链外进行状态维护。
状态通道听起来就像是“支付通道”的延伸,这也是这项技术一直被低估和忽视的原因,一个隐私、效率、信任最小化、安全性和模块化的广义通道是我们要建设的重要基础设施之一。
状态通道本质上是通过在不同用户之间或用户和服务之间建立一个双向通道,为不同实体之间提供状态维护服务。它允许把区块链上的许多操作在链外进行管理,等完成链外操作后多方签名确认后,才将最终结果上链。其实可以把状态通道理解成一个执行特殊操作的智能合约,一个专门建立双向通道,在一定条件下进行状态保持的智能合约。
可以将状态通道中的执行过程作为原子操作,在执行完成这个原子操作后,将最终结果上链。
我们用银行和余额宝的例子来讲解一下状态通道,虽然可能不太准确,但多多少少可以说明一些问题。
首先我们把银行比作区块链,我们把部分的钱从银行存到余额宝中,用余额宝进行平时的小额交易,当我们想提现时,直接从余额宝提现至银行卡即可。状态通道对应余额宝,当有一方要关闭状态通道时,相当于提现操作,余额宝中保存了当前账户的状态,关闭状态通道时将状态更新至链上,相当于更新银行账户状态。
3.状态通道的生命周期
- 打开通道:首先由两个或多个参与者就初始状态达成一致,区块链中的某些状态将发生变化(在支付通道中意味着放入一些代币进行托管)则状态通道开启。通道预言机被用来报告通道中的状态,并根据规则进行判断是否关闭通道。
- 关闭通道:当状态通道oracle从其中一个通道参与者接收到有效的状态更新时,它将进入挑战期,在此期间另一个通道参与者可以提交更高序列号的状态更新。在挑战周期结束之后,具有最高序列号的有效状态更新被接受为最终状态。
- 结算:当参与方的任何一方想要关闭交易通道,则更新到最近的状态后,将数据上链进行结算,并关闭通道。
状态通道预言机对于状态是否有效的判断依据如下:
- 状态更新必须由至少两个通道参与者签署。
- 每个连续的状态更新必须高于sequence最后一个。
- 预言机在通道关闭后只能提交关闭前的最近状态更新。
4. 为什么要使用状态通道?
为什么要把信息(信息的哈希)保存在链下?有两个重要的原因,交易费和效率。
状态通道为Dapp的可用性提供了基础,减少Dapp的延迟以及将网络响应时间控制在用户的可容忍范围。Dapp的参与者将消息与事务相互发送,以更新状态,但不会将消息发布到链中。如果其中一位参与者离开或试图欺骗另一位参与者,可以随时向区块链发布最新交易以完成状态。这其中的奖罚措施足以让参与者保持诚实。
状态通道是两方之间的互动,可以适用于任何智能合约。状态通道管理商业进程或者交易状态。它可以在保证指定人群之间交互性能和隐私性的同时,降低交易成本。
使用分片技术可以一定程度上实现可扩展性,但是对于依赖大量原子操作(如流式支付、物联网设备、游戏等)的应用程序来说,分片技术无法有效降低成本,而对于大量细碎交易来讲,通过状态通道,可以很大程度上缩小开支。
5.状态通道应用场景
比特币的闪电网络是状态通道在支付领域的一个很好的应用
下面我们来举例描述状态通道在其他方面的应用:
(1)举一个象棋游戏的例子
两个人开始一局游戏(创建一个新的“评判”程序),并为其提供初始投注。他们的实际举动不是作为交易提交给区块链,而是对每一步的操作进行签名并直接发送给对手方。当对手方接受移动时,由程序检查当前操作是否有效,并在游戏“状态”的更新版本上签名,再将其返回给对手方。如果此举无效,他们会向法官提交最近达成一致的状态,由该方签名操作,以便法官可以使用规则来确定适当的处罚。每一个新动作都会增加序列号,所以其他玩家将无法向法官提交旧版本的状态。如果他们这样做,另一位玩家将在等待期间回复最近的版本。同样,如果其他玩家拒绝返回更新状态的签名副本,法官也可以被要求裁决。但只要对方遵守规则,就不需要诉诸法官。当程序根据规则判定一方胜出时,结束游戏,将最新的状态提交到链上。因为验证和签署新举动的时间要比区块链确认交易所需的时间小得多,所以这个过程无明显延时。除非一个玩家行为异常,否则这些操作对其他区块链用户是透明的。
游戏结束后,玩家可以签署一个更新,根据游戏的结局简单地分配投注,甚至不需要裁判的复杂逻辑,从而再次降低成本。事实上,通过进一步优化,使判定的逻辑和比赛规则本身也可以放入签名的“状态”中,各方之间进行交换。只需建立一个简单的合约,以存储通道参与方的资产,遵守由各方同意的规则。
6. 状态通道展望
- 我们希望看到明确设计的通用目的渠道不会减少,实际上在很多情况下会大大增加隐私。
- 尽可能的把不必要上链的操作在状态通道中进行处理。
- 状态通道可以很容易地融入到新的应用程序中,降低开发难度,使研发人员可以尽可能的参与进来。
- 保证隐私,使得状态通道的运行看起来与其他常见的链上活动无异。
- 在单个通道中对于并行操作的支持,并且这些操作不会相互干扰。
- 状态通道做到组件化,用户在进行dapp开发时,无需再进行重复的工作,可以直接使用通用的状态通道。
- 平滑升级状态通道,尽可能的不影响用户端。
- 做到标准化,让用户可以轻松的链接其他通道。