Skip to content

ブロックチェーンの基礎 ​

最終更新: 2026年9月12日

このドキュメントの対象 ​

  • なぜ一部の台帳は検証を複製するのか、full node、light client、permissioned model の違い
  • Consensus、Merkle tree、P2P、finality の役割と、各要素が基盤運用にもたらす制約
  • ブロックチェーン node を通常の stateful service と別に扱う理由

問題の定義: 信頼できる仲介者なしで合意する ​

ブロックチェーンを理解するとき、出発点は技術ではなく制約です。

一般的な分散システムとして Kubernetes の etcd cluster を考えてください。etcd も node 間で consensus を取りますが、1つの前提があります。参加 node は同じ組織が運用し、故障することはあっても嘘はつかない。 Node の停止や network partition(crash fault)には対応しますが、node が意図的に異なる値を主張する場合は対象外です。

ブロックチェーンは異なる前提に基づきます。

項目etcd(Raft)ブロックチェーン
参加者同じ組織の既知の member相互に未知で、入れ替わる参加者
想定する障害Crash fault(停止、partition)Byzantine fault(虚偽、共謀、攻撃)
参加資格Operator が指定Public chain では誰でも
取り消し可能かOperator が介入できるProtocol が許す範囲のみ

多くの public chain では、full node が transaction と consensus rule をそれぞれ独立して検証します。Light client、pruned/snapshot-sync node、permissioned design では、検証や data 配布の方法が異なります。Permissioned な member 制御だけで consensus algorithm が Byzantine fault tolerant になるわけではありません。

ここからブロックチェーンの基本的な性質が導かれます。

ブロックチェーンは throughput のために設計されたシステムではありません。 検証可能性と改ざん耐性のために、意図的に冗長性を受け入れるシステムです。

これを理解すると、以下の運用特性が自然に説明できます。

Block と Chain: なぜ「Chain」なのか ​

Transaction をまとめたものが block であり、各 block には直前の block の hashが含まれます。

text
Block N-1               Block N                 Block N+1
┌──────────────┐       ┌──────────────┐        ┌──────────────┐
│ prev_hash:.. │       │ prev_hash: ──┼────────│ prev_hash: ──┤
│ merkle_root  │   ┌───│ merkle_root  │        │ merkle_root  │
│ transactions │───┘   │ transactions │        │ transactions │
└──────────────┘       └──────────────┘        └──────────────┘
      hash ────────────────┘

これにより改ざんが後続へ伝播します。Block N の transaction を変更すると block N の hash が変わり、block N+1 の prev_hash が一致しなくなり、その後の block もすべて無効になります。

PoW chain で履歴を書き換えるには、受け入れられた十分な work を再構築する必要があります。ほかの chain では異なる finality と governance の前提を使います。Hash link は改ざんの検知に役立ちますが、それだけで finality を確立したり、あらゆる blockchain を経済的に変更不能にしたりするものではありません。

Merkle tree: なぜ必要なのか ​

Block 内の transaction をどう要約するかが問題です。すべてを単純に連結して hash にすることもできますが、その場合「この transaction が block に含まれるか」の確認に block 全体が必要です。

Merkle tree は、transaction を pair ごとに上位へ hash していく binary tree です。

text
                merkle_root
               /            \
         H(AB)                H(CD)
        /     \              /     \
     H(A)    H(B)         H(C)    H(D)
      |        |            |        |
     tx A     tx B         tx C     tx D

ここから得られる性質が Merkle proof です。Transaction C がこの block に含まれることを証明するには、block 全体ではなく H(D) と H(AB) があれば足ります。受信側は H(C) → H(CD) → merkle_root を計算し、比較します。

Proof size は transaction 数 N に対して log N で増えます。100万 transaction の block でも proof は約20 hash です。

実用上の意義: これにより light client が実現できます。Chain 全体を保持せずに、特定 transaction の包含を検証できます。既存システムに blockchain を統合するときの「full node を動かすか、light verification で十分か」という選択の基礎になります。

Consensus: 次の Block を誰が書くのか ​

Consensus algorithm は2つのことを決めます。誰が block を提案するか、そして競合時にどちらを正規 chain とするかです。

主な方式 ​

方式Proposer の選択実際に必要となるコスト例
PoW(Proof of Work)計算問題を最初に解いた node電力と hardwareBitcoin
PoS(Proof of Stake)Stake に比例する確率で選択Stake した資本 + 違反時の slashingEthereum
BFT 系定義した Byzantine fault 上限のもとで投票Membership/validator と quorum の前提Tendermint、Fabric 3.x SmartBFT
CFT permissioned ordering既知 replica が crash-fault-tolerant consensus を使う任意の Byzantine ordering behavior には耐えないFabric Raft

なぜコストが必要か ​

この問いは consensus を理解する鍵です。Block 提案が無料なら、無制限の候補を作って network を麻痺させられます。 匿名参加が許される環境では、identity だけでこの問題を防げません(Sybil attack: 1つの主体が多数の identity を作る)。

PoW は計算をコストにし、PoS は資本と slashing のリスクをコストにします。BFT 系は最初に参加者を制限することで問題を回避するため、consortium chain に適しています。

ここで Public と Private が分かれる ​

種類参加ConsensusThroughput主な用途
Public(permissionless)誰でもPoW/PoS低いPublic asset、相互運用
Private/consortium(permissioned)承認された memberBFT/Raft比較的高い企業間台帳、規制環境

Permissioned design では既知の member と明示的な governance を使い、実際の threat model に応じて CFT/BFT を選べます。金融 application は異なる制御のもとで permissioned/public network を使う場合があります。Membership も consensus の名称も、それだけで規制準拠を証明しません。

Finality: 運用上、最も重要な概念 ​

Finality は protocol の security 前提のもとで settlement が確定した状態を表します。 あらゆる攻撃、governance による介入、application-level の補償 transaction に対する無条件の保証ではありません。確率的な確信、経済的 finality、決定論的 consensus 保証を区別してください。

確率的 finality と絶対的 finality ​

種類意味例
確率的Block が積み重なるほど巻き戻し確率が指数関数的に減る。厳密にゼロにはならないBitcoin PoW
経済的Finalized checkpoint は stake/slashing の前提のもとで保護される。巻き戻しが物理的に不可能なわけではないEthereum PoS
即時Consensus round の終了時に確定BFT 系

なぜ運用上の問題になるのか ​

Node が返す data は、まだ final ではない可能性があります。

Blockchain node に「この transaction の結果を教えて」と問い合わせると、node は認識している最新 chain に基づいて回答します。その最新 block が後から再編成(reorg)されると、回答も変わります。

実際に起きる運用上の問題:

Pattern結果
最新 block をもとに deposit を確認して処理するすでに withdrawal を送った後に reorg で deposit が消える
Health check が「node が生きている」ことだけ確認するSync が遅れた node が古い data を返す
Load balancer が複数 node に分散するNode ごとに chain height が異なり、同じ問いに異なる回答が返る

したがって application 設計には「N confirmation の後に処理する」という規則(confirmation depth)が必要で、その値は chain の finality 特性によって決まります。 これは基盤だけでは解決できず、application との契約になります。

基盤側でできること:

  • Health check に sync 状態を含める: readiness を単なる「稼働中」ではなく「chain head から N block 以内」と定義する。
  • Node 間の chain-height 差を監視する: 差が大きくなったら load balancing から外す。
  • Reorg 発生を metric として公開し、application が対応できるようにする。

P2P Networking: 通常の Service と異なる理由 ​

Blockchain node は client-server ではなくpeer-to-peerで通信します。そのため Kubernetes の network model との間に摩擦が生じます。

Gossip protocol ​

新しい block や transaction が現れると、近隣 peer に伝播し、peer はさらに次の peer へ伝播させます。こうして全 node に情報が届きます。

特性:

  • 中央 broker がないため単一障害点がない。
  • 同じ data が複数経路から重複して届くため、重複分の帯域を消費する。
  • 伝播に時間がかかるため、各 node が認識する「最新」が異なる(前述の finality の問題につながる)。

Kubernetes 環境で生じる摩擦 ​

Blockchain P2P が必要とするものKubernetes の既定
安定した peer identity(node ID、address)Restart 時に Pod IP が変わる
Inbound connection の受け入れ(他 peer から接続される)既定では Pod は外部から直接到達できない
Peer list の永続化Pod 交換で state が失われる
固定 port の広告Service の port mapping

そのため、Blockchain node には安定した名前と順序が必要で、既定では StatefulSet + headless Service を使います。Inbound P2P の受け入れには追加の公開設計が必要です。詳細はRunning Blockchain Nodes on EKSを参照してください。

State と Storage: 再構築が難しい理由 ​

Blockchain node は2種類の data を保持します。

Data性質Size
Block historyAppend-only log。過去は不変継続的に増加
Current stateBalance、contract storage。Block の再生で導出可能増えるが history より小さい

重要な性質: State は history から再構築できますが、その処理に長い時間がかかります。

Genesis からすべての block を再生/検証する full sync にかかる時間は chain の経過年数に比例します。そのため別の sync method があります。

Method処理内容Trade-off
full syncGenesis からすべてを検証して再生確信度が最も高いが、最も遅い
snap/fast sync受け入れられた state root に照らして検証する proof 付きで state を取得。History の確認は client/mode による高速。Consensus/checkpoint と実装への trust 前提を明示する。任意の peer を無条件に信頼する方式ではない
checkpoint sync信頼できる checkpoint から開始最速だが checkpoint の提供元を信頼する
Snapshot restoreOperator が保持する data directory を復元高速だが snapshot の新しさと一貫性を管理する必要がある

運用上の結論: Pod を交換するときに state を失ってはいけません。失うと、node が service を提供できないまま長時間 sync することになります。そのため blockchain node に persistent volume は任意ではなく必須です。

Archive node: 別途判断が必要 ​

任意の過去時点における state を query できる node が archive node です。すべての中間 state を保持するため、通常の node よりはるかに多くの storage が必要です。

ここでは設計判断が必要です。 まず本当に archive 機能が必要か確認してください。多くの application が必要とするのは直近の state だけです。履歴 query が必要なら、indexing service や data warehouse で処理するほうが費用対効果に優れます。

Key Management: 失うと取り戻せない ​

Blockchain では、Identity と権限は private key にあります。 これは既存システムと決定的に異なる点です。

既存システムBlockchain
Password を忘れたら reset するKey を失うと asset/権限は永久に失われる
管理者が侵害された account を freeze できるProtocol が許さない限り、取り消す主体は存在しない
Audit log で事後追跡できるFinal になった署名済み transaction は巻き戻せない

そのため、backup 戦略の性質が異なります。 Chain data は network から再取得できるため、backup の価値は低いです。一方で key は必ず backup が必要であり、backup 自体が漏えいリスクになります。

これが blockchain 基盤で HSM、AWS KMS/CloudHSM が重要な理由です。特に Validator は、署名のために key を online にする必要がある一方、漏えいさせてはならないという相反する要件があります。この問題は金融サービスの視点で扱います。

運用特性: ここまでの内容から導かれること ​

これらの概念から導かれる運用特性をまとめます。

Blockchain の設計導かれる運用特性Kubernetes での意味
Full node による検証の複製Replica を増やしても base chain の write capacity 自体は増えない集約 RPC/read capacity と可用性は増やせる
State がローカルに蓄積するPod 交換の費用が非常に高いStatefulSet + persistent volume が必須。Node affinity も検討
Chain sync が遅れる「稼働中」と「応答可能」は異なるReadiness に sync 状態を含める
Finality が即時ではない最新 data は final data とは限らないConfirmation depth を application との契約にする
P2P gossipInbound 接続と安定した identity が必要Headless Service と追加の公開設計
Hard fork は定められた時点に rule が有効化される有効化前に互換 binary に upgradeCanary と rolling upgrade で fleet を事前準備
Key が権限を持つKey の喪失は永続的な喪失KMS/HSM を使い、key と data の backup を分ける
冗長検証が目的CPU と IOPS を継続的に消費するBurst 前提の resource 設定には不向き

この表がこの節の要点です。 ドキュメント2の各具体的な推奨事項は、ここから導かれます。

Hard Fork: Kubernetes の運用モデルと最も衝突するもの ​

後方互換性のない protocol 変更を hard fork と呼びます。Network 全体が指定 block height/時刻に新しい rule に切り替わり、切り替えない node は別の chain に残ります。

Kubernetes の一般的な考え方と衝突する点:

Kubernetes での慣習Hard fork の場合
Rolling update で徐々に移行期限までに必要な全 node が新 rule に対応すれば有効化前に可能
一部を Canary にする有効化前に fork 対応 binary をテストし、適切な testnet/mainnet 段階で挙動を比較
問題があれば rollbackRollback すると、その node は旧 chain に残る
Upgrade 時期は運用チームが決める日程は外部で定められる

実務上の推奨: Hard fork を通常の deployment ではなく、期限付きの migrationとして扱ってください。Client の release note を購読し、fork 日より十分前に upgrade し、まず testnet で検証します。

Ethereum は2025年に Pectra と Fusaka を実施し、より頻繁な upgrade を進めています。年2回の固定日程を前提にせず、公開された有効化日時と client release note を使って保守を計画してください。

まとめ ​

  • 採用する consensus と trust model を比較してください。etcd/Raft は crash fault tolerant です。Blockchain の一部は BFT を使い、permissioned Fabric は CFT Raft または SmartBFT を使えます。Blockchain という名称だけでは Byzantine fault tolerance を意味しません。
  • 多くの full-node design は検証を複製します。Light-client/permissioned model は異なり、RPC/read capacity は base-chain write と別に scale できます。
  • prev_hash の連鎖は改ざんを後続へ伝播させ、Merkle tree は log-N の包含 proof を可能にします(light client の基礎)。
  • Consensus に費用が必要なのは Sybil 対策のためです。参加者を制限する consortium はこの問題を避け、分散性との引き換えに高い throughput と finality を持つ BFT を使えます。
  • Finality は運用上、最も重要な概念です。 最新 data は final data ではありません。Readiness に sync 状態を含め、confirmation depth を application との契約にしてください。
  • State は再生できますが、再生に長い時間がかかるため persistent volume が必須です。
  • Hard fork は外部で調整された時点に有効になります。互換 client を事前に準備し、有効化後の rollback は別途評価してください。

次のRunning Blockchain Nodes on EKSでは、こうした特性を実際の設定に落とし込みます。

参考資料 ​

ドキュメントに質問する

Enter で送信、Shift+Enter で改行します。