ペイメント・パス

パス(経路)

Ripple Consensus Ledgerでは、パス(経路)は、支払いが送金者から受金者への途中で中間ステップを通って流れる道筋を定義します。パスは、送金者と受金者をオーダーブックを通して接続することによって、クロスボーダー決済を可能にします。パスはまた、債務の相殺の複雑な決済を可能にします。

Ripple Consensus Ledger上での単一の支払いトランザクションでは、必要な金額を届けるために、異なるソースからの流動性を組み合わせて、複数のパスを使うことができます。従って、トランザクションには、取ることが可能なパスの集合であるパスセットが含まれます。パスセット内のパスは同じ通貨で始まり、そして同じ通貨で終わらなければなりません。

XRPは任意のアドレスに直接送信できるため、XRP-to-XRPのトランザクションはパスを使用しません。

パス・ステップ

パスは送金者と受金者を接続するステップから構成されます。すべてのステップは次のいずれかです:

  • 同じ通貨を持つ他のアドレスを介したリップリング
  • オーダーブックでの通貨の両替

他のアドレスを介したリップリングは、負債を移動するプロセスです。典型的なケースでは、ある債権者に対する発行者の債務を軽減し、他方の債権者に対する債務を増大します。リップリングは、トラストラインによって接続されているすべてのアドレス間で発生します。リップリングの例については、NoRippleフラグについてを参照してください。

通貨両替ステップの場合、パス・ステップはどの通貨からどの通貨に両替するかを指定しますが、オーダーブック内のオファーの状態は記録しません。トランザクションの正式なオーダーは、レジャーが検証されるまで最終的なものではありません。そのため、トランザクションが検証されるまで、トランザクションがどのオファーに適用されるかを特定することはできません。(各トランザクションは、最後のレジャーで実行される時点で利用可能な最良のオファーを選択するため、根拠のある推測を行うことはできます。)

両タイプのステップで、各媒介アドレスはほぼ等しい値(同一通貨でトラストラインから別のトラストラインにリップルしたバランスであったり、媒介アドレスが事前に発注されたオーダーに従って通貨を両替する)を取得し、失います。場合によっては、送金手数料、トラストライン・クオリティ、または丸めによって、得られた金額と失われた金額が正確に一致しない場合があります。

Diagram of three example paths

技術的な詳細

経路探索

rippled APIには、経路探索に使用できる2つのメソッドがあります。ripple_path_find コマンドは、可能なパス・セットのワンタイム・ルックアップを行います。path_find コマンド(WebSocketのみ)は、レジャーがクローズしたり、サーバーがより良いパスを見つけるたびに、フォローアップ・レスポンスで検索を展開します。

signコマンドまたはsubmitコマンド(sign-and-submitモード)へのリクエストに build_path フィールドを含めることによって、署名するときに rippled が自動的にパスを書き込むようにすることができます。しかし、予期しない驚きを避けるために、別々に経路探索を行い、署名する前に結果を確認することをお勧めします。

注意: rippled は可能な限り安価なパスを検索するように設計されていますが、必ずしもそれらを見つけるとは限りません。信頼できないrippledインスタンスも、利益のためにこの動作を変更するように変更することができます。パスに従って支払いを実行する実際のコストは、提案とトランザクションの実行の間で変更される可能性があります。

パスの探索は、新しいレジャーが検証されるたびに数秒ごとにわずかに変化する非常に困難な問題です。そのため、rippled は絶対的な最良のパスを見つけるようには設計されていません。それでも、あなたはいくつかの可能なパスを見つけて、特定の金額の送金コストを見積もることはできます。

暗黙のステップ

慣例により、パスのいくつかのステップは、支払いトランザクションのフィールドによって暗示されます。具体的には、Account(送信者)、Destination(受信者)、Amount(通貨と届けられる金額)、SendMax(指定されている場合、通貨と送られる金額)です。暗黙のステップは次の通りです:

  • パスの最初のステップは、トランザクションの Account フィールドで定義されているトランザクションの送信者であることを常に暗示されます。
  • トランザクションがトランザクションの送信者ではない issuer を含む SendMax フィールドを含む場合、その発行者はパスの2番目のステップであることが暗示されます。
    • SendMax の issuer が送信アドレスである場合、そのパスは送信アドレスで始まり、指定された通貨でそのアドレスのトラストラインのいずれかを使用することができます。詳細は special values for SendMax and Amount を参照してください。
  • トランザクションの Amount フィールドにトランザクションの宛先と同じでない issuer が含まれている場合、その発行者はパスの最後から2番目のステップであることが暗示されます。
  • 最後に、パスの最後のステップは、トランザクションの Destination フィールドで定義されたトランザクションの受信者であることを常に暗示されます。

デフォルトパス

明示的に指定されたパスに加えて、トランザクションはデフォルトパスに従って実行することができます。デフォルトパスは、トランザクションの暗黙のステップを接続するための最もシンプルな方法です。

デフォルトパスは次のいずれかです:

  • トランザクションが(発行者に関係なく)1つの通貨のみを使用する場合、デフォルトパスは、その支払いが関連するアドレスを介してリップルすると仮定します。このパスは、それらのアドレスがトラストラインで接続されている場合にのみ有効です。
    • SendMax が省略されている場合、または SendMax の issuer が送信者である場合、デフォルトパスには送信者の Account から受信者の Amount の issuer までのトラストラインが必要です。
    • SendMax と Amount の issuer の値が異なり、送信者も受信者もいない場合、2つの発行者間のトラストラインを介してリップルする必要があるため、デフォルトパスはおそらく有用ではありません。Ripple(会社)は通常、発行者が互いに直接トラストすることを勧めません。
  • クロスカレンシー・トランザクションの場合、デフォルトパスは、送り元通貨(SendMaxフィールドで指定された通貨)と宛先通貨(Amountフィールドで指定された通貨)の間でオーダーブックを使用します。

次の図は、可能なすべてのデフォルトパスを列挙しています:

Diagram of default paths

あなたは、tfNoDirectRipple フラグを使用してデフォルトパスを無効にすることができます。この場合、トランザクションは、トランザクションに明示的に含まれるパスを使用してのみ実行できます。トレーダーは、裁定取引の機会を得るためにこのオプションを使うことができます。

パスの仕様

パス・セットは配列です。パス・セットの各メンバーは、個々のパスを表す別の配列です。パスの各メンバーは、ステップを指定するオブジェクトです。ステップには次のフィールドがあります:

フィールド 説明
account String – Address (Optional) もし存在する場合、このパス・ステップは指定されたアドレスを通じたリップリングを表します。
currency String – currency code (Optional) もし存在する場合、このパス・ステップはオーダーブックを通じた通貨の変更を表します。指定された通貨は新しい通貨を示します。
issuer String – Address (Optional) パス・ステップがオーダーブックを通じた通貨の変更を表している場合、このフィールドは新しい通貨の発行者を示します。このフィールドは、XRPに交換するときには存在しません。
type Integer DEPRECATED (Optional) 他のどのフィールドが存在するかどうかを示すインジケータ。
type_hex String DEPRECATED: (Optional) typeフィールドの16進表現。

パス・セットのバイナリ・シリアライゼーションに使用される type フィールドは、実際には単一の整数に対するビット単位の操作によって構成されます。ビットは次のように定義されます:

値 (Hex) 値 (Decimal) 説明
0x01 1 アドレスの変更(リップリング): account フィールドが存在します。
0x10 16 通貨の変更: currency フィールドが存在します。
0x20 32 発行者の変更: issuer フィールドが存在します。

注意:

本ドキュメントは、リップル社が公式サイトで公開している『Payment Paths』を私が個人的に翻訳したものです。注意して頂きたいのは、当方は現役のエンジニアではありませんし、Rippleについての技術的な探求心があるわけでもありません。誤訳などの間違いがあるかもしれないため、公式サイトの英語で書かれた原文もあわせて読むことをお勧めします。