最終更新:
編集

パス

XRP Ledgerでは、トークンの支払いが送金元から受取人に届くまでにたどる中間ステップの道筋をパスによって定義します。パスは、XRP Ledgerの分散型取引所の注文と自動マーケットメーカーを介して送金元と受取人を結び付けることで、クロスカレンシー支払いを可能にします。また、負債を相殺するような複雑な決済もパスにより可能になります。

XRP Ledgerでは1つのPaymentトランザクションは複数のパスを使用でき、複数のソースの流動性を組み合わせて必要な額を送金することができます。そのため、トランザクションには使用可能なパスをまとめた パスセット が含まれます。パスセットの中のパスでは開始時と終了時には同一通貨が使用される必要があります。

XRPは任意のアドレスに直接送金できるため、XRP間のトランザクションではパスは使用されません。

パスのステップ

パスは、支払いの送金元と受取人を結ぶステップで構成されています。すべてのステップは次のいずれかを行います。

  • 同一通貨の別のアドレスを通じたRippling
  • オーダーブックとAMMでの通貨の取引

別のアドレスを通じたRipplingは、負債を移動するプロセスです。一般的なケースでは、ある当事者に対するイシュアーの債務が削減され、別の当事者に対する債務が増加します。Ripplingは、トラストラインで結ばれているすべてのアドレスの間で発生させることができます。Ripplingのその他の例については、NoRippleフラグについてをご覧ください。

トークンとXRPの交換は、オーダーブックまたはAMMを介して行われます。トランザクションは、送金元と受取人の間で最も良い交換レートを提供するオーダーブックまたはAMMを見つけるために、パスのステップを使用します。パスのステップは、通貨の変換先を指定しますが、オーダーブックのOfferの状態を記録しません。トランザクションの順序は、レジャーが検証されるまで確定しないため、トランザクションが取引するOfferやAMMを確定することはできません。(ただし、各トランザクションは最終的なレジャーで最良の利用可能な交換レートを取得します。)

いずれのタイプのステップでも、中間アドレスでは取得する価値と失う価値はほぼ同等です。トラストラインから同じ通貨の別のトラストラインへ残高がripplingするか、または以前に出されたオーダーに基づいて通貨が交換されます。場合によっては、送金手数料、AMM手数料、トラストライン残高の増減、または数値の丸め方が原因で、取得する価値と失われる価値が厳密に同等ではないことがあります。

パスステップ - オーダーブックパスステップ - アカウント暗黙のパスステップ/リンク凡例XRPは2つのオーダーブックのブリッジが可能両当事者が信頼する発行者を通じてRipiplingするシンプルなパスアカウント:rvYAfWj... 受取人:ra5nK24...通貨:USD送金元:r9cZA1m...通貨:USDオーダーブックXRPUSDrMwjYe...受取人:ra5nK24...通貨:USDアカウント:rf1BiGe... アカウント:rMwjYe... オーダーブックUSDrvYAfWj...XRPアカウント:rvYAfWj... 送金元:r9cZA1m...通貨:USD同一通貨のパスは、ripplingまたはオーダーブックを通じて接続することができます。受取人:ra5nK24...通貨:USDアカウント:rMwjYe... オーダーブックUSDrvYAfWj...USDrMwjYe...アカウント:rvYAfWj... 送金元:r9cZA1m...通貨:USDアカウント:rf1BiGe...

技術詳細

Pathfinding

rippled APIではPathfindingに使用できるメソッドが2つあります。ripple_path_findメソッドは、1回限りのパスセットの検索を実行します。path_findメソッド(WebSocketのみ)は、レジャーが閉鎖するか、またはサーバがより適切なパスを検出するたびに、フォローアップレスポンスによって検索を拡大します。

署名時にrippledによりパスが自動的に入力されるようにするには、signメソッドまたはsubmitコマンド(署名と送信モード)へのリクエストにbuild_pathフィールドを指定します。ただし、トラブルを回避するために、署名前にPathfindingを個別に実行し、結果を確認することが推奨されます。

注意
rippledは可能な限り低コストのパスを検出するように設計されていますが、常にこのようなパスを検出できるわけではありません。信頼できないrippledインスタンスが改ざんされ、利益目的でこの動作が変更される可能性もあります。パスに沿った支払いの実行にかかる実際のコストは、送信時とトランザクション実行時で異なることがあります。

パスの検出は、新しいレジャーが検証されるたびに数秒ごとに変化する非常に難しい課題であるため、rippledは完全に最適なパスを検出するようには設計されていません。ただし、いくつかの有効なパスを検出し、特定額の送金コストを推定することができます。

暗黙のステップ

規約として、パスのステップのいくつかはPaymentトランザクションのフィールドにより黙示的に示されます。これらのフィールドは、Account(送金元)、Destination(受取人)、Amount(通貨と納入額)、SendMax(通貨と送金額(指定されている場合))です。暗黙のステップは次のとおりです。

  • パスの1番目のステップは、トランザクションのAccountフィールドに定義されるとおり、トランザクションの送信者であると常に黙示されます。
  • トランザクションに、そのトランザクションの送信者ではないissuerが指定されているSendMaxフィールドが含まれている場合、そのイシュアーはパスの2番目のパスとして黙示されます。
    • SendMaxissuerが送信側アドレス である 場合、パスはその送信側アドレスから始まり、そのアドレスの特定の通貨のトラストラインのいずれかを使用できます。詳細は、SendMaxおよびAmountの特殊な値をご覧ください。
  • トランザクションのAmountフィールドに、トランザクションのDestinationとは異なるissuerが指定されている場合、そのイシュアーはパスの最後から2番目のステップであると黙示されます。
  • 最後に、トランザクションのDestinationフィールドに定義されるとおり、パスの最終ステップはトランザクションの受信者であることが常に黙示されます。

デフォルトパス

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

デフォルトパスは次のいずれかになります。

  • トランザクションで(イシュアーに関係なく)1種類の通貨のみが使用される場合、デフォルトパスでは支払いが、関連するアドレスを通じてRipplingされると想定されます。このパスは、これらのアドレスがトラストラインで接続されている場合にのみ機能します。
    • SendMaxが省略されているか、またはSendMaxissuerが送金元の場合、デフォルトパスが機能するためには送金元Accountから宛先Amountissuerへのトラストラインが必要です。
    • SendMaxAmountに異なるissuer値が指定されており、そのいずれも送金元または受取人ではない場合、これらの2つのイシュアー間のトラストラインでRipplingが必要となるため、デフォルトパスは有用ではない可能性があります。一般にイシュアーが互いに直接信頼し合うことはお勧めしません。
  • クロスカレンシー支払いの場合、デフォルトパスは支払元通貨(SendMaxフィールドで指定)と宛先通貨(Amountフィールドで指定)の間でオーダーブックやAMMを使用します。

有効なすべてのデフォルトパスを次の図に示します。 クロスカレンシー:デフォルトのパスは自動的にオーダーブックを使用します。パスステップ - オーダーブックパスステップ - アカウントデフォルトのパスで補完トランザクションフィールドによって明示凡例オーダーブックFOO(issuer)BAR(issuer)Account(送金元)SendMax.issuerAmount.issuerDestination(受取人)同一通貨:1つの発行者を通じたRippling同一通貨:2つの発行者を通じたRippling(機能しない可能性)同一通貨:送金元から受取人に対する直接のトラストラインDestination(受取人)Amount.issuercurrency=SendMax.issuercurrencyAccount(送金元)Amount.issuer=Destination(受取人)Account(送金元)Amount.issuerDestination(受取人)Account(送金元)=Amount.issuerDestination(受取人)Account(送金元)Destination(受取人)Amount.issuerSendMax.issuerAccount(送金元)

デフォルトパスを無効にするにはtfNoDirectRippleフラグを使用します。このケースでは、トランザクションに明示的に指定されたパスを使用してトランザクションを実行することだけが可能です。トレーダーはこのオプションを使用して裁定取引を実行できます。

パスの仕様

パスセットは配列です。パスセットの各要素は、個々の パス を表す別の配列です。パスの各要素は、ステップを指定するオブジェクトです。ステップのフィールドを次に示します。

フィールド説明
account文字列 - アドレス(省略可) 指定されている場合、このパスステップは指定されたアドレスを通じたRipplingを表します。このステップにcurrencyフィールドまたはissuerフィールドが指定されている場合は、このフィールドを指定しないでください。
currency文字列 - 通貨コード(省略可) 指定されている場合、このパスステップはオーダーブックやAMMを通じた通貨の変換を表します。指定される通貨は新しい通貨を表します。このステップにaccountフィールドが指定されている場合は、このフィールドを指定しないでください。
issuer文字列 - アドレス(省略可) 指定されている場合、このパスステップは通貨の変換を表し、このアドレスは新しい通貨の発行者を定義します。XRP以外のcurrencyのステップでこのフィールドが省略されている場合、パスの直前のステップが発行者を定義します。currencyが省略され、このフィールドが指定されている場合、発行者が異なる同名の通貨間でオーダーブックやAMMを使用するパスステップを示します。currencyがXRPの場合は省略する必要があります。このステップにaccountフィールドが指定されている場合は、このフィールドを指定しないでください。
type整数廃止予定(省略可) 他にどのフィールドが指定されているかを示します。
type_hex文字列廃止予定: (省略可)typeフィールドの16進数表現です。

要約すると、以下のフィールドの組み合わせが有効であり、またオプションでtypetype_hexのいずれかまたは両方を指定できます。

  • accountのみ
  • currencyのみ
  • currencyissuercurrencyがXRP以外の場合)
  • issuerのみ

パスステップでaccountcurrencyissuerの各フィールドを上記以外の方法で指定することは無効です。

パスセットのバイナリシリアル化に使用されるtypeフィールドは、実際には1つの整数上でビット演算により作成されます。ビットの定義は次のとおりです。

値(16進数)値(10進数)説明
0x011アドレスの変更(Rippling):accountフィールドが指定されています。
0x1016通貨の変更:currencyフィールドが指定されています。
0x2032イシュアーの変更:issuerフィールドが指定されています。

関連項目