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

Re: RFC: リリースtarballに​ブロックチェーン1-74000を​同梱する?

zipslackの投稿(2010年11月28日08:53 UTC)

チェックポイントのことを言っているのだろうか? そうであれば、理解している限り、それらはダウンロードされたブロックの検証中にのみ適用される。blk0001.datとblkindex.datの内容はクライアントによってチェックされない。なぜならクライアントはデータがそれらのファイルに書き込まれる前にチェックするよう設計されているからだ。

それは正確ではない。-checkblocks(CheckBlock())はblk0001.dat / blkindex.datの内容に対してかなりの数のチェックを実行する。AcceptBlock()はコンテキストを追加してもう少し多くのことをするが、大した差ではない。ただ、今はこの点は置いておこう。

もっと重要な点として見落としているのは、検証の省略を提案している人は誰もいないということだ。Bitcoinのコードは信頼できないblk0001.datデータの検証とインデックス作成を十分にこなせる。blkindex.datが存在しない場合に合理的に動作するよう、いくつかの修正が必要なだけだ。

提案は単純に、バルクデータ転送用に設計されていないプロトコル(Bitcoin P2P)を使って大量の非圧縮データをダウンロードするのをやめよう、ということだ。

クライアントはblk0001.datの暗号学的な完全性を信頼できないソースから検証する能力を明らかに持っている。なぜなら、ネットワーク経由で受信したブロックに対してそれを行っており、blk0001.datには……信頼できないソースからネットワーク経由で受信したシリアライズされたブロックが含まれているからだ。

blk0001.datのファイル位置データをProcessBlock()に渡し、下流の呼び出し先AcceptBlock()でWriteToDisk()のストレージ呼び出しをスキップするだけで、それほど難しくなさそうだ。