ビットコインMempool:なぜフィルターがあるのか

ビットコインMempool:なぜフィルターがあるのか

Mempoolに関する以前の記事では、Mempoolの基本的な機能とBitcoinネットワークのさまざまな種類のユーザーがどのように使用したかについて推論するために、簡単な概念的なフレームワークを作成しました。この記事では、リレーポリシーとコンセンサスルールの違いと、デフォルトでビットコインノードがコンセンサス有効にもかかわらず、ある種のビットコイントランザクションを中継しない理由を検討します。

何よりもまず、特定の種類のコンセンサス有効なトランザクションを中継することを拒否するピアツーピアネットワークに関係なく、それらのトランザクションが鉱山労働者のメモリで見つけてブロックに含めるように選択される場合、それらはそのブロックを受け取ったときにノードによって受信およびダウンロードされます。コンセンサスのクラスをコンセンサスルールに基づいて無効にするために、このコンセンサスの変更を防ぐことはできません。

さまざまな理由でさまざまな種類のフィルターがあります。 3つの一般的なタイプのフィルターは、サービス拒否(DOS)からノード(したがってネットワーク)を保護するもの、将来のソフトフォークのアップグレードフックを保護するもの、およびビットコイナーが好まないが、それ以外の場合は個々のノードやネットワークに深刻な害を及ぼさないものを穏やかに落胆させるものです。

サービスベクターの拒否

ビットコインノードは、コンピューターで実行されているコンピュータープログラムです。これは、コンピューターで実行されているプログラミングのすべての技術的制約、ストレージ、メモリ、処理能力などの制限があることを意味します。これが、ブロックサイズの制限が導入および維持された理由のルートであり、検証コストを通常のデバイスに合理的に保つグローバルな制約を作成するためです。

このクラスのフィルターは、ブロックスペースがあっても作成できる個々のトランザクションを制限しても、ノードのリソースを消費できる個々のトランザクションを制限しても、特別に設計されています。

このようなフィルターの最も単純な例は、トランザクションが伝播するのに必要な最小限の充実したものであり、同じトランザクションの異なるバージョンが以前のバージョンを置き換えることができる場合、つまり最後のバージョンよりも高い料金を支払う場合にのみ指示するルール(RBF)ルールが指示されます。料金でトランザクションに署名したら、フックにいます。あなたがそれを2倍にしない限り、その取引を取得した鉱山労働者はそれをマイニングしてその料金を徴収することができます。最初に別のトランザクションでUTXOを使う以外に、その費用を支払うことから逃れる方法はありません(これも料金が必要です)。

この理由は、DOS保護です。支払いを逃れられない料金でフックに自分自身を置くことなく、ユーザーは単に単一のトランザクションの無限のバリエーションを作成し、ネットワーク上のすべてのノードのメモリをスパムし、その過程で帯域幅とメモリを食べることができます。彼らが永遠にこれを行うのを止めるものは何もありません。ネットワーク上のノードは完全にクラッシュしたり、帯域幅コストが非常に高いほど高くなり、ユーザーはそれらを買う余裕がありません。

リレーポリシーによってフィルタリングされたトランザクションの別の例は、トランザクションを検証するために高価です。検証するのに非常に高価なトランザクションを作成することが可能です。いくつかのブロックを作成して、通常の消費者ハードウェアで実行されているビットコインノードを1時間にわたって実行して確認することができます。これは、最大量の署名チェックを作成するように設計された大規模なカスタムスクリプトを作成し、これらのトランザクション以外のブロックを詰め込むことによって行われます。

このようなスクリプト構造は以前に構築されており、検証時間はさまざまな種類のマシンでテストされていますが、これらのスクリプトの正確な構造は、明らかな理由でそうした開発者によって公開されていません。これらは、文字通りネットワーク全体を失速させる可能性のあるトランザクションです。

DOS保護の最後の例は、ほこりの制限です。 satxosの値が粉塵の制限を下回っているUTXOSを作成するトランザクションは、そのUTXOを使用する料金が出力のSatoshi値よりも高くなるため、中継されません。これにより、それが不経済的であり、それが費やされる可能性は低いため、UTXOセットがこれらの出力を永久に保存する必要があることを意味します。これにより、ブロック検証をより計算的に集中的にする膨満感UTXOセットが作成される可能性があります。

将来のソフトフォーク

ビットコインプロトコルのすべての主要なアップグレードは、SoftForksで行われました。これは、Un-Upgradedノードがまだ有効であると受け入れるように、新しいスクリプト機能をプロトコルに追加できるようにするアップグレードメカニズムです。

これは、ビットコインスクリプトに「未定義の」オペコードが含まれているため、可能です。つまり、検証ルールが現在定義されていないため、それらの使用は自動的に有効と見なされます。人々が新しいルールを強制するためにノードをアップグレードすると、アップグレードされたルールはそのオプコードに対して新しいルールを適用し、古いルールは単にそれらの使用を受け入れます。鉱山労働者がノードのネットワークがすべてアップグレードする前に新しいルールに違反している鉱山取引を採掘しない限り、誰もが同じブロックチェーンにとどまり、すべてが逆方向に互換性があります。

これらの未定義のオペコードを使用したトランザクションは、リレーポリシーによってフィルタリングされます。これは、将来のビットコインプロトコルのアップグレード性を維持するために行われます。

ユーザーがこのような未定義のオペコードを使用してUTXOSを作成した場合、定義されたオペコードと組み合わせて、ユーザーがsoftforkでutxoがdapendableになるというソフトフォークで検証ルールが与えられた場合、誰もが支出できないようにします。スクリプトの構造は、ソフトフォーク中に適用される新しい検証ルールを満たすことができません。

これらを伝播して確認できるようにすることで、UTXOSを使用してUTXOSを使用して、将来の潜在的なソフトフォークアップグレードを将来の潜在的なソフトフォークのアップグレードを、一部のユーザーのコインを譲渡できないという哲学的ジレンマに変えることができます。

落胆

ネットワーク上のノードに実際の害を与えないが、ノードのクラッシュ、過剰なメモリまたはリソースを使用して、ネットワークユーザーの大部分は、ビットコインの主要な目的に望ましくない、または反対するトランザクションにはいくつかの種類があります。

このようなトランザクションの例は、ブロックチェーンに任意の情報を書くために、大規模なop_return出力、または証人分野を使用する碑文を使用するものです。これらは、ビットコインネットワークの主要なユースケースとは見なされていないため、落胆しています。

すべてが同じではありません

リレーポリシーにおけるこれらのさまざまなクラスのフィルターは、非常に明確に異なるものです。すべてのリレーフィルターが同じ理由で存在するわけではなく、それらのすべてが鉱夫がそれらを採掘する(または私のものではない)同じインセンティブを伴うわけではありません。それらのそれぞれは、正当な損害を与えたり、単に望ましくないさまざまなタイプのものからノードまたはブロックチェーンを保護するために特定の目的のために存在します。

すべてのフィルターは同じではなく、それらがフィルタリングしているものの違いは大きなものです。ネットワークをクラッシュさせる可能性のある問題のあるトランザクション(コンセンサスレベルで固定する必要がある)から、人々が望ましくないと感じる無害なトランザクションを思いとどまらせるだけです。

これらのことの違いを実現することが重要です。たとえば、マイナーは、ユーザーがそれを支払う場合、単に望ましくないトランザクションをマイニングするかもしれませんが、合理的なマイナーは、ネットワーク全体をクラッシュさせるトランザクションでいっぱいのブロックを構築し、マイニングすることはありません。それは彼らの投資を損なうでしょう。

この投稿Bitcoin Mempool:なぜ私たちがフィルターを持っているのかは、Bitcoin Magazineに最初に登場し、Shinobiによって書かれています。