FABRKNT
Validator 運用 — 鍵、slashing、協調アップグレード
Validator 運用
レッスン 2 / 4·CONTENT16 分40 XP
コース
Validator 運用 — 鍵、slashing、協調アップグレード
レッスンの役割
CONTENT
順序
2 / 4

レッスン1 — Slashing 検知とオフライン validator

問い

Validator が stake を失う方法は厳密に 2 通り。高くつくほう: 矛盾する 2 メッセージに署名(slashing、1 回で stake の大部分消失)。じわじわ来るほう: ネットワークが必要とするときにオフライン(inactivity ペナルティ、数日で少しずつ削られる)。運用判断はこの 2 損失の小さい方を選ぶことに帰着 — どの判断軸か?

原理(最小モデル)

  • Stake を失う 2 経路. 能動的(slashing、暗号的に証明可能、壊滅的)+ 受動的(inactivity、緩やか、時間と共に少額)。
  • 3 種の slashable 違反. Double voting(同 height で別ブロック)+ Surround voting(Casper FFG、後の票が前の票を包含)+ BFT equivocation(同 height/round で別 pre-commit)。
  • Slashing-protection DB が標準. 署名前に (H, R) で異なる署名済みメッセージをチェック → 存在すれば拒否 → 存在しなければ署名 + 記録。
  • DB は永続化 + 再起動耐性 + ソフト更新耐性 + バックアップ要.
  • DB と署名は atomic 操作. ネットワーク越しリモート DB は atomicity が崩れる窓を作る → 同マシン上必須。
  • リモート signer + DB で defense in depth. Validator ノード bug でも remote signer DB が最後の砦。
  • Whistleblower 報酬. Ethereum で slashed の ~1/512、$1M slashing で ~$2k = watcher を経済的に動機づけ。
  • Inactivity leak. >1/3 オフラインで finality 問題発生 → 1 epoch ごとオフライン stake を削る → chain が >2/3 オンラインに自己回復。
  • ネットワーク分断時は fail-closed が正解. 続けて slashing リスク vs 停止して小さな inactivity → 停止が常に正解。

具体例

Stake を失う 2 経路:

経路何が起きるかなぜ
能動的(slashing)矛盾する 2 メッセージに署名暗号的に証明可能、主要ペナルティ
受動的(inactivity)まったく署名しない分断中にじわじわ削られる

Ethereum 2026 概算:

  • Slashing: 最小 ~1 ETH、correlated slashing で増加
  • Inactivity leak: 非参加 1 日 ~0.1% / stake

3 種の slashable 違反:

Double voting:

Vote1: { height: 1000, block: 0xA..., signature: SigA }
Vote2: { height: 1000, block: 0xB..., signature: SigB }

両 valid + V 署名 → V slashable。両署名を持つ者なら誰でも slashing proof 構築可能。

Surround voting(Casper FFG):

  • Vote1: source A → target B
  • Vote2: source C → target D
  • C < A AND D > B → 2 つ目が 1 つ目を「surround」→ slashable

BFT equivocation(Tendermint、HotStuff):

  • 同 height/round で別ブロックに 2 つの pre-commit
  • Logic は double voting と同、slashing-protection DB で捕捉

Slashing-protection DB ロジック:

Height H、round R でメッセージ M に署名する前に:
  (H, R) で内容の異なる署名済みメッセージが既に存在するなら:
    署名を拒否する  → slashing イベントを起こさない
  そうでなければ:
    M に署名する
    M をデータベースに記録する

DB 要件:

  • 再起動を跨いで永続化
  • ソフトウェア更新を生き延びる
  • バックアップを取る(新規 DB だと現実に追いつかない)

代表実装:

  • EIP-3076 フォーマット(Ethereum 標準)
  • CometBFT priv_validator_state.json(Cosmos)
  • カスタムファイル(chain 固有)

リモート signer + DB:

[Validator ノード]  --署名要求-->  [Remote Signer]
                                            |
                                            +- Slashing-protection DB をチェック
                                            +- 安全なら: 署名して記録
                                            +- 危険なら: 拒否

Defense in depth: Validator ノードが double-sign を試みても remote signer DB が拒否。

Whistleblower watcher:

  • ブロックチェーン走査 → attestation 収集
  • (validator, height, round) でインデックス
  • 衝突検知 → slashing tx 提出
  • 報酬獲得(Ethereum で ~1/512)

Inactivity leak の動作:

  • 通常運用中: 報酬取り逃し(日次小損失)
  • Finality 問題(>1/3 オフライン): inactivity leak 発動
  • epoch ごとオフライン validator が stake 失う、finality 遅延長いほど率上昇
  • Chain は自己回復: 最終的にオンライン >2/3 回復 → finality 再開 → オフライン validator が削減後で残る

ネットワーク分断シナリオ:

  1. 分断で validator set が二分
  2. 各分断が自分を majority と誤認の可能性
  3. 各々が別 fork で署名継続
  4. 分断解消で fork 跨ぐ大規模 slashing

緩和策:

  • Liveness watchdog: 分断検知(peer から最近ブロックなし)→ 署名停止
  • ネットワーク heartbeat: 署名前に他 validator 接続性確認
  • 強制 sync: ネットワーク追いつくまで署名拒否

失敗例(誤解)

「リモート DB(ネットワーク経由)で slashing-protection」— 間違い。DB 書き込みと署名は atomic 操作。ネットワーク失敗 → 署名だけ記録なしで残る → 再試行で同 height に再署名 → slashed。同マシン上必須

「冗長化バックアップ DB のメリット」— 半分間違い。バックアップは持つべきだが アクティブ DB はそのまま使う(新規 DB だと現実に追いつかない、過去署名を知らない)。バックアップは復旧時の 最後の手段

「Slashing は技術的問題、経済層は別」— 間違い。Slashing 自体が 経済的セキュリティ。検知メカニズムは暗号、執行は経済。Whistleblower 報酬で検知の経済的インセンティブも組み込まれる。

🛑 予測。 Validator が DC1 にある。DC1 がインターネット接続を 30 分失った。署名を続けるべきか? 続けた場合と止めた場合の失敗モードは?(答え: 止めるべき。続けた場合 = 自分が分断側にいて、ネットワークの残りが目にしないブロックを生成しうる → 回復時に自 chain が間違いと判明 → double-sign 等価で slashed → 数百万 ETH 損失。止めた場合 = 30 分の inactivity ペナルティ(小さい)+ 接続戻ったら sync 再開可能。slashing > inactivity が常に成立、「不確実なら fail-closed」が validator の正しいデフォルト。Validator software は自動で検知して停止すべき。)

ステップで組み立てる

Step 1: Stake を失う 2 経路

能動的(slashing、壊滅的)+ 受動的(inactivity、緩やか)。

Step 2: 3 種 slashable 違反

Double voting / Surround voting(Casper FFG)/ BFT equivocation。

Step 3: Slashing-protection DB の擬似コード

(H, R) で既存メッセージチェック → 同 height/round で異なるなら拒否、なければ署名 + 記録。

Step 4: DB の atomicity 要件

DB 書き込みと署名は単一 atomic 操作 → 同マシン上必須、リモート不可。

Step 5: リモート signer + DB の defense in depth

Validator ノード bug でも remote signer DB が最後の砦。

Step 6: Whistleblower 報酬の経済設計

slashed の ~1/512 → watcher を経済的に動機づけ、市場が形成。

Step 7: ネットワーク分断時の fail-closed

「不確実なら署名停止」= slashing > inactivity が常に成立。

答え合わせ

  • DB と署名の atomicity 必要性: 署名してから記録の順なら → ネットワーク失敗で記録なし → 再試行で同 height に再署名 → slashing。「両方成功するか両方失敗するか」しかない atomic 操作必要。ネットワーク越しの DB は atomicity 窓を作る → 同マシン上必須。
  • Inactivity leak の自己回復メカニズム: >1/3 オフラインで finality 問題 → epoch ごとオフライン stake を削る(finality 遅延長いほど率上昇)→ 最終的にオンライン >2/3 回復(オフラインが削られて active 比率上昇 / オフラインが復旧)→ finality 再開 → オフライン validator が stake 削減後で残る。chain は永久 halt せず緩やかに回復
  • 「不確実なら停止」が正しい理由: slashing ペナルティ(壊滅的、~1 ETH 最小~数 ETH)vs inactivity ペナルティ(日 0.1% / stake、30 分なら ~0.002%)→ オーダー桁違い。続けて slashing リスク vs 停止して inactivity → 期待値で停止が圧倒的。Validator software は自動 fail-closed すべき。

合格基準

  • Stake を失う 2 経路を即答できる。
  • 3 種 slashable 違反を例で言える。
  • Slashing-protection DB の擬似コードを書ける。
  • DB と署名の atomicity 必要性を 1 文で説明できる。
  • Inactivity leak の自己回復を 4 段で辿れる。

まとめ(3行)

  • Stake を失う 2 経路(slashing 壊滅的 / inactivity 緩やか)、3 種 slashable 違反(double voting / surround voting / BFT equivocation)、slashing-protection DB が標準防御。
  • DB と署名は atomic 操作(同マシン上必須)、リモート signer + DB で defense in depth、whistleblower 報酬(~1/512)で検知市場形成。
  • Inactivity leak が >1/3 オフラインから chain を自己回復、ネットワーク分断時は fail-closed が正解(slashing > inactivity が常に成立)。