📘 Academy原文準拠 | Phase 1 · Unit 2 · Lesson 2.3 Network Architecture & P2P Systems 内容に忠実な日本語版です。原文(英語)・図・動画は公式 Academy(外部リンク・別タブで開きます)を正本に。
ブロックチェーンが「データをどう並べるか」「どうやって合意するか」は、これまで見てきました。でも、世界じゅうの何千台ものコンピュータは、そもそもどうやってお互いを見つけて、ずっと同じ状態を保ち続けるのでしょう?
このレッスンでは、ばらばらのコンピュータをひとつのブロックチェーンネットワークにまとめあげるしくみ(ネットワーキング)を見ていきます。
ノードの種類(Node Types)
「ノードを動かす」と言うとき、実は役割のちがう何種類かのノードがあって、必要なものも大きくちがう、ということは案外知られていません。
フルノード(Full Nodes)
フルノードは、いちばん最初から今までのすべての取引とブロックをダウンロードして、ひとつ残らず検証します。データ量は数百ギガバイト規模。Bitcoin なら 2009 年からの全取引、という世界です。

これを動かすというのは、まじめなリソースを差し出すということ。たとえば 500GB(半テラバイト)級のストレージ、それなりの回線、そして常に電源が入ったコンピュータ。これは「いままで作られた金融記録の完全なコピーをずっと保管し続けます」と名乗り出て、さらに新しい取引が来るたびにルールに合っているか全部チェックするようなものです。
では誰が実際にやるのか? 最大限の安全がほしい愛好家、自分で全部を検証したい企業、まちがいが許されない取引所など。
フルノードを動かすとき、あなたは誰も信用しません。自分ですべてを検証します。
ライトノード / SPV(Light Nodes)
簡易支払い検証(Simplified Payment Verification, SPV)ノードは、ブロックヘッダ(各 80 バイトほど)だけをダウンロードし、マークル証明(Merkle proofs)を使って、自分に関係する取引だけを検証します。

スマホのウォレットが「半テラバイトも要らないのに動く」のは、まさにこのおかげです。あなたは「ネットワークの多数派は正直だ」という前提を信用しつつも、自分の取引は自分で検証できるわけです。前のレッスンで出てきたマークル木、覚えていますか? ここで効いてきます。あなたのスマホは、500GB のブロックチェーンを丸ごと落とさなくても、自分の Bitcoin 取引を確認できるのです。
アーカイブノード(Archive Nodes)
これはフルノードをさらに強化したものです。アーカイブノードは、フルノードなら捨て(prune し)てしまうかもしれない過去の状態(historical states)まで含めて、すべてを保存します。たとえば「2019 年 1 月 3 日のあるアドレスの残高はいくらだったか」を知りたければ、アーカイブノードが必要です。そのぶん巨大なストレージ(複数 TB)と強力なハードウェアを要します。
数テラバイト規模の世界です。Etherscan のようなブロックエクスプローラはこれを動かしています。オンラインで古い取引を調べるとき、あなたは誰かのアーカイブノードに問い合わせているわけです。
マイニング / バリデータノード(Mining/Validator Nodes)
これは新しいブロックを作るという、追加の責任を持ったフルノードです。
- PoW では、パズルを解いています。
- PoS では、トークンをステーク(預け入れ)し、ブロックを提案しています。
うまくできているのは、この階層構造がしなやかで壊れにくいシステムを作る点です。全員がすべてを保存する必要はないけれど、十分な数のノードがそれをやるので、ネットワークは安全でアクセスしやすいまま保たれます。あなたのスマホは、データセンターにならなくても参加できるのです。
P2P ネットワークのトポロジ(P2P Network Topology)
ウェブサイトを見るときは Amazon のサーバへ接続しますが、ブロックチェーンのノードは中央の名簿(central directory)がいっさい無いまま、お互いを見つけなければなりません。最初はここでつまずきがちです。「参加すべきネットワーク」がまだ無いのに、どうやってネットワークに参加するの?
ノード発見(Node Discovery)
ノードを初めて起動したとき、それはほかのノードを見つける必要があります。これはブートストラップ問題(bootstrap problem)と呼ばれます。新しい街へ引っ越したとき、友だちは友だちづてに増えていくけれど、まず最初の 1 人を見つけないと始まらない、という感じです。
これを解くために、いくつかの方法があります。

いったん接続すると、ノードはふつう8〜125 個の接続をほかのノードと保ち、情報が複数の経路を流れるメッシュネットワークを作ります。いくつかの接続が切れても、ほかが引き継ぎます。単一障害点(single point of failure)が無いのです。
メッセージの伝播(Message Propagation)
東京で発行された取引が、なぜ数秒でアイスランドのマイナーに届くのか? それはメッセージ伝播(message propagation)、ざっくり言えば組織化されたうわさ話の広がりによってです。
取引 / ブロックの伝播(Transaction/Block Propagation)
取引をブロードキャストすると、こう進みます。
- 自分が接続しているすべてのノードに、その取引を送る。
- 各ノードがそれを検証し、さらに自分のピアたちへ転送する。
- これが続いて、最終的にネットワーク全体が知ることになる。

帯域を節約するため、ノードはまず「自分はこの取引を持っているよ」と告知(inv メッセージ)してから本体を送ります。受け取った側は、まだ持っていない場合だけ本体を要求します。
これは驚くほど効率的で、中央のとりまとめ役がいないのに、ひとつの取引はふつう10 秒以内にネットワークの 90% に届きます。「ちゃんと成立する伝言ゲーム」のようなものです。
API と RPC:アプリはどうやってブロックチェーンと話すか
あなたのウォレットアプリは、Bitcoin のプロトコル全体を自前で実装しているわけではありません(さっき見たフルノードのように)。代わりに、API を通じてノードと話します。
JSON-RPC
ほとんどのブロックチェーンは JSON-RPC というインターフェースを公開していて、アプリは次のようなことができます。
- 残高を問い合わせる(Query balances)
- 取引を送信する(Submit transactions)
- ブロック情報を取得する(Get block information)
- イベントを監視する(Monitor events)

Web3 プロバイダ(Web3 Providers)
Infura・Alchemy・QuickNode のようなサービスは、あなたの代わりにノードを動かして API を公開してくれます。だから DApp は自分専用のノードを持たなくてもよくなります。便利ですが、いくらか中央集権を持ち込みます —— たとえば Infura が落ちると、多くの DApp が止まってしまいます。
トレードオフはこうです。自分でノードを動かすとリソースは要りますが、最大限の安全と分散性が得られます。プロバイダを使うと楽ですが、その相手を信用していることになります。
ネットワークへの攻撃と防御(Network Attacks and Defenses)
P2P ネットワークには、独特のむずかしさがあります。
エクリプス攻撃(Eclipse Attack)
攻撃者が、あなたのノードのまわりを悪意あるノードで取り囲み、あなたが受け取る情報を全部コントロールします。あなたは「ネットワークにつながっている」つもりでも、実は攻撃者が作った泡(バブル)の中にいる、という状態です。
- 防御:多様なピアに接続する。ノード発見の方法を複数組み合わせて使う。
シビル攻撃(Sybil Attack)
たくさんの偽ノードを作り出して、不釣り合いに大きな影響力を得ようとする攻撃です。
- 防御:Proof of Work / Proof of Stake を使う。これにより有効なブロックを作るのは高コストになるので、ノードの個数がいくら多くても影響力は買えません。
ネットワーク分断(Network Partition)
ネットワークをお互いに通信できない孤立したグループに分割する攻撃です。
- 防御:地理的な分散、複数の接続経路、そして衛星 / 無線のバックアップ回線。そう、人々は Bitcoin を衛星経由でブロードキャストしているのです(インターネットだけでは SF として足りなかったのか、暗号界隈はここまでやります)。
この P2P アーキテクチャこそが、ブロックチェーンを検閲耐性(censorship-resistant)のあるものにしています。
止めるべきサーバも、召喚状を突きつける会社も、単一障害点もありません。ノードたちがインターネット・メッシュネットワーク・電波など、なんらかの手段でお互いを見つけられるかぎり、ネットワークは生き延びます。
そして、これはブロックチェーンが遅くなりうる理由でもあります。すべてのデータは何千ものノードへ伝播し、それぞれ独立に検証され、合意に達しなければなりません。速さがほしいなら Venmo を。止められない存在でいたいならブロックチェーンを、というわけです。
このアーキテクチャは、効率よりも、しなやかさ(resilience)を優先しています。だからこうなります。
- 取引の確定には時間がかかる(伝播 + 合意のぶん)。
- ノードを動かすことはネットワークを助ける(冗長性と検証が増える)。
- 「中央集権ノードを使う”ブロックチェーン”」は、本当はブロックチェーンとは言えないことがある。
- ネットワークのアップグレードは難しい(何千もの独立した運用者を足並みそろえる必要がある)。
これは速さや効率の話ではありません。誰にも止められず・支配されず・壊されないシステムを作るための話です —— たとえ相手が本気でそれを望んでいたとしても。
開発者として押さえる点
- ノードは役割で分かれる:フル(全検証・全保存)/ライト・SPV(ヘッダ+マークル証明で自分の取引だけ検証)/アーカイブ(過去の状態まで保存)/マイニング・バリデータ(ブロック生成)。アプリの要件で「自前で持つか/問い合わせるか」を選ぶ。
- 中央名簿は無い。起動時のブートストラップ問題は、シードノード・DNS シード・ピア交換で解き、つねに 8〜125 接続のメッシュを保って単一障害点を作らない。
- 伝播は
inv告知 → 必要なら本体要求の二段階で帯域を節約。中央調整なしでも約 10 秒で 90% 到達。 - アプリはプロトコルを丸ごと実装せず、JSON-RPC でノードと話す(残高照会・取引送信・ブロック取得・イベント監視)。Web3 プロバイダ(Infura / Alchemy / QuickNode)は楽だが中央集権と信用前提を持ち込むトレードオフ。
- 攻撃と防御をセットで覚える:エクリプス→多様なピア・複数の発見手段、シビル→PoW/PoS で「有効ブロック作成を高コスト化」、分断→地理分散・複数経路・衛星/無線。
- 設計思想は効率より耐性。確定に時間がかかるのは仕様であり、検閲耐性と引き換え。
やさしい版・公式へ
- 公式:Academy Courses(外部リンク・別タブで開きます)(Phase 1 / Unit 2 / 2.3 Network Architecture & P2P Systems)
- ノード運用やネットワーク接続の実務は公式ドキュメントを:docs.midnight.network(外部リンク・別タブで開きます)
✍️ 白紙練習
答えを見る前に、いったん自分の頭と手から出してみよう。手で書くと「わかったつもり」がはがれます。
4種類のノード(フル・ライト/SPV・アーカイブ・マイニング/バリデータ)の役割のちがいを、自分の言葉で説明してください。
- フルノード:最初から今までのすべての取引とブロックをダウンロードし、ひとつ残らず検証する(数百GB規模)。誰も信用せず自分ですべてを検証する。
- ライトノード / SPV:ブロックヘッダ(各80バイトほど)だけをダウンロードし、マークル証明を使って自分に関係する取引だけを検証する。スマホのウォレット向き。
- アーカイブノード:フルノードが prune してしまう過去の状態まで含めてすべてを保存する(複数TB規模)。古い残高の照会などに必要。
- マイニング / バリデータノード:新しいブロックを作る責任を持ったフルノード。PoW はパズルを解き、PoS はトークンをステークしてブロックを提案する。
P2P ネットワークの設計が「効率よりも耐性(しなやかさ)を優先している」とはどういうことか、その結果として何が起こるかを説明してください。
中央のとりまとめ役を置かず、何千ものノードへデータを伝播し、それぞれが独立に検証して合意に達する設計。止めるべきサーバも単一障害点も無いため検閲耐性を持つ。その代わり、取引の確定には時間がかかり(伝播+合意のぶん)、ネットワークのアップグレードも難しい。速さがほしいなら Venmo を、止められない存在でいたいならブロックチェーンを、というトレードオフ。
ライトノード(SPV)がダウンロードするものは何で、自分の取引をどう検証しますか。
ブロックヘッダ(各80バイトほど)だけをダウンロードし、マークル証明(Merkle proofs)を使って、自分に関係する取引だけを検証します。
新しいノードが起動時に他のノードを見つけられない問題を何と呼び、解く方法を3つ挙げてください。
ブートストラップ問題(bootstrap problem)。解く方法は、ハードコードされたシードノード、DNS シード、ピア交換(Peer Exchange)の3つ。
帯域を節約するための取引伝播の二段階のしくみを説明してください。
まず「自分はこの取引を持っているよ」と告知(inv メッセージ)してから本体を送る。受け取った側は、まだ持っていない場合だけ本体を要求する。これにより中央調整なしでも約10秒でネットワークの90%に届く。
エクリプス攻撃とシビル攻撃は何が違い、それぞれの防御は何ですか。
- エクリプス攻撃:攻撃者があなたのノードのまわりを悪意あるノードで取り囲み、受け取る情報を全部コントロールする。防御は、多様なピアに接続し、ノード発見の方法を複数組み合わせて使うこと。
- シビル攻撃:たくさんの偽ノードを作り出して不釣り合いに大きな影響力を得ようとする。防御は PoW / PoS を使い、有効なブロックを作るのを高コストにすること。
Web3 プロバイダ(Infura / Alchemy / QuickNode)を使うトレードオフは何ですか。
あなたの代わりにノードを動かして API を公開してくれるので、DApp は自前のノードを持たなくてよく楽。ただし中央集権を持ち込み、その相手を信用していることになる。たとえば Infura が落ちると多くの DApp が止まってしまう。
つぎに読むページ
➡️ 原文準拠コースの入口へ戻る。このコースについて(次のレッスンは順次追加します)