FABRKNT
Consensus Engineering — Reth で L1 のコンセンサスを作る
実コンセンサスコードを読む
レッスン 7 / 12·CONTENT15 分40 XP
コース
Consensus Engineering — Reth で L1 のコンセンサスを作る
レッスンの役割
CONTENT
順序
7 / 12

レッスン6 — bera-reth を読む(PoL をコンセンサスカスタマイズとして)

問い

「うちは違うコンセンサスを使っている」というピッチの大半は、結局トークン名を変えただけの PoS に落ち着く。Berachain の Proof-of-Liquidity(PoL)は珍しい例外で、誰が検証できるか、報酬がどこに流れるかを実際に変えている。そして実装 — berachain/bera-reth — は本番で動いており、Reth 上にあって、差分は半日あれば読み切れる

原理(最小モデル)

  • PoL は PoS の派生. Validator set / Slashing / BFT finality / 経済モデルの骨格は PoS と同じ。変わるのは ① バリデータ適格性(LP ベース)、② 報酬の流れ(LP に戻る)、③ ブロック時間(~2s)。
  • bera-reth のカスタマイズは 4 ディレクトリ. consensus/(trait 実装)+ evm/(PoL precompile)+ chainspec/(fork heights、genesis)+ node/(NodeBuilder 配線)。
  • 完全カスタム L1 = ~2000 行のカスタマイズ. Tendermint 系コンセンサスエンジンが揃っていれば、仕事の大半はプロトコル再実装ではなく 統合
  • 同じパターンが Tempo にも効く. tempoxyz/tempo は公開済み、tempoxyz/reth は upstream に対して 0 commits ahead — fork せず合成。

具体例

bera-reth のディレクトリ構造:

bera-reth/
├── consensus/          ← カスタムコンセンサス impl
├── chainspec/          ← Berachain mainnet/testnet 仕様
├── evm/                ← カスタム EVM config + precompile
├── node/               ← NodeBuilder 配線
└── rpc/                ← bera_* RPC namespace

各ディレクトリの責務:

ディレクトリ何を書くか規模
consensus/Consensus 実装、proposer 検証、署名方式~500 行
evm/報酬分配 precompile、Validator registry precompile~600 行
chainspec/fork heights、genesis、precompile アドレス、base fee~300 行
node/上 3 つを NodeBuilder に配線~200 行
rpc/bera_* namespace(pol_、validator_~400 行

PoS vs PoL の差分:

機能PoSPoL同じ?
有界 validator setあり(~100 万)あり(~100)構造同じ
Double-sign に対する slashingありあり同じ
Finality gadgetCasper FFGCometBFT 系違うエンジン
ブロック時間12s~2s違う
トークンモデル単一(ETH)二重(BGT + Bera)違う

失敗例(誤解)

「PoL は新コンセンサス系統」— 間違い。PoL は PoS にひねりを加えたもの。BFT finality + slashing + validator set のコア構造は同じ。変わるのは経済層と適格性ゲート。

「Reth を fork する必要がある」— 間違いtempoxyz/reth は upstream に 0 commits ahead = fork せず合成。bera-reth はカスタム実装を別 crate に置いて NodeBuilder で配線する設計。

🛑 予測。 Ethereum PoS では 32 ETH をステークすることでバリデータになる。Berachain の PoL ではそれに相当するステップは何か?(ヒント: 「BGT をステーク」ではない。)(答え: ① BEX に流動性を提供 → BGT を獲得、② BGT をステーク → バリデータ特権。BGT は譲渡不能なガバナンス資産で、唯一の入手経路が LP。バリデータ経済が DEX 流動性に整合する設計。)

ステップで組み立てる

Step 1: 4 ディレクトリの責務を即答できる

consensus / evm / chainspec / node + rpc。各 ~200-600 行。

Step 2: PoL ↔ PoS の差分 3 つを言える

  • バリデータになれる人(LP ベースのゲート)
  • 報酬の流れ(ステークだけでなく LP に戻る)
  • ブロック時間(~2s)

Step 3: 自分の L1 への落とし込み

bera-reth の部品自分の L1 で書き換えるもの
TempoConsensus impl自分の validator set ルールに置き換え
Executor pre-execution hookPoL hook → 自分のビジネスロジック
NodeBuilder 配線自分のコンポーネントに
chainspec自分の genesis / fork / precompile

骨格は bera-reth テンプレート。

Step 4: リポで読む順序

  1. bera-reth/consensus/src/lib.rsConsensus 実装
  2. bera-reth/node/src/lib.rs — NodeBuilder への配線
  3. bera-reth/chainspec/src/lib.rs — どのプロトコルパラメータに依存するか
  4. bera-reth/evm/src/lib.rs — このコンセンサスの下で走る executor hook

各ファイル <500 行。

答え合わせ

  • bera-reth が vanilla Reth より持っているもの: コンセンサス固有のコードパス(PoL バリデータ適格性、報酬分配 precompile、BLS 集約署名検証、~2s ブロック向け base fee パラメータ)。「ただの config 差分」ではない。
  • Tempo / Hyperliquid 出荷の道筋: bera-reth テンプレート → 自分の validator set ルール + executor hook + NodeBuilder 配線 + chainspec。~2000 行のカスタム実装で完走可能(Tendermint 系エンジンは Malachite を使う前提)。
  • fork せず合成の意味: tempoxyz/reth = upstream に 0 commits ahead = upstream の進化を自動で取り込める。カスタム L1 = カスタム crate の集合 + 配線。

合格基準

  • bera-reth の 4 ディレクトリの責務を即答できる。
  • PoL ↔ PoS の差分 3 つを 1 文で言える。
  • 「カスタム L1 ≒ Reth へのカスタマイズ ~2000 行」を 1 文で説明できる。
  • リポを開いて consensus → node → chainspec → evm の順で読める。

まとめ(3行)

  • PoL = PoS にバリデータ適格性ゲート + 報酬流の変更 + 高速ブロック時間を加えた派生(コア構造は同じ)。
  • bera-reth の 4 ディレクトリ(consensus / evm / chainspec / node)が「Reth 上のカスタム L1 」のテンプレート、~2000 行。
  • fork せず合成(upstream に 0 commits ahead)+ カスタム crate の集合 + NodeBuilder 配線 = 自分の L1 chain。