ノードとは:ブロックチェーンノードの役割と種類

ノードとは:ブロックチェーンノードの役割と種類

ノード(ビットコインノード、またはブロックチェーンノードとも呼ばれる)とは、ビットコインネットワークに接続し、他のノード(ピア)とトランザクションやブロックをやり取りするコンピューターのことです。このネットワークはピアツーピア(P2P)型であり、コンピューター同士が直接つながり、互いにデータをやり取りします。コンセンサスルールに照らしてすべてのブロックを検証するのは、フルノードだけです。

ビットコインノードはピアツーピアネットワーク上で何をしているのか?

ビットコインノードは、コンピューター上でビットコインソフトウェアを実行し、そのコンピューターをピアと接続させ続けます。ビットコインは暗号資産であり、そのトランザクションとブロックは、ノード間のこうした接続を通じてやり取りされます。

ビットコインノードは、受け取ったものを他へ転送します。トランザクションとは、BTCをある所有者から別の所有者へ移動させる記録であり、ブロックとはひとまとめにされ、ブロックチェーンに追加されるトランザクションの集合です。ノードは新しいトランザクションや新しいブロックを受け取ると、それを自分のピアに転送することができます。

ビットコインノードは一部のピアとのみ接続しており、ネットワーク上のすべてのノードと接続しているわけではありません。トランザクションやブロックはピアからピアへと伝播していくため、同じ瞬間に2つのノードが異なる情報を保持していることもあり得ます。

ブロックチェーンとは、すべてのブロックを順序どおりに記録した共有台帳です。各ブロックにはヘッダーがあり、これはブロックの先頭にある要約データです。ヘッダーには直前のブロックのヘッダーのハッシュが含まれています。ハッシュとは、データから計算される固定長の「指紋」のようなものです。このチェーンは、あるトランザクションを変更するとそのブロックのハッシュが変わり、変更後のハッシュが次のブロックに記録されているものと一致しなくなるように設計されています。

ノードにはどのような種類があり、それぞれ何を検証するのか?

ノードは、どこまで検証を行うか、どれだけのデータを保持するかによって種類が異なります。

フルノードとは?

フルノードとは、すべてのブロックをダウンロードし、そのすべてのブロックと含まれるすべてのトランザクションをコンセンサスルールに照らして検証し、有効なものだけを転送するノードです。コンセンサスルールとは、すべてのフルノードが何を有効と判断するかを決めるために適用するルールであり、これによりフルノード同士の合意が保たれます。

フルノードは、自分自身が検証したブロックのみから成る独自のチェーンを保持し、あるブロックが有効かどうかについて他のノードの言葉を鵜呑みにすることはありません。ブロックチェーン全体を保存するフルノードは、アーカイブノードとも呼ばれます。

プルーニングノードとは?

プルーニングノードとは、検証を終えた古いブロックデータを削除するフルノードのことです。フルノードと同様にすべてのブロックとトランザクションを検証します。直近のブロックと、未使用トランザクション出力の集合(UTXOセット)は保持しますが、これは新しいトランザクションを検証する際にこの集合が必要になるためです。未使用トランザクション出力とは、ブロックチェーン上に記録されているものの、まだ使われていないBTCの金額のことです。

プルーニングノードは必要なディスク容量が少なく、また古いブロックをもはや保持していないため、他のノードに提供できるのは直近のブロックのみです。

ライトクライアント(ライトノード、またはSPVクライアント)とは?

ライトクライアントとは、すべてのブロックとトランザクションをダウンロードして検証することなく、ビットコインネットワークを利用するソフトウェアです。簡易支払い検証(SPV)を行うことから、SPVクライアント、シンクライアント、軽量クライアント、軽量ノード、ライトノードとも呼ばれます。ビットコインの開発者向けドキュメントでは、ライトクライアントはブロックやトランザクションを中継せず、それらをすべて検証するわけでもないため、ノードとは区別されています。

ライトクライアントは、各80バイトのブロックヘッダーと、支払いを検証するために必要なデータをダウンロードします。支払いを検証するために、ライトクライアントはフルノードに対してマークルブランチ(あるトランザクションをそれが含まれるブロックに結びつける、短いハッシュの連鎖)を要求します。このブランチとヘッダーがあれば、ライトクライアントはあるトランザクションがブロックに含まれていることを確認できます。

ライトクライアントは、そのトランザクションがすべてのルールに従っているかどうかまでは検証できないため、証明についてはフルノードに、そして「最も作業量の大きいチェーン」(再現するのに最も労力がかかるチェーン)に依拠します。この方法は、ネットワークの計算能力の大部分を誠実な参加者が握っている間は機能しますが、ネットワークを圧倒する攻撃者が現れれば、この仕組みを欺かれる可能性があります。

ノードの種類

検証する内容

保存する内容

依拠する対象

フルノード

コンセンサスルールに照らして、すべてのブロックとすべてのトランザクション

自身が検証したブロックのみから成る、独自のチェーン

ブロックが有効かどうかについて、他のノードの言葉には依拠しない

プルーニングノード

フルノードと同様に、すべてのブロックとすべてのトランザクション

直近のブロックとUTXOセット。古いブロックデータは削除される

ブロックが有効かどうかについて、他のノードの言葉には依拠しない

ライトクライアント(SPVクライアント)

トランザクションがブロックに含まれていること(すべてのルールではない)

ブロックヘッダーと、支払いを検証するために必要なデータ

証明についてはフルノード、そして最も作業量の大きいチェーン

フルノードはトランザクションとブロックに対して何を行うのか?

フルノードはピアからトランザクションとブロックを受け取り、それぞれについて通常、次のような処理を行います。

トランザクションが届くと、フルノードは次の手順を踏みます:

  1. 入力(インプット)を検証します。各入力は、まだ使われていない出力(アウトプット)を参照していなければならず、そのデータ(通常はデジタル署名)は、使用する出力の支出条件を満たしている必要があります。
  2. 金額を検証します。出力の合計が入力の合計を上回ってはならないためです。
  3. ノードは有効なトランザクションを、まだブロックに入っていないトランザクションを保持する待機領域である「メンプール」に保持し、ピアへ転送することがあります。実際にそうするかどうかは、ノードの中継ポリシー(追加のローカルルールの集合)によって決まります。検証に失敗したトランザクションは破棄されます。

架空の数値を用いた例で、金額の検証を見てみましょう。ここでは、XとYという2つのトランザクションがそれぞれ0.5 BTCの入力を1つ使用するとします。トランザクションXは受取人に0.3 BTCを送り、残りの0.1999 BTCは送金者へのお釣り(おつり)として戻します。これは入力のうち、支払いに使われなかった部分です。トランザクションYは受取人に0.3 BTCを送り、0.2001 BTCをお釣りとして戻します。

トランザクション(架空の例、実在しない)

入力合計(BTC)

出力合計(BTC)

この検証1件の結果

X

0.5

0.4999

出力は入力を上回っていません。差額の0.0001 BTCはトランザクション手数料です。ノードは他の検証に進みます。

Y

0.5

0.5001

出力が入力を0.0001 BTC上回っています。ノードはこのトランザクションを拒否します。

この例の金額は架空のものであり、手数料の推奨値ではありません。また、実際のフルノードは、各入力がまだ使われていないことや、各署名が有効であることも検証しますが、この例ではその部分は示していません。

ピアから届いたブロックは、他の検証とあわせて、次のような確認を受けます:

  1. プルーフ・オブ・ワークの検証。ブロックヘッダーのハッシュは、ネットワークが設定する「ターゲット」という数値以下でなければならず、プルーフ・オブ・ワークとは、マイナーがそのようなハッシュを見つけるために費やす計算上の労力のことです。
  2. ブロックの構造の検証。ヘッダー内のハッシュであるマークルルートは、そのブロックに含まれるトランザクションから計算されるものであり、それらのトランザクションと一致しなければなりません。また、ブロックのサイズを示す指標である「ウェイト」は、コンセンサスルールで定められた上限内に収まっている必要があります。
  3. トランザクションの検証。最初の1件を除くすべてのトランザクションは、上記のトランザクション検証に合格しなければなりません。最初のトランザクションはコインベーストランザクションと呼ばれ、検証すべき入力を持たず、ブロック報酬として新たに発行されるBTCであるブロック補助金に、そのブロックに含まれる取引手数料を加えた額を超えて請求することはできません。
  4. 有効なブロックはノードのチェーンに追加されます。ノードは通常、そのブロックに含まれるトランザクションを自身のメンプールから削除し、そのブロックをピアに告知します。

フルノードは、これらのルールのいずれかに違反するブロック、例えば補助金と手数料の合計を超える額を請求するコインベーストランザクションを含むブロックを拒否します。

ブロック補助金は、2024年4月以降適用されており、2026年10月時点で1ブロックあたり3.125 BTCで、半減期(ハルビング)のたびに半分になります。

なぜ各フルノードが自らルールを検証することが重要なのか?

フルノードは、すべてのブロックに対してコンセンサスルールを自ら適用します。あるブロックが有効であるかどうかを判断するのに、ピアやマイナー、あるいは企業の言葉に頼ることはありません。

フルノードは、その運営者がその変更を反映したソフトウェアを実行している場合にのみ、コンセンサスルールの変更を実施します。ルール変更の一種であるソフトフォークの後、アップグレードしていないノードは、ハッシュレート(マイナーがネットワークに提供する計算能力の合計)の大部分が新しいルールを適用している限り、アップグレード済みのノードと同じブロックを受け入れ続けますが、新しいルール自体は検証しません。もう一種の変更であるハードフォークの後は、アップグレードしていないノードは、新しいルールのもとで作られたブロックを検証できなくなることがあります。

フルノードは、最も作業量の大きいチェーンに従うよう設計されています。ハッシュレートの大部分を握る当事者は、直近のブロックを書き換えることができる可能性があります。しかしその場合でも、フルノードが適用するルールは依然として有効であるため、ルールが許す以上のBTCを生成するブロックや、有効な署名なしにBTCを使用するブロックは、検証を行うノードによって拒否されるよう設計されています。

ノードとマイナーはどう違うのか?

マイナーとノードは異なる役割を担っています。マイナーのブロックは、待機中のトランザクションから、マイナー自身、あるいはそのマイナーが所属するマイニングプールによって組み立てられ、マイナーはプルーフ・オブ・ワークに計算上の労力を費やします。ノードは完成したブロックとそこに含まれるトランザクションを検証するものであり、運営者がマイニングソフトウェアも併せて実行しない限り、ノードソフトウェア自体がマイニングを行うことはありません。

1人の運営者が、マイニングとノードの運用の両方を行うこともできます。プールを通さず単独でマイニングを行うソロマイナーは、通常、待機中のトランザクションを取得し、見つけたブロックをブロードキャストするために、フルノードのソフトウェアを利用します。

ノードを運用するとはどういうことか?

フルノードを運用するとは、Bitcoin Coreなどのノードソフトウェアを実行し、ピアに接続し、ブロックチェーンをダウンロードして検証し、新たに届くブロックとトランザクションを継続して検証し続けることを意味します。

新規のフルノードは、まず最初のブロック(ジェネシスブロックと呼ばれます)から最新のブロックまで、すべてをダウンロードして検証しなければなりません。この追いつき作業は「初期ブロックダウンロード」と呼ばれ、所要時間はコンピューターの性能や回線によって異なります。

フルノードには、ブロックデータを保存するためのディスク容量と、データをダウンロード・中継するための帯域幅が必要です。ソフトウェア自体のドキュメントには、必要なハードウェア、セットアップ手順、ポート番号が記載されていますが、これらはブロックチェーンの成長やソフトウェアの変化にあわせて変わっていきます。

BTCの送受信自体にノードの運用は必須ではありません。ウォレットはライトクライアントとして動作し、他の人々のノードに依拠することができるためです。

ノードが行わないこととは?

ビットコインノードは、他人のBTCを保有しているわけではありません。ブロックチェーンにはどの出力が存在するかが記録されているだけで、それらを使用できる秘密鍵はウォレットに保管されています。秘密鍵とは、その所有者が支出を承認できるようにする秘密の数値のことです。

あるトランザクションを受け入れたり中継したりするノードは、それを「確認済み」にするわけではありません。トランザクションはブロックに含まれて初めて確認済みとなり、ビットコインのトランザクションは、それ以降ブロックが追加されるたびに覆すことがより難しくなるよう設計されています。それまでの間、未確認のトランザクションは置き換えられたり、破棄されたりする可能性があります。

ビットコインでは、ブロック補助金と取引手数料は、そのブロックをチェーンに追加したマイナーに渡り、そのブロック内の最初のトランザクションがそれらを受け取ります。

2025年11月27日

GoMiningニュース

興味があるかもしれない: