...
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:
...