Blink Labs が開発する Go 製の Cardano ノード実装 Dingo は、日本時間 10 月 25 日 9 時過ぎに v0.88.0 を GitHub で公開しました。新しい Dijkstra テストネットへの接続設定が加わり、Haskell 製の cardano-node 以外のノードでも、次の大型アップグレードの試験網に参加する準備が一段進みました。
Intersect が SPO 向けに Dijkstra の公開テストネットを開いたのは 10 月 23 日で、今回の版はその 2 日後に出ています。運用面でも、スロット競合の勝敗の記録や cardano-cli との互換など、SPO が日々目にする部分の修正が多い版です。何が変わったのかを、変更履歴に沿って整理します。
Dijkstra テストネットと Leios への備え
中心になる変更は、Dijkstra テストネットへの対応です(#5573)。正式なネットワーク設定と、dijkstra という名前で接続先を選べる仕組みが入り、ネットワーク識別番号(network magic)は 6 です。付属のドキュメントでも、Dijkstra は試験網として位置づけられています。
Intersect の 10 月 23 日の告知によると、この公開テストネットのエポックは 1 日で、まず node 11.1.3 による Conway 期(プロトコルバージョン 11)として動き、node 11.2 のプレリリースとハードフォーク開始のアクションを経て、Dijkstra(プロトコルバージョン 12)へ移る段取りです。この段階の試験は、Leios を除いた Dijkstra の機能が対象とされています。
そのうえで v0.88.0 には、Leios を見据えた変更もまとまって入りました。
- BLS 投票鍵の重複を拒否(#5575): 別のプールの有効・保留中のパラメータがすでに使っている BLS 投票用の公開鍵は受け付けません
- Leios 用の Grafana ダッシュボードを追加(#5557): 委員会の規模や受け取った票の数に加え、自プールの票が投じられなかった理由も表示します。BLS 鍵がまだ台帳のステーク・スナップショットに入っていないプールは
no_keyとして現れます - Musashi ネットワークでのブロック検証を完全化(#5425): これまで試作段階の省略(リーダー資格の確認、Dijkstra の取引検証、Leios 証明書の検証)で動いていたものを、ほかのネットワークと同じ検証経路に揃えました
スロット競合の勝敗は、k ブロック後に確定
SPO の記録に直接かかわるのが、スロット競合(slot battle)の判定の修正です(#5458)。スロット競合とは、同じスロットで 2 つのプールがそれぞれブロックを作り、どちらか一方だけがチェーンに残る状況を指します。
これまでの Dingo は、相手のブロックが届いた時点で勝敗を記録していました。しかし変更の説明によると、その時点の判定はチェーン選択が最終的にどちらのブロックを残すかを示しておらず、後から入れ替わることがありました。v0.88.0 では、届いた時点では競合の発生だけを記録して保留し、チェーンの先端がセキュリティパラメータ k の分だけ先へ進んでから、実際に残ったブロックで勝敗を確定します。メインネットの k は 2,160 ブロックです。
自プールの勝率をログや監視で追っている運営者にとっては、数字そのものの意味が「到着時の見込み」から「確定した結果」へ変わる修正です。
cardano-cli との互換と、ノードを守る上限
cardano-cli からの問い合わせへの応答も直りました(#5511)。ノードとクライアントの通信バージョン 21〜23 では、プロトコルパラメータを公開版の Haskell ノードと同じ 15 項目の形で返すよう揃えています。
あわせて、外からの入力に上限を設ける修正が多く並びました。大きすぎる取引をメモリプールに入れる前に拒否する(#5538)、取引の要求やローカルの問い合わせの受け入れに上限を設ける(#5489・#5468)、信頼済みのローカル接続(NtC)でも待機中のセッション数を抑える(#5544)、Mithril の公開リソースの使用量を抑える(#5497)といった内容です。資源を使い切らされないための防御で、リレーを公開しているプールほど意味があります。
ほかに、32 ビット環境での互換の修復(#4536)、Blockfrost 互換 API の仕様準拠の強化(#5328・#5536)、スナップショットをクラウドへ上げる際の認証(#5431)も入っています。
ノードの実装が複数あるということ
Cardano のブロックを作るノードは、長く Haskell 製の cardano-node がほぼ唯一の選択肢でした。Dingo はそこに Go 製の別実装として加わり、9 月 15 日に Star Forge のプールがメインネットで初のブロックを生成、10 月 22 日には2 つ目のプール GMBL もブロックを作りました。
実装が複数あれば、1 つの実装の不具合がネットワーク全体を止める危険が下がります。その代わり、どの実装も同じ規則で同じ結論を出すことが前提になります。v0.88.0 に、CBOR の参照をバイト単位で比べる適合テストの修正(#5287)や、Musashi の検証の省略をなくす変更が含まれているのは、この前提を固める作業でもあります。Dijkstra テストネットへの対応で、その確認の場がもう 1 つ増えました。
次に見るもの
Dijkstra テストネットの次の節目は、Intersect の工程にある node 11.2 のプレリリースとハードフォーク開始のアクションです。Dingo がそこへ追随するかは、GitHub の Dingo リリース一覧に出る次の版(v0.89 系)の変更点で確かめられます。Dingo でテストネットに参加するプールが出てくるかも、同じ時期の見どころです。
ことば
- Dingo — Blink Labs が Go 言語で書いている Cardano のノード実装。cardano-node と同じネットワークに参加し、ブロックの生成もできます。9 月にメインネットでの初ブロックを記録しました。
- スロット競合(slot battle) — 同じスロットで 2 つのプールがブロックを作り、片方だけが残る状況。どちらが残るかはチェーン選択で決まり、その結果は数ブロック後まで動くことがあります。
- BLS 投票鍵 — Leios で、プールが追加ブロックの承認票に署名するための鍵。複数の署名を 1 つにまとめられる BLS 方式を使うため、プールごとに鍵が重複しないことが前提になります。
一次ソース / 関連リンク
- Blink Labs 公式 X の告知
https://x.com/blinklabs_io/status/2114150156106932565
Dingo v0.88.0 リリースノート(GitHub)(GitHub)
Dijkstra テストネットへの対応(#5573)(GitHub)
スロット競合の勝敗確定の修正(#5458)(GitHub)
GitHub
- Intersect 公式 X の Dijkstra 公開テストネットの告知
https://x.com/IntersectMBO/status/2113511556411478174

