...
场景 | 1人状态通道 | 两人状态通道 | 三人状态通道 | n人状态通道 |
---|---|---|---|---|
Leader 修改MoveVM实现/合约代码 | ? | Follower 本地运行立即可以发现,然后举报,合约强制Leader退出通道,5分钟内不许再次进入,不罚款 | 任何Follower 本地运行立即可以发现,然后举报,两票赞成后,合约强制Leader退出状态通道,5分钟内不许再次进入,并罚款 | 任何Follower 本地运行立即可以发现,然后举报,两票赞成后,合约强制Leader退出状态通道,5分钟内不许再次进入,并罚款 |
Leader 丢弃/延迟对手的交易 | Follower发现Leader没有回复自己的交易,可以举报,合约关闭状态通道,不罚款 | Follower发现Leader没有回复自己的交易,可以举报,合约关闭状态通道,不罚款 |
3、如何结算
任何状态通道成员可以发起结算提案,一般状态通道的Leader会定时发起结算提案,有成员要离开状态通道时也会发起结算提案。结算提案包括结算的起始高度、结算高度、状态通道的变更集和发起方的签名。发起方创建结算提案后,需要通知所有Peer对提案进行投票,Peer收到通知后会使用本地交易数据对提案进行验证,验证的逻辑是计算起始高度和结算高度的变更集是否和提案中的变更集一致,如果一致认为提案没有问题,可以投赞成票,如果不一致投反对票。当发起方收到2/3的赞成票后,发起方执行提案,完成状态通道的结算。状态通道结算完成后,所有成员可以生成结算高度的快照,并清理结算高度之前的交易数据。
4、如何选举状态通道的Leader节点
3、如何选举状态通道的Leader节点
所有加入状态通道的成员,需要和合约保持心跳,15s内有心跳的成员认为是有效成员。
...
选举过程中状态通道不可写?
Leader故障如何快速切换?
...
4、如何选择和Leader的最优通信路径问题
状态通道的Follower需要从Leader同步状态和转发交易,但是有可能Follower直连Leader响应延迟没有经其他Follower中转效率高,所以为了发现最优路径。所有的和Peer的心跳包需要带上和Leader通信的最优延迟。
...
那么Follower1 将选择经过Follower 和 Leader通信。
5、如何加载状态
首先Leader从链上状态通道合约中获取状态通道的代码和初始状态。为了防止Leader加载过程中有其他成员加入,每个加入成员需要分配一个加入序号,Leader需要记录他加载时的最大序号,Leader加载成功后,其他成员从Leader同步初始状态,并也从链上加载状态通道状态并验证。
6、如何结算
任何状态通道成员可以发起结算提案,一般状态通道的Leader会定时发起结算提案,有成员要离开状态通道时也会发起结算提案。结算提案包括结算的起始高度、结算高度、状态通道的变更集和发起方的签名。发起方创建结算提案后,需要通知所有Peer对提案进行投票,Peer收到通知后会使用本地交易数据对提案进行验证,验证的逻辑是计算起始高度和结算高度的变更集是否和提案中的变更集一致,如果一致认为提案没有问题,可以投赞成票,如果不一致投反对票。当发起方收到2/3的赞成票后,发起方执行提案,完成状态通道的结算。状态通道结算完成后,所有成员可以生成结算高度的快照,并清理结算高度之前的交易数据。
四、详细设计
1、合约设计
状态通道的合约包括两部分,一部分给Dapp合约调用的合约接口,另一部分给P2P Node调用的合约接口。
...