12章ブルームフィルター

11章では、マークルブロックを検証する方法を学びました。フルノードはmerkleblockコマンドを使用して、対象のトランザクションに包含証明を提供します。では、フルノードにおいては、対象となるトランザクションをどのようにすればわかるのでしょうか?

軽量クライアントは、フルノードにそのアドレス(すなわちScriptPubKey)を伝えることができます。フルノードはこれらのアドレスに関連するトランザクションをチェックできますが、軽量クライアントのプライバシーを危険に晒すことにもなります。たとえば、軽量クライアントはフルノードに対して1,000 BTCを持っていることを明かしたくありません。プライバシーの漏洩はセキュリティの漏洩です。ビットコインでは通常、プライバシーを可能な限り漏洩させないことが望ましいと考えられています。

1つの解決策は、対象となるすべてのトランザクションのスーパーセットを作成するのに十分な情報を、軽量クライアントがフルノードに伝えることです。このスーパーセットを作成するには、ブルームフィルターと呼ばれるものを使用します。

12.1 ブルームフィルターとは

ブルームフィルターは、対象となり得るすべてのトランザクションを取り出すフィルターです。フルノードはブルームフィルターを介してトランザクションを取り扱い、通過するトランザクションに関し、merkleblockコマンドを送信します。

仮に、合計50個のトランザクションがあるとしましょう。その中に、軽量クライアントが対象とするトランザクションが1つあります。軽量クライアントは、5つのトランザクションのグループ内にトランザクションを“隠し”たいと考えています。これには、50個のトランザクションを10個の異なる入れ物にグループ化する機能が必要です。そして、フルノードは、いわば、その入れ物ごとにトランザクションを送ります。このグループ化は ...

Get プログラミング・ビットコイン ―ゼロからビットコインをプログラムする方法 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.