版本比较

密钥

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

2、P2P Node

2.1 模块图

...

源文件

2.2 Stream模块

Steam模块,维护和SDK的双向流连接。Steam模块,维护和SDK的双向流连接,并转发SDK的请求给对应的状态通道实例。

2.2.1 加入状态通道

命令:state_channel.join

...

错误码

描述

100001

状态通道不存在

返回值:

状态通道状态的快照。

2.3 状态通道

状态通道模块,负责状态通道的创建和关闭。状态通道模块,负责状态通道的状态的分发和验证。

2.3.1 Controller

状态通道控制器,负责协调其他模块完成状态通道功能。状态通道控制器,负责处理Sessions模块和Peers模块发送过来的请求。对于游戏类应用主动产生Tick交易。

2.3.1.1 初始化状态通道

业务逻辑:

当状态通道不存在时,调用状态通道合约接口,获取合约详细信息,检查 自己是不是 当状态通道不存在时,调用状态通道合约接口,获取合约详细信息,检查自己是不是 Leader ,

如果是Leader:

就加载初始状态到MemStore,合约代码到 MoveVM,然后监听 state_channel.call 消息,如果有消息就执行合约调用,把调用产生的副作用,广播给其他 Peer 节点和连接的所有客户端。设置一个定时,触发Tick,运行合约的 OnTick 函数,如果有副作用产生就广播给Peer节点和连接的所有客户端。

...

和Leader Peer 建立连接, 然后从Leader Peer 获取通道的初始状态和合约代码。然后监听Leader发送过来的消息。如何是合约执行结果消息,就在本地的MoveVM中执行,如果执行产生的副作用和Leader一致,就广播给客户端。如果不一致,就调用主链的合约创建一个提案,惩罚Leader, 并请求其他Peer投票,如果收到的投票数足够,就执行提案惩罚Leader,获取罚金。

如果状态通道配置有Tick函数和间隔:

配置定时器,触发Tick交易。

2.3.1.2 处理加入状态通道请求

业务逻辑:

如果是Leader:

...