08 / 736NODE

Full Node

完全検証ノード

Bitcoin の支払いとブロックを自分で確かめる仕組みです。検証内容、ウォレットとの接続、採掘や全ブロックの永久保存が不要な理由を説明します。

Full Node は Bitcoin の規則を自ら検証するプログラムです。コンピューター上で動き、ブロックやトランザクションを受信して、どれが有効な履歴に入るかを確認します。自分のノードなら、その確認をマイナーや他人のサーバーの説明に頼る必要がありません。ただしウォレットが恩恵を受けるには、そのノードを実際のデータ源として使う必要があります。

ウォレットに入金が表示されたとします。そのトランザクションが本当に Bitcoin の履歴に入り、規則を満たすと、どうして分かるのでしょうか。他人のサーバーに尋ねる方法と、自分のノードを使う方法があります。Full Node は後者を実現し、受け取ったデータの有効性を自ら調べます。接続先のコンピューターの多数決に判断を委ねるわけではありません。規則に違反するブロックが届けば拒否します。接続数は規則の確認に代わらず、自分のノードがあれば支払いの判断に使うデータを自ら確かめられます。 [1] [3]

ノードはブロックのつながり、ヘッダー、そしてブロックに必要な計算の証明である Proof of Work を確認します。トランザクションについては、参照する資金が存在するか、二重に使われていないか、利用条件を満たすかなどを調べます。条件はスクリプトという小さなプログラム上の規則に記されています。新しく作られるビットコインの量も確認します。更新される結果は UTXO set、未使用トランザクション出力の集合で、まだ利用できる具体的な資金を記録します。累積作業量は二つの有効な枝の選択に役立ちますが、無効なブロックを有効にはできません。 [1]

違います。Full Node はブロックとトランザクションを検証しますが、通常の検証だけでブロック報酬は得られません。マイナーは新しいブロックを提案し、条件を満たす結果が出るまで計算を繰り返します。この計算では、ブロックヘッダーのデジタル指紋であるハッシュを使います。二つの役割は連携できます。マイナーは、どの履歴を延長し、どのトランザクションを含めてよいか知る必要があるからです。しかし、すべてのノードが採掘する必要はありません。検証と、次のブロックを見つける競争は別の活動です。 [5] [1]

新しいノードは、まずネットワークの履歴に追いつく必要があります。ブロックを取得してデータを処理する初期同期です。高度な設定では、二つの高速化を区別することが大切です。Bitcoin Core の assumevalid は特定の条件下で過去のスクリプト検証を省略でき、assumevalid=0 でこの最適化を無効にできます。AssumeUTXO は、あるブロック時点の未使用資金を保存したスナップショットを読み込む機能です。その指紋をソースコード中の値と照合し、それ以前の履歴をバックグラウンドで検証します。現在の状態を使えても、過去の確認が完了したとは限りません。 [1] [2]

Full Node は古いブロックファイルをすべて永久保存する必要はありません。Pruning は処理後のファイルの一部を削除しつつ、現在の UTXO set と必要な新しいデータを残します。新しいブロックの検証は続けます。アーカイブノードは古いブロックを保存し、他のノードに提供したり再走査したりできます。ディスク節約は、簡易支払検証を行う SPV クライアントになることとは違います。SPV はすべてのトランザクションと状態を Full Node と同じようには検証しません。違いは保存ファイルの量だけでなく、何を確認するかにあります。 [3]

通常の同期では、プルーニングするノードも過去のブロックを取得し、処理してから順次削除します。Pruning は過去の検証を飛ばすスイッチではなく、保存容量を節約する機能です。先ほどの最適化は別の話です。assumevalid は特定条件下で古いスクリプト検証を省略でき、AssumeUTXO は履歴確認が続く間にスナップショットを利用できます。準備ができたか判断するときは、ディスク上のサイズだけでなく、同期の方式と実際の進み具合を確認してください。 [3] [2]

ウォレットにはトランザクションと承認の情報が必要です。他人のサーバーから得る場合、問い合わせから支払いについて何かを推測される可能性があります。自分の Full Node に接続すれば、外部サーバーにその問い合わせをせず、自分のノードが検証したデータを使えます。しかし、ノードをインストールして起動するだけでウォレットの接続先が切り替わるわけではありません。実際に対応し利用しているデータ源が重要です。また、自分のノードだけで匿名になるわけではなく、他のネットワーク情報やウォレットの使い方もプライバシーに関わります。 [3] [4]

ノードはあなたの秘密鍵がなくても動きます。鍵は支払いへの署名に使い、ノードはトランザクションとブロックが規則に従うか調べます。同じ機器が両方を担う必要はありません。どこかでノードが動いているかだけでなく、ウォレットがどこから情報を読み、どの経路でトランザクションを配信しているかも確認してください。独立した検証は安全な鍵のバックアップに代わらず、ネットワーク通信が明かすすべての情報を消すわけでもありません。Bitcoin データを自分で確認するという、手順の一部分を担います。 [3] [4]

ノードには二種類のインターフェースがあります。P2P 接続では他のノードとブロックやトランザクションを交換します。RPC はアプリケーションが命令を出すための窓口で、場合によってはウォレットも操作できます。データ交換用の受信 P2P ポートを開くことと、見知らぬ人に RPC を公開することは別です。Bitcoin Core は RPC を直接インターネットに公開しないよう勧めています。ローカルアクセスでは通常、.cookie ファイルの認証情報でアプリケーションの権限を確認します。ブラウザーの追跡用 cookie とは違います。 [4]

ノードのコマンドでは緑のアイコン以上のことを確認できます。getblockchaininfo で正しいネットワークかを見て、処理済みブロック数の blocks、既知のヘッダー数の headers、初期同期を示す initialblockdownload を確認します。スナップショット使用時には getchainstates で、現在の状態とバックグラウンドの履歴検証を区別できます。接続数だけでは完全な確認を証明できません。最後に、ノードが古いチェーン先端に取り残されておらず、ウォレットが本当にそのノードのデータを使っていることを確かめてください。それで初めて独立した検証がウォレット利用に生かされます。 [2] [1]

理解を深めるには、この項目とあわせて次もお読みください Bitcoin, Timechain / Blockchain, トランザクション, UTXO, Proof of Work. 次の項目からも参照されています Bitcoin, Satoshi Nakamoto, Timechain / Blockchain, Proof of Work.

DOC · 001Bitcoin Core v29.0: validation一次資料 DOC · 002Bitcoin Core v29.0: AssumeUTXO一次資料 DOC · 003Bitcoin.org: running a full node一次資料 DOC · 004Bitcoin Core v29.0: RPC security一次資料 DOC · 005Bitcoin whitepaper一次資料
改訂日: 一次資料を優先 · 投資助言ではありません