Pruned Node は、Bitcoin のルールを自分で検証する Full Node でありながら、古いブロックをすべて永久保存するわけではないノードです。履歴へのアクセスが限られる代わりに、ディスク容量を節約します。ビットコインが減るわけではなく、ウォレットのバックアップの代わりにもなりません。
アンナは支払いの有効性を他人のサーバー任せにせず、Bitcoin を使いたいと考えています。しかし自宅のパソコンには、確認済みトランザクションをまとめたブロックの全履歴を保存する余裕がありません。そこで役立つのが Pruned Node です。通常の Initial Block Download(ノードの初回同期)では履歴を順にダウンロードして検証し、処理済みの古いファイルを削除していきます。全履歴を同時にディスクに置く必要はありませんが、この同期では履歴をひととおり処理する必要があります。 [2] [5]
Pruning は、条件に従って古いデータを削除することです。Bitcoin Core は削除可能なブロックファイルと、それに対応する undo データを取り除きます。undo データはブロックによる状態の変化を元に戻すためのものです。作業資料の内容を更新中の記録に反映させた後、古い資料を片づけるところを想像してください。手元の資料はなくなっても、有効な支払いの結果は残ります。同じブロックをほかのノードが保存し続けることもできます。 [3] [7]
重要なのは、まだ使われていないトランザクションの出力を集めた UTXO set です。各出力には金額と、それを使うための条件が記録されています。ノードはこの集合を更新し、すでに使われた出力を再び使おうとする行為などを検出します。また、ブロック同士をつなぐ短い記録であるヘッダーを含む、ブロックの索引も保持します。UTXO set は口座一覧でも、過去の全支払いの明細でもありません。 [2] [6]
ネットワークが短時間だけ有効な枝を二つ追い、その後、累積作業量の多い別の枝を延ばすことがあります。この切り替えを再編成といいます。累積作業量は、有効なブロックを見つける難しさを表し、各ブロックのProof of Work(計算作業の証拠)に基づきます。ノードは一部のブロックの影響を取り消す必要があるため、最近のブロックと undo データを余裕をもって保存します。保存範囲を超えて戻る必要が生じれば、データの再取得や状態の再構築が必要になる場合があります。ディスク容量の設定が古い支払いの絶対的な不可逆性を決めるわけではありません。 [5] [7]
Bitcoin Core の自動 pruning の目標値はブロックファイルと undo ファイルを対象としており、ノードのデータフォルダー全体を指すわけではありません。データベース、ウォレット、その他のファイルにも容量が必要です。削除はファイル単位で行い、必要な保持範囲も守るため、目標値は厳密な上限ではありません。ディスクを用意するときは、この追加容量も見込んでください。履歴の保存上限とノード全体の容量は別です。 [1] [4] [7]
Full Node の Full は自分でルールを検証することを指し、全ブロックの永久保存を義務づけるものではありません。同じ検証設定なら、全履歴を保存するノードも古いブロックを削除するノードも、同じ無効なブロックを拒否します。Pruning 自体は検証を無効にしません。デジタル署名は、秘密の数値である秘密鍵を使って支払いの許可を証明し、鍵そのものは公開しません。たとえば assumevalid は特定の条件下で過去の署名検証の一部を省略できる設定ですが、別の仕組みです。どちらのノードにも適用され得るもので、ディスクが小さいために起きることではありません。 [5] [6]
アンナのノードは引き続き新しいトランザクションや手元にあるブロックを受け取り、検証し、中継できます。ただし、ファイルを削除した古いブロックを送ることはできません。そのため、新しく起動するノードにとって全履歴を保存するノードも重要です。Pruned Node はネットワークから切り離されておらず、他人の検証に頼るだけの軽量ウォレットでもありません。提供できる過去のデータが限られるのです。 [10]
後日、アンナは何年も前に使っていたウォレットを復元します。ウォレットは、ビットコインを受け取ったり送ったりするためのアプリや機器です。ソフトウェアは彼女のトランザクションを再発見するため、該当するブロックを調べ直します。これが rescan です。手元にブロックがなければ、鍵や descriptor を取り込むだけでは戻りません。descriptor はアドレスや支出条件の構成を記述したものです。復元には履歴の再取得が必要になる場合があります。古い支払いが画面に出ないことだけで、ビットコインを失ったとは判断できません。 [8] [9]
ノードにつなぐアプリケーションの要件も関係します。全履歴を検索するエクスプローラーと、新しい支払いを追うウォレットでは必要なデータが異なります。たとえば Bitcoin Core v29.0 では、保存済みブロック内のトランザクションを探す補助索引 txindex と pruning は併用できません。すべての索引が禁止されるわけではありません。モードを選ぶ前にアプリの要件を確認しましょう。後から上限を増やしても、削除済みのファイルは再作成されません。 [1]
全履歴を常に検索する必要はなくても、Bitcoin を自分で検証したいなら Pruned Node が役立ちます。ただし、通常の初回履歴ダウンロードが不要になるわけではありません。AssumeUTXO は別の仕組みでノードを早く利用可能にします。そして、ブロックも UTXO set も、支出を承認する秘密鍵のバックアップにはなりません。履歴の保存量にかかわらず、ウォレットのバックアップと検証済みの復元手順が必要です。 [2] [9]
理解を深めるには、この項目とあわせて次もお読みください Initial Block Download, AssumeUTXO, Block Propagation, vByte, Bitcoin, Bitcoin Core. 次の項目からも参照されています Initial Block Download, AssumeUTXO, Utreexo, Compact Block Filters.