以太坊上的可持续扩展方案

《以太坊上的可持续扩展方案》

使用状态通道

我们已经了解过核心概念了,现在是时候说说状态通道的实际运行流程了。

单个状态通道需要两个参与者——可以是人、机器人、自动化软件——什么都行,真的,只要能够与区块链进行通信,而且彼此之间也能通信就好。因此,ta 们得有渠道连上区块链节点、使用 web 3.0(之类的基础设施),以及一些链下信道,例如 HTTP 、Websocket,或是专门的 TCP/IP 协议(如果你实在想的话,也可以使用邮箱——这些都无所谓的)。

首先,参与双方都要同意开启通道;主要就是对于 OpenChannelData 结构体的内容达成共识。这些内容包括参与双方的地址、资金、使用的状态机(包括初始化数据)、时间戳,最后是初始状态哈希值及其签名(通过链下调用状态通道代码得到)。

一旦参与双方都签署了这些数据,状态通道就可以得到资金(见下文)并开启。等到参与双方看到该交易上链,该通道就可被视为开启。

若要推进通道的状态,需由一方提议一个 action 。提议 action 的操作可以是让用户按一下按钮,也可以通过自动算法来完成。不管是通过哪种方法,只要能创建具体的 action 消息就可以(我们会在后文给出详细说明)。然后,该参与者从链下调用 advanceState() 函数,输入前一个状态和 action 。如果输入有效的话,代码会返回一个新的状态。

之后,该参与者对 action 和新状态进行签名,然后将它们发送给对手方。

接收到这两个签名数据之后,对手方必须从以下两个方面对其进行验证:

通过调用 advanceState() ,被提议的 action 确实将前一个状态推进到了被提议的新状态

新状态和 action 的签名都是有效的

验证完成后,对手方应亲自签署新状态。对手方可以即刻将其发送给刚才的参与方,也可以与下一个提议的 action 一起发送——这都不成问题。只不过,对于任何一方而言,只要某个状态还没得到对手方的签名(即他们还没收到签名),基于该状态的 action 就都不能接受。

之后就是不断重复这一流程,直到参与方同意关闭状态通道为止。再说一遍,提议 action 的操作可以是让用户按一下按钮,也可以是在达到预定点之后自动触发的。这个时候,参与双方都需签署一个关闭通道 action ,然后将其发送到链上,就可以关闭通道了。实际上,只要签名有效,任何人都可以将这个 action 消息提交到链上,不过我能想象到,提交信息的通常会是参与双方中的一方,在接收到由对手方签署的 action 之后,生成并签署了自己的 action ,然后提交了两个已签署的 action 。

尤其要注意的一点是,如果有一个参与方已经签署了关闭通道 action ,并将其发送给了对手方,那 ta 在任何情况下都不能再推进状态了。对手方后续可以使用该信息关闭通道——无论该对手方更新了多少状态,都可以回滚到这个关闭通道的 action 所在的状态。

听起来都很简单对吧?有可能出什么问题吗?答案是,几乎所有东西都有可能出现问题,在状态通道的开发过程中,有 80% 的工作都是在解决这一问题。首先要明白的一点是,状态通道的核心其实是协议。

《以太坊上的可持续扩展方案》

okex以太坊今日行情

#欧易OKEx##以太坊[超话]##数字货币#

点赞