在链上超时调解期间,未提交的 RemoteRemoved TLC 将被跳过
□ 假设
地形学:A-B-C-D',付款方向A-> D'. B 强制关闭了B-C'频道,当D'的TLC到期时,该频道仍在ShuttingDown(WAIting COMMITMENT-CONFIRMATION)'中。
C向B传播 " RemoveTlc " 。 B收到同龄人的信息,并立即呼吁set offered tlc removed ()',将下游TLC改为removed'并设定`removed reason'。
其后的 " 签署承诺 " 被拒绝,因为B-C ' 已经与Waiting COMMITMMENT-CONFIRMATION'处于关闭状态。 因此,脱手握手从未达到 " RemoveAck确认 " 或 " 应用-remove-tlc-operation " ,B从未向上游的 " A-B " TLC宣传结果。
□ 失败
TLC 解决后, 超时调节会跳过它, 因为“ removed reason” 已经存在 :
.filter(|tlc|tlc|.removed reason.is none ()) 互联网档案馆的存檔,存档日期2014-12-02.尚未解决的 链上 tlcs()'也把每个TLC用removed reason.is some()'处理,这是已经解决的,即使脱链去承诺握手没有得到确认。
因此,B-C行为体认为链上调节完成并停止,而上游A-B提供的TLC则始终存在. 集成测试 `test mid node shutdown when d expiry' 最终等待 A' 给出的 TLC 平衡为零 。
这个问题是断断续续的,因为它取决于C的“转移Tlc”是否在B-C仍在关闭时到达B。 如果B-C关闭交易先被确认,则对已关闭的信道的对等消息被丢弃,而B的本地"removed reason"仍然为空,因此链上超时路径可以调和TLC.
□ 失败序列
美容师 序列示意图 自动编号 参加者A 参加者B 参加者C 与会者D 作为链上结算的参与者链
A-QQB:添加Tlc B-Q-C: 添加Tlc C-Q-D: 添加Tlc
B-Q-B:强制关闭 B-C
B,C:B-C = ShuttingDown
Waiting COMMMMMENT CONFIRMATIONT
D-QQC: TLC 过期/ 删除Tlc C-Q-B:删除Tlc
B-QQB: 将 TLC 标为远程删除 B-QQB:去除 正因=一些(.
C-xB:已签承诺被拒绝
注意 B, C : RETTlc 未执行
RemoveAck 从未实现
B-xA:去除Tlc不向A-B传播
链-QQB:B-C TLC在链上解决 B-QQB: 由已删除的 reason.is noone() 过滤器 注意 B 的右侧: TLC 已跳过
B-QQB: 已解析 链上 tlcs = 假 B-QQB: 将调和视为完整的 < br/> 并停止演员
注A,B:A-B提供的TLC永久保留 A-Q-A:等待70秒 A-xA: 集成测试时间结束
内容来源: nervosnetwork/fiber