私はDuskのコンセンサス節で、ひとつの区別に何度も立ち返りました。つまり、あなたが積み上げているブロックを生成しなかった反復が、必ずしも失敗した反復だとは限らない、ということです。

それは言葉が細かすぎるように聞こえますが、注釈(attestation)とフォールバック(fallback)がどう相互作用するかを読むと納得できます。

DuskのSuccinct Attestationでは、検証(validation)投票と承認(ratification)投票によって、Validなクォーラムに対する成功のアテステーション(success attestation)か、Invalid、NoCandidate、またはNoQuorumに対する失敗のアテステーション(fail attestation)が生成されます。ですが、3つ目の状態があります。それがunknown(不明)で、必要なクォーラムが観測されなかった場合です。

私の最初の読みでは「unknown」はほぼ死んだものだと扱っていました。ラウンドは次へ進み、別の反復でブロックが生成されました。

ところがDuskは違います。

反復Iが0より大きい時点でブロックが生成されると、プロトコルは過去をさかのぼって見ます。直前までのすべての反復がfail attestationなら、そのブロックは「attested」とみなされます。これらの先行パスは、後からコンセンサスを主張できません。

しかし、もし先行の反復のどれかがそのfailの証明を欠いているなら、そのブロックは「acceptされる」だけです。

この違いは、ラベルが示唆する以上に大きな仕事をします。

Duskのフォールバック規則では、より高い反復のブロックも、より低い反復のブロックが同じようにコンセンサスに到達していれば置き換えられます。ホワイトペーパーは、遅延した、あるいは失われたメッセージがこの種のフォークを生み得ると述べています。つまり、単に静かになった(止まった)低い反復は、依然として未解決のままです。

ローリング・ファイナリティ(rolling finality)は、その不確実性を待機時間へと変換します。Duskでは、nを「未attestedの過去反復の数」とします。受理されたブロックがconfirmedになるには、2×n回連続してattestedまたはconfirmedな後続が必要です。確定(final)になるのは、そのブロックがconfirmedとなり、かつその親もfinalになった場合だけです。

つまりDuskは、単にブロック数を数えているのではありません。未解決の履歴を実質的に数えているのです。

その結果、fail attestationが私にはより興味深くなりました。Duskにおいてそれは「この試みは失敗した」と言うだけではありません。曖昧さの枝を閉じます。その証明が欠けていれば、過去の一部は未だ開かれたままで、後続のブロックは、Duskがそのチェーンを決着済みと見なすだけの十分な証拠を積み上げる必要があります。

@Dusk #dusk $DUSK $TMX $TAC