ブロックヘッダーのみの高速起動クライアント

5 件のメッセージ GitHub ギャビン・アンドレセン, bardiharborow, ウラジミール・ファン・デル・ラーン 2010年12月20日 — 2014年3月30日

ビットコインの新規ユーザーは、bitcoin が全トランザクションとブロックをダウンロードしてインデックスを作成する間、1時間から 2時間(あるいはそれ以上)待たなければならない。

サトシはブロックヘッダーのみをダウンロードするコードをほぼ実装している。ブロックを生成しない限り、過去のトランザクションはすべて必要ではない。

この作業の初期段階については、blockheaders フィーチャーブランチを参照のこと。サトシからのメモ:

CBlockIndex にはブロックヘッダーのすべての情報が含まれているため、ヘッダーのみで動作させるには、通常通り CBlockIndex 構造体を維持するだけでよい。フルブロックはディスクに記録されないため、nFile/nBlockPos は null である。

途中で blk*.dat を削除せずにクライアントモードのオン/オフをスムーズに切り替えるコードはまだ実装されていない。主にやるべきことは、非クライアントモードの LoadBlockIndex がブロック位置が null のブロックインデックスエントリを無視するようにすることである。そうすれば、それらをフルブロックとして再ダウンロードする。クライアントモードへの切り戻しは問題なく、フルブロックが存在しても気にしない。

初期ブロックダウンロードが長くなりすぎる場合、新規ユーザーが素早く使い始められるよう、クライアントモードをオプションとして提供したい。クライアントモードのスムーズな解除機能があれば、後からクライアントモードをオフにしてフルブロックをダウンロードし、生成を開始することができる。

@gavinandresen、SPV クライアント用に別のサービスカテゴリ(NODE_SPV??)を追加する必要がある。そうすれば、他のピアからブロックの照会を受けずに動作できるようになる。

なぜだ、SPV クライアントがやっていることとどう違うのか? これに向けた次のステップについては #3884 を参照のこと。

@laanwj、私の理解では、現在のほとんどの SPV クライアントは、中央集権的なソース(Electrum)からヘッダーを取得するか、独自の P2P ネットワークを使用している。メインのビットコインネットワークを使っているものもあるかもしれないが、他のクライアントからブロックの照会を受けてそれを無視しなければならず、相手のピアを混乱させる可能性がある(かもしれない)。ヘッダーは要求できるがブロックやトランザクションは要求できないということを他のピアが把握できるほうがすっきりすると思う。とにかく、古い Issue を掘り返して申し訳ない。膨大な未処理の山を片付け始めようと思い、最も古いものから手をつけたのである。