mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-04 11:55:50 +00:00
Merge commit '8a15e2e78439493c39d3133e095f8fc9d3b43d59' into ja-fix-request-response
This commit is contained in:
@@ -1,29 +1,29 @@
|
||||
---
|
||||
html: cross-currency-payments.html
|
||||
parent: payment-types.html
|
||||
blurb: 複数通貨間の支払いでは、パスとオーダーブックを通じて変換するのとは異なる通貨を自動的にに送金します。
|
||||
blurb: クロスカレンシー支払いでは、パスとオーダーブックを通じて変換するのとは異なる通貨を自動的にに送金します。
|
||||
labels:
|
||||
- 複数通貨間
|
||||
- クロスカレンシー
|
||||
- 支払い
|
||||
---
|
||||
# 複数通貨間の支払い
|
||||
# クロスカレンシー支払い
|
||||
|
||||
XRP Ledgerでは、1つ以上のトークン、XRP、またはその両方を交換して、複数通貨間で支払いを送金できます。[XRPによる直接支払](use-simple-xrp-payments.html)と同様に、このような支払いでは[Paymentトランザクションタイプ][Payment]が使用されます。XRP Ledgerでの複数通貨間の支払いは完全に非可分です。つまり、支払いを全額実行するか、またはまったく実行しないかのいずれかになります。
|
||||
XRP Ledgerでは、1つ以上のトークンとXRP、またはその両方を交換して、クロスカレンシー支払いができます。[XRPによる直接支払い](use-simple-xrp-payments.html)と同様に、このような支払いでは[Paymentトランザクションタイプ][Payment]が使用されます。XRP Ledgerでのクロスカレンシー支払いは完全にアトミックです。つまり、支払いを全額実行するか、またはまったく実行しないかのいずれかになります。
|
||||
|
||||
デフォルトでは、複数通貨間の支払いでは宛先に一定額が送金され、支払元が変動コストを負担します。複数通貨間の支払いが、[Partial Payments](partial-payments.html)で行われ、一定の送金限度内の変動額が宛先に送金される場合もあります。
|
||||
デフォルトでは、クロスカレンシー支払いでは宛先に一定額が送金され、支払元が変動コストを負担します。クロスカレンシー支払いが、[Partial Payments](partial-payments.html)で行われ、一定の送金限度内の変動額が宛先に送金される場合もあります。
|
||||
|
||||
|
||||
## 前提条件
|
||||
|
||||
- 定義上、複数通貨間支払いには2種類以上の通貨が関係します。つまり、関係する通貨のうち、少なくとも1種類以上がXRP以外のトークンである必要があります。
|
||||
- 定義上、クロスカレンシー支払いには2種類以上の通貨が関係します。つまり、関係する通貨のうち、少なくとも1種類以上がXRP以外のトークンである必要があります。
|
||||
- 通常は、[XRP Ledgerゲートウェイ](stablecoin-issuer.html)が発行した通貨を1種類以上使用することになります。このような通貨はXRP Ledger外部の資金を担保とし、ゲートウェイを通じて引き出すことができます。
|
||||
- 取引を行う当事者が、XRP Ledger内でのみ発行され、外部の担保がないデジタルトークンを送受信し、何らかの価値を持つ資産として取り扱うことを望む限り、このデジタルトークンを使用することもできます。
|
||||
- 送金元と受取人の間に1つ以上の[パス](paths.html)が確立しており、すべてのパスの総流動性が、支払いを促進するのに十分である必要があります。複数通貨間の支払いの場合、これは一般に通貨取引[オファー](offers.html)を消費することを意味します。
|
||||
- 送金元と受取人の間に1つ以上の[パス](paths.html)が確立しており、すべてのパスの総流動性が、支払いを促進するのに十分である必要があります。クロスカレンシー支払いの場合、これは一般に通貨取引[オファー](offers.html)を消費することを意味します。
|
||||
|
||||
|
||||
## オートブリッジング
|
||||
|
||||
2種類のトークンを自動的に交換する複数通貨間の支払いでは、XRPの使用により支払いコストを抑えられる場合には自動的にXRPが使用されます。この場合、オーダーブックを接続して流動性プールが拡大されます。たとえば、USDからMXNに送金する支払いの場合、USDからXRP、XRPからMXNへの交換にかかるコストが、USDからMXNへの直接交換にかかるコストよりも低い場合には、前者の交換が自動的に実行されます。
|
||||
2種類のトークンを自動的に交換するクロスカレンシー支払いでは、XRPの使用により支払いコストを抑えられる場合には自動的にXRPが使用されます。この場合、オーダーブックを接続して流動性プールが拡大されます。たとえば、USDからMXNに送金する支払いの場合、USDからXRP、XRPからMXNへの交換にかかるコストが、USDからMXNへの直接交換にかかるコストよりも低い場合には、前者の交換が自動的に実行されます。
|
||||
|
||||
詳細は、[オートブリッジング](autobridging.html)を参照してください。
|
||||
|
||||
|
||||
@@ -3,11 +3,11 @@ html: direct-xrp-payments.html
|
||||
parent: payment-types.html
|
||||
blurb: XRPによる直接支払いは、XRP Ledgerで資産を送金する最も簡単な方法です。
|
||||
---
|
||||
# XRPによる直接支払
|
||||
# XRPによる直接支払い
|
||||
|
||||
金融システムの基本は、 _価値の移動_ です。一言で言えば、決済です。XRP Ledgerでの最も簡単な支払いタイプは、XRP間の直接支払で、XRP Ledgerのあるアカウントから別のアカウントにXRPを直接移動します。
|
||||
金融システムの基本は、 _価値の移動_ です。一言で言えば、決済です。XRP Ledgerでの最も簡単な支払いタイプは、XRP間の直接支払いで、XRP Ledgerのあるアカウントから別のアカウントにXRPを直接移動します。
|
||||
|
||||
## XRP間の直接支払について
|
||||
## XRP間の直接支払いについて
|
||||
|
||||
一般的に、XRPは、XRP Ledgerのどのアドレスからでも、他のアドレスに直接送金できます。受信側のアドレスは _宛先アドレス_ 、送信側のアドレスは _支払元アドレス_ と呼ばれます。XRPを直接送金するには、送信者は[Paymentトランザクション][]を使用します。これは、次のように簡潔に表すことができます。
|
||||
|
||||
@@ -24,7 +24,7 @@ blurb: XRPによる直接支払いは、XRP Ledgerで資産を送金する最も
|
||||
|
||||
**注意:** [Paymentトランザクションタイプ][Payment]は、[通貨間の支払い](cross-currency-payments.html)や[Partial Payment](partial-payments.html)を含む、より特殊な支払いにも使用できます。Partial Paymentの場合、トランザクションで非常に少ない金額しか送金しなかった場合でも、多額のXRPが`Amount`に表示される可能性があります。誤った金額を顧客に入金しないようにする方法については、[Partial Paymentの悪用](partial-payments.html#partial-paymentの悪用)を参照してください。
|
||||
|
||||
XRP間の直接支払ではPartial Paymentは使用できませんが、Partial Paymentでは複数の送金元通貨から変換後にXRPを送金できます。
|
||||
XRP間の直接支払いではPartial Paymentは使用できませんが、Partial Paymentでは複数の送金元通貨から変換後にXRPを送金できます。
|
||||
|
||||
|
||||
## アカウントの資金提供
|
||||
@@ -41,13 +41,13 @@ XRP Ledgerでは、支払いを受け取ることができるアドレスは永
|
||||
送金元は、目的の受取人が最後に支払いを送信したときと同じアドレスを使用していると仮定しないことが重要です。必然的に、セキュリティの侵害が発生し、ユーザーまたは企業はアドレスを変更しなければならない場合があります。送金する前に、現在の受取アドレスを受取人に尋ねてください。これにより、漏えいした古いアドレスを制御している不正ユーザーに誤ってお金を送信することはありません。
|
||||
|
||||
|
||||
## XRPによる直接支払の処理方法
|
||||
## XRPによる直接支払いの処理方法
|
||||
|
||||
大まかに言えば、XRP Ledgerのトランザクション処理エンジンでは、XRPによる直接支払を次のように適用します。
|
||||
大まかに言えば、XRP Ledgerのトランザクション処理エンジンでは、XRPによる直接支払いを次のように適用します。
|
||||
|
||||
1. [Paymentトランザクション][]のパラメータを検証します。トランザクションがXRPを送信、送金するように構成されている場合、トランザクション処理エンジンはそのトランザクションをXRP間の直接支払として認識します。検証チェックは次のように行います。
|
||||
1. [Paymentトランザクション][]のパラメータを検証します。トランザクションがXRPを送信、送金するように構成されている場合、トランザクション処理エンジンはそのトランザクションをXRP間の直接支払いとして認識します。検証チェックは次のように行います。
|
||||
|
||||
- すべてのフィールドが正しいフォーマットであることを確認します。たとえば、XRPによる直接支払の場合、`Amount`フィールドは[XRPのdrop数][]でなければなりません。
|
||||
- すべてのフィールドが正しいフォーマットであることを確認します。たとえば、XRPによる直接支払いの場合、`Amount`フィールドは[XRPのdrop数][]でなければなりません。
|
||||
- 送信元アドレスがXRP Ledgerの資金供給された[アカウント](accounts.html)であることを確認します。
|
||||
- 指定された署名がすべて、送信元アドレスに対して有効であることを確認します。
|
||||
- 宛先アドレスと送金元アドレスが異なることを確認します。([宛先タグ](source-and-destination-tags.html)が異なる同一アドレスに送金するだけでは不十分です。)
|
||||
@@ -69,7 +69,7 @@ XRP Ledgerでは、支払いを受け取ることができるアドレスは永
|
||||
|
||||
## 他の支払いタイプとの比較
|
||||
|
||||
- **XRPによる直接支払**は、単一のトランザクションでXRPを送受信する唯一の方法です。この方法は、速度、シンプルさ、低コストの面でバランスが取れています。
|
||||
- **XRPによる直接支払い**は、単一のトランザクションでXRPを送受信する唯一の方法です。この方法は、速度、シンプルさ、低コストの面でバランスが取れています。
|
||||
- [通貨間の支払い](cross-currency-payments.html)でも[Payment][]トランザクションタイプを使用しますが、XRPとXRP以外の[トークン](tokens.html)を組み合わせて送金できます。ただし、XRP間の支払いは除きます。また、[Partial Payment](partial-payments.html)でも使用できます。通貨間の支払いは、XRPで指定されていない支払いや、[分散型取引所](decentralized-exchange.html)で裁定取引の機会を得るのに適しています。
|
||||
- [Checks](checks.html)すぐに送金せずに送金元に債務を設定してもらいます。受取人は有効期間内であればいつでも換金できますが、その金額は保証されません。Checksでは、XRPまたはトークンのいずれかを送金できます。Checksは、受取人に支払いを請求する自律性を与えるのに適しています。
|
||||
- [Escrow](escrow.html)では、特定の条件が満たされたときに、意図した受取人が要求できるXRPを確保します。XRPの金額は完全に保証されており、Escrowの有効期限が切れない限り、送金元が使用することはできません。Escrowは、巨額のスマートコントラクトに適しています。
|
||||
|
||||
@@ -4,11 +4,11 @@ parent: trust-lines-and-issuing.html
|
||||
blurb: トークンによる支払いは、接続されているユーザーのパスとオーダーブックを通す必要があります。
|
||||
labels:
|
||||
- 支払い
|
||||
- 複数通貨間
|
||||
- クロスカレンシー
|
||||
---
|
||||
# パス
|
||||
|
||||
XRP Ledgerでは、[トークン](tokens.html)の支払いが送金元から受取人に届くまでにたどる中間ステップの道筋をパスによって定義します。パスは、XRP Ledgerの[分散型取引所](decentralized-exchange.html)のオーダーを介して送金元と受取人を結び付けることで、[複数通貨間の支払い](cross-currency-payments.html)を可能にします。また、負債を相殺するような複雑な決済もパスにより可能になります。
|
||||
XRP Ledgerでは、[トークン](tokens.html)の支払いが送金元から受取人に届くまでにたどる中間ステップの道筋をパスによって定義します。パスは、XRP Ledgerの[分散型取引所](decentralized-exchange.html)のオーダーを介して送金元と受取人を結び付けることで、[クロスカレンシー支払い](cross-currency-payments.html)を可能にします。また、負債を相殺するような複雑な決済もパスにより可能になります。
|
||||
|
||||
XRP Ledgerでは1つのPaymentトランザクションは複数のパスを使用でき、複数のソースの流動性を組み合わせて必要な額を送金することができます。そのため、トランザクションには使用可能なパスをまとめた _パスセット_ が含まれます。パスセットの中のパスでは開始時と終了時には同一通貨が使用される必要があります。
|
||||
|
||||
@@ -64,7 +64,7 @@ XRPは任意のアドレスに直接送金できるため、[XRP間のトラン
|
||||
* トランザクションで(イシュアーに関係なく)1種類の通貨のみが使用される場合、デフォルトパスでは支払いが、関連するアドレスを通じてRipplingされると想定されます。このパスは、これらのアドレスがトラストラインで接続されている場合にのみ機能します。
|
||||
* `SendMax`が省略されているか、または`SendMax`の`issuer`が送金元の場合、デフォルトパスが機能するためには送金元`Account`から宛先`Amount`の`issuer`へのトラストラインが必要です。
|
||||
* `SendMax`と`Amount`に異なる`issuer`値が指定されており、そのいずれも送金元または受取人ではない場合、これらの2つのイシュアー間のトラストラインでRipplingが必要となるため、デフォルトパスは有用ではない可能性があります。一般にイシュアーが互いに直接信頼し合うことはお勧めしません。
|
||||
* 複数通貨間のトランザクションの場合、デフォルトパスは支払元通貨(`SendMax`フィールドで指定)と宛先通貨(`Amount`フィールドで指定)の間でオーダーブックを使用します。
|
||||
* クロスカレンシー支払いの場合、デフォルトパスは支払元通貨(`SendMax`フィールドで指定)と宛先通貨(`Amount`フィールドで指定)の間でオーダーブックを使用します。
|
||||
|
||||
有効なすべてのデフォルトパスを次の図に示します。
|
||||
[](img/paths-default_paths.ja.png)
|
||||
@@ -104,7 +104,7 @@ XRPは任意のアドレスに直接送金できるため、[XRP間のトラン
|
||||
## 関連項目
|
||||
|
||||
- **コンセプト:**
|
||||
- [複数通貨間の支払い](cross-currency-payments.html)
|
||||
- [クロスカレンシー支払い](cross-currency-payments.html)
|
||||
- [分散型取引所](decentralized-exchange.html)
|
||||
- [Partial Payments](partial-payments.html)
|
||||
- **リファレンス:**
|
||||
|
||||
@@ -4,7 +4,7 @@ parent: trust-lines-and-issuing.html
|
||||
blurb: Ripplingは、複数当事者間でのトークン残高の自動ネット決済です。
|
||||
labels:
|
||||
- トークン
|
||||
- 複数通貨間
|
||||
- クロスカレンシー
|
||||
---
|
||||
# Rippling
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ XRP以外のすべての資産は、XRP Ledgerでは **トークン** として
|
||||
|
||||
通常のトークンは代替可能です。つまり、同じトークンはすべて代替可能であり、区別がつきません。非代替トークン(NFT)も可能です。XRP Ledgerでのネイティブ対応の詳細については、[非代替トークン(NFT)](non-fungible-tokens.html)を参照してください。
|
||||
|
||||
トークンは[複数通貨間の支払い](cross-currency-payments.html)に使用でき、[分散型取引所(DEX)](decentralized-exchange.html)で取引することができます。
|
||||
トークンは[クロスカレンシー支払い](cross-currency-payments.html)に使用でき、[分散型取引所(DEX)](decentralized-exchange.html)で取引することができます。
|
||||
|
||||
トラストラインの残高は、どちら側から見るかによって、プラスまたはマイナスで表されます。マイナスの残高を持つ側は「発行者」と呼ばれ、そのトークンに関するいくつかの機能を設定することができます。発行者ではない別のアカウントにトークンを送ると、それらのトークンは発行者、場合によっては同じ通貨コードを使用している他のアカウントに「ripple」します。これは便利な場合もありますが、想定外の挙動を引き起こす可能性もあります。トラストラインに[No Ripple flag](rippling.html)を使用すると、トラストラインがripplingしないように設定することができます。
|
||||
|
||||
@@ -49,7 +49,7 @@ XRP Ledgerにおけるトークンは、[XRPと異なる性質](currency-formats
|
||||
|
||||
トークンは、精度が15桁の10進数(基数10)と指数を用いて、非常に大きな値(最大9999999999999999×10<sup>80</sup>)から、非常に小さな値(最小1.0×10<sup>-81</sup>まで)を表現することができます。
|
||||
|
||||
必要なトラストラインが設定されていれば、誰でも[Paymentトランザクション][]を送信することでトークンを発行することができます。トークンを発行者に送り返せば、トークンを「burn」することができます。また、発行者の設定により、[複数通貨間の支払い](cross-currency-payments.html)やトレードでトークンをさらに生み出せるケースもあります。
|
||||
必要なトラストラインが設定されていれば、誰でも[Paymentトランザクション][]を送信することでトークンを発行することができます。トークンを発行者に送り返せば、トークンを「burn」することができます。また、発行者の設定により、[クロスカレンシー支払い](cross-currency-payments.html)やトレードでトークンをさらに生み出せるケースもあります。
|
||||
|
||||
発行者は、ユーザがトークンを送金する際に自動で差し引かれる「送金手数料」(transfer-fees.html)を設定することができます。発行者は、自分のトークンを含む取引レートの[ティックサイズ](ticksize.html)を定義することもできます。発行者と一般アカウントのどちらも、トラストラインを[凍結](freezes.html)することができ、トラストライン内のトークンの使用方法を制限することができます。( XRPにはこのいずれも適用されません。)
|
||||
|
||||
@@ -59,7 +59,7 @@ XRP Ledgerにおけるトークンは、[XRPと異なる性質](currency-formats
|
||||
|
||||
- **コンセプト:**
|
||||
- [XRP?](what-is-xrp.html)
|
||||
- [複数通貨間の支払い](cross-currency-payments.html)
|
||||
- [クロスカレンシー支払い](cross-currency-payments.html)
|
||||
- [分散型取引所](decentralized-exchange.html)
|
||||
- **チュートリアル:**
|
||||
- [代替可能トークンの発行](issue-a-fungible-token.html)
|
||||
|
||||
@@ -38,7 +38,7 @@ XRPは発行者が存在しないため、送金手数料がかかることは
|
||||
|
||||
送金手数料は、各送金においてイシュアンスが発行アカウントを通じて当事者間を移動するたびに適用されます。さらに複雑なトランザクションでは、手数料が複数回適用されます。送金手数料は、送金の終わりの時点から逆方向に適用されるので、最終的には支払いの送金者がすべての手数料をカバーするのに十分な額を送金する必要があります。例:
|
||||
|
||||
{{ include_svg("img/transfer-fees-in-paths.ja.svg", "手数料が適用された複数通貨間の支払いの図") }}
|
||||
{{ include_svg("img/transfer-fees-in-paths.ja.svg", "手数料が適用されたクロスカレンシー支払いの図") }}
|
||||
|
||||
このシナリオでは、ACMEが発行したEURをSalazar(送金元)が保有しており、WayGateが発行した100 USDをRosa(受取人)に送金したいと思っています。FXMakerはオーダーブックで最も良いレート(1 USD.WayGate = 0.9 EUR.ACME)のオファーを提供する通貨取引業者です。もし手数料がなければ、Salazarは90 EURを送金すればRosaに100 USDを送金することができます。しかしながら、ACMEで1%の送金手数料が発生し、WayGateで0.2%の送金手数料が発生します。つまり、次のようになります。
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ labels:
|
||||
|
||||
- 2つのトランザクションでそれぞれ、同じ[オファー](offers.html)を[分散型取引所](decentralized-exchange.html)で完全に使用する場合、どちらか一方が先に成功すると、もう一方は失敗します。それらのトランザクションが適用される順序は変わる可能性があるため、成功したトランザクションが失敗したり、失敗したトランザクションが成功したりする可能性があります。オファーは部分的に実行できるため、成功する可能性もありますが、程度は異なります。
|
||||
|
||||
- [分散型取引所](decentralized-exchange.html)で[オファー](offers.html)を使用することで[複数通貨間の支払い](cross-currency-payments.html)は成功したが、別のトランザクションが同じオーダーブックでオファーを使用または作成した場合、複数通貨間の支払いは仮に実行されたときとは異なる為替レートで成功する場合があります。[Partial Payment](partial-payments.html)では、別の金額を送金することもできます。
|
||||
- [分散型取引所](decentralized-exchange.html)で[オファー](offers.html)を使用することで[クロスカレンシー支払い](cross-currency-payments.html)は成功したが、別のトランザクションが同じオーダーブックでオファーを使用または作成した場合、クロスカレンシー支払いは仮に実行されたときとは異なる為替レートで成功する場合があります。[Partial Payment](partial-payments.html)では、別の金額を送金することもできます。
|
||||
|
||||
- 送金元に十分な資金がないために一時的に失敗した[Paymentトランザクション][]は、必要な資金を送金する別の取引が正規の順序で先に行われることにより、後で成功する可能性があります。逆も同様です。一時的に成功したトランザクションは、必要な資金を送金するトランザクションが標準的な順序に入れられたものの先に来なかったために失敗する可能性があります。
|
||||
|
||||
|
||||
@@ -216,7 +216,7 @@ rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpnのアカウントの`ModifiedNode`エント
|
||||
|
||||
### 支払い
|
||||
|
||||
[Paymentトランザクション][]はXRP間の直接トランザクション、[複数通貨間の支払い](cross-currency-payments.html)、または[(XRP以外の)トークン](tokens.html)での直接トランザクションを表します。トークンからXRPへのトランザクション、またはXRPからトークンへのトランザクションなど、XRP間の直接トランザクション以外はすべて[partial payment](partial-payments.html)が可能です。
|
||||
[Paymentトランザクション][]はXRP間の直接トランザクション、[クロスカレンシー支払い](cross-currency-payments.html)、または[(XRP以外の)トークン](tokens.html)での直接トランザクションを表します。トークンからXRPへのトランザクション、またはXRPからトークンへのトランザクションなど、XRP間の直接トランザクション以外はすべて[partial payment](partial-payments.html)が可能です。
|
||||
|
||||
XRPの額は、`AccountRoot`オブジェクトの`Balance`フィールドで追跡されます。(XRPは[Escrowオブジェクト](escrow-object.html)および[PayChannelオブジェクト](paychannel.html)にも存在する可能性がありますが、Paymentトランザクションがそれらに影響を及ぼすことはありません。)
|
||||
|
||||
@@ -234,13 +234,13 @@ XRPの額は、`AccountRoot`オブジェクトの`Balance`フィールドで追
|
||||
|
||||
**ヒント:** 変更されたオブジェクトがメタデータに表示される順序は、支払いを処理するときにこれらのオブジェクトにアクセスした順序とは必ずしも一致しません。`AffectedNodes`メンバーを並べ替えて資金がレジャーまでたどったパスを再構成すると、支払いの実行の詳細を把握しやすくなります。
|
||||
|
||||
複数通貨間の支払いでは、[オファー](offer.html)の一部または全額を消費して、通貨コードとイシュアーが異なる通貨間で変更が行われます。トランザクションで`Offer`タイプの`DeletedNode`オブジェクトが示される場合は、全額が消費されたオファーを示しているか、または処理の時点で[期限切れになるか、または資金化されない](offers.html#オファーのライフサイクル)ことがわかったオファーを示している可能性があります。トランザクションで`Offer`タイプの`ModifiedNode`が示される場合は、オファーの一部が消費されたことを示します。
|
||||
クロスカレンシー支払いでは、[オファー](offer.html)の一部または全額を消費して、通貨コードとイシュアーが異なる通貨間で変更が行われます。トランザクションで`Offer`タイプの`DeletedNode`オブジェクトが示される場合は、全額が消費されたオファーを示しているか、または処理の時点で[期限切れになるか、または資金化されない](offers.html#オファーのライフサイクル)ことがわかったオファーを示している可能性があります。トランザクションで`Offer`タイプの`ModifiedNode`が示される場合は、オファーの一部が消費されたことを示します。
|
||||
|
||||
[トラストラインの`QualityIn`および`QualityOut`設定](trustset.html)は、トラストラインの一方の側におけるトークンの金額に影響を与える可能性があるため、残高の数値の変化は、送金元におけるその通貨の額と異なります。`delivered_amount`は、受取人による評価額でいくら送金されたのかを示します。
|
||||
|
||||
送金額と受取額が[トークンの精度](currency-formats.html#トークンの精度)の範囲外である場合は、一方のトランザクションで0に丸められる金額が、他方から引き出される可能性があります。そのため、両当事者が、お互いの残高に10<sup>16</sup>倍の差があるときに取引をすると、丸めることによって少額のトークンが「作成」または「消却」される可能性があります。(XRPは丸められないので、XRPではこの状況は発生しません。)
|
||||
|
||||
[パス](paths.html)の長さに応じて、複数通貨間の支払いのメタデータは _長く_ なります。例えば、[トランザクション8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B](https://xrpcharts.ripple.com/#/transactions/8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B)では、rHaaans...が発行した2.788 GCBを送金しXRPを支払いますが、2人のイシュアーのUSDを経由し、2つのアカウントにXRPを支払います。r9ZoLsJからのEURをETHと交換する資金供給されていないオファーを削除し、変更された合計17の異なるレジャーオブジェクトのブックキーピングを行います。
|
||||
[パス](paths.html)の長さに応じて、クロスカレンシー支払いのメタデータは _長く_ なります。例えば、[トランザクション8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B](https://xrpcharts.ripple.com/#/transactions/8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B)では、rHaaans...が発行した2.788 GCBを送金しXRPを支払いますが、2人のイシュアーのUSDを経由し、2つのアカウントにXRPを支払います。r9ZoLsJからのEURをETHと交換する資金供給されていないオファーを削除し、変更された合計17の異なるレジャーオブジェクトのブックキーピングを行います。
|
||||
|
||||
### オファー
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
html: private-network-with-docker.html
|
||||
name: Run a Private Network with Docker
|
||||
name: プライベートネットワークをDockerで構築する
|
||||
parent: use-stand-alone-mode.html
|
||||
blurb: DockerとDocker Composeを使って独自のXRPプライベートレジャーネットワークを構築する方法を紹介します。
|
||||
labels:
|
||||
|
||||
@@ -53,7 +53,7 @@ XRP Ledgerのアカウントとは、XRPの保有者と取引の送信者を意
|
||||
|
||||
## [パスおよびオーダーブックのメソッド](path-and-order-book-methods.html)
|
||||
|
||||
パスは、支払いが送信者から受信者に届くまでに中間ステップでたどる道筋を定義します。パスは、送信者と受信者をオーダーブックを介してつなぐことで、複数通貨間の支払いを可能にします。パスと他のオーダーブックに関しては、以下のメソッドを使用します。
|
||||
パスは、支払いが送信者から受信者に届くまでに中間ステップでたどる道筋を定義します。パスは、送信者と受信者をオーダーブックを介してつなぐことで、クロスカレンシー支払いを可能にします。パスと他のオーダーブックに関しては、以下のメソッドを使用します。
|
||||
|
||||
* **[`amm_info`](amm_info.html)** :not_enabled: - 自動マーケットメイカー(AMM)についての情報を取得します。
|
||||
* **[`book_offers`](book_offers.html)** - 2つの通貨を交換するオファーに関する情報を取得します。
|
||||
|
||||
@@ -4,7 +4,7 @@ parent: path-and-order-book-methods.html
|
||||
blurb: オーダーブックと呼ばれる、2つの通貨間のオファーのリストを取得します。
|
||||
labels:
|
||||
- 分散型取引所
|
||||
- 複数通貨間
|
||||
- クロスカレンシー
|
||||
---
|
||||
# book_offers
|
||||
[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/BookOffers.cpp "Source")
|
||||
|
||||
@@ -5,4 +5,4 @@ template: pagetype-category.html.jinja
|
||||
---
|
||||
# PathおよびOrderBookのメソッド
|
||||
|
||||
パスは、支払いが送信者から受信者に届くまでに中間ステップでたどる道筋を定義します。パスは、送信者と受信者をオーダーブックを介してつなぐことで、複数通貨間の支払いを可能にします。パスと他のオーダーブックに関しては、以下のメソッドを使用します。
|
||||
パスは、支払いが送信者から受信者に届くまでに中間ステップでたどる道筋を定義します。パスは、送信者と受信者をオーダーブックを介してつなぐことで、クロスカレンシー支払いを可能にします。パスと他のオーダーブックに関しては、以下のメソッドを使用します。
|
||||
|
||||
@@ -3,7 +3,7 @@ html: path_find.html
|
||||
parent: path-and-order-book-methods.html
|
||||
blurb: トランザクションが実行される可能性のあるパスを探索し、時間の経過とともにパスが変化する場合に更新を定期的に送信します。
|
||||
labels:
|
||||
- 複数通貨間
|
||||
- クロスカレンシー
|
||||
- トークン
|
||||
---
|
||||
# path_find
|
||||
|
||||
@@ -3,7 +3,7 @@ html: ripple_path_find.html
|
||||
parent: path-and-order-book-methods.html
|
||||
blurb: すぐに利用できるペイメントパスを含む1つのレスポンスを返します。
|
||||
labels:
|
||||
- 複数通貨間
|
||||
- クロスカレンシー
|
||||
- トークン
|
||||
---
|
||||
# ripple_path_find
|
||||
|
||||
@@ -182,7 +182,7 @@ curated_anchors:
|
||||
| [Hash128][] | 4 | 128 | いいえ | 128ビットの任意のバイナリ値。該当する唯一のフィールドは`EmailHash`です。これは、[Gravatar](https://www.gravatar.com/)を取得する目的でアカウント所有者のメールのMD-5ハッシュを保管するフィールドです。 |
|
||||
| [Hash160][] | 17 | 160 | いいえ | 160ビットの任意のバイナリ値。これにより通貨コードまたはイシュアーが定義されます。 |
|
||||
| [Hash256][] | 5 | 256 | いいえ | 256ビットの任意のバイナリ値。これは通常、トランザクション、レジャーバージョン、またはレジャーデータオブジェクトの「SHA-512ハーフ」ハッシュを表します。 |
|
||||
| [PathSet][] | 18 | 可変 | いいえ | [複数通貨間ペイメント](cross-currency-payments.html)の有効な[ペイメントパス](paths.html)のセット。 |
|
||||
| [PathSet][] | 18 | 可変 | いいえ | [クロスカレンシー支払い](cross-currency-payments.html)の有効な[ペイメントパス](paths.html)のセット。 |
|
||||
| [STArray][] | 15 | 可変 | いいえ | 可変数のメンバーからなる配列。フィールドによってタイプが異なる場合があります。この例として、[memos](transaction-common-fields.html#memosフィールド)や[マルチ署名](multi-signing.html)で使用される署名者のリストがあります。 |
|
||||
| [STIssue][] | 24 | 160 or 320 | いいえ | 数量を含まない、資産(XRPまたはトークン)を指定します。 |
|
||||
| [STObject][] | 14 | 可変 | いいえ | 1つ以上のネストされたフィールドを含むオブジェクト。 |
|
||||
@@ -325,7 +325,7 @@ XRP LedgerのハッシュタイプにはHash128、Hash160、Hash256がありま
|
||||
### PathSetフィールド
|
||||
[PathSet]: #pathsetフィールド
|
||||
|
||||
複数通貨間[Paymentトランザクション][]の`Paths`フィールドは、JSONで配列からなる配列として表される「PathSet」です。使用されるパスについての詳細は、[パス](paths.html)を参照してください。
|
||||
クロスカレンシーの[Paymentトランザクション][]の`Paths`フィールドは、JSONで配列からなる配列として表される「PathSet」です。使用されるパスについての詳細は、[パス](paths.html)を参照してください。
|
||||
|
||||
PathSetは、**1~6**の個別パスとして順序どおりにシリアル化されます[[ソース]](https://github.com/XRPLF/rippled/blob/4cff94f7a4a05302bdf1a248515379da99c5bcd4/src/ripple/app/tx/impl/Payment.h#L35-L36 "Source")。それぞれの完全なパスの後には、パスの後に続く内容を示すバイトが配置されます。
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ labels:
|
||||
| `temBAD_OFFER` | [OfferCreateトランザクション][]で無効なオファーが指定されています(XRPをXRP自身と取引するオファー、マイナスの額のオファーなど)。 |
|
||||
| `temBAD_PATH` | [Paymentトランザクション][]の1つ以上の[パス](paths.html)が誤って指定されています。例えば、XRPのイシュアーが含まれていたり、アカウントが異なる方法で指定されたりするなど。 |
|
||||
| `temBAD_PATH_LOOP` | [Paymentトランザクション][]で[パス](paths.html)の1つがループとしてマークされているため、限られた時間内に処理できません。 |
|
||||
| `temBAD_SEND_XRP_LIMIT` | [Paymentトランザクション][]で、XRP間の直接支払に[tfLimitQuality](payment.html#クオリティの制限)フラグが使用されましたが、XRP間の支払いでは通貨の取引は行われません。 |
|
||||
| `temBAD_SEND_XRP_MAX` | [Paymentトランザクション][]で、XRP間の直接支払に`SendMax`フィールドが指定されていますが、XRPの送金ではSendMaxは不要です。(SendMaxでXRPが有効となるのは、宛先への`Amount`がXRPではない場合のみです。) |
|
||||
| `temBAD_SEND_XRP_NO_DIRECT` | [Paymentトランザクション][]で、XRP間の直接支払に[tfNoDirectRipple](payment.html#paymentのフラグ)フラグが使用されていますが、XRP間の支払いは常に直接行われます。 |
|
||||
| `temBAD_SEND_XRP_PARTIAL` | [Paymentトランザクション][]で、XRP間の直接支払に [tfPartialPayment](partial-payments.html)フラグが使用されていますが、XRP間の直接支払では常に全額が送金されます。 |
|
||||
| `temBAD_SEND_XRP_LIMIT` | [Paymentトランザクション][]で、XRP間の直接支払いに[tfLimitQuality](payment.html#クオリティの制限)フラグが使用されましたが、XRP間の支払いでは通貨の取引は行われません。 |
|
||||
| `temBAD_SEND_XRP_MAX` | [Paymentトランザクション][]で、XRP間の直接支払いに`SendMax`フィールドが指定されていますが、XRPの送金ではSendMaxは不要です。(SendMaxでXRPが有効となるのは、宛先への`Amount`がXRPではない場合のみです。) |
|
||||
| `temBAD_SEND_XRP_NO_DIRECT` | [Paymentトランザクション][]で、XRP間の直接支払いに[tfNoDirectRipple](payment.html#paymentのフラグ)フラグが使用されていますが、XRP間の支払いは常に直接行われます。 |
|
||||
| `temBAD_SEND_XRP_PARTIAL` | [Paymentトランザクション][]で、XRP間の直接支払いに [tfPartialPayment](partial-payments.html)フラグが使用されていますが、XRP間の直接支払いでは常に全額が送金されます。 |
|
||||
| `temBAD_SEND_XRP_PATHS` | [Paymentトランザクション][]で、XRP送金時の`Paths`が指定されていますが、XRP間の支払いは常に直接行われます。 |
|
||||
| `temBAD_SEQUENCE` | トランザクションは、トランザクション自体の`Sequence`番号よりも大きいシーケンス番号を参照します。例えば、取り消したいオファーは、そのオファーを取り消すトランザクションよりも後に置く必要があります。 |
|
||||
| `temBAD_SIGNATURE` | このトランザクションを承認するための署名がないか、または署名の形式が適切ではありません。(適切な形式の署名がアカウントで承認されない場合は、[tecNO_PERMISSION](tec-codes.html)を参照してください。) |
|
||||
|
||||
@@ -5,7 +5,7 @@ blurb: アカウント間での価値の移動します。
|
||||
labels:
|
||||
- 支払い
|
||||
- XRP
|
||||
- 複数通貨間
|
||||
- クロスカレンシー
|
||||
- トークン
|
||||
---
|
||||
# Payment
|
||||
@@ -46,7 +46,7 @@ Paymentは、[アカウントを作成](#アカウントの作成)する唯一
|
||||
| DestinationTag | 数値 | UInt32 | _(省略可)_ 宛先(支払先となる、ホスティングされている受取人)への支払い理由を明確にするための任意のタグ。 |
|
||||
| InvoiceID | 文字列 | Hash256 | _(省略可)_ この支払いの具体的な理由または識別子を表現する任意の256ビットハッシュ。 |
|
||||
| Paths | パス配列の配列 | PathSet | (省略可。自動入力可能)このトランザクションに使用される[支払いパス](paths.html)の配列。XRP間のトランザクションでは省略する必要があります。 |
|
||||
| SendMax | [通貨額][] | Amount | _(省略可)_ [送金手数料](transfer-fees.html)、為替レート、[スリッページ](http://en.wikipedia.org/wiki/Slippage_%28finance%29)を含め、このトランザクションに関して支払い元通貨での負担を許容する上限額。[トランザクションの送信コストとして消却されるXRP](transaction-cost.html)は含めないでください。XRP以外の金額の場合、入れ子フィールドの名前では、アルファベットの小文字のみ使用してください。複数通貨間の支払いまたは複数の発行を伴う支払いについては、このフィールドを入力する必要があります。XRP間の支払いでは省略する必要があります。 |
|
||||
| SendMax | [通貨額][] | Amount | _(省略可)_ [送金手数料](transfer-fees.html)、為替レート、[スリッページ](http://en.wikipedia.org/wiki/Slippage_%28finance%29)を含め、このトランザクションに関して支払い元通貨での負担を許容する上限額。[トランザクションの送信コストとして消却されるXRP](transaction-cost.html)は含めないでください。XRP以外の金額の場合、入れ子フィールドの名前では、アルファベットの小文字のみ使用してください。クロスカレンシー支払いまたは複数のトークンを伴う支払いについては、このフィールドを入力する必要があります。XRP間の支払いでは省略する必要があります。 |
|
||||
| DeliverMin | [通貨額][] | Amount | _(省略可)_ このトランザクションで送金する、宛先通貨での最少金額。[Partial Payments](partial-payments.html)の場合のみ有効になります。XRP以外の金額の場合、入れ子フィールドの名前では、アルファベットの小文字のみ使用してください。 |
|
||||
|
||||
## Paymentの種類
|
||||
|
||||
@@ -16,6 +16,8 @@ labels:
|
||||
|
||||
| 名前 | 登場 | ステータス |
|
||||
|:----------------------------------|:-----------|:------------------------------------|
|
||||
| [DID][] | v2.0.0 | [投票中: 2024-01-09](https://xrpl.org/blog/2024/rippled-2.0.0.html "BADGE_80d0e0") |
|
||||
| [XChainBridge][] | v2.0.0 | [投票中: 2024-01-09](https://xrpl.org/blog/2024/rippled-2.0.0.html "BADGE_80d0e0") |
|
||||
| [AMM][] | v1.12.0 | [投票中: 2023-09-06](https://xrpl.org/blog/2023/rippled-1.12.0.html "BADGE_80d0e0") |
|
||||
| [Clawback][] | v1.12.0 | [投票中: 2023-09-06](https://xrpl.org/blog/2023/rippled-1.12.0.html "BADGE_80d0e0") |
|
||||
| [XRPFees][] | v1.10.0 | [投票中: 2023-03-14](https://xrpl.org/blog/2023/rippled-1.10.0.html "BADGE_80d0e0") |
|
||||
@@ -82,7 +84,6 @@ labels:
|
||||
| 名前 | ステータス | 追加情報 |
|
||||
|:----------------------------------|:------------------------------------------|:-------------------------------|
|
||||
| [Hooks][] | [開発中: 未定]( "BADGE_LIGHTGREY") | [XRPL Hooks](https://hooks.xrpl.org/) |
|
||||
| [XChainBridge][] | [開発中: 未定]( "BADGE_LIGHTGREY") | [XLS-38d](https://github.com/XRPLF/XRPL-Standards/blob/master/XLS-38d-XChainBridge/README.md) [ドキュメント](https://opensource.ripple.com/docs/xls-38d-cross-chain-bridge/cross-chain-bridges/) |
|
||||
| [OwnerPaysFee][] | [開発中: 未定]( "BADGE_LIGHTGREY") | |
|
||||
|
||||
**注記:** このリストは手動で更新されています。もしあなたがAmendmentに取り組んでいて、その変更をテストするためのテストネットワークを持っているなら、このページを編集して開発中のamendmentをこのリストに追加することができます。XRP Ledgerへの貢献についての詳細は、[XRP Ledgerのコードへの貢献](contribute-code-flow.html)をご覧ください。
|
||||
@@ -105,6 +106,28 @@ labels:
|
||||
|
||||
## 既知のAmendmentsの詳細
|
||||
|
||||
### DID
|
||||
[DID]: #did
|
||||
|
||||
| Amendment | DID |
|
||||
|:-------------|:----|
|
||||
| Amendment ID | DB432C3A09D9D5DFC7859F39AE5FF767ABC59AED0A9FB441E83B814D8946C109 |
|
||||
| Status | Open for Voting |
|
||||
| Default Vote (Latest stable release) | No |
|
||||
| Pre-amendment functionality retired? | No |
|
||||
|
||||
Adds to the ledger Decentralized Identifier (DID) functionality that conforms to the [World Wide Web Consortium](https://www.w3.org/press-releases/2022/did-rec/) standard. DIDs provide a digital identity, not dependent on a centralized authority and controlled by the DID subject.
|
||||
|
||||
Adds new transactions:
|
||||
|
||||
- DIDDelete - Delete the DID associated with your XRPL account.
|
||||
- DIDSet - Create a new DID or update an existing one.
|
||||
|
||||
Adds a new `DID` ledger entry type.
|
||||
|
||||
Adds several new transaction result codes.
|
||||
|
||||
|
||||
### AMM
|
||||
[AMM]: #amm
|
||||
|
||||
@@ -193,11 +216,30 @@ Clawbackはデフォルトでは無効になっています。Clawbackを使用
|
||||
| Amendment | XChainBridge |
|
||||
|:-------------|:-----------------|
|
||||
| Amendment ID | C98D98EE9616ACD36E81FDEB8D41D349BF5F1B41DD64A0ABC1FE9AA5EA267E9C |
|
||||
| Status | 開発中 |
|
||||
| デフォルトの投票(最新の安定版) | いいえ |
|
||||
| Amendment前の機能は廃止? | いいえ |
|
||||
| Status | Open for Voting |
|
||||
| Default Vote (Latest stable release) | No |
|
||||
| Pre-amendment functionality retired? | No |
|
||||
|
||||
メインネットとサイドチェーンなど異なるネットワーク間でアセットを同期させるための「クロスチェーンブリッジ」を追加します。標準規格: [XLS-38d Cross-Chain Bridge](https://github.com/XRPLF/XRPL-Standards/blob/master/XLS-38d-XChainBridge/README.md)。
|
||||
Adds cross-chain bridges, enabling the transfer of digital assets between networks, such as Mainnet and a sidechain.
|
||||
|
||||
Adds new transactions:
|
||||
|
||||
- XChainAccountCreateCommit - Create a new account for a witness server to submit transactions on an issuing chain..
|
||||
- XChainAddAccountCreateAttestation - Provide an attestation that an account was created for a witness server to use.
|
||||
- XChainAddClaimAttestation - Provide an attestation that assets were locked on a locking chain.
|
||||
- XChainClaim - Claim assets on the destination chain.
|
||||
- XChainCommit - Locks assets on the locking chain.
|
||||
- XChainCreateBridge - Create a bridge ledger object.
|
||||
- XChainCreateClaimID - Create a new cross-chain claim ID that is used for a cross-chain transfer.
|
||||
- XChainModifyBridge - Modify the parameters of a bridge.
|
||||
|
||||
Adds new ledger entry types:
|
||||
|
||||
- Bridge - A single cross-chain bridge that connects the XRP Ledger with another blockchain.
|
||||
- XChainOwnedClaimID - A cross-chain transfer of value that includes information of the account on the source chain that locks or burns the funds on the source chain.
|
||||
- XChainOwnedCreateAccountClaimID - Collects attestations for creating an account via a cross-chain transfer.
|
||||
|
||||
Adds several new transaction result codes.
|
||||
|
||||
|
||||
### CryptoConditions
|
||||
|
||||
@@ -340,7 +340,7 @@ WS_HANDLERS["transaction"] = log_tx
|
||||
|
||||
- **`meta.TransactionResult`フィールド**は、[トランザクションの結果](transaction-results.html)です。結果が`tesSUCCESS`でない場合は、トランザクションは失敗したため、値を送信できません。
|
||||
|
||||
- **`transaction.Account`** フィールドはトランザクションの送信元です。他の人が送信したトランザクションのみを探している場合は、このフィールドがあなたのアドレスと一致するトランザクションを無視できます(自身に対する複数通貨間の支払いが _可能である_ 点に注意してください)。
|
||||
- **`transaction.Account`** フィールドはトランザクションの送信元です。他の人が送信したトランザクションのみを探している場合は、このフィールドがあなたのアドレスと一致するトランザクションを無視できます(自身に対するクロスカレンシー支払いが _可能である_ 点に注意してください)。
|
||||
|
||||
- **`transaction.TransactionType`フィールド**はトランザクションのタイプです。アカウントに通貨を送金できる可能性があるトランザクションのタイプは以下のとおりです。
|
||||
|
||||
|
||||
229
content/_img-sources/serialization-xchainbridge.uxf
Normal file
229
content/_img-sources/serialization-xchainbridge.uxf
Normal file
@@ -0,0 +1,229 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<diagram program="umlet" version="14.2">
|
||||
<zoom_level>10</zoom_level>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>770</x>
|
||||
<y>240</y>
|
||||
<w>310</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Issuer AccountID (160 bits)
|
||||
lt=.</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>480</x>
|
||||
<y>240</y>
|
||||
<w>280</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Currency code (160 bits)</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>460</x>
|
||||
<y>90</y>
|
||||
<w>400</w>
|
||||
<h>160</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=..</panel_attributes>
|
||||
<additional_attributes>10.0;140.0;380.0;10.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>1080</x>
|
||||
<y>90</y>
|
||||
<w>30</w>
|
||||
<h>160</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=..</panel_attributes>
|
||||
<additional_attributes>10.0;140.0;10.0;10.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Text</id>
|
||||
<coordinates>
|
||||
<x>50</x>
|
||||
<y>30</y>
|
||||
<w>160</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>XChainBridge Format</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>50</x>
|
||||
<y>60</y>
|
||||
<w>1050</w>
|
||||
<h>50</h>
|
||||
</coordinates>
|
||||
<panel_attributes/>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Text</id>
|
||||
<coordinates>
|
||||
<x>580</x>
|
||||
<y>200</y>
|
||||
<w>240</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>STIssue Format</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>470</x>
|
||||
<y>230</y>
|
||||
<w>620</w>
|
||||
<h>50</h>
|
||||
</coordinates>
|
||||
<panel_attributes/>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>100</x>
|
||||
<y>70</y>
|
||||
<w>210</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Locking chain door (160 bits)</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>320</x>
|
||||
<y>70</y>
|
||||
<w>250</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Locking Chain Issue</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>60</x>
|
||||
<y>70</y>
|
||||
<w>40</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>0x14</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Text</id>
|
||||
<coordinates>
|
||||
<x>100</x>
|
||||
<y>120</y>
|
||||
<w>270</w>
|
||||
<h>40</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Door account length prefixes (8 bits)
|
||||
Always 0x14</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>60</x>
|
||||
<y>90</y>
|
||||
<w>60</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<-</panel_attributes>
|
||||
<additional_attributes>10.0;10.0;10.0;50.0;40.0;50.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>580</x>
|
||||
<y>70</y>
|
||||
<w>40</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>0x14</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>360</x>
|
||||
<y>90</y>
|
||||
<w>250</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<-</panel_attributes>
|
||||
<additional_attributes>230.0;10.0;230.0;50.0;10.0;50.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>620</x>
|
||||
<y>70</y>
|
||||
<w>210</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Issuing chain door (160 bits)</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLClass</id>
|
||||
<coordinates>
|
||||
<x>840</x>
|
||||
<y>70</y>
|
||||
<w>250</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Issuing Chain Issue</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>Relation</id>
|
||||
<coordinates>
|
||||
<x>770</x>
|
||||
<y>260</y>
|
||||
<w>60</w>
|
||||
<h>70</h>
|
||||
</coordinates>
|
||||
<panel_attributes>lt=<<-</panel_attributes>
|
||||
<additional_attributes>10.0;10.0;10.0;50.0;40.0;50.0</additional_attributes>
|
||||
</element>
|
||||
<element>
|
||||
<id>Text</id>
|
||||
<coordinates>
|
||||
<x>810</x>
|
||||
<y>290</y>
|
||||
<w>270</w>
|
||||
<h>30</h>
|
||||
</coordinates>
|
||||
<panel_attributes>Omitted if the currency code is all 0's</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
<element>
|
||||
<id>UMLNote</id>
|
||||
<coordinates>
|
||||
<x>170</x>
|
||||
<y>210</y>
|
||||
<w>260</w>
|
||||
<h>80</h>
|
||||
</coordinates>
|
||||
<panel_attributes>*Note:*
|
||||
Unlike in Object and Array fields, the nested STIssue types here do not begin with a Field ID.
|
||||
bg=yellow
|
||||
style=wordwrap</panel_attributes>
|
||||
<additional_attributes/>
|
||||
</element>
|
||||
</diagram>
|
||||
@@ -207,6 +207,7 @@
|
||||
"DeletableAccounts",
|
||||
"DepositAuth",
|
||||
"DepositPreauth",
|
||||
"DID",
|
||||
"DisallowIncoming",
|
||||
"EnforceInvariants",
|
||||
"Escrow",
|
||||
@@ -252,6 +253,7 @@
|
||||
"Tickets",
|
||||
"TickSize",
|
||||
"TrustSetAuth",
|
||||
"XChainBridge",
|
||||
"XRPFees"
|
||||
] %}
|
||||
|
||||
|
||||
82
content/concepts/accounts/decentralized-identifiers.md
Normal file
82
content/concepts/accounts/decentralized-identifiers.md
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
html: decentralized-identifiers.html
|
||||
parent: accounts.html
|
||||
blurb: Decentralized identifiers enable verifiable, decentralized digital identities.
|
||||
status: not_enabled
|
||||
labels:
|
||||
- DID
|
||||
---
|
||||
# Decentralized Identifiers
|
||||
|
||||
_(Requires the [DID amendment][] :not_enabled:)_
|
||||
|
||||
A Decentralized Identifier (DID) is a new type of identifier defined by the World Wide Web Consortium (W3C) that enables verifiable, digital identities. DIDs are fully under the control of the DID owner, independent from any centralized registry, identity provider, or certificate authority.
|
||||
|
||||
The key principles of a DID are:
|
||||
|
||||
- **Decentralization:** No central issuing agency controls the DID, enabling the owner to update, resolve, or deactivate it.
|
||||
|
||||
- **Cryptographically Verifiable:** DIDs are verified through cryptographic proofs, making them tamper-evident and secure.
|
||||
|
||||
- **Interoperability:** DIDs are open to any solution that recognizes the W3C DID standard. This means a DID can be used to authenticate and establish trust in various digital transactions and interactions.
|
||||
|
||||
**Note:** The implementation of DIDs on the XRP Ledger conforms to the requirements in the [DID v1.0 specification](https://www.w3.org/TR/did-core/).
|
||||
|
||||
|
||||
## How It Works
|
||||
|
||||
1. An XRPL account holder generates a DID that is controlled by the account.
|
||||
2. The DID is associated with a DID document as defined by W3C specifications.
|
||||
3. The DID is used for digital tasks such as:
|
||||
- Signing digital documents.
|
||||
- Making secure online transactions.
|
||||
- Logging into websites.
|
||||
4. The verifier resolves the DID to its document to verify the subject's identity.
|
||||
|
||||
|
||||
## DID Documents
|
||||
|
||||
DID documents contain the necessary information to cryptographically verify the identity of the subject described by a DID document. The subject can be a person, organization, or thing. For example, a DID document could contain cryptographic public keys that the DID subject can use to authenticate itself and prove its association with the DID.
|
||||
|
||||
**Note:** DID documents usually serialize to a JSON or JSON-LD representation.
|
||||
|
||||
On the XRP Ledger, there are several ways to associate a DID to a DID document:
|
||||
|
||||
1. Store a reference to the document in the `URI` field of the `DID` object, which points to a document stored on another decentralized storage network, such as IPFS or STORJ.
|
||||
2. Store a minimal DID document in the `DIDDocument` field of the `DID` object.
|
||||
3. Use a minimal _implicit_ DID document generated from the DID and other available public information.
|
||||
**Note:** Simpler use cases may only need signatures and simple authorization tokens. In cases where there isn't explicitly a DID document on the ledger, an implicit document is used instead. For example, the implicit DID Document of `did:xrpl:1:0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020` enables only a single key `0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020` to authorize changes on the DID document or sign credentials in the name of the DID.
|
||||
|
||||
|
||||
### Sample XRPL DID Document
|
||||
|
||||
```json
|
||||
{
|
||||
"@context": "https://w3id.org/did/v1",
|
||||
"id": "did:xrpl:1:rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||
"publicKey": [
|
||||
{
|
||||
"id": "did:xrpl:1:rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn#keys-1",
|
||||
"type": ["CryptographicKey", "EcdsaKoblitzPublicKey"],
|
||||
"curve": "secp256k1",
|
||||
"expires": 15674657,
|
||||
"publicKeyHex": "04f42987b7faee8b95e2c3a3345224f00e00dfc67ba882..."
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
To learn more about the core properties of a DID document, see: [Decentralized Identifiers (DIDs) v1.0](https://www.w3.org/TR/did-core/#core-properties).
|
||||
|
||||
|
||||
## Privacy and Security Concerns
|
||||
|
||||
- Whoever controls the private keys of an XRPL account, controls the DID and reference to the DID document it resolves to. Take care to ensure your private keys aren't compromised.
|
||||
- You can include any content in a DID document, but should limit it to verification methods and service points. Since DIDs on XRPL can be resolved by anyone, you shouldn't include any personal information.
|
||||
- IPFS allows anyone to store content on the nodes in a distributed network. A common misconception is that anyone can edit that content; however, the content-addressability of IPFS means any edited content will have a different address from the original. While any entity can copy a DID document anchored with an XRPL account's `DIDDocument` or `URI` fields, they can't change the document itself unless they control the private key that created the corresponding `DID` object.
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -17,6 +17,7 @@ To help members of the XRP Ledger community interact with XRP Ledger technology
|
||||
| Testnet | Stable releases | An "alternate universe" network that acts as a testing ground for software built on the XRP Ledger, without impacting production XRP Ledger users and without risking real money. The [amendment status](known-amendments.html) of the Testnet is intended to closely mirror the Mainnet, although slight variations in timing may occur due to the unpredictable nature of decentralized systems. |
|
||||
| Devnet | Beta releases | A preview of coming attractions, where unstable changes to the core XRP Ledger software may be tested out. Developers can use this altnet to interact with and learn about planned new XRP Ledger features and amendments that are not yet enabled on the Mainnet. |
|
||||
| [Hooks V3 Testnet](https://hooks-testnet-v3.xrpl-labs.com/) | [Hooks server](https://github.com/XRPL-Labs/xrpld-hooks) | A preview of on-chain smart contract functionality using [hooks](https://xrpl-hooks.readme.io/). |
|
||||
| Sidechain-Devnet | Beta releases | A sidechain to test cross-chain bridge features. Devnet is treated as the locking chain and this sidechain is the issuing chain.<br>Library support:<br>- [xrpl.js 2.12.0](https://www.npmjs.com/package/xrpl/v/2.12.0)<br>- [xrpl-py 2.4.0](https://pypi.org/project/xrpl-py/2.4.0/)<br>**Note**: You can also use the [`xbridge-cli`](https://github.com/XRPLF/xbridge-cli) commandline tool to set up a cross-chain bridge on your local machine. |
|
||||
|
||||
Each altnet has its own separate supply of test XRP, which is [given away for free](xrp-testnet-faucet.html) to parties interested in experimenting with the XRP Ledger and developing applications and integrations. Test XRP does not have real-world value and is lost when the network is reset.
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ To represent digital assets similar to these, use the XRP Ledger's Non-Fungible
|
||||
|
||||
On the XRP Ledger, an NFT is represented as a [NFToken][] object. An NFT is a unique, indivisible unit that is not used for payments. Users can mint (create), hold, buy, sell, and burn (destroy) NFTs.
|
||||
|
||||
The ledger stores up to 32 NFTa owned by the same account in a single [NFTokenPage object][] to save space. As a result, the owner's [reserve requirement](reserves.html) for NFTs only increases when the ledger needs to make a new page to store additional tokens.
|
||||
The ledger stores up to 32 NFTs owned by the same account in a single [NFTokenPage object][] to save space. As a result, the owner's [reserve requirement](reserves.html) for NFTs only increases when the ledger needs to make a new page to store additional tokens.
|
||||
|
||||
Accounts can also name a _Broker_ or an _Authorized Minter_ who can sell or mint NFTs on their behalf.
|
||||
|
||||
|
||||
45
content/concepts/xrpl-sidechains/cross-chain-bridges.md
Normal file
45
content/concepts/xrpl-sidechains/cross-chain-bridges.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
html: cross-chain-bridges.html
|
||||
parent: xrpl-sidechains.html
|
||||
blurb: Cross-chain bridges for the XRP Ledger enable value in the form of XRP and other tokens (IOUs) to move efficiently between blockchains.
|
||||
status: not_enabled
|
||||
labels:
|
||||
- Blockchain
|
||||
- Interoperability
|
||||
---
|
||||
# Cross-Chain Bridges
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
Cross-chain bridges enable you to move XRP and tokens between the XRP Ledger and other blockchains. When referring to the blockchains connected by a bridge, one is the locking chain and the other the issuing chain.
|
||||
|
||||
A locking chain is where the digital asset originates from. These assets are locked in a trust when sent across a bridge to an issuing chain.
|
||||
|
||||
An issuing chain is an independent ledger with its own consensus algorithm and transaction types and rules. A wrapped version of the digital asset is minted and burned, depending on if an asset is received or sent from the locking chain.
|
||||
|
||||
**Note:** Bridges utilize special _door accounts_ when moving assets cross-chain. The door account on a locking chain is used to put assets into trust, and the door account on an issuing chain is used to issue wrapped assets.
|
||||
|
||||
Both the locking and issuing chains operate as parallel networks with independent nodes and validators. They rely on independent [witness servers](witness-servers.html) to watch transactions between the two chains and attest that assets have moved into specifically designated accounts.
|
||||
|
||||
|
||||
## How Do Bridges Work?
|
||||
|
||||
At a high-level, bridges enable cross-chain transactions through these steps:
|
||||
|
||||
1. Create a cross-chain claim ID on the issuing chain. A cross-chain claim ID represents one transfer of value between blockchains.
|
||||
2. Submit a commit transaction on the locking chain, putting the assets in a trust. The transaction includes the cross-chain claim ID and reward for witness servers.
|
||||
|
||||
**Note:** Witness servers monitor transactions on both chains. They provide attestations, or signed messages, to verify a transaction occurred. There are attestations for `XChainCommit` and `XChainAccountCreateCommit` transactions.
|
||||
|
||||
3. Witness servers provide attestations to the issuing chain, saying the assets were locked on the locking chain.
|
||||
4. When there are enough signatures to reach quorum, the assets are released on the issuing chain to the destination account.
|
||||
|
||||
**Note:** In some cases, such as deposit authorization being enabled, you'll need to submit a transaction claim for the transferred assets on the issuing chain.
|
||||
|
||||
5. Rewards are distributed to the witness servers' accounts on the issuing chain.
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
74
content/concepts/xrpl-sidechains/index.md
Normal file
74
content/concepts/xrpl-sidechains/index.md
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
html: xrpl-sidechains.html
|
||||
parent: concepts.html
|
||||
blurb: An XRPL sidechain is an independent ledger with its own consensus algorithm, transaction types, and rules.
|
||||
labels:
|
||||
- Blockchain
|
||||
- Interoperability
|
||||
---
|
||||
# XRPL Sidechains
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
A sidechain is an independent ledger with its own consensus algorithm, transaction types, rules, and nodes. It acts as its own blockchain, running parallel to the mainchain (XRP Ledger), enabling value to move between the two without compromising the speed, efficiency, and throughput of the mainchain.
|
||||
|
||||
Sidechains can customize the XRP Ledger protocol to the needs of a specific use case or project and run it as its own blockchain. Some examples include:
|
||||
|
||||
* Adding a smart contract layer. See: [Xahau](https://xahau.network/)
|
||||
* Adding Ethereum Virtual Machine (EVM) compatibility. See: [EVM Sidechain](https://opensource.ripple.com/docs/evm-sidechain/intro-to-evm-sidechain/).
|
||||
* Building your own algorithmic stable coin with customised ledger types and transaction rules.
|
||||
* Building permissioned or nearly permissionless, centralized or largely decentralized ledgers whose assets can be traded on the Mainnet [decentralized exchange](decentralized-exchange.html).
|
||||
|
||||
|
||||
**Notes:**
|
||||
|
||||
- Sidechains use their own validators and require a separate UNL from the mainchain `rippled` UNL.
|
||||
- Nodes on the mainchain and sidechain have no knowledge of each other.
|
||||
|
||||
|
||||
## Legal FAQs
|
||||
|
||||
### What is a Sidechain?
|
||||
|
||||
A sidechain is a separate blockchain that links the XRPL Mainnet chain (the “Mainchain”) to a sidechain (each a “Sidechain”), allowing for cross-chain exchanges of assets and information.
|
||||
|
||||
|
||||
### What are Witness Servers?
|
||||
|
||||
“Witness Servers” validate transfers between “door wallets” that connect the Mainchain to each Sidechain. A series of decentralized entities and individuals will operate Witness Servers.
|
||||
|
||||
|
||||
### Are there risks associated with operating a Witness Server?
|
||||
|
||||
There are certain risks associated with operating a Witness Server for a Sidechain, including the following:
|
||||
|
||||
_Regulatory Considerations_: Operating a Witness Server carries some regulatory risk. A few risks are identified below, some of which pertain to regulatory regimes that only apply to projects that serve those located in the U.S. U.S. regimes are identified here because they are commonly considered some of the strictest regulatory regimes in the world.
|
||||
|
||||
The regulatory regime in the U.S. concerning the operation of a “money transmitting business” requiring federal registration as a money service business (“MSB”) and state money transmitter licenses (“MTLs”) is unclear as it pertains to operating Witness Servers. The Witness Servers are intended to be operated by a series of decentralized entities and persons. Despite this intention, if a regulator determined that there was “centralized” control of the Witness Servers by a particular entity or coordinated group, it may deem such activity to be money transmission. The U.S. Treasury Department recently issued a report identifying a series of factors it would consider when determining whether a particular project is “decentralized.” See [2023 DeFi Illicit Finance Risk Assessment](https://home.treasury.gov/news/press-releases/jy1391). This recent regulatory guidance is important because it indicates that the U.S. Treasury recognizes that certain projects may be “decentralized” and if the operation of the Witness Servers is “decentralized” it may not be considered a “money transmitting business.”
|
||||
|
||||
While U.S. crypto regulations have consistently remained among the most stringent and aggressively enforced, other jurisdictions also have regulation and laws relating to the transfer of “money” and other value. For example, in March of 2022, U.K. regulatory authorities published a series of documentary guidance regarding crypto and decentralized finance. See [Financial Stability in Focus: Cryptoassets and Decentralized Finance](https://www.bankofengland.co.uk/financial-stability-in-focus/2022/march-2022). More recently, in June of 2023, the E.U. formally adopted a regulatory framework which in part imposes codified rules and regulations pertaining to decentralized crypto platforms. See [Markets in Crypto-Assets Regulation](https://www.esma.europa.eu/esmas-activities/digital-finance-and-innovation/markets-crypto-assets-regulation-mica). For those considering operating a Witness Server, it is critical to stay informed and compliant with the specific requirements of each jurisdiction involved to effectively manage associated risks.
|
||||
|
||||
_Technology and Network Security_: Those intending to run a Witness Server should be familiar with the technical and security aspects of doing so. Before agreeing to run a Witness Server, one should fully understand the functionality, potential vulnerabilities, and necessary technological and security measures involved.
|
||||
|
||||
_Civil Liability_: Operating a Witness Server, like participating in any blockchain project, carries an unspecified level of civil liability risk. There has been an influx of plaintiffs’ lawsuits in the U.S. and other jurisdictions, and it is difficult to evaluate what theories a particular plaintiffs’ attorney may implement in a civil lawsuit. Regardless of any real or perceived civil liability risk, it should be noted that even a frivolous lawsuit could take time and money to respond.
|
||||
|
||||
|
||||
### Should I seek independent advice before agreeing to operate a Witness Server?
|
||||
|
||||
Yes. Any party considering running a Witness Server should seek independent legal and tax advice from experienced professionals. Please note, that as the Witness Servers must mutually attest to confirm cross-chain transfers, they may be understood to operate as a common enterprise - as it is defined by US regulators. In a common enterprise, joint and several liability may apply, meaning that each Witness Server could be held individually responsible for all liability or damages incurred. Given the evolving regulatory landscape, it’s critical to consult with a legal professional who can help navigate the complex and changing global regulatory landscape associated with the expectations and obligations of running a Witness Server. As with any blockchain project, please do your own research. These FAQs are just general guidance and are not legal or tax advice.
|
||||
|
||||
|
||||
### Who should not run a Witness Server?
|
||||
|
||||
You should not run a Witness Server if you are not experienced (or do not have access to experienced support) in blockchain, MSB and MTL regulations, and other applicable regulations and laws. You should also not operate a Witness Server if you are not an experienced person or entity with technical and compliance expertise. Few individuals are qualified and experienced enough to operate Witness Servers on their own. You should also not operate a Witness Server if you have not sought and obtained independent legal and tax advice.
|
||||
|
||||
|
||||
### Are these FAQs comprehensive and conclusive advice?
|
||||
|
||||
No. These FAQs are intended to provide general guidance and do not constitute technical, financial, or legal advice. These FAQs should not be used as a substitute for professional advice tailored to one’s specific circumstances. The blockchain and digital asset landscape is complex and constantly changing, which necessitates staying updated and seeking expert advice. It is recommended that those engaging with a Sidechain regularly check official resources such as governmental and regulatory body websites. Nonetheless, consulting with legal professionals who specialize in blockchain, and cryptocurrency is the most reliable way to get accurate and personalized advice.
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
151
content/concepts/xrpl-sidechains/witness-servers.md
Normal file
151
content/concepts/xrpl-sidechains/witness-servers.md
Normal file
@@ -0,0 +1,151 @@
|
||||
---
|
||||
html: witness-servers.html
|
||||
parent: xrpl-sidechains.html
|
||||
blurb: A witness server is a light-weight server that witnesses and signs transactions between the XRP Ledger and another chain.
|
||||
status: not_enabled
|
||||
labels:
|
||||
- Blockchain
|
||||
- Interoperability
|
||||
---
|
||||
# Witness Servers
|
||||
[[Source]](https://github.com/seelabs/xbridge_witness "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
A _witness server_ acts as a neutral witness for transactions between a locking chain and an issuing chain. It listens to the door accounts on both sides of a bridge and signs attestations that confirm a transaction occurred. They are essentially acting as an oracle to “prove” that value was locked or burned on a source account, which allows the recipient to then claim (via minting or unlocking) the equivalent funds on the destination account.
|
||||
|
||||
The bridge between the locking chain and the issuing chain includes the following information in its configuration:
|
||||
|
||||
* Witness servers that monitor transactions on the bridge. You can choose one or more witness servers.
|
||||
* Fee for witness servers for their service.
|
||||
|
||||
Anyone can run a witness server. However, the burden is on the participants of the issuing chain to evaluate the reliability of witness servers. If you run a witness server, you must also run a `rippled` node and sync it to the chain the witness server needs access to.
|
||||
|
||||
**Note:** Issuing chains may choose to configure a bridge with only one witness server initially and run the witness server itself. This strategy is helpful in the initial period, when the issuing chain hasn't established itself yet in the marketplace.
|
||||
|
||||
|
||||
## Witness Server Configuration
|
||||
|
||||
The witness server takes a JSON configuration file, specified using the `--conf` command-line argument.
|
||||
|
||||
|
||||
### Example Configuration JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"LockingChain": {
|
||||
"Endpoint": {
|
||||
"Host": "127.0.0.1",
|
||||
"Port": 6005
|
||||
},
|
||||
"TxnSubmit": {
|
||||
"ShouldSubmit": true,
|
||||
"SigningKeySeed": "shUe3eSgGK4e6xMFuCakZnxsMN1uk",
|
||||
"SigningKeyType": "ed25519",
|
||||
"SubmittingAccount": "rpFp36UHW6FpEcZjZqq5jSJWY6UCj3k4Es"
|
||||
},
|
||||
"RewardAccount": "rpFp36UHW6FpEcZjZqq5jSJWY6UCj3k4Es"
|
||||
},
|
||||
"IssuingChain": {
|
||||
"Endpoint": {
|
||||
"Host": "127.0.0.1",
|
||||
"Port": 6007
|
||||
},
|
||||
"TxnSubmit": {
|
||||
"ShouldSubmit": true,
|
||||
"SigningKeySeed": "shUe3eSgGK4e6xMFuCakZnxsMN1uk",
|
||||
"SigningKeyType": "ed25519",
|
||||
"SubmittingAccount": "rpFp36UHW6FpEcZjZqq5jSJWY6UCj3k4Es"
|
||||
},
|
||||
"RewardAccount": "rpFp36UHW6FpEcZjZqq5jSJWY6UCj3k4Es"
|
||||
},
|
||||
"RPCEndpoint": {
|
||||
"Host": "127.0.0.1",
|
||||
"Port": 6010
|
||||
},
|
||||
"DBDir": "/var/lib/witness/witness01/db",
|
||||
"LogFile": "/var/log/witness/witness01.log",
|
||||
"SigningKeySeed": "spkHEwDKeChm8PAFApLkF1E2sDs6t",
|
||||
"SigningKeyType": "ed25519",
|
||||
"XChainBridge": {
|
||||
"LockingChainDoor": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"Admin": {
|
||||
"Username": "username01",
|
||||
"Password": "password01"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### Configuration Fields
|
||||
|
||||
| Field Name | JSON Type | Required? | Description |
|
||||
|------------------|----------------|-----------|-------------|
|
||||
| `Admin` | Object | No | The `Username` and `Password` fields (as strings) for privileged requests to the witness server. **Note:** Both or none of the admin fields must be set. |
|
||||
| [`IssuingChain`](#issuingchain-and-lockingchain-fields) | Object | Yes | The parameters for interacting with the issuing chain. |
|
||||
| [`LockingChain`](#issuingchain-and-lockingchain-fields) | Object | Yes | The parameters for interacting with the locking chain. |
|
||||
| `RPCEndpoint` | Object | Yes | The endpoint for RPC requests to the witness server. |
|
||||
| `LogFile` | String | Yes | The location of the log file. |
|
||||
| `LogLevel` | String | Yes | The level of logs to store in the log file. The options are `All`, `Trace`, `Debug`, `Info`, `Warning`, `Error`, `Fatal`, `Disabled`, and `None`. |
|
||||
| `DBDir` | String | Yes | The location of the directory where the databases are stored. |
|
||||
| `SigningKeySeed` | String | Yes | The seed that the witness server should use to sign its attestations. |
|
||||
| `SigningKeyType` | String | Yes | The algorithm used to encode the `SigningKeySeed`. The options are `secp256k1` and `ed25519`. |
|
||||
| [`XChainBridge`](#xchainbridge-fields) | XChainBridge | Yes | The bridge that the witness server is monitoring. |
|
||||
|
||||
|
||||
#### IssuingChain and LockingChain Fields
|
||||
|
||||
| Field Name | JSON Type | Required? | Description |
|
||||
|-----------------|-----------|-----------|-------------|
|
||||
| `Endpoint` | Object | Yes | The websocket endpoint of a `rippled` node synced with the chain. **Note:** The same person needs to control the `rippled` node and witness server. |
|
||||
| `TxnSubmit` | Object | Yes | The parameters for transaction submission on the chain. |
|
||||
| `RewardAccount` | String | Yes | The account that should receive the witness's share of the `SignatureReward` on the chain. |
|
||||
|
||||
|
||||
#### Endpoint Fields
|
||||
|
||||
| Field Name | JSON Type | Required? | Description |
|
||||
|------------|-----------|-----------|-------------|
|
||||
| `Host` | String | Yes | The IP address of the `rippled` node. **Note:** This accepts an IPv4 address or URL. |
|
||||
| `Port` | String | Yes | The port used for the websocket endpoint. |
|
||||
|
||||
|
||||
#### RPCEndpoint Fields
|
||||
|
||||
| Field Name | JSON Type | Required? | Description |
|
||||
|------------|-----------|-----------|-------------|
|
||||
| `Host` | String | Yes | The IP address of the witness server for RPC requests. **Note:** This accepts an IPv4 address or URL. |
|
||||
| `Port` | String | Yes | The port used for the websocket endpoint. |
|
||||
|
||||
|
||||
#### TxnSubmit Fields
|
||||
|
||||
| Field Name | JSON Type | Required? | Description |
|
||||
|---------------------|-----------|-----------|-------------|
|
||||
| `ShouldSubmit` | Boolean | Yes | A boolean indicating whether or not the witness server should submit transactions on the locking chain. |
|
||||
| `SigningKeySeed` | String | No | The seed that the witness server should use to sign its transactions on the locking chain. This is required if `ShouldSubmit` is `true`. |
|
||||
| `SigningKeyType` | String | No | The algorithm used to encode the `SigningKeySeed`. The options are `secp256k1` and `ed25519`. This is required if `ShouldSubmit` is `true`. |
|
||||
| `SubmittingAccount` | String | No | The account from which the `XChainAddClaimAttestation` and `XChainAddAccountCreateAttestation` transactions should be sent. This is required if `ShouldSubmit` is `true`. |
|
||||
|
||||
|
||||
#### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | [Internal Type][] | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | String | Account | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | Issue | Issue | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | String | Account | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | Issue | Issue | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -42,6 +42,11 @@ Edit your `rippled.cfg` file.
|
||||
|
||||
# No [ips] stanza. Use the default hubs to connect to Mainnet.
|
||||
|
||||
*Sidechain-Devnet*
|
||||
|
||||
[ips]
|
||||
sidechain-net2.devnet.rippletest.net 51235
|
||||
|
||||
<!-- MULTICODE_BLOCK_END -->
|
||||
|
||||
2. Comment out the previous `[ips]` stanza, if there is one:
|
||||
@@ -70,6 +75,11 @@ Edit your `rippled.cfg` file.
|
||||
[network_id]
|
||||
main
|
||||
|
||||
*Sidechain-Devnet*
|
||||
|
||||
[network_id]
|
||||
262
|
||||
|
||||
<!-- MULTICODE_BLOCK_END -->
|
||||
|
||||
For custom networks, everyone who connects to the network should use a value unique to that network. When creating a new network, choose a network ID at random from the integers 11 to 4,294,967,295.
|
||||
@@ -109,6 +119,14 @@ Edit your `validators.txt` file. This file is located in the same folder as your
|
||||
[validator_list_keys]
|
||||
ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734
|
||||
|
||||
*Sidechain-Devnet*
|
||||
|
||||
[validator_list_sites]
|
||||
https://vlsidechain-net2.devnet.rippletest.net
|
||||
|
||||
[validator_list_keys]
|
||||
EDA5504C7133743FADA46342229B4E9CBBE1CF9BCA19D16633574F7CBB72F79569
|
||||
|
||||
<!-- MULTICODE_BLOCK_END -->
|
||||
|
||||
**Tip:** Preview packages might come with the necessary stanzas pre-configured, but check them just in case.
|
||||
@@ -160,6 +178,13 @@ _Mainnet_
|
||||
# Delete or comment out. Don't force-enable features on Mainnet.
|
||||
```
|
||||
|
||||
_Sidechain-Devnet_
|
||||
|
||||
```
|
||||
[features]
|
||||
XChainBridge
|
||||
```
|
||||
|
||||
<!-- MULTICODE_BLOCK_END -->
|
||||
|
||||
**Warning:** Do not use the `[features]` stanza when connecting to Mainnet or Testnet. Forcefully enabling different features than the rest of the network could cause your server to diverge from the network.
|
||||
|
||||
@@ -189,6 +189,7 @@ Transaction instructions may contain fields of any of the following types:
|
||||
| [UInt8][] | 16 | 8 | No | An 8-bit unsigned integer. |
|
||||
| [UInt16][] | 1 | 16 | No | A 16-bit unsigned integer. The `TransactionType` is a special case of this type, with specific strings mapping to integer values. |
|
||||
| [UInt32][] | 2 | 32 | No | A 32-bit unsigned integer. The `Flags` and `Sequence` fields on all transactions are examples of this type. |
|
||||
| [XChainBridge][] | 25 | Variable | No | A bridge between two blockchains, identified by the door accounts and issued assets on both chains. |
|
||||
|
||||
[Length-prefixed]: #length-prefixing
|
||||
|
||||
@@ -368,6 +369,25 @@ When representing these fields in JSON objects, most are represented as JSON num
|
||||
|
||||
Another special case is the `TransactionType` field. In JSON, this field is conventionally represented as a string with the name of the transaction type, but in binary, this field is a UInt16. The `TRANSACTION_TYPES` object in the [definitions file](#definitions-file) maps these strings to specific numeric values.
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
[XChainBridge]: #xchainbridge-fields
|
||||
|
||||
{{ include_svg("img/serialization-xchainbridge.svg", "XChainBridge format diagram") }}
|
||||
|
||||
The `XChainBridge` field, used in transactions and ledger entries related to [cross-chain bridges](cross-chain-bridges.html), is the only field of the XChainBridge type. It consists of 4 parts which together define a bridge between blockchains:
|
||||
|
||||
- The locking chain door account, a length-prefixed [AccountID][].
|
||||
- The locking chain asset type, an [STIssue][].
|
||||
- The issuing chain door account, a length-prefixed [AccountID][].
|
||||
- The issuing chain asset type, an [STIssue][].
|
||||
|
||||
The two nested [STIssue][] types are each either 160 or 320 bits. The STIssue field is 160 bits if the currency code it contains is all 0's, meaning that the bridged asset is the native asset of its respective chain, for example XRP on the XRP Ledger Mainnet. If the currency code is nonzero, then the STIssue field also contains the (non-length-prefixed) AccountID of the token's issuer on its native chain.
|
||||
|
||||
**Note:** The door AccountID values are length-prefixed, but the issuer AccountID values are not.
|
||||
|
||||
In total, an XChainBridge field is always either 656, 816, or 976 bits (82, 102, or 122 bytes) depending on whether zero, one, or both of the assets are the native asset on their respective chain.
|
||||
|
||||
<!-- SPELLING_IGNORE: pathset, stobject, starray, ledgerentry, vector256, accountids, uint -->
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
html: bridge.html
|
||||
parent: ledger-entry-types.html
|
||||
blurb: A `bridge` object represents a single cross-chain bridge that connects and enables value to move efficiently between two blockchains.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# Bridge
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L286-L300 "Source")
|
||||
|
||||
The `Bridge` ledger entry represents a single cross-chain bridge that connects the XRP Ledger with another blockchain, such as its sidechain, and enables value in the form of XRP and other tokens (IOUs) to move efficiently between the two blockchains.
|
||||
|
||||
|
||||
## Example Bridge JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"Account": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
|
||||
"Flags": 0,
|
||||
"LedgerEntryType": "Bridge",
|
||||
"MinAccountCreateAmount": "2000000000",
|
||||
"OwnerNode": "0",
|
||||
"PreviousTxnID": "67A8A1B36C1B97BE3AAB6B19CB3A3069034877DE917FD1A71919EAE7548E5636",
|
||||
"PreviousTxnLgrSeq": 102,
|
||||
"SignatureReward": "204",
|
||||
"XChainAccountClaimCount": "0",
|
||||
"XChainAccountCreateCount": "0",
|
||||
"XChainBridge": {
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"LockingChainDoor": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"XChainClaimID": "1",
|
||||
"index": "9F2C9E23343852036AFD323025A8506018ABF9D4DBAA746D61BF1CFB5C297D10"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Bridge Fields
|
||||
|
||||
In addition to the [common fields](ledger-entry-common-fields.html), `{{currentpage.name}}` entries have the following fields:
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:---------------------------|:--------------------|:------------------|:----------|:------------|
|
||||
| `Account` | String | Account | Yes | The account that submitted the `XChainCreateBridge` transaction on the blockchain. |
|
||||
| `MinAccountCreateAmount` | [Currency Amount][] | Amount | No | The minimum amount, in XRP, required for an `XChainAccountCreateCommit` transaction. If this isn't present, the `XChainAccountCreateCommit` transaction will fail. This field can only be present on XRP-XRP bridges. |
|
||||
| `SignatureReward` | [Currency Amount][] | Amount | Yes | The total amount, in XRP, to be rewarded for providing a signature for cross-chain transfer or for signing for the cross-chain reward. This amount will be split among the signers. |
|
||||
| `XChainAccountClaimCount` | Number | UInt64 | Yes | A counter used to order the execution of account create transactions. It is incremented every time a `XChainAccountCreateCommit` transaction is "claimed" on the destination chain. When the "claim" transaction is run on the destination chain, the `XChainAccountClaimCount` must match the value that the `XChainAccountCreateCount` had at the time the `XChainAccountClaimCount` was run on the source chain. This orders the claims so that they run in the same order that the `XChainAccountCreateCommit` transactions ran on the source chain, to prevent transaction replay. |
|
||||
| `XChainAccountCreateCount` | Number | UInt64 | Yes | A counter used to order the execution of account create transactions. It is incremented every time a successful `XChainAccountCreateCommit` transaction is run for the source chain. |
|
||||
| `XChainBridge` | XChainBridge | XChain_Bridge | Yes | The door accounts and assets of the bridge this object correlates to. |
|
||||
| `XChainClaimID` | Number | UInt64 | Yes | The value of the next `XChainClaimID` to be created. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | String | Account | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | Issue | Issue | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | String | Account | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | Issue | Issue | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
html: did.html
|
||||
parent: ledger-entry-types.html
|
||||
blurb: The definition and details of a Decentralized Identifier (DID).
|
||||
labels:
|
||||
- DID
|
||||
status: not_enabled
|
||||
---
|
||||
# DID
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L330-L341 "Source")
|
||||
|
||||
_(Requires the [DID amendment][] :not_enabled:)_
|
||||
|
||||
A `DID` ledger entry holds references to, or data associated with, a single [DID](decentralized-identifiers.html).
|
||||
|
||||
|
||||
## Example DID JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"Account": "rpfqJrXg5uidNo2ZsRhRY6TiF1cvYmV9Fg",
|
||||
"DIDDocument": "646F63",
|
||||
"Data": "617474657374",
|
||||
"Flags": 0,
|
||||
"LedgerEntryType": "DID",
|
||||
"OwnerNode": "0",
|
||||
"PreviousTxnID": "A4C15DA185E6092DF5954FF62A1446220C61A5F60F0D93B4B09F708778E41120",
|
||||
"PreviousTxnLgrSeq": 4,
|
||||
"URI": "6469645F6578616D706C65",
|
||||
"index": "46813BE38B798B3752CA590D44E7FEADB17485649074403AD1761A2835CE91FF"
|
||||
}
|
||||
```
|
||||
|
||||
## DID Fields
|
||||
|
||||
In addition to the [common fields](ledger-entry-common-fields.html), `{{currentpage.name}}` entries have the following fields:
|
||||
|
||||
| Field | JSON Type | [Internal Type][] | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|--------------|
|
||||
| `Account` | String | AccountID | Yes | The account that controls the DID. |
|
||||
| `DIDDocument` | String | Blob | No | The W3C standard DID document associated with the DID. The `DIDDocument` field isn't checked for validity and is limited to a maximum length of 256 bytes. |
|
||||
| `Data` | String | Blob | No | The public attestations of identity credentials associated with the DID. The `Data` field isn't checked for validity and is limited to a maximum length of 256 bytes. |
|
||||
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0049`, mapped to the string `DID`, indicates that this object is a DID object. |
|
||||
| `OwnerNode` | String | UInt64 | Yes | A hint indicating which page of the sender's owner directory links to this entry, in case the directory consists of multiple pages. |
|
||||
| `PreviousTxnID` | String | Hash256 | Yes | The identifying hash of the transaction that most recently modified this object. |
|
||||
| `PreviousTxnLgrSeq` | Number | UInt32 | Yes | The index of the ledger that contains the transaction that most recently modified this object. |
|
||||
| `URI` | String | Blob | No | The Universal Resource Identifier that points to the corresponding DID document or the data associated with the DID. This field can be an HTTP(S) URL or IPFS URI. This field isn't checked for validity and is limited to a maximum length of 256 bytes. |
|
||||
|
||||
|
||||
## {{currentpage.name}} Reserve
|
||||
|
||||
The account that creates the `{{currentpage.name}}` object incurs one owner reserve.
|
||||
|
||||
|
||||
## {{currentpage.name}} Flags
|
||||
|
||||
There are no flags defined for `{{currentpage.name}}` entries.
|
||||
|
||||
|
||||
## DID ID Format
|
||||
|
||||
The ID of a `DID` entry is the [SHA-512Half][] of the following values, concatenated in order:
|
||||
|
||||
1. The `DID` space key (`0x0049`).
|
||||
2. The AccountID that controls the DID.
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,109 @@
|
||||
---
|
||||
html: xchainownedclaimid.html
|
||||
parent: ledger-entry-types.html
|
||||
blurb: An `XChainOwnedClaimID` object represents *one* cross-chain transfer of value.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainOwnedClaimID
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
[[Source]](https://github.com/seelabs/rippled/blob/xbridge/src/ripple/protocol/impl/LedgerFormats.cpp#L281-L293 "Source")
|
||||
|
||||
An `XChainOwnedClaimID` object represents *one* cross-chain transfer of value and includes information of the account on the source chain that locks or burns the funds on the source chain.
|
||||
|
||||
The `XChainOwnedClaimID` object must be acquired on the destination chain before submitting a `XChainCommit` on the source chain. Its purpose is to prevent transaction replay attacks and is also used as a place to collect attestations from witness servers.
|
||||
|
||||
An `XChainCreateClaimID` transaction is used to create a new `XChainOwnedClaimID`. The ledger object is destroyed when the funds are successfully claimed on the destination chain.
|
||||
|
||||
|
||||
## Example XChainOwnedClaimID JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"Account": "rBW1U7J9mEhEdk6dMHEFUjqQ7HW7WpaEMi",
|
||||
"Flags": 0,
|
||||
"OtherChainSource": "r9oXrvBX5aDoyMGkoYvzazxDhYoWFUjz8p",
|
||||
"OwnerNode": "0",
|
||||
"PreviousTxnID": "1CFD80E9CF232B8EED62A52857DE97438D12230C06496932A81DEFA6E66070A6",
|
||||
"PreviousTxnLgrSeq": 58673,
|
||||
"SignatureReward": "100",
|
||||
"XChainBridge": {
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"XChainClaimAttestations": [
|
||||
{
|
||||
"XChainClaimProofSig": {
|
||||
"Amount": "1000000",
|
||||
"AttestationRewardAccount": "rfgjrgEJGDxfUY2U8VEDs7BnB1jiH3ofu6",
|
||||
"AttestationSignerAccount": "rfsxNxZ6xB1nTPhTMwQajNnkCxWG8B714n",
|
||||
"Destination": "rBW1U7J9mEhEdk6dMHEFUjqQ7HW7WpaEMi",
|
||||
"PublicKey": "025CA526EF20567A50FEC504589F949E0E3401C13EF76DD5FD1CC2850FA485BD7B",
|
||||
"WasLockingChainSend": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"XChainClaimProofSig": {
|
||||
"Amount": "1000000",
|
||||
"AttestationRewardAccount": "rUUL1tP523M8KimERqVS7sxb1tLLmpndyv",
|
||||
"AttestationSignerAccount": "rEg5sHxZVTNwRL3BAdMwJatkmWDzHMmzDF",
|
||||
"Destination": "rBW1U7J9mEhEdk6dMHEFUjqQ7HW7WpaEMi",
|
||||
"PublicKey": "03D40434A6843638681E2F215310EBC4131AFB12EA85985DA073183B732525F7C9",
|
||||
"WasLockingChainSend": 1
|
||||
},
|
||||
}
|
||||
],
|
||||
"XChainClaimID": "b5",
|
||||
"LedgerEntryType": "XChainOwnedClaimID",
|
||||
"LedgerIndex": "20B136D7BF6D2E3D610E28E3E6BE09F5C8F4F0241BBF6E2D072AE1BACB1388F5"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainOwnedClaimID Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------------|:------------------|:------------------|:----------|:----------------|
|
||||
| `Account` | `string` | `ACCOUNT` | Yes | The account that owns this object. |
|
||||
| `LedgerIndex` | `string` | `HASH256` | Yes | The ledger index is a hash of a unique prefix for `XChainOwnedClaimID`s, the actual `XChainClaimID` value, and the fields in `XChainBridge`. |
|
||||
| `OtherChainSource` | `string` | `ACCOUNT` | Yes | The account that must send the corresponding `XChainCommit` on the source chain. The destination may be specified in the `XChainCommit` transaction, which means that if the `OtherChainSource` isn't specified, another account can try to specify a different destination and steal the funds. This also allows tracking only a single set of signatures, since we know which account will send the `XChainCommit` transaction. |
|
||||
| `SignatureReward` | `Currency Amount` | `AMOUNT` | Yes | The total amount to pay the witness servers for their signatures. It must be at least the value of `SignatureReward` in the `Bridge` ledger object. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The door accounts and assets of the bridge this object correlates to. |
|
||||
| `XChainClaimAttestations` | `array` | `ARRAY` | Yes | Attestations collected from the witness servers. This includes the parameters needed to recreate the message that was signed, including the amount, which chain (locking or issuing), optional destination, and reward account for that signature. |
|
||||
| `XChainClaimID` | `string` | `UINT64` | Yes | The unique sequence number for a cross-chain transfer. |
|
||||
|
||||
|
||||
### XChainClaimAttestations Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required | Description |
|
||||
|-------------------------------|-------------------|---------------|----------|-------------|
|
||||
| `XChainClaimProofSig` | `array` | `OBJECT` | Yes | An attestation from one witness server. |
|
||||
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount to claim in the `XChainCommit` transaction on the destination chain. |
|
||||
| `AttestationRewardAccount` | `string` | `ACCOUNT` | Yes | The account that should receive this signer's share of the `SignatureReward`. |
|
||||
| `AttestationSignerAccount` | `string` | `ACCOUNT` | Yes | The account on the door account's signer list that is signing the transaction. |
|
||||
| `Destination` | `string` | `ACCOUNT` | No | The destination account for the funds on the destination chain. |
|
||||
| `PublicKey` | `string` | `BLOB` | Yes | The public key used to verify the signature. |
|
||||
| `WasLockingChainSend` | `number` | `UINT8` | Yes | A boolean representing the chain where the event occurred. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,95 @@
|
||||
---
|
||||
html: xchainownedcreateaccountclaimid.html
|
||||
parent: ledger-entry-types.html
|
||||
blurb: The `XChainOwnedCreateAccountClaimID` ledger object is used to collect attestations for creating an account via a cross-chain transfer.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainOwnedCreateAccountClaimID
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
[[Source]](https://github.com/seelabs/rippled/blob/xbridge/src/ripple/protocol/impl/LedgerFormats.cpp#L296-L306 "Source")
|
||||
|
||||
The `XChainOwnedCreateAccountClaimID` ledger object is used to collect attestations for creating an account via a cross-chain transfer.
|
||||
|
||||
It is created when an `XChainAddAccountCreateAttestation` transaction adds a signature attesting to a `XChainAccountCreateCommit` transaction and the `XChainAccountCreateCount` is greater than or equal to the current `XChainAccountClaimCount` on the `Bridge` ledger object.
|
||||
|
||||
The ledger object is destroyed when all the attestations have been received and the funds have transferred to the new account.
|
||||
|
||||
|
||||
## Example XChainOwnedCreateAccountClaimID JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"LedgerEntryType": "XChainOwnedCreateAccountClaimID",
|
||||
"LedgerIndex": "5A92F6ED33FDA68FB4B9FD140EA38C056CD2BA9673ECA5B4CEF40F2166BB6F0C",
|
||||
"NewFields": {
|
||||
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"XChainAccountCreateCount": "66",
|
||||
"XChainBridge": {
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"XChainCreateAccountAttestations": [
|
||||
{
|
||||
"XChainCreateAccountProofSig": {
|
||||
"Amount": "20000000",
|
||||
"AttestationRewardAccount": "rMtYb1vNdeMDpD9tA5qSFm8WXEBdEoKKVw",
|
||||
"AttestationSignerAccount": "rL8qTrAvZ8Q1o1H9H9Ahpj3xjgmRvFLvJ3",
|
||||
"Destination": "rBW1U7J9mEhEdk6dMHEFUjqQ7HW7WpaEMi",
|
||||
"PublicKey": "021F7CC4033EFBE5E8214B04D1BAAEC14808DC6C02F4ACE930A8EF0F5909B0C438",
|
||||
"SignatureReward": "100",
|
||||
"WasLockingChainSend": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainOwnedCreateAccountClaimID Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:----------------------------------|:---------------|:------------------|:----------|:------------|
|
||||
| `Account` | `string` | `ACCOUNT` | Yes | The account that owns this object. |
|
||||
| `LedgerIndex` | `string` | `HASH256` | Yes | The ledger index is a hash of a unique prefix for `XChainOwnedClaimID`s, the actual `XChainClaimID` value, and the fields in `XChainBridge`. |
|
||||
| `XChainAccountCreateCount` | `number` | `UINT64` | Yes | An integer that determines the order that accounts created through cross-chain transfers must be performed. Smaller numbers must execute before larger numbers. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The door accounts and assets of the bridge this object correlates to. |
|
||||
| `XChainCreateAccountAttestations` | `array` | `ARRAY` | Yes | Attestations collected from the witness servers. This includes the parameters needed to recreate the message that was signed, including the amount, destination, signature reward amount, and reward account for that signature. With the exception of the reward account, all signatures must sign the message created with common parameters. |
|
||||
|
||||
|
||||
### XChainCreateAccountAttestations Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required | Description |
|
||||
|-------------------------------|-------------------|---------------|----------|-------------|
|
||||
| `XChainCreateAccountProofSig` | `array` | `OBJECT` | Yes | An attestation from one witness server. |
|
||||
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount committed by the `XChainAccountCreateCommit` transaction on the source chain. |
|
||||
| `AttestationRewardAccount` | `string` | `ACCOUNT` | Yes | The account that should receive this signer's share of the `SignatureReward`. |
|
||||
| `AttestationSignerAccount` | `string` | `ACCOUNT` | Yes | The account on the door account's signer list that is signing the transaction. |
|
||||
| `Destination` | `string` | `ACCOUNT` | Yes | The destination account for the funds on the destination chain. |
|
||||
| `PublicKey` | `string` | `BLOB` | Yes | The public key used to verify the signature. |
|
||||
| `WasLockingChainSend` | `number` | `UINT8` | Yes | A boolean representing the chain where the event occurred. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
46
content/references/protocol/transactions/types/diddelete.md
Normal file
46
content/references/protocol/transactions/types/diddelete.md
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
html: diddelete.html
|
||||
parent: transaction-types.html
|
||||
blurb: Delete a DID.
|
||||
labels:
|
||||
- DID
|
||||
status: not_enabled
|
||||
---
|
||||
# DIDDelete
|
||||
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/DID.cpp "Source")
|
||||
|
||||
_(Requires the [DID amendment][] :not_enabled:)_
|
||||
|
||||
Delete the [DID ledger entry](did.html) associated with the specified `Account` field.
|
||||
|
||||
**Note:** This transaction only uses the [common fields][].
|
||||
|
||||
|
||||
## Example {{currentpage.name}} JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"TransactionType": "DIDDelete",
|
||||
"Account": "rp4pqYgrTAtdPHuZd1ZQWxrzx45jxYcZex",
|
||||
"Fee": "12",
|
||||
"Sequence": 391,
|
||||
"SigningPubKey":"0293A815C095DBA82FAC597A6BB9D338674DB93168156D84D18417AD509FFF5904",
|
||||
"TxnSignature":"3044022011E9A7EE3C7AE9D202848390522E6840F7F3ED098CD13E..."
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Error Cases
|
||||
|
||||
Besides errors that can occur for all transactions, {{currentpage.name}} transactions can result in the following [transaction result codes](transaction-results.html):
|
||||
|
||||
| Error Code | Description |
|
||||
|:--------------------|:---------------------------------------------|
|
||||
| `tecNO_ENTRY` | The account doesn't have a DID. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
58
content/references/protocol/transactions/types/didset.md
Normal file
58
content/references/protocol/transactions/types/didset.md
Normal file
@@ -0,0 +1,58 @@
|
||||
---
|
||||
html: didset.html
|
||||
parent: transaction-types.html
|
||||
blurb: Create or update a DID.
|
||||
labels:
|
||||
- DID
|
||||
status: not_enabled
|
||||
---
|
||||
# DIDSet
|
||||
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/DID.cpp "Source")
|
||||
|
||||
_(Requires the [DID amendment][] :not_enabled:)_
|
||||
|
||||
Creates a new [DID ledger entry](did.html) or updates the fields of an existing one.
|
||||
|
||||
|
||||
## Example {{currentpage.name}} JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"TransactionType": "DIDSet",
|
||||
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"Fee": "10",
|
||||
"Sequence": 391,
|
||||
"URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
|
||||
"Data": "",
|
||||
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020"
|
||||
}
|
||||
```
|
||||
|
||||
{% include '_snippets/tx-fields-intro.md' %}
|
||||
|
||||
| Field | JSON Type | [Internal Type][] | Required? | Description |
|
||||
|:--------------|:----------|:------------------|:----------|:------------|
|
||||
| `Data` | String | Blob | No | The public attestations of identity credentials associated with the DID. |
|
||||
| `DIDDocument` | String | Blob | No | The DID document associated with the DID. |
|
||||
| `URI` | String | Blob | No | The Universal Resource Identifier associated with the DID. |
|
||||
|
||||
You must include either `Data`, `DIDDocument`, or `URI` when you submit the `DIDSet` transaction. If all three fields are missing, the transaction fails.
|
||||
|
||||
**Note:** To delete the `Data`, `DIDDocument`, or `URI` field from an existing DID ledger entry, add the field as an empty string.
|
||||
|
||||
|
||||
## Error Cases
|
||||
|
||||
Besides errors that can occur for all transactions, {{currentpage.name}} transactions can result in the following [transaction result codes](transaction-results.html):
|
||||
|
||||
| Error Code | Description |
|
||||
|:--------------------|:---------------------------------------------|
|
||||
| `tecEMPTY_DID` | The transaction will create an empty DID ledger entry. Check that your updates don't remove the `Data`, `DIDDocument`, and `URI` fields. |
|
||||
| `temEMPTY_DID` | The transaction is malformed and missing any DID information. Include either the `Data`, `DIDDocument`, or `URI` fields. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
html: xchainaccountcreatecommit.html
|
||||
parent: transaction-types.html
|
||||
blurb: Create an account on one of the chains that the bridge connects. This account serves as the bridge entrance for that chain.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainAccountCreateCommit
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L466-L474 "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
This transaction can only be used for XRP-XRP bridges.
|
||||
|
||||
The `XChainAccountCreateCommit` transaction creates a new account for a witness server to submit transactions on an issuing chain.
|
||||
|
||||
**Warning:** This transaction should only be executed if the witness attestations will be reliably delivered to the destination chain. If the signatures aren't delivered, then account creation will be blocked until attestations are received. This can be used maliciously; to disable this transaction on XRP-XRP bridges, omit the bridge's `MinAccountCreateAmount` field.
|
||||
|
||||
|
||||
## Example XChainAccountCreateCommit JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"Account": "rwEqJ2UaQHe7jihxGqmx6J4xdbGiiyMaGa",
|
||||
"Destination": "rD323VyRjgzzhY4bFpo44rmyh2neB5d8Mo",
|
||||
"TransactionType": "XChainAccountCreateCommit",
|
||||
"Amount": "20000000",
|
||||
"SignatureReward": "100",
|
||||
"XChainBridge": {
|
||||
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainAccountCreateCommit Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:------------------|:------------------|:------------------|:----------| :-----------|
|
||||
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount, in XRP, to use for account creation. This must be greater than or equal to the `MinAccountCreateAmount` specified in the `Bridge` ledger object. |
|
||||
| `Destination` | `string` | `ACCOUNT` | Yes | The destination account on the destination chain. |
|
||||
| `SignatureReward` | `Currency Amount` | `AMOUNT` | No | The amount, in XRP, to be used to reward the witness servers for providing signatures. This must match the amount on the `Bridge` ledger object. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to create accounts for. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
html: xchainaddaccountcreateattestation.html
|
||||
parent: transaction-types.html
|
||||
blurb: The `XChainAddAccountCreateAttestation` transaction provides an attestation from a witness server that a `XChainAccountCreateCommit` transaction occurred on the other chain.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainAddAccountCreateAttestation
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L447-L464 "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
The `XChainAddAccountCreateAttestation` transaction provides an attestation from a witness server that an `XChainAccountCreateCommit` transaction occurred on the other chain.
|
||||
|
||||
The signature must be from one of the keys on the door's signer list at the time the signature was provided. If the signature list changes between the time the signature was submitted and the quorum is reached, the new signature set is used and some of the currently collected signatures may be removed.
|
||||
|
||||
Any account can submit signatures.
|
||||
|
||||
**Note:** The reward is only sent to accounts that have keys on the current list. A quorum of signers need to agree on the `SignatureReward`, the same way they need to agree on the other data. A single witness server can't provide an incorrect value for this in an attempt to collect a larger reward.
|
||||
|
||||
|
||||
## Example XChainAddAccountCreateAttestation JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"Account": "rDr5okqGKmMpn44Bbhe5WAfDQx8e9XquEv",
|
||||
"TransactionType": "XChainAddAccountCreateAttestation",
|
||||
"OtherChainSource": "rUzB7yg1LcFa7m3q1hfrjr5w53vcWzNh3U",
|
||||
"Destination": "rJMfWNVbyjcCtds8kpoEjEbYQ41J5B6MUd",
|
||||
"Amount": "2000000000",
|
||||
"PublicKey": "EDF7C3F9C80C102AF6D241752B37356E91ED454F26A35C567CF6F8477960F66614",
|
||||
"Signature": "F95675BA8FDA21030DE1B687937A79E8491CE51832D6BEEBC071484FA5AF5B8A0E9AFF11A4AA46F09ECFFB04C6A8DAE8284AF3ED8128C7D0046D842448478500",
|
||||
"WasLockingChainSend": 1,
|
||||
"AttestationRewardAccount": "rpFp36UHW6FpEcZjZqq5jSJWY6UCj3k4Es",
|
||||
"AttestationSignerAccount": "rpWLegmW9WrFBzHUj7brhQNZzrxgLj9oxw",
|
||||
"XChainAccountCreateCount": "2",
|
||||
"SignatureReward": "204",
|
||||
"XChainBridge": {
|
||||
"LockingChainDoor": "r3nCVTbZGGYoWvZ58BcxDmiMUU7ChMa1eC",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"Fee": "20"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainAddAccountCreateAttestation Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:---------------------------|:------------------|:------------------|:----------|:------------|
|
||||
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount committed by the `XChainAccountCreateCommit` transaction on the source chain. |
|
||||
| `AttestationRewardAccount` | `string` | `ACCOUNT` | Yes | The account that should receive this signer's share of the `SignatureReward`. |
|
||||
| `AttestationSignerAccount` | `string` | `ACCOUNT` | Yes | The account on the door account's signer list that is signing the transaction. |
|
||||
| `Destination` | `string` | `ACCOUNT` | Yes | The destination account for the funds on the destination chain. |
|
||||
| `OtherChainSource` | `string` | `ACCOUNT` | Yes | The account on the source chain that submitted the `XChainAccountCreateCommit` transaction that triggered the event associated with the attestation. |
|
||||
| `PublicKey` | `string` | `BLOB` | Yes | The public key used to verify the signature. |
|
||||
| `Signature` | `string` | `BLOB` | Yes | The signature attesting to the event on the other chain. |
|
||||
| `SignatureReward` | `Currency Amount` | `AMOUNT` | Yes | The signature reward paid in the `XChainAccountCreateCommit` transaction. |
|
||||
| `WasLockingChainSend` | `number` | `UINT8` | Yes | A boolean representing the chain where the event occurred. |
|
||||
| `XChainAccountCreateCount` | `string` | `UINT64` | Yes | The counter that represents the order that the claims must be processed in. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge associated with the attestation. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,103 @@
|
||||
---
|
||||
html: xchainaddclaimattestation.html
|
||||
parent: transaction-types.html
|
||||
blurb: Submit proof (attestation) to the destination chain that an event that happened on the source chain.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainAddClaimAttestation
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L429-L445 "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
The `XChainAddClaimAttestation` transaction provides proof from a witness server, attesting to an `XChainCommit` transaction.
|
||||
|
||||
The signature must be from one of the keys on the door's signer list at the time the signature was provided. However, if the signature list changes between the time the signature was submitted and the quorum is reached, the new signature set is used and some of the currently collected signatures may be removed.
|
||||
|
||||
Any account can submit signatures.
|
||||
|
||||
**Note:** The reward is only sent to accounts that have keys on the current list. A quorum of signers need to agree on the `SignatureReward`, the same way they need to agree on the other data. A single witness server can't provide an incorrect value for this in an attempt to collect a larger reward.
|
||||
|
||||
|
||||
## Example XChainAddClaimAttestation JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"TransactionType": "XChainAddClaimAttestation",
|
||||
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"XChainAttestationBatch": {
|
||||
"XChainBridge": {
|
||||
"IssuingChainDoor": "rKeSSvHvaMZJp9ykaxutVwkhZgWuWMLnQt",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"LockingChainDoor": "rJvExveLEL4jNDEeLKCVdxaSCN9cEBnEQC",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"XChainClaimAttestationBatch" : [
|
||||
{
|
||||
"XChainClaimAttestationBatchElement" : {
|
||||
"Account" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx",
|
||||
"Amount" : "100000000",
|
||||
"AttestationSignerAccount" : "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx",
|
||||
"Destination" : "r9A8UyNpW3X46FUc6P7JZqgn6WgAPjBwPg",
|
||||
"PublicKey" : "03DAB289CA36FF377F3F4304C7A7203FDE5EDCBFC209F430F6A4355361425526D0",
|
||||
"Signature" : "616263",
|
||||
"WasLockingChainSend" : 1,
|
||||
"XChainClaimID" : "0000000000000000"
|
||||
}
|
||||
}
|
||||
],
|
||||
"XChainCreateAccountAttestationBatch": [
|
||||
{
|
||||
"XChainCreateAccountAttestationBatchElement": {
|
||||
"Account": "rnJmYAiqEVngtnb5ckRroXLtCbWC7CRUBx",
|
||||
"Amount": "1000000000",
|
||||
"AttestationSignerAccount": "rEziJZmeZzsJvGVUmpUTey7qxQLKYxaK9f",
|
||||
"Destination": "rKT9gDkaedAosiHyHZTjyZs2HvXpzuiGmC",
|
||||
"PublicKey": "03ADB44CA8E56F78A0096825E5667C450ABD5C24C34E027BC1AAF7E5BD114CB5B5",
|
||||
"Signature": "3044022036C8B90F85E8073C465F00625248A72D4714600F98EBBADBAD3B7ED226109A3A02204C5A0AE12D169CF790F66541F3DB59C289E0D9CA7511FDFE352BB601F667A26",
|
||||
"SignatureReward": "1000000",
|
||||
"WasLockingChainSend": 1,
|
||||
"XChainAccountCreateCount": "0000000000000001"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainAddClaimAttestation Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:---------------------------|:------------------|:------------------|:----------|-------------|
|
||||
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount committed by the `XChainCommit` transaction on the source chain. |
|
||||
| `AttestationRewardAccount` | `string` | `ACCOUNT` | Yes | The account that should receive this signer's share of the `SignatureReward`. |
|
||||
| `AttestationSignerAccount` | `string` | `ACCOUNT` | Yes | The account on the door account's signer list that is signing the transaction. |
|
||||
| `Destination` | `string` | `ACCOUNT` | No | The destination account for the funds on the destination chain (taken from the `XChainCommit` transaction).
|
||||
| `OtherChainSource` | `string` | `ACCOUNT` | Yes | The account on the source chain that submitted the `XChainCommit` transaction that triggered the event associated with the attestation.
|
||||
| `PublicKey` | `string` | `BLOB` | Yes | The public key used to verify the attestation signature. |
|
||||
| `Signature` | `string` | `BLOB` | Yes | The signature attesting to the event on the other chain. |
|
||||
| `WasLockingChainSend` | `number` | `UINT8` | Yes | A boolean representing the chain where the event occurred. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to use to transfer funds. |
|
||||
| `XChainClaimID` | `string` | `UINT64` | Yes | The `XChainClaimID` associated with the transfer, which was included in the `XChainCommit` transaction. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
html: xchainclaim.html
|
||||
parent: transaction-types.html
|
||||
blurb: Complete a cross-chain transfer of value by claiming the value on the destination chain.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainClaim
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L418-L427 "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
The `XChainClaim` transaction completes a cross-chain transfer of value. It allows a user to claim the value on the destination chain - the equivalent of the value locked on the source chain. A user can only claim the value if they own the cross-chain claim ID associated with the value locked on the source chain (the `Account` field). The user can send the funds to anyone (the `Destination` field). This transaction is only needed if an `OtherChainDestination` isn't specified in the `XChainCommit` transaction, or if something goes wrong with the automatic transfer of funds.
|
||||
|
||||
If the transaction succeeds in moving funds, the referenced `XChainOwnedClaimID` ledger object will be destroyed. This prevents transaction replay. If the transaction fails, the `XChainOwnedClaimID` won't be destroyed and the transaction can be re-run with different parameters.
|
||||
|
||||
|
||||
## Example XChainClaim JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"Account": "rahDmoXrtPdh7sUdrPjini3gcnTVYjbjjw",
|
||||
"Amount": "10000",
|
||||
"TransactionType": "XChainClaim",
|
||||
"XChainClaimID": "13f",
|
||||
"Destination": "rahDmoXrtPdh7sUdrPjini3gcnTVYjbjjw",
|
||||
"XChainBridge": {
|
||||
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainClaim Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:------------------------|:------------------|:------------------|:----------|-------------|
|
||||
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The amount to claim on the destination chain. This must match the amount attested to on the attestations associated with this `XChainClaimID`. |
|
||||
| `Destination` | `string` | `ACCOUNT` | Yes | The destination account on the destination chain. It must exist or the transaction will fail. However, if the transaction fails in this case, the sequence number and collected signatures won't be destroyed, and the transaction can be rerun with a different destination. |
|
||||
| `DestinationTag` | `int` | `UINT32` | No | An integer destination tag. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to use for the transfer. |
|
||||
| `XChainClaimID` | `string` | `UINT64` | Yes | The unique integer ID for the cross-chain transfer that was referenced in the corresponding `XChainCommit` transaction. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
html: xchaincommit.html
|
||||
parent: transaction-types.html
|
||||
blurb: Initiate a cross-chain transfer of value.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainCommit
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L408-L416 "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
The `XChainCommit` is the second step in a cross-chain transfer. It puts assets into trust on the locking chain so that they can be wrapped on the issuing chain, or burns wrapped assets on the issuing chain so that they can be returned on the locking chain.
|
||||
|
||||
|
||||
## Example XChainCommit JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"Account": "rMTi57fNy2UkUb4RcdoUeJm7gjxVQvxzUo",
|
||||
"TransactionType": "XChainCommit",
|
||||
"XChainBridge": {
|
||||
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"Amount": "10000",
|
||||
"XChainClaimID": "13f"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainCommit Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:------------------------|:------------------|:------------------|:----------|-------------|
|
||||
| `Amount` | `Currency Amount` | `AMOUNT` | Yes | The asset to commit, and the quantity. This must match the door account's `LockingChainIssue` (if on the locking chain) or the door account's `IssuingChainIssue` (if on the issuing chain). |
|
||||
| `OtherChainDestination` | `string` | `ACCOUNT` | No | The destination account on the destination chain. If this is not specified, the account that submitted the `XChainCreateClaimID` transaction on the destination chain will need to submit a `XChainClaim` transaction to claim the funds. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to use to transfer funds. |
|
||||
| `XChainClaimID` | `string` | `UINT64` | Yes | The unique integer ID for a cross-chain transfer. This must be acquired on the destination chain (via a `XChainCreateClaimID` transaction) and checked from a validated ledger before submitting this transaction. If an incorrect sequence number is specified, the funds will be lost. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,67 @@
|
||||
---
|
||||
html: xchaincreatebridge.html
|
||||
parent: transaction-types.html
|
||||
blurb: Create a bridge between two chains.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainCreateBridge
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L381-L388 "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
The `XChainCreateBridge` transaction creates a new `Bridge` ledger object and defines a new cross-chain bridge entrance on the chain that the transaction is submitted on. It includes information about door accounts and assets for the bridge.
|
||||
|
||||
The transaction must be submitted first by the locking chain door account. To set up a valid bridge, door accounts on both chains must submit this transaction, in addition to setting up witness servers.
|
||||
|
||||
The complete production-grade setup would also include a `SignerListSet` transaction on the two door accounts for the witnesses’ signing keys, as well as disabling the door accounts’ master key. This ensures that the witness servers are truly in control of the funds.
|
||||
|
||||
**Note:** Each door account can only have one bridge. This prevents the creation of duplicate bridges for the same asset, which can cause asset imbalances on either chain.
|
||||
|
||||
|
||||
## Example XChainCreateBridge JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"TransactionType": "XChainCreateBridge",
|
||||
"Account": "rhWQzvdmhf5vFS35vtKUSUwNZHGT53qQsg",
|
||||
"XChainBridge": {
|
||||
"LockingChainDoor": "rhWQzvdmhf5vFS35vtKUSUwNZHGT53qQsg",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"SignatureReward": 200,
|
||||
"MinAccountCreateAmount": 1000000
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainCreateBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:-------------------------|:------------------|:------------------|:----------------|:------|
|
||||
| `MinAccountCreateAmount` | `Currency Amount` | `AMOUNT` | No | The minimum amount, in XRP, required for a `XChainAccountCreateCommit` transaction. If this isn't present, the `XChainAccountCreateCommit` transaction will fail. This field can only be present on XRP-XRP bridges. |
|
||||
| `SignatureReward` | `Currency Amount` | `AMOUNT` | Yes | The total amount to pay the witness servers for their signatures. This amount will be split among the signers. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge (door accounts and assets) to create. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
html: xchaincreateclaimid.html
|
||||
parent: transaction-types.html
|
||||
blurb: Create a cross-chain claim ID that is used for a cross-chain transfer.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainCreateClaimID
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TxFormats.cpp#L399-L406 "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
The `XChainCreateClaimID` transaction creates a new cross-chain claim ID that is used for a cross-chain transfer. A cross-chain claim ID represents *one* cross-chain transfer of value.
|
||||
|
||||
This transaction is the first step of a cross-chain transfer of value and is submitted on the destination chain, not the source chain.
|
||||
|
||||
It also includes the account on the source chain that locks or burns the funds on the source chain.
|
||||
|
||||
|
||||
## Example XChainCreateClaimID JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"Account": "rahDmoXrtPdh7sUdrPjini3gcnTVYjbjjw",
|
||||
"OtherChainSource": "rMTi57fNy2UkUb4RcdoUeJm7gjxVQvxzUo",
|
||||
"TransactionType": "XChainCreateClaimID",
|
||||
"SignatureReward": "100",
|
||||
"XChainBridge": {
|
||||
"LockingChainDoor": "rMAXACCrp3Y8PpswXcg3bKggHX76V3F8M4",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainCreateClaimID Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:-------------------|:------------------|:------------------|:----------|-------------|
|
||||
| `OtherChainSource` | `string` | `ACCOUNT` | Yes | The account that must send the `XChainCommit` transaction on the source chain. |
|
||||
| `SignatureReward` | `string` | `ACCOUNT` | Yes | The amount, in XRP, to reward the witness servers for providing signatures. This must match the amount on the `Bridge` ledger object. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to create the claim ID for. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
html: xchainmodifybridge.html
|
||||
parent: transaction-types.html
|
||||
blurb: Modify the parameters of a bridge.
|
||||
labels:
|
||||
- Interoperability
|
||||
status: not_enabled
|
||||
---
|
||||
# XChainModifyBridge
|
||||
[[Source]](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/TxFormats.cpp#L390-L397 "Source")
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
The `XChainModifyBridge` transaction allows bridge managers to modify the parameters of the bridge. They can only change the `SignatureReward` and the `MinAccountCreateAmount`.
|
||||
|
||||
This transaction must be sent by the door account and requires the entities that control the witness servers to coordinate and provide the signatures for this transaction. This coordination happens outside the ledger.
|
||||
|
||||
**Note:** You can't modify the signer list for the bridge with this transaction. The signer list is on the door account itself and is changed in the same way signer lists are changed on accounts (via a `SignerListSet` transaction).
|
||||
|
||||
|
||||
## Example XChainModifyBridge JSON
|
||||
|
||||
```json
|
||||
{
|
||||
"TransactionType": "XChainModifyBridge",
|
||||
"Account": "rhWQzvdmhf5vFS35vtKUSUwNZHGT53qQsg",
|
||||
"XChainBridge": {
|
||||
"LockingChainDoor": "rhWQzvdmhf5vFS35vtKUSUwNZHGT53qQsg",
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
},
|
||||
"SignatureReward": 200,
|
||||
"MinAccountCreateAmount": 1000000
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## XChainModifyBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:-------------------------|:------------------|:------------------|:----------|-------------|
|
||||
| `Flags` | `number` | `UINT32` | Yes | Specifies the flags for this transaction. |
|
||||
| `MinAccountCreateAmount` | `Currency Amount` | `AMOUNT` | No | The minimum amount, in XRP, required for a `XChainAccountCreateCommit` transaction. If this is not present, the `XChainAccountCreateCommit` transaction will fail. This field can only be present on XRP-XRP bridges. |
|
||||
| `SignatureReward` | `Currency Amount` | `AMOUNT` | No | The signature reward split between the witnesses for submitting attestations. |
|
||||
| `XChainBridge` | `XChainBridge` | `XCHAIN_BRIDGE` | Yes | The bridge to modify. |
|
||||
|
||||
|
||||
### XChainBridge Fields
|
||||
|
||||
| Field | JSON Type | Internal Type | Required? | Description |
|
||||
|:--------------------|:----------|:------------------|:----------|:----------------|
|
||||
| `IssuingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the issuing chain. For an XRP-XRP bridge, this must be the genesis account (the account that is created when the network is first started, which contains all of the XRP). |
|
||||
| `IssuingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is minted and burned on the issuing chain. For an IOU-IOU bridge, the issuer of the asset must be the door account on the issuing chain, to avoid supply issues. |
|
||||
| `LockingChainDoor` | `string` | `ACCOUNT` | Yes | The door account on the locking chain. |
|
||||
| `LockingChainIssue` | `Issue` | `ISSUE` | Yes | The asset that is locked and unlocked on the locking chain. |
|
||||
|
||||
|
||||
## Transaction Flags
|
||||
|
||||
In addition to the universal transaction flags that are applicable to all transactions, you can specify this flag:
|
||||
|
||||
| Flag Name | Flag Value | Description |
|
||||
|------------------------------|--------------|-------------|
|
||||
| `tfClearAccountCreateAmount` | `0x00010000` | Clears the `MinAccountCreateAmount` of the bridge. |
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -16,6 +16,8 @@ The following is a comprehensive list of all known [amendments](amendments.html)
|
||||
|
||||
| Name | Introduced | Status |
|
||||
|:----------------------------------|:-----------|:------------------------------|
|
||||
| [DID][] | v2.0.0 | [Open for Voting: 2024-01-09](https://xrpl.org/blog/2024/rippled-2.0.0.html "BADGE_80d0e0") |
|
||||
| [XChainBridge][] | v2.0.0 | [Open for Voting: 2024-01-09](https://xrpl.org/blog/2024/rippled-2.0.0.html "BADGE_80d0e0") |
|
||||
| [AMM][] | v1.12.0 | [Open for Voting: 2023-09-06](https://xrpl.org/blog/2023/rippled-1.12.0.html "BADGE_80d0e0") |
|
||||
| [Clawback][] | v1.12.0 | [Open for Voting: 2023-09-06](https://xrpl.org/blog/2023/rippled-1.12.0.html "BADGE_80d0e0") |
|
||||
| [XRPFees][] | v1.10.0 | [Open for Voting: 2023-03-14](https://xrpl.org/blog/2023/rippled-1.10.0.html "BADGE_80d0e0") |
|
||||
@@ -82,7 +84,6 @@ The following is a list of [amendments](amendments.html) that are being develope
|
||||
| Name | Status | Additional Information |
|
||||
|:----------------------------------|:------------------------------------------|:-------------------------------|
|
||||
| [Hooks][] | [In Development: TBD]( "BADGE_LIGHTGREY") | [XRPL Hooks](https://hooks.xrpl.org/) |
|
||||
| [XChainBridge][] | [In Development: TBD]( "BADGE_LIGHTGREY") | [XLS-38d](https://github.com/XRPLF/XRPL-Standards/blob/master/XLS-38d-XChainBridge/README.md) [Documentation](https://opensource.ripple.com/docs/xls-38d-cross-chain-bridge/cross-chain-bridges/) |
|
||||
| [OwnerPaysFee][] | [In Development: TBD]( "BADGE_LIGHTGREY") | |
|
||||
|
||||
**Tip:** This list is updated manually. If you're working on an amendment and have a private network to test the changes, you can edit this page to add your in-development amendment to this list. For more information on contributing to the XRP Ledger, see [Contribute Code to the XRP Ledger](contribute-code-flow.html).
|
||||
@@ -105,6 +106,28 @@ The following is a list of known [amendments](amendments.html) that have been re
|
||||
|
||||
## Details about Known Amendments
|
||||
|
||||
### DID
|
||||
[DID]: #did
|
||||
|
||||
| Amendment | DID |
|
||||
|:-------------|:----|
|
||||
| Amendment ID | DB432C3A09D9D5DFC7859F39AE5FF767ABC59AED0A9FB441E83B814D8946C109 |
|
||||
| Status | Open for Voting |
|
||||
| Default Vote (Latest stable release) | No |
|
||||
| Pre-amendment functionality retired? | No |
|
||||
|
||||
Adds to the ledger Decentralized Identifier (DID) functionality that conforms to the [World Wide Web Consortium](https://www.w3.org/press-releases/2022/did-rec/) standard. DIDs provide a digital identity, not dependent on a centralized authority and controlled by the DID subject.
|
||||
|
||||
Adds new transactions:
|
||||
|
||||
- DIDDelete - Delete the DID associated with your XRPL account.
|
||||
- DIDSet - Create a new DID or update an existing one.
|
||||
|
||||
Adds a new `DID` ledger entry type.
|
||||
|
||||
Adds several new transaction result codes.
|
||||
|
||||
|
||||
### AMM
|
||||
[AMM]: #amm
|
||||
|
||||
@@ -193,11 +216,30 @@ See [Clawback](https://opensource.ripple.com/docs/clawback/clawback-of-issued-cu
|
||||
| Amendment | XChainBridge |
|
||||
|:-------------|:-----------------|
|
||||
| Amendment ID | C98D98EE9616ACD36E81FDEB8D41D349BF5F1B41DD64A0ABC1FE9AA5EA267E9C |
|
||||
| Status | In Development |
|
||||
| Status | Open for Voting |
|
||||
| Default Vote (Latest stable release) | No |
|
||||
| Pre-amendment functionality retired? | No |
|
||||
|
||||
Adds "cross-chain bridges" for synchronizing assets between different networks, such as Mainnet and a sidechain. Standards draft: [XLS-38d Cross-Chain Bridge](https://github.com/XRPLF/XRPL-Standards/blob/master/XLS-38d-XChainBridge/README.md).
|
||||
Adds cross-chain bridges, enabling the transfer of digital assets between networks, such as Mainnet and a sidechain.
|
||||
|
||||
Adds new transactions:
|
||||
|
||||
- XChainAccountCreateCommit - Create a new account for a witness server to submit transactions on an issuing chain..
|
||||
- XChainAddAccountCreateAttestation - Provide an attestation that an account was created for a witness server to use.
|
||||
- XChainAddClaimAttestation - Provide an attestation that assets were locked on a locking chain.
|
||||
- XChainClaim - Claim assets on the destination chain.
|
||||
- XChainCommit - Locks assets on the locking chain.
|
||||
- XChainCreateBridge - Create a bridge ledger object.
|
||||
- XChainCreateClaimID - Create a new cross-chain claim ID that is used for a cross-chain transfer.
|
||||
- XChainModifyBridge - Modify the parameters of a bridge.
|
||||
|
||||
Adds new ledger entry types:
|
||||
|
||||
- Bridge - A single cross-chain bridge that connects the XRP Ledger with another blockchain.
|
||||
- XChainOwnedClaimID - A cross-chain transfer of value that includes information of the account on the source chain that locks or burns the funds on the source chain.
|
||||
- XChainOwnedCreateAccountClaimID - Collects attestations for creating an account via a cross-chain transfer.
|
||||
|
||||
Adds several new transaction result codes.
|
||||
|
||||
|
||||
### CryptoConditions
|
||||
|
||||
@@ -17,6 +17,7 @@ If you don't [run your own `rippled` server](install-rippled.html), you can use
|
||||
| Ripple[¹][] | Testnet | `https://s.altnet.rippletest.net:51234/` | `wss://s.altnet.rippletest.net:51233/` | Testnet public server |
|
||||
| XRPL Labs | Testnet | `https://testnet.xrpl-labs.com/` | `wss://testnet.xrpl-labs.com/` | Testnet public server with CORS support |
|
||||
| Ripple[¹][] | Devnet | `https://s.devnet.rippletest.net:51234/` | `wss://s.devnet.rippletest.net:51233/` | Devnet public server |
|
||||
| Ripple[¹][] | Sidechain-Devnet | `https://sidechain-net2.devnet.rippletest.net:51234/` | `wss://sidechain-net2.devnet.rippletest.net:51233/` | Sidechain Devnet to test cross-chain bridge features. Devnet serves as the locking chain while this sidechain serves as the issuing chain. |
|
||||
| XRPL Labs | Xahau Testnet | `https://xahau-test.net/` | `wss://xahau-test.net/` | [Hooks-enabled](https://hooks.xrpl.org/) Xahau Testnet |
|
||||
|
||||
[Network]: parallel-networks.html
|
||||
|
||||
8
content/tutorials/tasks/use-xrpl-sidechains/index.md
Normal file
8
content/tutorials/tasks/use-xrpl-sidechains/index.md
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
html: use-xrpl-sidechains.html
|
||||
parent: tasks.html
|
||||
template: pagetype-category.html.jinja
|
||||
---
|
||||
# Use XRPL Sidechains
|
||||
|
||||
Bridge XRP and tokens from _Mainnet_ to XRPL sidechains.
|
||||
@@ -0,0 +1,168 @@
|
||||
---
|
||||
html: set-up-iou-iou-bridge.html
|
||||
parent: use-xrpl-sidechains.html
|
||||
blurb: Steps to set up an IOU-IOU bridge.
|
||||
labels:
|
||||
- Interoperability
|
||||
---
|
||||
# Set Up an IOU-IOU Bridge
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
Setting up an IOU-IOU bridge enables you to move tokens between chains.
|
||||
|
||||
**Note**: The code samples on this page illustrate how to bridge a hypotethical "TST" token from *Devnet* to *Sidechain-Devnet*, using a supported [client library](client-libraries.html) to query and submit transactions.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- An XRP-XRP bridge must be set up between the locking and issuing chain.
|
||||
- Ensure the witnesses' transaction submission accounts are funded on the locking and issuing chains.
|
||||
- Set up an issuer on the issuing chain to mint and burn a wrapped version of the token you want to bridge. See: [Issue a Fungible Token](issue-a-fungible-token.html)
|
||||
|
||||
## Steps
|
||||
|
||||
### 1. Connect to the locking chain (Devnet) and issuing chain (Sidechain-Devnet).
|
||||
|
||||
```javascript
|
||||
const xrpl = require('xrpl')
|
||||
|
||||
const WS_URL_lockingchain = 'wss://s.devnet.rippletest.net:51233/' // Locking chain
|
||||
const WS_URL_issuingchain = 'wss://sidechain-net2.devnet.rippletest.net:51233/' // Issuing chain
|
||||
|
||||
// Define the XChainBridge, using the "TST" token.
|
||||
const xchainbridge = {
|
||||
"LockingChainDoor": "rn895gh1MHnnAgL4hR9q464PJSFiYwQYcV",
|
||||
"LockingChainIssue": {
|
||||
"currency": "TST",
|
||||
"issuer": "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd"
|
||||
},
|
||||
"IssuingChainDoor": "ra1MsW5s6Qg4NXUAJVKw8f21ZghSYG1DQw", // Use the account issuing the wrapped token
|
||||
"IssuingChainIssue": {
|
||||
"currency": "TST",
|
||||
"issuer": "ra1MsW5s6Qg4NXUAJVKw8f21ZghSYG1DQw"
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// Define the network clients.
|
||||
const client_lockingchain = new xrpl.Client(WS_URL_lockingchain)
|
||||
await client_lockingchain.connect()
|
||||
|
||||
const client_issuingchain = new xrpl.Client(WS_URL_issuingchain)
|
||||
await client_issuingchain.connect()
|
||||
|
||||
// ... custom code goes here
|
||||
|
||||
// Disconnect when done (If you omit this, Node.js won't end the process)
|
||||
await client_lockingchain.disconnect()
|
||||
await client_issuingchain.disconnect()
|
||||
}
|
||||
|
||||
main()
|
||||
```
|
||||
|
||||
### 2. Submit an `XChainCreateBridge` transaction from the door account on the locking chain.
|
||||
|
||||
Don't include a `MinAccountCreateAmount` value.
|
||||
|
||||
```javascript
|
||||
const wallet_lockingchain = xrpl.Wallet.fromSeed('s████████████████████████████') // Locking chain door account
|
||||
const xchaincreatebridge_lockingchain = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "XChainCreateBridge",
|
||||
"Account": wallet_lockingchain.address,
|
||||
"XChainBridge": xchainbridge,
|
||||
"SignatureReward": 200
|
||||
}, {autofill: true, wallet: wallet_lockingchain})
|
||||
```
|
||||
|
||||
### 3. Submit a `SignerListSet` transaction from the door account on the locking chain.
|
||||
|
||||
```javascript
|
||||
const signerlistset_lockingchain = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "SignerListSet",
|
||||
"Account": wallet_lockingchain.address,
|
||||
"Fee": "12",
|
||||
"SignerQuorum": 2,
|
||||
// Use the witness servers' submitting accounts on the locking chain.
|
||||
"SignerEntries": [
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}, {autofill: true, wallet: wallet_lockingchain})
|
||||
```
|
||||
|
||||
### 4. Disable the master key on the locking chain's door account with an `AccountSet` transaction.
|
||||
|
||||
```javascript
|
||||
const disablekey_lockingchain = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "AccountSet",
|
||||
"Account": wallet_lockingchain.address,
|
||||
"SetFlag": 4
|
||||
}, {autofill: true, wallet: wallet_lockingchain})
|
||||
```
|
||||
|
||||
### 5. Submit an `XChainCreateBridge` transaction from the door account on the issuing chain.
|
||||
|
||||
Don't include a `MinAccountCreateAmount` value.
|
||||
|
||||
```javascript
|
||||
const wallet_issuingchain = xrpl.Wallet.fromSeed('s████████████████████████████') // The account issuing the wrapped token
|
||||
const xchaincreatebridge_issuingchain = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "XChainCreateBridge",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"XChainBridge": xchainbridge,
|
||||
"SignatureReward": 200
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
```
|
||||
|
||||
### 6. Submit a `SignerListSet` transaction from the door account on the issuing chain.
|
||||
|
||||
```javascript
|
||||
const signerlistset_issuingchain = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "SignerListSet",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"Fee": "12",
|
||||
"SignerQuorum": 2,
|
||||
// Use the witness servers' submitting accounts on the issuing chain.
|
||||
"SignerEntries": [
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rD323VyRjgzzhY4bFpo44rmyh2neB5d8Mo",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rJMfWNVbyjcCtds8kpoEjEbYQ41J5B6MUd",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
```
|
||||
|
||||
### 7. Disable the master key on the issuing chain's door account with an `AccountSet` transaction.
|
||||
|
||||
```javascript
|
||||
const disablekey_issuingchain = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "AccountSet",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"SetFlag": 4
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
```
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,234 @@
|
||||
---
|
||||
html: set-up-xrp-xrp-bridge.html
|
||||
parent: use-xrpl-sidechains.html
|
||||
blurb: Steps to create an XRP-XRP bridge with a new sidechain.
|
||||
labels:
|
||||
- Interoperability
|
||||
---
|
||||
# Set Up an XRP-XRP Bridge
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
Setting up an XRP-XRP bridge enables you to move XRP between chains. The set up requires using the genesis account on the issuing chain as a door account to submit attestations and create transaction submission accounts for witnesses.
|
||||
|
||||
**Note**: The code samples on this page illustrate how a bridge was set up between *Devnet* and *Sidechain-Devnet*, using a supported [client library](client-libraries.html) to query and submit transactions. This bridge is already created, so the process can't be reproduced on these networks.
|
||||
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- The issuing chain is set up and active. Validators must be running and successfully closing ledgers.
|
||||
- The witnesses' accounts on the locking chain are funded, so they can submit transactions.
|
||||
- A door account for the bridge exists on the locking chain.
|
||||
|
||||
|
||||
## Steps
|
||||
|
||||
### 1. Connect to the locking chain (Devnet) and issuing chain (Sidechain-Devnet).
|
||||
|
||||
```javascript
|
||||
const xrpl = require('xrpl')
|
||||
|
||||
const WS_URL_lockingchain = 'wss://s.devnet.rippletest.net:51233/' // Locking chain
|
||||
const WS_URL_issuingchain = 'wss://sidechain-net2.devnet.rippletest.net:51233/' // Issuing chain
|
||||
|
||||
// Define the XChainBridge
|
||||
const xchainbridge = {
|
||||
"LockingChainDoor": "rnQAXXWoFNN6PEqwqsdTngCtFPCrmfuqFJ", // Locking chain door account
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", // Use the genesis address hardcoded in rippled
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// Define the network clients.
|
||||
const client_lockingchain = new xrpl.Client(WS_URL_lockingchain)
|
||||
await client_lockingchain.connect()
|
||||
|
||||
const client_issuingchain = new xrpl.Client(WS_URL_issuingchain)
|
||||
await client_issuingchain.connect()
|
||||
|
||||
// ... custom code goes here
|
||||
|
||||
// Disconnect when done (If you omit this, Node.js won't end the process)
|
||||
await client_lockingchain.disconnect()
|
||||
await client_issuingchain.disconnect()
|
||||
}
|
||||
|
||||
main()
|
||||
```
|
||||
|
||||
### 2. Submit an `XChainCreateBridge` transaction from the door account on the locking chain.
|
||||
|
||||
```javascript
|
||||
const wallet_lockingchain = xrpl.Wallet.fromSeed('s████████████████████████████') // Locking chain door account
|
||||
const xchaincreatebridge_lockingchain = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "XChainCreateBridge",
|
||||
"Account": wallet_lockingchain.address,
|
||||
"XChainBridge": xchainbridge,
|
||||
"SignatureReward": 200,
|
||||
"MinAccountCreateAmount": 1000000 // This value should at least be equal to the account reserve on the issuing chain.
|
||||
}, {autofill: true, wallet: wallet_lockingchain})
|
||||
```
|
||||
|
||||
### 3. Submit a `SignerListSet` transaction from the door account on the locking chain.
|
||||
|
||||
```javascript
|
||||
const signerlistset_lockingchain = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "SignerListSet",
|
||||
"Account": wallet_lockingchain.address,
|
||||
"Fee": "12",
|
||||
"SignerQuorum": 2,
|
||||
// Use the witness servers' submitting accounts on the locking chain.
|
||||
"SignerEntries": [
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}, {autofill: true, wallet: wallet_lockingchain})
|
||||
```
|
||||
|
||||
### 4. Disable the master key on the locking chain's door account with an `AccountSet` transaction.
|
||||
|
||||
```javascript
|
||||
const disablekey_lockingchain = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "AccountSet",
|
||||
"Account": wallet_lockingchain.address,
|
||||
"SetFlag": 4
|
||||
}, {autofill: true, wallet: wallet_lockingchain})
|
||||
```
|
||||
|
||||
### 5. Submit an `XChainCreateBridge` transaction from the genesis account on the issuing chain.
|
||||
|
||||
```javascript
|
||||
const wallet_issuingchain = xrpl.Wallet.fromSeed('snoPBrXtMeMyMHUVTgbuqAfg1SUTb') // Use the genesis secret hardcoded in rippled.
|
||||
const xchaincreatebridge_issuingchain = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "XChainCreateBridge",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"XChainBridge": xchainbridge,
|
||||
"SignatureReward": 200,
|
||||
"MinAccountCreateAmount": 1000000
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
```
|
||||
|
||||
### 6. Submit `XChainAccountCreateCommit` transactions from the witnesses' locking chain accounts to create corresponding accounts on the issuing chain.
|
||||
|
||||
```javascript
|
||||
const wallet_witness_1 = xrpl.Wallet.fromSeed('s████████████████████████████') // Witness server 1 from `SignerListSet`: rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW
|
||||
const wallet_witness_2 = xrpl.Wallet.fromSeed('s████████████████████████████') // Witness server 2 from `SignerListSet`: rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v
|
||||
|
||||
const xchainaccountcreatecommit_witness_1 = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "XChainAccountCreateCommit",
|
||||
"Account": wallet_witness_1.address,
|
||||
"Destination": "rD323VyRjgzzhY4bFpo44rmyh2neB5d8Mo", // The account to create and fund for witness 1 on the issuing chain.
|
||||
"TransactionType": "XChainAccountCreateCommit",
|
||||
"Amount": "20000000",
|
||||
"SignatureReward": "100",
|
||||
"XChainBridge": xchainbridge
|
||||
}, {autofill: true, wallet: wallet_witness_1})
|
||||
|
||||
const xchainaccountcreatecommit_witness_2 = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "XChainAccountCreateCommit",
|
||||
"Account": wallet_witness_2.address,
|
||||
"Destination": "rJMfWNVbyjcCtds8kpoEjEbYQ41J5B6MUd", // The account to create and fund for witness 2 on the issuing chain.
|
||||
"TransactionType": "XChainAccountCreateCommit",
|
||||
"Amount": "20000000",
|
||||
"SignatureReward": "100",
|
||||
"XChainBridge": xchainbridged
|
||||
}, {autofill: true, wallet: wallet_witness_1})
|
||||
```
|
||||
|
||||
### 7. Submit attestations for each `XChainAccountCreateCommit` transaction.
|
||||
|
||||
Use the `XChainAddAccountCreateAttestation` transaction to submit each attestation on the issuing chain. Sign these transactions with the genesis account on the issuing chain.
|
||||
|
||||
```javascript
|
||||
// Witness 1 attestation
|
||||
const xchainaddaccountcreateattestation_witness_1 = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "XChainAddAccountCreateAttestation",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"OtherChainSource": wallet_witness_1.address,
|
||||
"Destination": "rD323VyRjgzzhY4bFpo44rmyh2neB5d8Mo",
|
||||
"Amount": "2000000000",
|
||||
"PublicKey": wallet_witness_1.publicKey,
|
||||
"Signature": xchainaccountcreatecommit_witness_1.result.TxnSignature,
|
||||
"WasLockingChainSend": 1,
|
||||
"AttestationRewardAccount": "rD323VyRjgzzhY4bFpo44rmyh2neB5d8Mo",
|
||||
"AttestationSignerAccount": wallet_witness_1.address,
|
||||
"XChainAccountCreateCount": "1",
|
||||
"SignatureReward": "204",
|
||||
"XChainBridge": xchainbridge,
|
||||
"Fee": "20"
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
|
||||
// Witness 2 attestation
|
||||
const xchainaddaccountcreateattestation_witness_2 = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "XChainAddAccountCreateAttestation",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"OtherChainSource": wallet_witness_2.address,
|
||||
"Destination": "rJMfWNVbyjcCtds8kpoEjEbYQ41J5B6MUd",
|
||||
"Amount": "2000000000",
|
||||
"PublicKey": wallet_witness_2.publicKey,
|
||||
"Signature": xchainaccountcreatecommit_witness_2.result.TxnSignature,
|
||||
"WasLockingChainSend": 1,
|
||||
"AttestationRewardAccount": "rJMfWNVbyjcCtds8kpoEjEbYQ41J5B6MUd",
|
||||
"AttestationSignerAccount": wallet_witness_2.address,
|
||||
"XChainAccountCreateCount": "1",
|
||||
"SignatureReward": "204",
|
||||
"XChainBridge": xchainbridge,
|
||||
"Fee": "20"
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
```
|
||||
|
||||
### 8. Submit a `SignerListSet` transaction from the genesis account on the issuing chain.
|
||||
|
||||
```javascript
|
||||
const signerlistset_issuingchain = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "SignerListSet",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"Fee": "12",
|
||||
"SignerQuorum": 2,
|
||||
// Use the witness servers' submitting accounts on the issuing chain created in step 7
|
||||
"SignerEntries": [
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rD323VyRjgzzhY4bFpo44rmyh2neB5d8Mo",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rJMfWNVbyjcCtds8kpoEjEbYQ41J5B6MUd",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
```
|
||||
|
||||
### 9. Disable the master key on the issuing chain's genesis account with an `AccountSet` transaction.
|
||||
|
||||
```javascript
|
||||
const disablekey_issuingchain = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "AccountSet",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"SetFlag": 4
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
```
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -0,0 +1,136 @@
|
||||
---
|
||||
html: submit-cross-chain-transactions.html
|
||||
parent: use-xrpl-sidechains.html
|
||||
blurb: Steps to submit a cross-chain transaction, using a bridge.
|
||||
labels:
|
||||
- Interoperability
|
||||
---
|
||||
# Submit Cross-chain Transactions
|
||||
|
||||
_(Requires the [XChainBridge amendment][] :not_enabled:)_
|
||||
|
||||
This tutorial explains how to create a test account on a locking chain (_Devent_), and transfer XRP to an issuing chain (_Sidechain-Devnet_), using a supported [client library](client-libraries.html) to query and submit transactions. Witness servers are already set up to monitor the XRP-XRP bridge and submit attestations.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- The locking and issuing chains are both up and running.
|
||||
- The witness servers are up and running.
|
||||
- Set up the XRP-XRP bridge.
|
||||
|
||||
|
||||
## Steps
|
||||
|
||||
### 1. Connect to the locking chain (Devnet) and issuing chain (Sidechain-Devnet).
|
||||
|
||||
```javascript
|
||||
const xrpl = require('xrpl')
|
||||
|
||||
const WS_URL_lockingchain = 'wss://s.devnet.rippletest.net:51233/' // Locking chain
|
||||
const WS_URL_issuingchain = 'wss://sidechain-net2.devnet.rippletest.net:51233/' // Issuing chain
|
||||
|
||||
// Define the XChainBridge
|
||||
const xchainbridge = {
|
||||
"LockingChainDoor": "rnQAXXWoFNN6PEqwqsdTngCtFPCrmfuqFJ", // Locking chain door account
|
||||
"LockingChainIssue": {
|
||||
"currency": "XRP"
|
||||
},
|
||||
"IssuingChainDoor": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", // Use the genesis address hardcoded in rippled
|
||||
"IssuingChainIssue": {
|
||||
"currency": "XRP"
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// Define the network clients.
|
||||
const client_lockingchain = new xrpl.Client(WS_URL_lockingchain)
|
||||
await client_lockingchain.connect()
|
||||
|
||||
const client_issuingchain = new xrpl.Client(WS_URL_issuingchain)
|
||||
await client_issuingchain.connect()
|
||||
|
||||
// ... custom code goes here
|
||||
|
||||
// Disconnect when done (If you omit this, Node.js won't end the process)
|
||||
await client_lockingchain.disconnect()
|
||||
await client_issuingchain.disconnect()
|
||||
}
|
||||
|
||||
main()
|
||||
```
|
||||
|
||||
### 2. Fund a wallet on Devnet and generate a wallet address for Sidechain-Devnet.
|
||||
|
||||
```javascript
|
||||
// Create a wallet and fund it using the XRP faucet on Devnet.
|
||||
const wallet_lockingchain = (await client_lockingchain.fundWallet()).wallet
|
||||
console.log(wallet_lockingchain.address)
|
||||
|
||||
// Generate a wallet to create and fund on the issuing chain.
|
||||
const wallet_issuingchain = await xrpl.Wallet.generate()
|
||||
console.log(wallet_issuingchain.address)
|
||||
```
|
||||
|
||||
### 3. Submit an `XChainAccountCreateCommit` transaction from the Devnet wallet.
|
||||
|
||||
```javascript
|
||||
const createwallet_issuingchain = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "XChainAccountCreateCommit",
|
||||
"Account": wallet_lockingchain.address,
|
||||
"Destination": wallet_issuingchain.address,
|
||||
"XChainBridge": xchainbridge,
|
||||
"SignatureReward": "100",
|
||||
"Amount": "5000000000"
|
||||
}, {autofill: true, wallet: wallet_lockingchain})
|
||||
```
|
||||
|
||||
### 4. Create a claim ID with `XChainCreateClaimID`, using your account on the issuing chain.
|
||||
|
||||
```javascript
|
||||
const createclaim = await client_issuingchain.submitAndWait({
|
||||
"TransactionType": "XChainCreateClaimID",
|
||||
"Account": wallet_issuingchain.address,
|
||||
"OtherChainSource": wallet_lockingchain.address,
|
||||
"SignatureReward": "100",
|
||||
"XChainBridge": xchainbridge
|
||||
}, {autofill: true, wallet: wallet_issuingchain})
|
||||
```
|
||||
|
||||
### 5. Retrieve the claim ID from the transaction metadata.
|
||||
|
||||
```javascript
|
||||
let metadata = createclaim.result.meta.AffectedNodes
|
||||
|
||||
let claimnode = null;
|
||||
|
||||
for (const item of metadata) {
|
||||
if (item.CreatedNode && item.CreatedNode.LedgerEntryType === 'XChainOwnedClaimID') {
|
||||
claimnode = item.CreatedNode
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
const claimID = claimnode.NewFields.XChainClaimID
|
||||
```
|
||||
|
||||
### 6. Submit an `XChainCommit` transaction with the claim ID, using your account on the locking chain.
|
||||
|
||||
If you don't specify an "OtherChainDestination", the account that submitted the `XChainCreateClaimID` transaction needs to submit an `XChainClaim` transaction to claim the funds.
|
||||
|
||||
```javascript
|
||||
const xchaincommit = await client_lockingchain.submitAndWait({
|
||||
"TransactionType": "XChainCommit",
|
||||
"Account": wallet_lockingchain.address,
|
||||
"OtherChainDestination": wallet_issuingchain.address,
|
||||
"Amount": "10000",
|
||||
"XChainBridge": xchainbridge,
|
||||
"XChainClaimID": claimID
|
||||
}, {autofill: true, wallet: wallet_lockingchain})
|
||||
```
|
||||
|
||||
**Note:** When enough `XChainAddClaimAttestation` signatures are submitted by the witness servers to reach quorum, the funds are released on the issuing chain to the `OtherChainDestination`.
|
||||
|
||||
|
||||
<!--{# common link defs #}-->
|
||||
{% include '_snippets/rippled-api-links.md' %}
|
||||
{% include '_snippets/tx-type-links.md' %}
|
||||
{% include '_snippets/rippled_versions.md' %}
|
||||
@@ -1366,6 +1366,11 @@ pages:
|
||||
targets:
|
||||
- ja
|
||||
|
||||
- md: concepts/accounts/decentralized-identifiers.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
|
||||
## REDIRECTS FROM OLD CONCEPT PAGES/LANDINGS -------------------------------
|
||||
- name: Intro to Consensus
|
||||
@@ -1535,6 +1540,23 @@ pages:
|
||||
- ja
|
||||
|
||||
|
||||
# XRPL Sidechains -----------------------------------------------------------
|
||||
|
||||
- md: concepts/xrpl-sidechains/index.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: concepts/xrpl-sidechains/cross-chain-bridges.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: concepts/xrpl-sidechains/witness-servers.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
|
||||
# Tutorials --------------------------------------------------------------------
|
||||
|
||||
@@ -2273,6 +2295,29 @@ pages:
|
||||
- en
|
||||
- ja
|
||||
|
||||
# Use XRPL Sidechains ----------------------------------------------------------
|
||||
|
||||
- md: tutorials/tasks/use-xrpl-sidechains/index.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: tutorials/tasks/use-xrpl-sidechains/set-up-xrp-xrp-bridge.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: tutorials/tasks/use-xrpl-sidechains/set-up-iou-iou-bridge.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: tutorials/tasks/use-xrpl-sidechains/submit-cross-chain-transaction.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
|
||||
# References -------------------------------------------------------------------
|
||||
|
||||
- name: References
|
||||
@@ -2413,6 +2458,11 @@ pages:
|
||||
targets:
|
||||
- ja
|
||||
|
||||
- md: references/protocol/ledger-data/ledger-entry-types/bridge.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/ledger-data/ledger-entry-types/check.md
|
||||
targets:
|
||||
- en
|
||||
@@ -2429,6 +2479,11 @@ pages:
|
||||
targets:
|
||||
- ja
|
||||
|
||||
- md: references/protocol/ledger-data/ledger-entry-types/did.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/ledger-data/ledger-entry-types/directorynode.md
|
||||
targets:
|
||||
- en
|
||||
@@ -2525,6 +2580,16 @@ pages:
|
||||
targets:
|
||||
- ja
|
||||
|
||||
- md: references/protocol/ledger-data/ledger-entry-types/xchainownedclaimid.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/ledger-data/ledger-entry-types/xchainownedcreateaccountclaimid.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/index.md
|
||||
targets:
|
||||
- en
|
||||
@@ -2655,6 +2720,16 @@ pages:
|
||||
targets:
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/diddelete.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/didset.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/escrowcancel.md
|
||||
targets:
|
||||
- en
|
||||
@@ -2799,6 +2874,46 @@ pages:
|
||||
targets:
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/xchainaccountcreatecommit.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/xchainaddaccountcreateattestation.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/xchainaddclaimattestation.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/xchainclaim.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/xchaincommit.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/xchaincreatebridge.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/xchaincreateclaimid.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/types/xchainmodifybridge.md
|
||||
targets:
|
||||
- en
|
||||
- ja
|
||||
|
||||
- md: references/protocol/transactions/pseudo-transaction-types/pseudo-transaction-types.md
|
||||
targets:
|
||||
- en
|
||||
@@ -2909,6 +3024,7 @@ pages:
|
||||
- en
|
||||
|
||||
- md: "@i18n/ja/references/protocol/binary-format.md"
|
||||
outdated_translation: true
|
||||
targets:
|
||||
- ja
|
||||
|
||||
|
||||
195
img/serialization-xchainbridge.svg
Normal file
195
img/serialization-xchainbridge.svg
Normal file
@@ -0,0 +1,195 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
|
||||
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
|
||||
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="1100" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="30 10 1100 340" height="340" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"
|
||||
><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
|
||||
/><g
|
||||
><defs id="defs1"
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"
|
||||
><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"
|
||||
><path d="M0 0 L0 80 L260 80 L260 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"
|
||||
><path d="M0 0 L0 30 L270 30 L270 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"
|
||||
><path d="M0 0 L0 30 L250 30 L250 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath5"
|
||||
><path d="M0 0 L0 30 L210 30 L210 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath6"
|
||||
><path d="M0 0 L0 30 L40 30 L40 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath7"
|
||||
><path d="M0 0 L0 40 L270 40 L270 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath8"
|
||||
><path d="M0 0 L0 50 L620 50 L620 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath9"
|
||||
><path d="M0 0 L0 30 L240 30 L240 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath10"
|
||||
><path d="M0 0 L0 50 L1050 50 L1050 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath11"
|
||||
><path d="M0 0 L0 30 L160 30 L160 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath12"
|
||||
><path d="M0 0 L0 30 L280 30 L280 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath13"
|
||||
><path d="M0 0 L0 30 L310 30 L310 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath14"
|
||||
><path d="M0 0 L0 70 L60 70 L60 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath15"
|
||||
><path d="M0 0 L0 70 L250 70 L250 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath16"
|
||||
><path d="M0 0 L0 160 L30 160 L30 0 Z"
|
||||
/></clipPath
|
||||
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath17"
|
||||
><path d="M0 0 L0 160 L400 160 L400 0 Z"
|
||||
/></clipPath
|
||||
></defs
|
||||
><g fill="rgb(255,255,0)" fill-opacity="0.4902" transform="translate(170,210)" stroke-opacity="0.4902" stroke="rgb(255,255,0)"
|
||||
><path d="M0.5 0.5 L248.5 0.5 L259 12.5 L259 79 L0.5 79 Z" stroke="none" clip-path="url(#clipPath2)"
|
||||
/></g
|
||||
><g transform="translate(170,210)"
|
||||
><path fill="none" d="M0.5 0.5 L248.5 0.5 L259 12.5 L259 79 L0.5 79 Z" clip-path="url(#clipPath2)"
|
||||
/><path fill="none" d="M248.5 0.5 L248.5 12.5 L259 12.5" clip-path="url(#clipPath2)"
|
||||
/><text x="5" font-size="14px" y="18.1094" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" font-weight="bold" xml:space="preserve"
|
||||
>Note:</text
|
||||
><text x="5" font-size="14px" y="34.2188" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Unlike in Object and Array fields,</text
|
||||
><text x="5" font-size="14px" y="50.3281" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>the nested STIssue types here do</text
|
||||
><text x="5" font-size="14px" y="66.4375" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>not begin with a Field ID.</text
|
||||
></g
|
||||
><g font-family="sans-serif" font-size="14px" transform="translate(810,290)"
|
||||
><text x="5" xml:space="preserve" y="18.1094" clip-path="url(#clipPath3)" stroke="none"
|
||||
>Omitted if the currency code is all 0's</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(840,70)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="248.5" height="28.5" y="0.5" clip-path="url(#clipPath4)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(840,70)"
|
||||
><rect fill="none" x="0.5" width="248.5" height="28.5" y="0.5" clip-path="url(#clipPath4)"
|
||||
/><text x="57" font-size="14px" y="18.1094" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Issuing Chain Issue</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(620,70)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="208.5" height="28.5" y="0.5" clip-path="url(#clipPath5)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(620,70)"
|
||||
><rect fill="none" x="0.5" width="208.5" height="28.5" y="0.5" clip-path="url(#clipPath5)"
|
||||
/><text x="5" font-size="14px" y="18.1094" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Issuing chain door (160 bits)</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(580,70)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="38.5" height="28.5" y="0.5" clip-path="url(#clipPath6)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(580,70)"
|
||||
><rect fill="none" x="0.5" width="38.5" height="28.5" y="0.5" clip-path="url(#clipPath6)"
|
||||
/><text x="2" font-size="14px" y="18.1094" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>0x14</text
|
||||
></g
|
||||
><g font-family="sans-serif" font-size="14px" transform="translate(100,120)"
|
||||
><text x="5" xml:space="preserve" y="18.1094" clip-path="url(#clipPath7)" stroke="none"
|
||||
>Door account length prefixes (8 bits)</text
|
||||
><text x="5" xml:space="preserve" y="34.2188" clip-path="url(#clipPath7)" stroke="none"
|
||||
>Always 0x14</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(60,70)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="38.5" height="28.5" y="0.5" clip-path="url(#clipPath6)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(60,70)"
|
||||
><rect fill="none" x="0.5" width="38.5" height="28.5" y="0.5" clip-path="url(#clipPath6)"
|
||||
/><text x="2" font-size="14px" y="18.1094" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>0x14</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(320,70)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="248.5" height="28.5" y="0.5" clip-path="url(#clipPath4)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(320,70)"
|
||||
><rect fill="none" x="0.5" width="248.5" height="28.5" y="0.5" clip-path="url(#clipPath4)"
|
||||
/><text x="55" font-size="14px" y="18.1094" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Locking Chain Issue</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(100,70)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="208.5" height="28.5" y="0.5" clip-path="url(#clipPath5)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(100,70)"
|
||||
><rect fill="none" x="0.5" width="208.5" height="28.5" y="0.5" clip-path="url(#clipPath5)"
|
||||
/><text x="2" font-size="14px" y="18.1094" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Locking chain door (160 bits)</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(470,230)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="618.5" height="48.5" y="0.5" clip-path="url(#clipPath8)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(470,230)"
|
||||
><rect fill="none" x="0.5" width="618.5" height="48.5" y="0.5" clip-path="url(#clipPath8)"
|
||||
/></g
|
||||
><g font-family="sans-serif" font-size="14px" transform="translate(580,200)"
|
||||
><text x="5" xml:space="preserve" y="18.1094" clip-path="url(#clipPath9)" stroke="none"
|
||||
>STIssue Format</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(50,60)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="1048.5" height="48.5" y="0.5" clip-path="url(#clipPath10)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(50,60)"
|
||||
><rect fill="none" x="0.5" width="1048.5" height="48.5" y="0.5" clip-path="url(#clipPath10)"
|
||||
/></g
|
||||
><g font-family="sans-serif" font-size="14px" transform="translate(50,30)"
|
||||
><text x="5" xml:space="preserve" y="18.1094" clip-path="url(#clipPath11)" stroke="none"
|
||||
>XChainBridge Format</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(480,240)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="278.5" height="28.5" y="0.5" clip-path="url(#clipPath12)" stroke="none"
|
||||
/></g
|
||||
><g transform="translate(480,240)"
|
||||
><rect fill="none" x="0.5" width="278.5" height="28.5" y="0.5" clip-path="url(#clipPath12)"
|
||||
/><text x="53" font-size="14px" y="18.1094" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Currency code (160 bits)</text
|
||||
></g
|
||||
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(770,240)" stroke-opacity="0" stroke="rgb(255,255,255)"
|
||||
><rect x="0.5" width="308.5" height="28.5" y="0.5" clip-path="url(#clipPath13)" stroke="none"
|
||||
/></g
|
||||
><g stroke-dasharray="8,5" stroke-miterlimit="5" transform="translate(770,240)" stroke-linecap="butt"
|
||||
><rect fill="none" x="0.5" width="308.5" height="28.5" y="0.5" clip-path="url(#clipPath13)"
|
||||
/><text x="59" font-size="14px" y="18.1094" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" xml:space="preserve"
|
||||
>Issuer AccountID (160 bits)</text
|
||||
></g
|
||||
><g transform="translate(770,260)"
|
||||
><path fill="none" d="M10.5 11.5 L10.5 50.5" clip-path="url(#clipPath14)"
|
||||
/><path fill="none" d="M10.5 50.5 L40.5 50.5" clip-path="url(#clipPath14)"
|
||||
/><path fill="white" d="M4 22.2583 L10.5 11 L17 22.2583 Z" clip-path="url(#clipPath14)" stroke="none"
|
||||
/><path fill="none" d="M4 22.2583 L10.5 11 L17 22.2583 Z" clip-path="url(#clipPath14)"
|
||||
/></g
|
||||
><g transform="translate(360,90)"
|
||||
><path fill="none" d="M230.5 11.5 L230.5 50.5" clip-path="url(#clipPath15)"
|
||||
/><path fill="none" d="M230.5 50.5 L10.5 50.5" clip-path="url(#clipPath15)"
|
||||
/><path fill="white" d="M224 22.2583 L230.5 11 L237 22.2583 Z" clip-path="url(#clipPath15)" stroke="none"
|
||||
/><path fill="none" d="M224 22.2583 L230.5 11 L237 22.2583 Z" clip-path="url(#clipPath15)"
|
||||
/></g
|
||||
><g transform="translate(60,90)"
|
||||
><path fill="none" d="M10.5 11.5 L10.5 50.5" clip-path="url(#clipPath14)"
|
||||
/><path fill="none" d="M10.5 50.5 L40.5 50.5" clip-path="url(#clipPath14)"
|
||||
/><path fill="white" d="M4 22.2583 L10.5 11 L17 22.2583 Z" clip-path="url(#clipPath14)" stroke="none"
|
||||
/><path fill="none" d="M4 22.2583 L10.5 11 L17 22.2583 Z" clip-path="url(#clipPath14)"
|
||||
/></g
|
||||
><g stroke-dasharray="1,2" stroke-miterlimit="5" transform="translate(1080,90)" stroke-linecap="butt"
|
||||
><path fill="none" d="M10.5 140.5 L10.5 10.5" clip-path="url(#clipPath16)"
|
||||
/></g
|
||||
><g stroke-dasharray="1,2" stroke-miterlimit="5" transform="translate(460,90)" stroke-linecap="butt"
|
||||
><path fill="none" d="M10.5 140.5 L380.5 10.5" clip-path="url(#clipPath17)"
|
||||
/></g
|
||||
></g
|
||||
></svg
|
||||
>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -363,7 +363,7 @@
|
||||
|
||||
&.label-cross-currency,
|
||||
&.label-security,
|
||||
&.label-複数通貨間,
|
||||
&.label-クロスカレンシー,
|
||||
&.label-セキュリティ,
|
||||
&.label-use-gaming,
|
||||
&.label-use-defi,
|
||||
|
||||
@@ -136,6 +136,13 @@
|
||||
"shortname": "Devnet",
|
||||
"longname": "s.devnet.rippletest.net (Devnet Public Cluster)"
|
||||
},
|
||||
{
|
||||
"id": "wstool-1-connection-sidechain-devnet",
|
||||
"ws_url": "wss://sidechain-net2.devnet.rippletest.net:51233/",
|
||||
"jsonrpc_url": "https://sidechain-net2.devnet.rippletest.net:51234/",
|
||||
"shortname": "Sidechain-Devnet",
|
||||
"longname": "sidechain-net2.devnet.rippletest.net (Issuing Sidechain Devnet Public Cluster)"
|
||||
},
|
||||
{
|
||||
"id": "wstool-1-connection-localhost",
|
||||
"ws_url": "ws://localhost:6006/",
|
||||
|
||||
Reference in New Issue
Block a user