取引検閲の検知
XRP Ledgerは、高い検閲耐性を実現できるように設計されています。この設計をサポートするために、XRP Ledgerでは、取引検閲の自動検知機能がすべてのrippled
サーバで有効になっており、検閲によるネットワークへの影響の有無を、すべての参加者が確認できます。
rippled
サーバがネットワークと同期している間、検知機能は、rippled
サーバの観点から、コンセンサスの最終ラウンドで受け入れられ、最後に検証されたレジャーに取り込まれるトランザクションをすべて追跡します。検知機能では、数回のコンセンサスラウンド後、検証済みのレジャーに取り込まれていないトランザクションの重大度が高くなるというログメッセージを発行します。
仕組み
取引検閲検知機能の仕組みの概要を以下に示します。
検知機能は、
rippled
サーバの最初のコンセンサス提案のすべてのトランザクションをトラッカーに追加します。コンセンサスラウンドの終了時に、検知機能によって、検証済みのレジャーに取り込まれているトランザクションはすべて、トラッカーから削除されます。
検知機能は、15個のレジャーのトラッカーに残っているトランザクションについて、ログで警告メッセージを発行し、潜在的に検閲されたトランザクションとして表面化します。この時点でトラッカーにトランザクションが存在する場合は、15ラウンドのコンセンサスの後、検証済みのレジャーに取り込まれていないことを意味します。トランザクションが別の15個のレジャーのトラッカーに残っている場合は、検知機能によって、ログに別の警告メッセージが発行されます。
トランザクションがトラッカーに残っている限り、最大5つの警告メッセージに対して、検知機能は15個のレジャーごとにログに警告メッセージを発行し続けます。警告メッセージが5回発行されると、検知機能は、ログに最終的なエラーメッセージを発行し、警告およびエラーメッセージの発行を停止します。
rippled
サーバログにこれらのメッセージが表示される場合、他のサーバでトランザクションを取り込むことができない理由を調査する必要があります。まず、原因が悪意のある検閲よりも誤検知(無害なバグ)である可能性が高いと仮定します。
警告メッセージの例
トランザクションE08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7がレジャー18851530~18851545までの15個のレジャーのトラッカーに残っている場合に、取引検閲検知機能によって発行される警告メッセージの例を次に示します。
LedgerConsensus:WRN Potential Censorship: Eligible tx E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7, which we are tracking since ledger 18851530 has not been included as of ledger 18851545.
エラーメッセージの例
トランザクションE08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7がレジャー18851530~18851605までの75個のレジャー(15個のレジャーの5セット)のトラッカーに残っている場合に、取引検閲検知機能によって発行されるエラーメッセージの例を以下に示します。
LedgerConsensus:ERR Potential Censorship: Eligible tx E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7, which we are tracking since ledger 18851530 has not been included as of ledger 18851605.Additional warnings suppressed.
誤検知の可能性
シナリオによっては、取引検閲検知機能で誤検知が発生する場合があります。この場合、誤検知とは、15個以上のレジャーについてトラッカーに残っているトランザクションにフラグが立てられたことを意味しますが、これによる問題はありません。
検知機能で誤検知メッセージが発行される可能性のあるシナリオを次に示します。
rippled
サーバでは、ネットワークの他の部分とは異なるコードでビルドを実行しています。そのため、トランザクションはrippled
サーバ上で別の方法で適用され、結果として誤検知の原因になります。このような誤検知が発生することはほとんどありませんが、一般的に、正しいバージョンのrippled
を実行することが重要です。rippled
サーバはネットワークと同期されていないため、現時点で認識されていません。ネットワーク内の
rippled
サーバ(自身のサーバも含まれる可能性が高い)は、rippled
サーバがトランザクションをネットワーク内の他のrippled
サーバに一貫性なく中継するバグのクラスの影響を受けています。現在、この予期しない動作の原因となる既知のバグはありません。ただし、バグの疑いがある影響を確認した場合は、RippleのBug Bountyプログラムへのご報告をお願いいたします。
関連項目
- コンセプト:
- チュートリアル:
- リファレンス: