本文へスキップ
buybitcoinsmart

用語集 / ノードとソフトウェア

未承諾ブロックプッシュ

未承諾ブロックプッシュとは?
未承諾ブロックプッシュとは、時間に敏感なデータの往復を1回節約するために通常の告知と要求のやり取りを省いて、ピアがあなたが要求していないブロックを送りつけることです。

ほとんどのプロトコルでは招かれざる送信は無作法ですが、このプロトコルでは正しい行為です。ブロックが転送中に費やす往復のたびに、マイナーがすでに存在しない先端で計算する時間が生じるため、BIP152はこの近道を正式化しました。選ばれたピアは最大3つまで、新しいブロックを入手した瞬間にあなたへ送りつけることができます。あなたのノードはそれでも最初から検証し、送信者に対して何の義務も負いません。

仕組み

未承諾ブロックプッシュという名前の下には2つの異なるものが流れています。1つは古く非公式なもの、もう1つは仕様化されたものです。

古い形は、対応するgetdataを伴わずにblockメッセージが届くだけです。プロトコルはこれを禁じたことはなく、受信側は条件付きながら常にそのようなブロックを処理してきました。Bitcoin Coreは費用のかかる処理を行う前にヘッダーのプルーフ・オブ・ワークを確認し、完全に検証され最良のチェーンに接続するまでブロックを転送せず、知っているどのブロックにも接続しないブロックは解くべきパズルではなく破棄すべきものとして扱います。これらの規則があるのは、未承諾のデータが送信者には無料で受信者には高くつくためであり、これはこのプロトコルにおけるあらゆるサービス拒否攻撃の形です。

仕様化された形はBIP152の高帯域幅モードです。ノードはピアにsendcmpctメッセージを送り、その最初のバイトが1であることは、告知せずに送信することを意味します。そのピアはその後、新しいブロックを知った瞬間に、場合によっては検証を終える前にcmpctblockを送信できます。BIP152はそのようなピアの上限を3つと厳格に定め、Bitcoin Coreはまさにそれを強制し、最近のブロックを最初に届けたノードを選んで最大3つのノードのリストを保持します。3という数は妥協の産物です。遅いピア1つがあなたを妨げないだけの冗長性があり、すべての接続で同じブロックを受信しないだけの少なさです。

高帯域幅の告知は検証に先行しうるため、受信ノードはそれを事実ではなく主張として扱います。プルーフ・オブ・ワークは安価に偽造できない唯一の部分であるため最初に確認され、その他はすべて通常の経路に従います。プロトコルバージョン70015が存在するのはまさに、後で完全には検証されていなかったと判明するブロックを告知したことでピアに罰則を与えないことをノードが示せるようにするためです。

どこで見られるか

未承諾プッシュは、秒が金銭的価値を持つ場所に集中します。

マイニングプールは互いにおよびFIBREなどのリレーネットワークに直接接続を維持しており、物理法則が許す限り少ないやり取りで大陸間のブロックを移動するよう作られています。通常のマシンでは、getpeerinfo呼び出しがピアごとに2つのフラグ、bip152_hb_toとbip152_hb_fromを報告し、どのピアにブロックのプッシュを依頼したか、どのピアがあなたに同じことを依頼したかを示します。前者が3つ見えるのは正常であり、3が上限です。

未承諾ブロックプッシュvs標準ブロックリレー

標準ブロックリレーと未承諾プッシュは、バイトが移動することを誰が決めるかで異なります。標準リレーでは受信側が要求するため、自らの帯域を管理し、すでに持っているものは断れます。プッシュでは送信側が決めるため、往復を1回省く代わりに、外部の者にあなたのリソースを操作する手段を与えます。Bitcoinの答えはどちらかを選ぶことではありません。プッシュを許可し、自分で選んだ3つのピアに制限し、何かを費やす前にプルーフ・オブ・ワークを確認し、どれほど丁寧に届いたかに関係なくブロックを完全に検証するのです。

混同しやすい用語

よくある質問

ピアは未承諾ブロックプッシュによって、私のノードに悪いブロックを強制的に受け入れさせることはできますか?

いいえ。未承諾ブロックは要求されたブロックとまったく同じように検証されます。Bitcoin Coreは実際の処理を行う前にヘッダーのプルーフ・オブ・ワークを確認し、検証されて最良のチェーンに接続するまでブロックを転送せず、何にも接続しないものは破棄します。

何個のピアが私のノードにブロックをプッシュできますか?

3つです。BIP152は高帯域幅モードのピアを3つに制限し、Bitcoin Coreはその上限を強制し、最近のブロックを最も速く届けたピアを選びます。getpeerinfo呼び出しでは、bip152_hb_toとbip152_hb_fromのフラグを通じてそれらが表示されます。

関連用語

ノードとソフトウェアのその他の用語

このページを英語で読む