ビットコイン・インスティテュート

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

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

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

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

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

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

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

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

bardiharborow 2014年3月29日11:50 UTC

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

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

bardiharborow 2014年3月30日00:24 UTC

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