This post was translated by BTBF from https://xstakepool.com/
カルダノが採用しているProof-of-Stakeコンセンサスアルゴリズム「ウロボロス・プラオス」では、ステークプールのブロックが孤立(Orphaned Block)する可能性があります。
Orphaned Blockとは?
特定の条件下でネットワーク内のノードによって作成され、その後無効化されたブロックのことです。孤立したブロックは、ステークプールのパフォーマンスにはカウントされず、報酬も発生しません。
ステークプールのブロックがネットワークで孤立する条件:
スロットバトル
ハイトバトル
スロットバトル
以前のブログ記事で、ウロボロス・プラオスのコンセンサスアルゴリズムの一部として、各ステークプールががプライベートVRFキーを使ってスロットリーダーを検証していることを説明しました。これは、2つ以上の別々のステークプールが特定のスロットの同じスロットリーダーになることが可能であることを示しています。
1つのスロットで2つ以上のブロックが作られた場合、ネットワークはどちらのブロックを使ってブロックチェーンを成長させるかをどのように決めるのか?これがスロットバトルの基本です。
以下の図1は、ネットワーク内のCardanoノードがこれらのブロックをどのように処理するかを示しています。
ノードが1つのスロットに対して2つの有効なブロックを受信すると、VRFプルーフ値が低い方のブロックが最新のブロックとして選択され、ネットワーク全体に伝播されます。もう一方のブロックは孤立し、使用されなくなります。
スロットバトルはウロボロス・プラオスでは避けられないものであり、その結果は運次第です。
しかし、アクティブステークが少ないプールは、より大きな競合プールよりも低いVRFプルーフの値を生成する可能性が高いため、スロットバトルに勝つために有利です。
ハイトバトル
ブロックが孤立するもう一つの理由は、ハイトバトルと呼ばれるレース条件によるものです。ブロックが次にブロックを生成するステークプールに伝搬されない場合、ブロックは孤立します。
下の図2は、次のブロックを作成しているステークプールにそのブロックを速く伝播させないことで、ブロックが孤立する様子を示しています。
このネットワークのノードが最初にXのブロックを受信したにもかかわらず、それは後で孤立します。なぜなら、Yのブロックは後のスロットに来ますが、Xのブロック番号と同じブロック番号を持っているからです。
これは、ブロック番号カウンタのインクリメントに間に合わず、YがXのブロックを受信しなかったためです。XとYはどちらもネットワーク全体で同じブロック番号を送信しますが、異なるスロットで送信されます。ノードはスロット番号の高いブロックを選択し、他のブロックを孤立ブロックにします。
ハイトバトルにて孤立することを避けるためには、ブロックが次のブロックを生成する前に、そのブロックが次のステークプールに間に合うように到達することが重要です。
図3は、Xが自分のブロックを素早くYに伝搬させ、Xのブロックの後にブロックn+1を送ることができるようにする方法を示しています。
ハイトバトルからブロックが孤立するのを完全に防ぐためには、カルダノのスロットの間隔は1秒であるため、ブロックが1秒以内にネットワーク全体に伝搬されることが重要です。そうすれば、次のブロックプロデューサーがあなたのブロックを持ってるので、その上に構築することができます。
ブロックを素早くネットワークに伝播させるためには、他のピアにも接続されている必要があります。
cardano-nodeの現在の実装はP2Pをサポートしていないため、手動でピアを追加しています。しかし、あまりにも多くのピアを管理することで、ブロックを伝播するノードの処理能力が低下してしまうため、ピアが多すぎると不利になることもあります。現在推奨されている1ノードのピア数は20以下です。
ネットワーク統計を見て、ステイクプールや孤立ブロックのブロック伝播時間を見るのに便利なツールは、PoolTool.ioです。
References
[1] Ouroboros Praos, EuroCrypt 2018 https://eurocrypt.iacr.org/2018/Slides/Tuesday/TrackA/01-03.pdf
[2] Randomized Outcome of Slot Battles, GitHub, https://github.com/input-output-hk/jormungandr/issues/2156
Comments