跳到主要内容

争议如何解决

一个争议有两个部分,而只有其中一个部分做出裁决。

链下层负责收集。它验证每位仲裁员的签名, 将一次揭示与该仲裁员先前的承诺进行核对,拒绝 来自从未提交承诺的钱包的揭示,丢弃重复项,并 复制结果,使每个节点都看到相同的证据。

负责裁决。它按照自己的规则清点已揭示的投票—— 按 stake 加权,设有已计票数下限,在平局时重开一轮 而非打破平局——并转移托管资金。

链下层不清点票数

它曾经这样做过。getDispute 会返回一个由某节点所见揭示 推导出的裁决结果,而这在一种值得理解的意义上是错误的,因为 这是一种看起来像帮助的错误。

对同一批票数进行两次清点,是分歧的生成器,而非第二种 意见。 链会按不同规则重新仲裁,因此它对同一争议可能得出 不同的答案——当它这样做时,界面 显示一个结果,而资金却遵循另一个。链是 托管资金的权威,因此链下的答案不是第二种意见: 它是协议做出、随后又用自己的资金加以推翻的一种陈述。

因此 resolution 只由一件事设定:本节点已独立 观察到确认的一笔执行交易,其结果随后由该节点从 链上的案件账户读取。

AwaitingChainExecution 是一个真实的答案

当每一份所需的揭示都到位后,案件处于 AwaitingChainExecution。该状态表示链下层已完成 其工作,而托管资金尚未转移。它不是「已裁决待 执行」——那种措辞会宣称一个节点无权命名的结果。

一个看到某笔交易落地但无法读取其裁决内容的节点 保持AwaitingChainExecution,并记录它所 观察到的签名。链上发生了某件事,而该节点尚不知道是什么; 如实说出这一点是诚实的答案,而编造一个裁决去填补空缺 正是此规则所要消除的那种失败。

双方达成一致并非例外

双方可以就一次相互和解达成一致,链下层会 直接验证双方的签名。它一拿到该协议就予以 记录——那是关于案件的一个真实事实,隐瞒它会向 双方隐藏他们自己的决定。

但记录一份协议不等于记录一个裁决。在托管资金 实际转移之前,案件像任何其他案件一样处于 AwaitingChainExecution

这一点很容易弄错,因为与一次裁定不同,这里没有 两个节点会以不同方式执行的计算——协议本身就是 那两个签名。它仍然必须等待,原因有二:

  • 签名不会转移资金。 一个在资金仍被锁定时被标记为 MutualSettlement 的案件,会告诉双方争议已结束并已付款,而 两者皆非事实。
  • 链按其自己的截止期限执行。 它仍然可以自由地对一个 双方私下达成一致却从未转达的案件执行一个仲裁结果—— 使两层就同一争议重新陷入矛盾,而这正是整条规则 存在所要防止的。

客户端应展示什么

节点所述展示
resolution: null,状态 AwaitingChainExecution案件已裁决或已达成一致;托管资金尚未转移
resolution 已设定,附带一个执行签名结果,以及它来自的交易
已收集揭示,状态无变化正在收集证据;没有可展示的结果

不要从 getDispute 响应中的揭示推导出一个结果。它们 在那里是为了让任何人都能审计链收到了什么,而不是为了让客户端 得出自己的裁决——一个清点它们的客户端,已经重新引入了 节点已停止产生的那种分歧。

有关规范性表述,请参见 OFS-2400 §16.2 和 §17。