友だちが Dusk の検証者について聞いてきて、「自分のノードが連続してブロックを逃して罰せられた。これって悪意に当たるのか?」と言うんだ。最初は、罰を受けたなら罰を受けただけだと思った。Cosmos のやつみたいにダブルサインはそのまま小部屋送りで、弁明の余地はない、と。

でも後で Dusk の罰の仕組みを調べたら、2種類あることが分かった。Soft Slashing(ソフト・スラッシング)は、悪意のない過失を対象にする。たとえば、ノードがブロックを出すべきタイミングで落ちた、ウィンドウ期間内にブロードキャストしなかった、など。作悪ではなく、運用上の問題だ。罰は、連続してルール違反するたびに、連続違反回数 N に比例して(N × 10%)の担保価値が差し引かれ、さらにノードがコンセンサスから N 個の epoch(epoch は Dusk のコンセンサス周期)追放される。各ラウンドの終了ごとに検証者セットがローテーションされる。罰せられた DUSK は破棄されない。アクティブな担保から差し引かれるだけで、ノード側が自分で取り戻せる。

Hard Slashing(ハード・スラッシング)は悪意のある行為を対象にする。無効なブロックの生成は担保の 10% を差し引いて破棄。ダブル投票やダブルブロックは 20% を差し引いて破棄する。破棄は本当に無くなるので、しばらくロックして後で返す、という類ではない。

なぜ2種類に分けるのか、最初はよく分からなかった。でも後から、文書の「説明責任(可追責性)」の部分を読んで、納得できた。ノードがネットワークの揺らぎでブロックを逃しただけなら、そのことで重く罰してしまう。すると検証者は、最も高いクラウドの上にノードを置くようになる。結果として運用コストが上がり、むしろ分散性が悪くなる。Soft Slashing の役割は、信用できないノードをアクティブ集合から押し出し、回復の機会を与えること。毎回少しずつ罰するので、誠実に運用している人が破産することはない。

判断を変えたのは、N(連続違反回数)の設定だ。連続違反が増えるほど、差し引かれる額も増え、追放される期間も長くなる。1回目の切断で 10% 差し引かれて 1 epoch 除外、2回目は 20% で 2 epoch 除外。指数的に負担が増え、ノードは安定して回復するか、もしくは自動的に離脱することになる。Hard Slashing は明確な悪意のために取っておかれており、一度破棄されれば復帰ウィンドウはない。

Polkadot と比べてみるといい。Polkadot の Slashing も段階があるが、罰の割合がより細かく、0.1% から 100% まで幅がある。罰金は通報者に分配される。Dusk の仕組みはもっと単純で、過失か悪意かのどちらか、割合は固定、破棄による通報者への報奨はない。利点は、検証者が「ミスの代償」を予測できること。複雑な規則のせいでノード運用をためらうことがない。

友だちは聞いたあと、「じゃあ今回は Soft Slashing で自分も認める。家のネットが30分落ちたし」と言った。自分も、Dusk がなぜこんなふうに仕組みを分けているのか理解できた。段階式の罰がなければ、誠実なノードと悪意のあるノードは同じ扱いになる #dusk $DUSK @Dusk