用語集 / マイニングとコンセンサス
マークルブロック
別名はMerkle blockです。
- マークルブロックとは?
- マークルブロックとは、ライトウォレットがフィルタリングされたブロックの内容を要求したときに返される応答で、80バイトのヘッダーに、どのトランザクションが一致したかを証明するのに必要な分だけのハッシュを加えたものです。
BIP-37で規定されています。
BIP37により、ウォレットはノードにフィルタを渡し、一致したものだけを、何も捏造されていないという証明付きで受け取れるようになりました。この設計はプライバシーと負荷の両面で失敗し、Bitcoin Coreはバージョン0.19.0でこの機能を既定で無効にしました。これは2019年11月にリリースされたものです。現代のライトウォレットを使っているなら、ほぼ確実にコンパクトブロックフィルタを使っています。
仕組み
**状況:**BIP37のブルームフィルタリング、およびそれを提供するmerkleblockメッセージは、プライバシーとサービス拒否を理由に、Bitcoin Core 0.19.0で既定で無効化されました。これは2019年11月のことです。BIP157とBIP158で規定されたコンパクトブロックフィルタがこれに取って代わり、Bitcoin Coreはバージョン0.21.0以降、2021年1月からピアにこれを提供できるようになりました。
マークルブロックは要約ではなく証明です。その構造は4つの部分からなります。ブロックヘッダー、ブロック内のトランザクションの総数、順序付けられたハッシュのリスト、そしてフラグのコンパクトなビットフィールドです。フラグはブロックのマークルツリーを深さ優先でたどる手順を記述し、受け取るウォレットに対して、枝へと下るのか、それともリストから次のハッシュを取り出してその下にあるすべての代用とするのかを伝えます。ウォレットはそのたどりを再現し、ルートに到達して、渡されたヘッダー内のルートと比較します。
この比較こそが要点です。敵対的なピアは、単にトランザクションに言及しないことで、あなたからそれを隠せます。フィルタを使うどのプロトコルもそれを防げません。しかし、受け取っていないトランザクションを捏造することはできません。捏造されたハッシュは、背後に本物のプルーフ・オブ・ワークを伴うヘッダーに一致するルートへと再構築できないからです。
要求は2段階のやり取りです。ウォレットはfilterloadメッセージでフィルタを送信し、次に通常の種別ではなくフィルタ済みブロックというインベントリ種別を使ってブロックを要求します。最初にマークルブロックが返り、続いて一致したトランザクションの全体が別々のメッセージとして返ります。2,000件のトランザクションを含み1件だけ一致するブロックでは、ウォレットのコストは1メガバイト以上ではなく、ヘッダー1つ、およそ十数個のハッシュ、トランザクション1件で済みます。
使われる場面
マークルブロックは、大半がすでに引退した世代のモバイルウォレットに属するものです。
BitcoinJライブラリがこれを広め、これに基づいて作られたAndroidウォレットは2010年代の大半をこの方式で同期して過ごしました。そうしたアプリの古いビルドを使っている人は、今もfilterloadメッセージを送り続け、応答してくれるピアが見つからずに静かに失敗している可能性があります。提供するには、運営者がpeerbloomfiltersを手作業で再び有効にしている必要があるからです。
これを置き換えたものは、要求の向きを逆にします。コンパクトブロックフィルタでは、ノードがブロックごとにその内容を記述した小さなフィルタを公開し、ウォレットはフィルタをダウンロードして、どのブロックが関心の対象かを端末上で判断し、それらを丸ごと取得します。ウォレットのアドレスに関する情報は何も端末の外に出ません。これがlndのNeutrinoバックエンドと、それに基づいて作られたモバイルのライトニングウォレットのモデルです。
プライバシーの失敗は率直に述べておく価値があります。これが切り替えの理由だからです。Arthur Gervais氏らが2014年に発表した研究は、ブルームフィルタを使うクライアントに提供するノードが、そのクライアントのアドレスの大半を復元できること、同じフィルタで2つのブロックを要求するとさらに多くが漏れることを示しました。ウォレットを隠すはずだった偽陽性の詰め物は、ウォレットを隠していませんでした。
マークルブロックvsブルームフィルタ
ブルームフィルタはウォレットが上へ送るものであり、マークルブロックは下へ返ってくるものです。フィルタは誰かが関心を持つアドレスとアウトポイントを確率的に、情報を欠いた形で記述したもので、提供するノード上に存在します。マークルブロックは特定の1つのブロックについての決定論的な証明で、応答の中に存在します。両者は一対として非推奨になりましたが、プライバシーの問題だったのはフィルタだけです。マークル証明自体は今も有効であり、だからこそコンパクトブロックフィルタは証明という考え方を残し、見知らぬ相手に自分の保有物を伝える部分を捨てたのです。