用語集 / プロトコルとアップグレード
Erlay
- Erlayとは?
- Erlayは、各ノードが受信したトランザクションを小さなスケッチで突き合わせる提案方式です。すべてのトランザクションハッシュをすべてのピアに送りつける代わりに用います。
BIP-330で規定されています。
トランザクションの通知は、ノードの帯域幅のうち最大の単一用途であり、ピアを1つ追加するたびにコストは増えます。Gleb NaumenkoとPieter Wuilleが設計をBIP330としてまとめましたが、これは現在もドラフトのままで、Bitcoin Coreのどのリリースでも有効になっていません。これは、自前のノードを運用するコストをどこまで下げられるかを決めるため、重要です。
仕組み
Erlayは、数えてみればすぐに明らかな冗長性に対処します。現在のノードは、受信したすべてのトランザクションをすべてのピアに伝えていますが、そのピアのほとんどはすでにそのトランザクションを知っています。
現在の方式はフラッディングです。新しいトランザクションはそれぞれ、タイプコードと32バイトの識別子を含むinvメッセージで通知されるため、1回の通知あたり1ピアあたり36バイトになります。Bitcoin Coreはデフォルトでトランザクションの中継用に8本のアウトバウンド接続を開き、インバウンドのピアを合計125まで受け入れます。そのため、接続の多いマシンは、いずれにせよ知ることになる情報のために、同じ短いメッセージを何十回も送受信します。無駄は接続数に比例し、ネットワークを分断しにくくする行動こそが割を食う形になっています。
Erlayはフラッディングの一部を残し、残りを集合の照合に置き換えます。ピアの各ペアは、相手とまだ交換していない通知を追跡します。定期的に一方がその集合のスケッチを要求します。スケッチは固定サイズの代数的な要約で、その長さはどちらの側が保持するトランザクションの数ではなく、予想される差分の数に依存します。2つのスケッチを組み合わせると、一方のピアにあってもう一方にない項目が正確に得られます。minisketchライブラリはこの構成と復号を実装しています。Bitcoin Coreはこのライブラリを長年ソースツリーに含めていますが、その周りのリレープロトコルは統合されないままでした。
スケッチのサイズを見誤っても致命的ではありません。差分が推定より大きかったために復号に失敗した場合、ピアは最初からやり直すのではなく、スケッチを拡張して再試行します。そのため、推定が不正確でもコストは帯域幅のわずかな追加にとどまり、完全な再同期にはなりません。
どこで見られるか
Erlayはまだ見られません。ノードのダッシュボードで探している人にとって、これが正直な答えです。
見えるのは、Erlayが狙う問題のほうです。自前のノードでgetnettotalsを呼び出すと、バイトカウンターは、チェーンの初期ダウンロードを除くすべてを中継トラフィックが占めていることを示します。従量制の接続を使う運営者はすでに、maxuploadtargetでアップロードを制限するか、維持するピアの数を減らすことで対応しており、どちらの選択も請求額を下げるためにネットワークを少し弱めています。
これがErlayが解消しようとしているトレードオフです。帯域幅が接続数に比例して増えなくなれば、ノードははるかに多くのピアを安全に維持でき、密に接続されたネットワークは分断やエクリプス攻撃がはるかに難しくなります。ブロックエクスプローラーを信頼するのではなく、自分のコインを検証することだけに関心がある人にとって、約束される効果は限定的ですが現実的です。より安い接続で同じ検証ができるということです。
Erlay vsコンパクトブロックリレー
Erlayはマイニングされる前のトランザクションに関わり、コンパクトブロックリレーはマイニングされた後のブロックに関わります。両者は異なるボトルネックに対応し、異なる時間尺度で評価されてきました。ブロックの伝播はレイテンシーの問題です。ブロックが転送中にある1秒は、マイナーがもはや存在しないチェーンの先端で計算を続ける1秒であり、その修正は2016年に出荷されました。トランザクションの通知は量の問題で、ミリ秒ではなく1か月あたりのギガバイトで測られるため、誰も急いでおらず、提案が何年もドラフトのままなのはそのためです。