最終更新:
編集

不変性チェック

不変性チェックは、XRP Ledgerの安全機能です。これは、通常のトランザクション処理とは別に、すべての取引において特定の「不変量」が真であることを保証する一連のチェックで構成されています。

多くの安全機能がそうであるように、私たちは不変性チェックが実際に何もする必要がないことを望んでいます。しかし、XRP Ledger の不変量は XRP Ledger のトランザクション処理に対するハードリミットを定義しているため、それを理解することは有用であり、万が一不変量チェックに違反したためにトランザクションが失敗した場合に問題を認識するために有用です。

不変性はトリガーされるべきではありませんが、まだ発見されていない、あるいは作成されてもいないバグからXRP Ledgerの整合性を確保するものです。

なぜ存在するのか

  • XRP Ledgerのソースコードは複雑かつ膨大であり、コードが誤って実行される可能性が高いです。
  • トランザクションを誤って実行した場合のコストは高く、どのような基準でも許容されるものではありません。

具体的には、不正なトランザクションの実行により、無効または破損したデータが作成され、後にネットワーク上のサーバを「動作不可能」な状態にすることで一貫してクラッシュさせ、ネットワーク全体を停止させる可能性があります。

不正なトランザクションの処理は、XRP Ledgerの信頼という価値を損なうことになります。不変性チェックは、信頼性という機能を付加するため、XRP Ledger 全体に価値を提供します。

仕組み

不変性チェッカーは、各トランザクションの後にリアルタイムで自動的に実行される第2層のコードです。トランザクションの結果がレジャーにコミットされる前に、不変性チェッカーはそれらの変更が正しいかどうかを検証します。もしトランザクションの結果がXRP Ledgerの厳格なルールに沿わない場合、不変性チェッカーはそのトランザクションを拒否します。このように拒否されたトランザクションは結果コード tecINVARIANT_FAILED を持ち、何の効果もなくレジャーに含まれます。

トランザクションを tec クラスのコードでレジャーに含めるには、何らかの最小限の処理が必要です。この最小限の処理でも不変条件に沿わない場合、トランザクションは tefINVARIANT_FAILED というコードで失敗し、レジャーには一切含まれません。

有効な不変条件

XRP Ledgerは、各トランザクションについて、以下のすべての不変条件をチェックします。

[ソース]

[ソース]

[ソース]

[ソース]

[ソース]

[ソース]

[ソース]

[ソース]

[ソース]

トランザクション手数料チェック

  • 不変条件:
    • トランザクションコストの金額は決してマイナスになってはならず、またトランザクションで指定されたコストより大きくなってはいけません。

XRPは作成されません

アカウントルートが削除されていない

XRPの残高確認

  • 不変条件:
    • アカウントのXRP残高はXRPの形式である必要があり、0未満または1000億XRPを超えることはできません。

レジャーエントリ形式の一致

  • 不変条件:
    • 変更されたレジャーの項目は形式が一致し、追加された項目は有効なタイプである必要があります。

XRPのトラストラインはありません

不正なオファーでない

  • 不変条件:
    • オファーは負でない金額でなければならず、XRP同士であってはいけません。

0のエスクローでない

  • 不変条件:
    • エスクローエントリは、0XRP以上1000億XRP未満を保有している必要があります。

有効な新規アカウントルート

  • 不変条件:
    • 新しいアカウントルートは、支払いの結果でなければなりません。
    • 新しいアカウントルートは、正しい開始シーケンスを持たなければなりません。
    • 1つのトランザクションで複数の新しいアカウントを作成してはいけません。

関連項目