用語集 / ノードとソフトウェア
プルーニングノード
- プルーニングノードとは?
- プルーニングノードはブロックチェーン全体を検証したうえで、不要になった古いブロックファイルを削除し、完全な検証を保ちながらアーカイブを手放します。
BIP-159で規定されています。
プルーニングは履歴をディスク容量と引き換えにしますが、セキュリティ上の犠牲はまったくありません。Bitcoin Coreはバージョン0.11.0(2015年7月12日リリース)からこれに対応しており、設定できる最小値では直近のブロックがおよそ550MiBディスク上に残ります。それでもジェネシスブロックから先のすべてのルールを検証します。各ブロックは使い終わった時点で捨てるだけです。
仕組み
プルーニングは検証の後に行われるもので、検証に代わるものでは決してありません。
プルーニングノードはチェーン全体を順番にダウンロードし、すべての署名、すべての手数料、すべてのルールをアーカイブノードとまったく同じように検証します。変わるのは後片付けです。あるブロックの効果が未使用出力のデータベースに取り込まれると、生のブロックファイルとその巻き戻し用ファイルが古いものから順にディスクから削除されます。検証済みの結果は残り、書類は残りません。
予算はMiB単位で選びます。550が下限で、それより小さい値は拒否されます。再ダウンロードせずにチェーンの再編成に対応できるだけの直近ブロックをソフトウェアが手元に必要とするためです。1を設定すると手動モードになり、自分でpruneblockchainコマンドを呼び出すまで何も削除されません。
縮まない数字が1つあります。未使用出力の集合です。このデータベースは台帳全体の現在の状態、つまり現時点で使用可能なすべてのコインであり、時間ではなく利用に応じて増えていきます。プルーニングはこれに触れないため、プルーニングノードでも設定値の550MiBではなく数ギガバイトを占有します。
機能しなくなることが4つあります。プルーニング深度より古いトランザクションについてウォレットを再スキャンできないため、古いシードフレーズをインポートすると最初から再同期することになります。トランザクションインデックスを構築できないため、ブロックエクスプローラーや他者のためのElectrumサーバーを運用することはできません。追いつこうとしているピアに過去のブロックを提供することはできませんが、BIP159により直近の288ブロック(約2日分)を提供することを告知でき、Bitcoin Coreはバージョン0.16.0からこれをシグナルしています。また、後から完全なアーカイブに戻すにはダウンロードをやり直すことになります。
使われる場面
プルーニングはほとんどすべてのプラグアンドプレイのノード機器で既定の設定であり、Raspberry Piがこの作業をそもそもこなせる理由でもあります。
算術が議論のすべてです。完全なアーカイブは2026年8月に759GBを超え、さらに増え続けていますが、プルーニングノードなら捨てるつもりのノートPCの内蔵ドライブに余裕をもって収まります。自分の支払いを検証し、自分のアドレスを他人のサーバーに漏らすのをやめたいという大多数の人にとって、要件はこれで全部です。ネットワークの履歴を提供することは、別の予算を要する別の趣味です。
落とし穴はウォレットです。先にプルーニングしてから古いウォレットをインポートすると、コインを含むブロックがすでにないため、ノードはコインの探索を拒否します。プルーニングを始める前にウォレットを設定するか、作成日がプルーニング深度より新しいディスクリプタを使用してください。
プルーニングノードvs軽量クライアント
プルーニングノードも軽量クライアントも小さなディスクに収まりますが、何かを検証したのは一方だけです。プルーニングノードは2009年以降のすべてのブロックを自ら検証しており、単に領収書を保管しないだけです。「この支払いは有効か」という問いへの答えは、自身の計算から導かれます。軽量クライアントは何も検証しておらずサーバーに尋ね、その答えを検証する手段がないまま受け入れます。よく似た占有容量は正反対の信頼モデルを隠しており、ストレージだけを理由に両者を選ぶ人は、間違った数字を比べているのです。