Compare commits

..

1 Commits

Author SHA1 Message Date
Maria Shodunke
b783647b82 Clio 2.7.0 release notes 2025-12-16 18:10:52 +00:00
125 changed files with 4794 additions and 3735 deletions

View File

@@ -104,16 +104,142 @@ rippled tx C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9 fals
{% tabs %}
{% tab label="WebSocket" %}
{% code-snippet file="/_api-examples/tx/ws-response.json" language="json" /%}
{% tab label="WebSocket (Hash)" %}
{% code-snippet file="/_api-examples/tx/ws-response-hash.json" language="json" /%}
{% /tab %}
{% tab label="JSON-RPC" %}
{% code-snippet file="/_api-examples/tx/jsonrpc-response.json" language="json" prefix="200 OK\n\n" /%}
{% tab label="WebSocket (CTID)" %}
{% code-snippet file="/_api-examples/tx/ws-response-ctid.json" language="json" /%}
{% /tab %}
{% tab label="JSON-RPC (Hash)" %}
{% code-snippet file="/_api-examples/tx/jsonrpc-response-hash.json" language="json" /%}
{% /tab %}
{% tab label="JSON-RPC (CTID)" %}
{% code-snippet file="/_api-examples/tx/jsonrpc-response-ctid.json" language="json" /%}
{% /tab %}
{% tab label="Commandline" %}
{% code-snippet file="/_api-examples/tx/jsonrpc-response.json" language="json" prefix="Loading: \"/etc/opt/ripple/rippled.cfg\"\n2025-Dec-19 03:16:00.638871262 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005\n\n" /%}
```json
{
"result" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee" : "12",
"Flags" : 0,
"LastLedgerSequence" : 56865248,
"OfferSequence" : 5037708,
"Sequence" : 5037710,
"SigningPubKey" : "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
},
"TransactionType" : "OfferCreate",
"TxnSignature" : "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9",
"date" : 648248020,
"hash" : "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"inLedger" : 56865245,
"ledger_index" : 56865245,
"meta" : {
"AffectedNodes" : [
{
"ModifiedNode" : {
"FinalFields" : {
"ExchangeRate" : "4F04C66806CF7400",
"Flags" : 0,
"RootIndex" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency" : "0000000000000000000000000000000000000000",
"TakerGetsIssuer" : "0000000000000000000000000000000000000000",
"TakerPaysCurrency" : "000000000000000000000000434E590000000000",
"TakerPaysIssuer" : "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
},
"LedgerEntryType" : "DirectoryNode",
"LedgerIndex" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
},
{
"ModifiedNode" : {
"FinalFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance" : "10404767991",
"Flags" : 0,
"OwnerCount" : 3,
"Sequence" : 5037711
},
"LedgerEntryType" : "AccountRoot",
"LedgerIndex" : "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields" : {
"Balance" : "10404768003",
"Sequence" : 5037710
},
"PreviousTxnID" : "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq" : 56865244
}
},
{
"DeletedNode" : {
"FinalFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode" : "0000000000000000",
"Flags" : 0,
"OwnerNode" : "0000000000000000",
"PreviousTxnID" : "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq" : 56865244,
"Sequence" : 5037708,
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
}
},
"LedgerEntryType" : "Offer",
"LedgerIndex" : "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
},
{
"ModifiedNode" : {
"FinalFields" : {
"Flags" : 0,
"IndexNext" : "0000000000000000",
"IndexPrevious" : "0000000000000000",
"Owner" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex" : "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType" : "DirectoryNode",
"LedgerIndex" : "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
},
{
"CreatedNode" : {
"LedgerEntryType" : "Offer",
"LedgerIndex" : "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence" : 5037710,
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
}
}
}
}
],
"TransactionIndex" : 0,
"TransactionResult" : "tesSUCCESS"
},
"status" : "success",
"validated" : true
}
}
```
{% /tab %}
{% /tabs %}

View File

@@ -0,0 +1,119 @@
---
html: cancel-an-expired-escrow.html
parent: use-escrows.html
seo:
description: 有効期限切れのEscrowを取り消します。
labels:
- Escrow
- スマートコントラクト
---
# 有効期限切れEscrowの取消し
## 1.有効期限切れEscrowの確認
XRP LedgerのEscrowが有効期限切れとなるのは、その`CancelAfter`の時刻が検証済みレジャーの`close_time`よりも前である場合です。Escrowに`CancelAfter`時刻が指定されていない場合は、Escrowが有効期限切れになることはありません。最新の検証済みレジャーの閉鎖時刻は、[ledgerメソッド][]を使用して検索できます。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/ledger-request-expiration.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/ledger-response-expiration.json" language="json" /%}
{% /tab %}
{% /tabs %}
[account_objectsメソッド][]を使用してEscrowを検索し、`CancelAfter`の時刻と比較できます。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/account_objects-request-expiration.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/account_objects-response-expiration.json" language="json" /%}
{% /tab %}
{% /tabs %}
## 2.EscrowCancelトランザクションの送信
XRP Ledgerでは、[EscrowCancelトランザクション][]に[署名して送信する](../../../../concepts/transactions/index.md#トランザクションへの署名とトランザクションの送信)ことで、***誰でも***有効期限切れのEscrowを取り消すことができます。トランザクションの`Owner`フィールドを、そのEscrowを作成した`EscrowCreate`トランザクションの`Account`に設定します。`OfferSequence`フィールドを、`EscrowCreate`トランザクションの`Sequence`に設定します。
{% partial file="/@l10n/ja/docs/_snippets/secret-key-warning.md" /%}
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-request-escrowcancel.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-response-escrowcancel.json" language="json" /%}
{% /tab %}
{% /tabs %}
トランザクションの識別用`hash`値をメモしておきます。これにより、検証済みレジャーバージョンに記録されるときにその最終ステータスを確認できます。
## 3.検証の待機
{% partial file="/@l10n/ja/docs/_snippets/wait-for-validation.md" /%}
## 4.最終結果の確認
EscrowCancelトランザクションの識別用ハッシュを指定した[txメソッド][]を使用してトランザクションの最終ステータスを確認します。トランザクションのメタデータで`LedgerEntryType``Escrow`である`DeletedNode`を探します。また、エスクローに預託された支払いの送金元の`ModifiedNode`(タイプが`AccountRoot`)も探します。オブジェクトの`FinalFields`に、`Balance`フィールドのXRP返金額の増分が表示されている必要があります。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/tx-request-escrowcancel.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/tx-response-escrowcancel.json" language="json" /%}
{% /tab %}
{% /tabs %}
上記の例では、`r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT`がEscrowの送金元であり、`Balance`が99999**8**9990 dropから99999**9**9990 dropに増加していることから、エスクローに預託されていた10,000 XRP dropが返金されたことがわかりますdrop = 0.01XRP
{% admonition type="success" name="ヒント" %}Escrowを実行する[EscrowFinishトランザクション][]で使用する`OfferSequence`が不明な場合は、Escrowの`PreviousTxnID`フィールドのトランザクションの識別用ハッシュを指定した[txメソッド][]を使用して、そのEscrowを作成したトランザクションを検索します。Escrowを終了するときには、そのトランザクションの`Sequence`の値を`OfferSequence`の値として使用します。{% /admonition %}
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,80 @@
---
html: look-up-escrows.html
parent: use-escrows.html
seo:
description: 送金元または送金先のアドレスを使って保留中のEscrowを検索します。
labels:
- Escrow
- スマートコントラクト
---
# Escrowの検索
保留中のEscrowはすべて[Escrowオブジェクト](../../../../concepts/payment-types/escrow.md)としてレジャーに保管されます。
Escrowオブジェクトを検索するには、[account_objectsメソッド][]で[送金元のアドレス](#送金元のアドレスによるescrowの検索)または[送金先のアドレス](#送金先のアドレスによるescrowの検索)を使用して検索します。
## 送金元のアドレスによるEscrowの検索
[account_objectsメソッド][]を使用して、送金元アドレスからEscrowオブジェクトを検索できます。
たとえば、送金元アドレスが`rfztBskAVszuS3s5Kq7zDS74QtHrw893fm`である保留中のEscrowオブジェクトをすべて検索するとします。以下のリクエストの例に従ってこの検索を実行できます。この例では送金元アドレスは`account`の値です。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/account_objects-request.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンスは以下の例のようになります。このレスポンスには、送金元アドレスまたは送金先アドレスが`rfztBskAVszuS3s5Kq7zDS74QtHrw893fm`である保留中のEscrowオブジェクトがすべて含まれています。送金元アドレスは`Account`の値であり、送金先アドレスは`Destination`の値です。
この例では、2番目と4番目のEscrowオブジェクトが検索条件に一致しています。これは、これらのオブジェクトの`Account`(送金元のアドレス)の値が`rfztBskAVszuS3s5Kq7zDS74QtHrw893fm`に設定されているためです。
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/account_objects-response.json" language="json" /%}
{% /tab %}
{% /tabs %}
## 送金先のアドレスによるEscrowの検索
[account_objectsメソッド][]を使用して、送金先アドレスからEscrowオブジェクトを検索できます。
{% admonition type="info" name="注記" %}送金先のアドレスによる保留中のEscrowオブジェクトの検索は、[fix1523 Amendment][]が2017/11/14に有効化された後に作成されたEscrowについてのみ行うことができます。{% /admonition %}
たとえば、送金先アドレスが`rfztBskAVszuS3s5Kq7zDS74QtHrw893fm`である保留中のEscrowオブジェクトをすべて検索するとします。以下のリクエストの例に従ってこの検索を実行できます。この例では送金先アドレスは`account`の値です。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/account_objects-request.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンスは以下の例のようになります。レスポンスには送金先アドレスまたは送金元アドレスが`rfztBskAVszuS3s5Kq7zDS74QtHrw893fm`である保留中のEscrowオブジェクトがすべて含まれています。送金先アドレスは`Destination`の値であり、送金元アドレスは`Account`の値です。
この例では、1番目と3番目のEscrowオブジェクトが検索条件に一致しています。これは、これらのオブジェクトの`Destination`(送金先のアドレス)の値が`rfztBskAVszuS3s5Kq7zDS74QtHrw893fm`に設定されているためです。
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/account_objects-response.json" language="json" /%}
{% /tab %}
{% /tabs %}
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,173 @@
---
html: send-a-conditionally-held-escrow.html
parent: use-escrows.html
seo:
description: 満たされた条件に基づいてリリースとなるEscrowを作成します。
labels:
- Escrow
- スマートコントラクト
---
# 条件に基づくEscrowの送信
## 1.条件とフルフィルメントの生成
XRP Ledger EscrowにはPREIMAGE-SHA-256 [Crypto-Conditions](https://tools.ietf.org/html/draft-thomas-crypto-conditions-03)が必要です。条件とフルフィルメントを適切なフォーマットで計算するには、[five-bells-condition](https://github.com/interledgerjs/five-bells-condition)などのCrypto-conditionsライブラリを使用する必要があります。フルフィルメントについては、以下のフルフィルメントを生成するためのメソッドのいずれかを使用することが推奨されます。
- 暗号論的に安全な乱数ソースを使用して、32バイト以上のランダムバイトを生成します。
- Interledger Protocolの[PSK仕様](https://github.com/interledger/rfcs/blob/master/deprecated/0016-pre-shared-key/0016-pre-shared-key.md)に従い、ILPパケットのHMAC-SHA-256をフルフィルメントとして使用します。
ランダムなフルフィルメントと条件のJavaScriptコードの例:
```js
const cc = require('five-bells-condition')
const crypto = require('crypto')
const preimageData = crypto.randomBytes(32)
const myFulfillment = new cc.PreimageSha256()
myFulfillment.setPreimage(preimageData)
const condition = myFulfillment.getConditionBinary().toString('hex').toUpperCase()
console.log('Condition:', condition)
// (Random hexadecimal, 72 chars in length)
// keep secret until you want to finish executing the held payment:
const fulfillment = myFulfillment.serializeBinary().toString('hex').toUpperCase()
console.log('Fulfillment:', fulfillment)
// (Random hexadecimal, 78 chars in length)
```
後で使用できるように条件とフルフィルメントを保存します。保留中の支払いの実行が完了するまでは、フルフィルメントを公開しないでください。フルフィルメントを知っていれば誰でもEscrowを終了でき、保留中の資金を指定された送金先にリリースできます。
## 2.リリース時刻または取消し時刻の計算
条件付き`Escrow`トランザクションには、`CancelAfter`フィールドと`FinishAfter`フィールドのいずれか、または両方が含まれている必要があります。`CancelAfter`フィールドを使用すると、指定の時刻までに条件を満たすことができなかった場合に送金元へXRPを返金できます。`FinishAfter`フィールドに指定される時刻より前の時間は、正しいフルフィルメントが送信されてもEscrowを実行できません。いずれのフィールドでも、将来の時刻を指定する必要があります。
`CancelAfter`の時刻を24時間先に設定する例:
{% tabs %}
{% tab label="JavaScript" %}
```js
const rippleOffset = 946684800
const CancelAfter = Math.floor(Date.now() / 1000) + (24*60*60) - rippleOffset
console.log(CancelAfter)
// Example:556927412
```
{% /tab %}
{% tab label="Python 2/3" %}
```python
from time import time
ripple_offset = 946684800
cancel_after = int(time()) + (24*60*60) - 946684800
print(cancel_after)
# Example: 556927412
```
{% /tab %}
{% /tabs %}
{% admonition type="danger" name="警告" %}XRP Ledgerでは、時刻を**Rippleエポック2000-01-01T00:00:00Z以降の経過秒数**として指定する必要があります。`CancelAfter`または`FinishAfter`フィールドで、UNIX時刻を同等のRipple時刻に変換せずに使用すると、ロック解除時刻が**30年**先に設定されることになります。{% /admonition %}
## 3.EscrowCreateトランザクションの送信
[EscrowCreateトランザクション][]に[署名して送信](../../../../concepts/transactions/index.md#トランザクションへの署名とトランザクションの送信)します。トランザクションの`Condition`フィールドを、保留中の支払いがリリースされる時刻に設定します。`Destination`を受取人に設定します。受取人と送金元のアドレスは同じでもかまいません。前の手順で算出した`CancelAfter`または`FinishAfter`の時刻も指定します。`Amount`を、Escrowする[XRPのdrop数][]の合計額に設定します。
{% partial file="/@l10n/ja/docs/_snippets/secret-key-warning.md" /%}
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-request-escrowcreate-condition.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-response-escrowcreate-condition.json" language="json" /%}
{% /tab %}
{% /tabs %}
## 4.検証の待機
{% partial file="/@l10n/ja/docs/_snippets/wait-for-validation.md" /%}
## 5.Escrowが作成されたことの確認
トランザクションの識別用ハッシュを指定した[txメソッド][]を使用して、トランザクションの最終ステータスを確認します。特に、[Escrowレジャーオブジェクト](../../../../concepts/payment-types/escrow.md)が作成されたことを示す`CreatedNode`をトランザクションメタデータで探します。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/tx-request-escrowcreate-condition.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/tx-response-escrowcreate-condition.json" language="json" /%}
{% /tab %}
{% /tabs %}
## 6.EscrowFinishトランザクションの送信
`FinishAfter`の時刻が経過した後で資金のリリースを実行する[EscrowFinishトランザクション][]に[署名して送信](../../../../concepts/transactions/index.md#トランザクションへの署名とトランザクションの送信)します。トランザクションの`Owner`フィールドにEscrowCreateトランザクションの`Account`アドレスを設定し、`OfferSequence` にEscrowCreateトランザクションの`Sequence`番号を設定します。`Condition`フィールドと`Fulfillment`フィールドに、ステップ1で生成した条件値とフルフィルメント値をそれぞれ16進数で設定します。フルフィルメントのサイズバイト数に基づいて`Fee`[トランザクションコスト](../../../../concepts/transactions/transaction-cost.md)の値を設定します。条件付きEscrowFinishでは、少なくとも330 dropXRPと、フルフィルメントのサイズで16バイトごとに10 dropが必要です。
{% admonition type="info" name="注記" %}EscrowCreateトランザクションに`FinishAfter`フィールドが含まれている場合、Escrowの条件として正しいフルフィルメントを指定しても、この時刻よりも前の時点ではこのトランザクションを実行できません。前に閉鎖されたレジャーの閉鎖時刻が`FinishAfter`の時刻よりも前である場合、EscrowFinishトランザクションは[結果コード](../../../../references/protocol/transactions/transaction-results/index.md)`tecNO_PERMISSION`で失敗します。{% /admonition %}
Escrowが有効期限切れの場合は、[Escrowの取消し](cancel-an-expired-escrow.md)だけが可能です。
{% partial file="/@l10n/ja/docs/_snippets/secret-key-warning.md" /%}
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-request-escrowfinish-condition.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-response-escrowfinish-condition.json" language="json" /%}
{% /tab %}
{% /tabs %}
トランザクションの識別用`hash`値をメモしておきます。これにより、検証済みレジャーバージョンに記録されるときにその最終ステータスを確認できます。
## 7.検証の待機
{% partial file="/@l10n/ja/docs/_snippets/wait-for-validation.md" /%}
## 8.最終結果の確認
EscrowFinishトランザクションの識別用ハッシュを指定した[txメソッド][]を使用して、トランザクションの最終ステータスを確認します。特にトランザクションメタデータ内で、エスクローに預託された支払いの送金先の`ModifiedNode`(タイプが`AccountRoot`)を確認します。オブジェクトの`FinalFields`に、`Balance`フィールドのXRP返金額の増分が表示されている必要があります。
リクエスト:
{% code-snippet file="/_api-examples/escrow/websocket/tx-request-escrowfinish-condition.json" language="json" /%}
レスポンス:
{% code-snippet file="/_api-examples/escrow/websocket/tx-response-escrowfinish-condition.json" language="json" /%}
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,188 @@
---
html: send-a-time-held-escrow.html
parent: use-escrows.html
seo:
description: 指定した時間が経過することがリリースの唯一の条件であるEscrowを作成します。
labels:
- Escrow
- スマートコントラクト
---
# 時間に基づくEscrowの送信
[EscrowCreateトランザクション][]タイプでは、リリースの唯一の条件が特定時刻を経過することであるEscrowを作成できます。このためには、`FinishAfter`フィールドを使用し、`Condition`フィールドを省略します。
## 1.リリース時刻の計算
時刻を **[Rippleエポック以降の経過秒数][]** として指定する必要があります。Rippleエポックは、UNIXエポックの946684800秒後です。たとえば、2017年11月13日の午前0時UTCに資金をリリースする場合、以下のようになります。
{% tabs %}
{% tab label="JavaScript" %}
```js
// JavaScript Date() is natively expressed in milliseconds; convert to seconds
const release_date_unix = Math.floor( new Date("2017-11-13T00:00:00Z") / 1000 );
const release_date_ripple = release_date_unix - 946684800;
console.log(release_date_ripple);
// 563846400
```
{% /tab %}
{% tab label="Python 3" %}
```python
import datetime
release_date_utc = datetime.datetime(2017,11,13,0,0,0,tzinfo=datetime.timezone.utc)
release_date_ripple = int(release_date_utc.timestamp()) - 946684800
print(release_date_ripple)
# 563846400
```
{% /tab %}
{% /tabs %}
{% admonition type="danger" name="警告" %}`FinishAfter`フィールドで、UNIX時刻を同等のRipple時刻に変換せずに使用すると、ロック解除時刻が30年先に設定されることになります。{% /admonition %}
## 2.EscrowCreateトランザクションの送信
[EscrowCreateトランザクション][]に[署名して送信](../../../../concepts/transactions/index.md#トランザクションへの署名とトランザクションの送信)します。トランザクションの`FinishAfter`フィールドを、保留中の支払いがリリースされる時刻に設定します。`Condition`フィールドを省略して、時刻を保留中の支払いをリリースする唯一の条件とします。`Destination`を受取人に設定します。受取人と送金元のアドレスは同じでもかまいません。`Amount`を、Escrowする[XRPのdrop数][]の合計額に設定します。
{% partial file="/@l10n/ja/docs/_snippets/secret-key-warning.md" /%}
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-request-escrowcreate-time.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-response-escrowcreate-time.json" language="json" /%}
{% /tab %}
{% /tabs %}
トランザクションの識別用`hash`値をメモしておきます。これにより、検証済みレジャーバージョンに記録されるときにその最終ステータスを確認できます。
## 3.検証の待機
{% partial file="/@l10n/ja/docs/_snippets/wait-for-validation.md" /%}
## 4.Escrowが作成されたことの確認
トランザクションの識別用ハッシュを指定した[txメソッド][]を使用して、トランザクションの最終ステータスを確認します。[Escrowレジャーオブジェクト](../../../../concepts/payment-types/escrow.md)が作成されたことを示す`CreatedNode`をトランザクションメタデータで探します。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/tx-request-escrowcreate-time.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/tx-response-escrowcreate-time.json" language="json" /%}
{% /tab %}
{% /tabs %}
## 5.リリース時刻までの待機
`FinishAfter`時刻が指定されている保留中の支払いは、Escrowードの`FinishAfter`時刻よりも後の[`close_time`ヘッダーフィールド](../../../../references/protocol/ledger-data/ledger-header.md)の時刻でレジャーが閉鎖するまでは完了できません。
最新の検証済みレジャーの閉鎖時刻は、[ledgerメソッド][]を使用して検索できます。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/ledger-request.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/ledger-response.json" language="json" /%}
{% /tab %}
{% /tabs %}
## 6.EscrowFinishトランザクションの送信
`FinishAfter`の時刻が経過した後で資金のリリースを実行する[EscrowFinishトランザクション][]に[署名して送信](../../../../concepts/transactions/index.md#トランザクションへの署名とトランザクションの送信)します。トランザクションの`Owner`フィールドにEscrowCreateトランザクションの`Account`アドレスを設定し、`OfferSequence` にEscrowCreateトランザクションの`Sequence`番号を設定します。時刻のみに基づいて保留されているEscrowの場合は、`Condition`フィールドと`Fulfillment`フィールドを省略します。
{% admonition type="success" name="ヒント" %}XRP Ledgerの状態はトランザクションでしか変更できないため、EscrowFinishトランザクションが必要です。このトランザクションの送信者は、Escrowの受取人、Escrowの元としての送金人、またはその他のXRP Ledgerアドレスのいずれかです。{% /admonition %}
Escrowが有効期限切れの場合は、[Escrowの取消し](cancel-an-expired-escrow.md)だけが可能です。
{% partial file="/@l10n/ja/docs/_snippets/secret-key-warning.md" /%}
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-request-escrowfinish-time.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/submit-response-escrowfinish-time.json" language="json" /%}
{% /tab %}
{% /tabs %}
トランザクションの識別用`hash`値をメモしておきます。これにより、検証済みレジャーバージョンに記録されるときにその最終ステータスを確認できます。
## 7.検証の待機
{% partial file="/@l10n/ja/docs/_snippets/wait-for-validation.md" /%}
## 8.最終結果の確認
EscrowFinishトランザクションの識別用ハッシュを指定した[txメソッド][]を使用して、トランザクションの最終ステータスを確認します。特にトランザクションメタデータ内で、エスクローに預託された支払いの送金先の`ModifiedNode`(タイプが`AccountRoot`)を確認します。オブジェクトの`FinalFields`に、`Balance`フィールドのXRP返金額の増分が表示されている必要があります。
リクエスト:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/tx-request-escrowfinish-time.json" language="json" /%}
{% /tab %}
{% /tabs %}
レスポンス:
{% tabs %}
{% tab label="Websocket" %}
{% code-snippet file="/_api-examples/escrow/websocket/tx-response-escrowfinish-time.json" language="json" /%}
{% /tab %}
{% /tabs %}
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -37,7 +37,7 @@ XRP Ledger上のスマートコントラクトは、条件付きで保有する
オラクルのプログラムが条件を満たしたことを検知した後、エスクローの受取人にfulfillmentの16進数値を渡します。この時点以降、オラクルはエスクローを終了させるなど、何も行いません。エスクローの受取人は、ほとんどの場合、エスクローを終了することになります。
[条件に基づくEscrowの送信](../../tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-conditional-escrow.md)をご覧ください。
[conditionとfulfillmentの生成](../../tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-conditionally-held-escrow.md#1-generate-condition-and-fulfillment)をご覧ください。
## 例

View File

@@ -0,0 +1,55 @@
---
html: tutorial-structure.html
parent: contribute-documentation.html
seo:
description: 一般的なチュートリアルの構成要素の要約です。
---
# チュートリアルの構成
各XRP Ledgerチュートリアルは、同一のフォーマットで構成されています。
1. チュートリアルで説明する機能の簡単な説明。
2. コードを実行するための前提条件(必要な場合)、またはサンプルコードへのリンク。
3. チュートリアルの機能の使用例。
4. サンプルコードの解説と、そのスクリプトの特徴的な要素の紹介。
5. 次のステップとして試すべき概念的な情報や優れたチュートリアルへのリンク。
セットアップ(前提条件)と使用方法とコード開発は分けて考えましょう。これらはそれぞれ異なる活動であり、それぞれ脳の異なる領域を動かします。この3つの要素を一度に考えようとすると、混乱につながります。
## 説明
![説明](/docs/img/tut-struct1.png)
そのサンプルが何を示しているかを記載してください。可能であれば、各サンプルには関連する特定のタスクを達成するための手順を記述してください。(NFTの売却オファーの作成、売却オファーの受け入れ、売却オファーの削除など)。チュートリアルで説明されている内容を理解するのに十分なコンセプトに関する情報を記載し、必要であれば、追加情報へのリンクも記載します。
## 前提条件
![前提条件](/docs/img/tut-struct2.png)
必要なソフトウェアと、チュートリアルを実行するために必要なすべてのサンプルコードへのリンクを提供します。必要であれば、サードパーティのツールの使い方を簡単に説明しますが、ユーザが自由に深く掘り下げることができるように、ソースとなるウェブサイトへのリンクを提供します。
## 使用例
![使用例](/docs/img/tut-struct3.png)
チュートリアルのアプリケーションの完成した動作例を提供することから始めましょう。これは、ソフトウェアを使って問題を解決するチャンスです。
 
チュートリアルの各ステップにはスクリーンショットを使用してください。これによって、ユーザは自分でコードを実行しなくてもチュートリアルを理解することができます。もちろん、コードを実行することが _望ましい_ ですが、これにりユーザに選択肢を与えることができます。
適切な条件におけるシナリオを記述してください。インターネットへの接続が途切れなければ、アプリケーションは問題なく動作するはずです。チュートリアルに関連しないトラブルシューティングの情報を提供しないでください。
## コード解説
![コード解説](/docs/img/tut-struct4.png)
コードを1ブロックずつ見ていきましょう。既に説明したトピックを繰り返さないでください。サンプルコードには、HTML構文のような基本的な部分のプログラミング方法については、その実装に独自なものがない限り、詳細な説明はしないでください。
強調すべき重要なことは、XRPLとのやりとりはすべてトランザクションかリクエストであり、すべてのトランザクションとリクエストは本質的に同じであるということです。私たちが提供するサンプルコードは、トランザクションやリクエストを準備する方法と、返された結果を処理する方法を示しています。1つのトランザクションやリクエストをどのように送信しどのようなレスポンスを返すかを知ることは、他のトランザクションやリクエストの処理について非常に良いヒントとなります。
(技術的には、リクエストに似た第3のカテゴリがあります。[Subscriptionメソッド](../../docs/references/http-websocket-apis/public-api-methods/subscription-methods/index.md)をご覧ください)。
## 関連項目
![関連項目](/docs/img/tut-struct5.png)
チュートリアルの最後には、追加の資料、概念的な情報、学習のにおいて有益な次のステップとなるチュートリアルへのリンクを提供します。

View File

@@ -222,7 +222,7 @@ export function NavDropdown(props) {
//conditional specific for brand kit
if (item2.link === "/XRPL_Brand_Kit.zip") {
return (
<a target="_blank" key={index2} href="/XRPL_Brand_Kit.zip" className={cls2}>
<a key={index2} href="/XRPL_Brand_Kit.zip" className={cls2}>
{translate(item2.labelTranslationKey, item2.label)}
</a>
);

View File

@@ -0,0 +1,7 @@
{
"id": 2,
"command": "account_objects",
"account": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"ledger_index": "validated",
"type": "escrow"
}

View File

@@ -0,0 +1,7 @@
{
"id": 5,
"command": "account_objects",
"account": "rfztBskAVszuS3s5Kq7zDS74QtHrw893fm",
"ledger_index": "validated",
"type": "escrow"
}

View File

@@ -0,0 +1,26 @@
{
"id": 2,
"status": "success",
"type": "response",
"result": {
"account": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"account_objects": [
{
"Account": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"Amount": "10000",
"CancelAfter": 559913895,
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"FinishAfter": 559892324,
"Flags": 0,
"LedgerEntryType": "Escrow",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "4756C22BBB7FC23D9081FDB180806939D6FEBC967BE0EC2DB95B166AF9C086E9",
"PreviousTxnLgrSeq": 2764813,
"index": "7243A9750FA4BE3E63F75F6DACFD79AD6B6C76947F6BDC46CD0F52DBEEF64C89"
}
],
"ledger_hash": "82F24FFA72AED16F467BBE79D387E92FDA39F29038B26E79464CDEDFB506E366",
"ledger_index": 2764826,
"validated": true
}
}

View File

@@ -0,0 +1,60 @@
{
"id": 5,
"result": {
"account": "rfztBskAVszuS3s5Kq7zDS74QtHrw893fm",
"account_objects": [{
"Account": "rafD3taonqdnVpaxCCT6sjnScZUeFGf1JG",
"Amount": "250",
"Destination": "rfztBskAVszuS3s5Kq7zDS74QtHrw893fm",
"DestinationNode": "0000000000000000",
"FinishAfter": 570672000,
"Flags": 0,
"LedgerEntryType": "Escrow",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "A0951691DF3BCBEEB3108F2229A702D078BBBF848268BC601E59B68A2E390AAC",
"PreviousTxnLgrSeq": 4602906,
"index": "2BF3226ACCA8FF7ACB7201F20A701F51D8666A2FA2FBFBE6A05C9161F9228A18"
}, {
"Account": "rfztBskAVszuS3s5Kq7zDS74QtHrw893fm",
"Amount": "250",
"Destination": "r9gyNNzhMtfwZara61u3ycfMLdkTpKJZHX",
"DestinationNode": "0000000000000000",
"FinishAfter": 570672000,
"Flags": 0,
"LedgerEntryType": "Escrow",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "463D5A3CF09F4890B8471027F80414B3B438E6907425B71DC324D7118E90A107",
"PreviousTxnLgrSeq": 4603003,
"index": "35462CDC28AD830B29D101E8307AF5B6BFBC262F1BDCCA7EB45D1CA3F8B44F53"
}, {
"Account": "r9gyNNzhMtfwZara61u3ycfMLdkTpKJZHX",
"Amount": "250",
"Destination": "rfztBskAVszuS3s5Kq7zDS74QtHrw893fm",
"DestinationNode": "0000000000000000",
"FinishAfter": 570672000,
"Flags": 0,
"LedgerEntryType": "Escrow",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "08C9B20AC9EB191238038A108CC4CBBC0243672484B466FB42DED0A7DF6A31A1",
"PreviousTxnLgrSeq": 4602954,
"index": "A7B0983A1B53D92278E21499064A4F8BBE08CB8D14DB6BBBA8F688AB1D3FDA45"
}, {
"Account": "rfztBskAVszuS3s5Kq7zDS74QtHrw893fm",
"Amount": "250",
"Destination": "rafD3taonqdnVpaxCCT6sjnScZUeFGf1JG",
"DestinationNode": "0000000000000000",
"FinishAfter": 570672000,
"Flags": 0,
"LedgerEntryType": "Escrow",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "F4778F528AB3CB945BDB88036EF9FE6C0E899F1629D9E51129E3B93CD488395A",
"PreviousTxnLgrSeq": 4602977,
"index": "F99A4DDADDDF623908C9A048170AB107AFF78684AB8F3110E9F00BBBC606ABD2"
}],
"ledger_hash": "1D4850035F175CA6F1CD5CE3B53C01AA83E4F086C13085E4FBC1EEFCCB345A9B",
"ledger_index": 4603176,
"validated": true
},
"status": "success",
"type": "response"
}

View File

@@ -0,0 +1,5 @@
{
"id": 4,
"command": "ledger",
"ledger_index": "validated"
}

View File

@@ -0,0 +1,5 @@
{
"id": 4,
"command": "ledger",
"ledger_index": "validated"
}

View File

@@ -0,0 +1,19 @@
{
"id": 1,
"status": "success",
"type": "response",
"result": {
"ledger": {
# ... (trimmed) ...
"close_time": 560302643,
"close_time_human": "2017-Oct-02 23:37:23",
"close_time_resolution": 10,
# ... (trimmed) ...
},
"ledger_hash": "668F0647A6F3CC277496245DBBE9BD2E3B8E70E7AA824E97EF3237FE7E1EE3F2",
"ledger_index": 2906341,
"validated": true
}
}

View File

@@ -0,0 +1,28 @@
{
"id": 4,
"status": "success",
"type": "response",
"result": {
"ledger": {
"accepted": true,
"account_hash": "3B5A8FF5334F94F4D3D09F236F9D1B4C028FCAE30948ACC986D461DDEE1D886B",
"close_flags": 0,
"close_time": 557256670,
"close_time_human": "2017-Aug-28 17:31:10",
"close_time_resolution": 10,
"closed": true,
"hash": "A999223A80174A7CB39D766B625C9E476F24AD2F15860A712CD029EE5ED1C320",
"ledger_hash": "A999223A80174A7CB39D766B625C9E476F24AD2F15860A712CD029EE5ED1C320",
"ledger_index": "1908253",
"parent_close_time": 557256663,
"parent_hash": "6A70C5336ACFDA05760D827776079F7A544D2361CFD5B21BD55A92AA20477A61",
"seqNum": "1908253",
"totalCoins": "99997280690562728",
"total_coins": "99997280690562728",
"transaction_hash": "49A51DFB1CAB2F134D93D5D1C5FF55A15B12DA36DAF9F5862B17C47EE966647D"
},
"ledger_hash": "A999223A80174A7CB39D766B625C9E476F24AD2F15860A712CD029EE5ED1C320",
"ledger_index": 1908253,
"validated": true
}
}

View File

@@ -0,0 +1,11 @@
{
"id": 5,
"command": "submit",
"secret": "s████████████████████████████",
"tx_json": {
"Account": "rhgdnc82FwHFUKXp9ZcpgwXWRAxKf5Buqp",
"TransactionType": "EscrowCancel",
"Owner": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"OfferSequence": 1
}
}

View File

@@ -0,0 +1,13 @@
{
"id": 1,
"command": "submit",
"secret": "s████████████████████████████",
"tx_json": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"TransactionType": "EscrowCreate",
"Amount": "100000",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Condition": "A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD810120",
"CancelAfter": 556927412
}
}

View File

@@ -0,0 +1,12 @@
{
"id": 2,
"command": "submit",
"secret": "s████████████████████████████",
"tx_json": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"TransactionType": "EscrowCreate",
"Amount": "10000",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"FinishAfter": 557020800
}
}

View File

@@ -0,0 +1,14 @@
{
"id": 4,
"command": "submit",
"secret": "s████████████████████████████",
"tx_json": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"TransactionType": "EscrowFinish",
"Owner": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"OfferSequence": 5,
"Condition": "A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD810120",
"Fulfillment": "A0228020D280D1A02BAD0D2EBC0528B92E9BF37AC3E2530832C2C52620307135156F1048",
"Fee": "500"
}
}

View File

@@ -0,0 +1,11 @@
{
"id": 5,
"command": "submit",
"secret": "s████████████████████████████",
"tx_json": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"TransactionType": "EscrowFinish",
"Owner": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"OfferSequence": 1
}
}

View File

@@ -0,0 +1,23 @@
{
"id": 5,
"status": "success",
"type": "response",
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"tx_blob": "1200042280000000240000000320190000000168400000000000000A7321027FB1CF34395F18901CD294F77752EEE25277C6E87A224FC7388AA7EF872DB43D74473045022100AC45749FC4291F7811B2D8AC01CA04FEE38910CB7216FB0C5C0AEBC9C0A95F4302203F213C71C00136A0ADC670EFE350874BCB2E559AC02059CEEDFB846685948F2B81142866B7B47574C8A70D5E71FFB95FFDB18951427B82144E87970CD3EA984CF48B1AA6AB6C77DC4AB059FC",
"tx_json": {
"Account": "rhgdnc82FwHFUKXp9ZcpgwXWRAxKf5Buqp",
"Fee": "10",
"Flags": 2147483648,
"OfferSequence": 1,
"Owner": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"Sequence": 3,
"SigningPubKey": "027FB1CF34395F18901CD294F77752EEE25277C6E87A224FC7388AA7EF872DB43D",
"TransactionType": "EscrowCancel",
"TxnSignature": "3045022100AC45749FC4291F7811B2D8AC01CA04FEE38910CB7216FB0C5C0AEBC9C0A95F4302203F213C71C00136A0ADC670EFE350874BCB2E559AC02059CEEDFB846685948F2B",
"hash": "65F36C5514153D94F0ADE5CE747061A5E70B73B56B4C66DA5040D99CAF252831"
}
}
}

View File

@@ -0,0 +1,25 @@
{
"id": 1,
"status": "success",
"type": "response",
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"tx_blob": "120001228000000024000000052024213209B46140000000000186A068400000000000000A732103E498E35BC1E109C5995BD3AB0A6D4FFAB61B853C8F6010FABC5DABAF34478B61744730450221008AC8BDC2151D5EF956197F0E6E89A4F49DEADC1AC38367870E444B1EA8D88D97022075E31427B455DFF87F0F22B849C71FC3987A91C19D63B6D0242E808347EC8A8F701127A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD81012081149A2AA667E1517EFA8A6B552AB2EDB859A99F26B283144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Amount": "100000",
"CancelAfter": 556927412,
"Condition": "A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD810120",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "10",
"Flags": 2147483648,
"Sequence": 5,
"SigningPubKey": "03E498E35BC1E109C5995BD3AB0A6D4FFAB61B853C8F6010FABC5DABAF34478B61",
"TransactionType": "EscrowCreate",
"TxnSignature": "30450221008AC8BDC2151D5EF956197F0E6E89A4F49DEADC1AC38367870E444B1EA8D88D97022075E31427B455DFF87F0F22B849C71FC3987A91C19D63B6D0242E808347EC8A8F",
"hash": "E22D1F6EB006CAD35E0DBD3B4F3748427055E4C143EBE95AA6603823AEEAD324"
}
}
}

View File

@@ -0,0 +1,24 @@
{
"id": 2,
"status": "success",
"type": "response",
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"tx_blob": "1200012280000000240000000120252133768061400000000000271068400000000000000A732103C3555B7339FFDDB43495A8371A3A87B4C66B67D49D06CB9BA1FDBFEEB57B6E437446304402203C9AA4C21E1A1A7427D41583283E7A513DDBDD967B246CADD3B2705D858A7A8E02201BEA7B923B18910EEB9F306F6DE3B3F53549BBFAD46335B62B4C34A6DCB4A47681143EEB46C355B04EE8D08E8EED00F422895C79EA6A83144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Amount": "10000",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "10",
"FinishAfter": 557020800,
"Flags": 2147483648,
"Sequence": 1,
"SigningPubKey": "03C3555B7339FFDDB43495A8371A3A87B4C66B67D49D06CB9BA1FDBFEEB57B6E43",
"TransactionType": "EscrowCreate",
"TxnSignature": "304402203C9AA4C21E1A1A7427D41583283E7A513DDBDD967B246CADD3B2705D858A7A8E02201BEA7B923B18910EEB9F306F6DE3B3F53549BBFAD46335B62B4C34A6DCB4A476",
"hash": "55B2057332F8999208C43BA1E7091B423A16E5ED2736C06300B4076085205263"
}
}
}

View File

@@ -0,0 +1,25 @@
{
"id": 4,
"status": "success",
"type": "response",
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"tx_blob": "120002228000000024000000062019000000056840000000000001F4732103E498E35BC1E109C5995BD3AB0A6D4FFAB61B853C8F6010FABC5DABAF34478B617446304402207DE4EA9C8655E75BA01F96345B3F62074313EB42C15D9C4871E30F02202D2BA50220070E52AD308A31AC71E33BA342F31B68D1D1B2A7A3A3ED6E8552CA3DCF14FBB2701024A0228020D280D1A02BAD0D2EBC0528B92E9BF37AC3E2530832C2C52620307135156F1048701127A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD81012081149A2AA667E1517EFA8A6B552AB2EDB859A99F26B282149A2AA667E1517EFA8A6B552AB2EDB859A99F26B2",
"tx_json": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Condition": "A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD810120",
"Fee": "500",
"Flags": 2147483648,
"Fulfillment": "A0228020D280D1A02BAD0D2EBC0528B92E9BF37AC3E2530832C2C52620307135156F1048",
"OfferSequence": 5,
"Owner": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Sequence": 6,
"SigningPubKey": "03E498E35BC1E109C5995BD3AB0A6D4FFAB61B853C8F6010FABC5DABAF34478B61",
"TransactionType": "EscrowFinish",
"TxnSignature": "304402207DE4EA9C8655E75BA01F96345B3F62074313EB42C15D9C4871E30F02202D2BA50220070E52AD308A31AC71E33BA342F31B68D1D1B2A7A3A3ED6E8552CA3DCF14FBB2",
"hash": "0E88368CAFC69A722ED829FAE6E2DD3575AE9C192691E60B5ACDF706E219B2BF"
}
}
}

View File

@@ -0,0 +1,23 @@
{
"id": 5,
"status": "success",
"type": "response",
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"tx_blob": "1200022280000000240000000220190000000168400000000000000A732103C3555B7339FFDDB43495A8371A3A87B4C66B67D49D06CB9BA1FDBFEEB57B6E4374473045022100923B91BA4FD6450813F5335D71C64BA9EB81304A86859A631F2AD8571424A46502200CCE660D36781B84634C5F23619EB6CFCCF942709F54DCCF27CF6F499AE78C9B81143EEB46C355B04EE8D08E8EED00F422895C79EA6A82143EEB46C355B04EE8D08E8EED00F422895C79EA6A",
"tx_json": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Fee": "10",
"Flags": 2147483648,
"OfferSequence": 1,
"Owner": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Sequence": 2,
"SigningPubKey": "03C3555B7339FFDDB43495A8371A3A87B4C66B67D49D06CB9BA1FDBFEEB57B6E43",
"TransactionType": "EscrowFinish",
"TxnSignature": "3045022100923B91BA4FD6450813F5335D71C64BA9EB81304A86859A631F2AD8571424A46502200CCE660D36781B84634C5F23619EB6CFCCF942709F54DCCF27CF6F499AE78C9B",
"hash": "41856A742B3CAF307E7B4D0B850F302101F0F415B785454F7501E9960A2A1F6B"
}
}
}

View File

@@ -0,0 +1,5 @@
{
"id": 6,
"command": "tx",
"transaction": "65F36C5514153D94F0ADE5CE747061A5E70B73B56B4C66DA5040D99CAF252831"
}

View File

@@ -0,0 +1,5 @@
{
"id": 3,
"command": "tx",
"transaction": "E22D1F6EB006CAD35E0DBD3B4F3748427055E4C143EBE95AA6603823AEEAD324"
}

View File

@@ -0,0 +1,5 @@
{
"id": 3,
"command": "tx",
"transaction": "55B2057332F8999208C43BA1E7091B423A16E5ED2736C06300B4076085205263"
}

View File

@@ -0,0 +1,5 @@
{
"id": 20,
"command": "tx",
"transaction": "0E88368CAFC69A722ED829FAE6E2DD3575AE9C192691E60B5ACDF706E219B2BF"
}

View File

@@ -0,0 +1,5 @@
{
"id": 21,
"command": "tx",
"transaction": "41856A742B3CAF307E7B4D0B850F302101F0F415B785454F7501E9960A2A1F6B"
}

View File

@@ -0,0 +1,101 @@
{
"id": 6,
"status": "success",
"type": "response",
"result": {
"Account": "rhgdnc82FwHFUKXp9ZcpgwXWRAxKf5Buqp",
"Fee": "10",
"Flags": 2147483648,
"OfferSequence": 1,
"Owner": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"Sequence": 3,
"SigningPubKey": "027FB1CF34395F18901CD294F77752EEE25277C6E87A224FC7388AA7EF872DB43D",
"TransactionType": "EscrowCancel",
"TxnSignature": "3045022100AC45749FC4291F7811B2D8AC01CA04FEE38910CB7216FB0C5C0AEBC9C0A95F4302203F213C71C00136A0ADC670EFE350874BCB2E559AC02059CEEDFB846685948F2B",
"date": 560302841,
"hash": "65F36C5514153D94F0ADE5CE747061A5E70B73B56B4C66DA5040D99CAF252831",
"inLedger": 2906406,
"ledger_index": 2906406,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"PreviousTxnID": "4756C22BBB7FC23D9081FDB180806939D6FEBC967BE0EC2DB95B166AF9C086E9",
"PreviousTxnLgrSeq": 2764813
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rhgdnc82FwHFUKXp9ZcpgwXWRAxKf5Buqp",
"Balance": "9999999970",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 4
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "3430FA3A160FA8F9842FA4A8B5549ECDCB3783E585D0F9796A1736DEAE35F6FE",
"PreviousFields": {
"Balance": "9999999980",
"Sequence": 3
},
"PreviousTxnID": "DA6F5CA8CE13A03B8BC58515E085F2FEF90B3C08230B5AEC8DE4FAF39F79010B",
"PreviousTxnLgrSeq": 2906391
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"Amount": "10000",
"CancelAfter": 559913895,
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"FinishAfter": 559892324,
"Flags": 0,
"OwnerNode": "0000000000000000",
"PreviousTxnID": "4756C22BBB7FC23D9081FDB180806939D6FEBC967BE0EC2DB95B166AF9C086E9",
"PreviousTxnLgrSeq": 2764813
},
"LedgerEntryType": "Escrow",
"LedgerIndex": "7243A9750FA4BE3E63F75F6DACFD79AD6B6C76947F6BDC46CD0F52DBEEF64C89"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"RootIndex": "DACDBEBD31D14EAC4207A45DB88734AD14D26D908507F41D2FC623BDD91C582F"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "DACDBEBD31D14EAC4207A45DB88734AD14D26D908507F41D2FC623BDD91C582F"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "r3wN3v2vTUkr5qd6daqDc2xE4LSysdVjkT",
"Balance": "9999999990",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 2
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "F5F1834B80A8B5DA878270AB4DE4EA444281181349375F1D21E46D5F3F0ABAC8",
"PreviousFields": {
"Balance": "9999989990",
"OwnerCount": 1
},
"PreviousTxnID": "4756C22BBB7FC23D9081FDB180806939D6FEBC967BE0EC2DB95B166AF9C086E9",
"PreviousTxnLgrSeq": 2764813
}
}
],
"TransactionIndex": 2,
"TransactionResult": "tesSUCCESS"
},
"validated": true
}
}

View File

@@ -0,0 +1,81 @@
{
"id": 3,
"status": "success",
"type": "response",
"result": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Amount": "100000",
"CancelAfter": 556927412,
"Condition": "A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD810120",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "10",
"Flags": 2147483648,
"Sequence": 5,
"SigningPubKey": "03E498E35BC1E109C5995BD3AB0A6D4FFAB61B853C8F6010FABC5DABAF34478B61",
"TransactionType": "EscrowCreate",
"TxnSignature": "30450221008AC8BDC2151D5EF956197F0E6E89A4F49DEADC1AC38367870E444B1EA8D88D97022075E31427B455DFF87F0F22B849C71FC3987A91C19D63B6D0242E808347EC8A8F",
"date": 556841101,
"hash": "E22D1F6EB006CAD35E0DBD3B4F3748427055E4C143EBE95AA6603823AEEAD324",
"inLedger": 1772019,
"ledger_index": 1772019,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"PreviousTxnID": "52C4F626FE6F33699B6BE8ADF362836DDCE9B0B1294BFAA15D65D61501350BE6",
"PreviousTxnLgrSeq": 1771204
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"RootIndex": "4B4EBB6D8563075813D47491CC325865DFD3DC2E94889F0F39D59D9C059DD81F"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "4B4EBB6D8563075813D47491CC325865DFD3DC2E94889F0F39D59D9C059DD81F"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Balance": "9999798970",
"Flags": 0,
"OwnerCount": 1,
"Sequence": 6
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "5F3B7107F4B524367A173A2B0EAB66E8CC4D2178C1B0C0528CB2F73A8B6BF254",
"PreviousFields": {
"Balance": "9999898980",
"OwnerCount": 0,
"Sequence": 5
},
"PreviousTxnID": "52C4F626FE6F33699B6BE8ADF362836DDCE9B0B1294BFAA15D65D61501350BE6",
"PreviousTxnLgrSeq": 1771204
}
},
{
"CreatedNode": {
"LedgerEntryType": "Escrow",
"LedgerIndex": "E2CF730A31FD419382350C9DBD8DB7CD775BA5AA9B97A9BE9AB07304AA217A75",
"NewFields": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Amount": "100000",
"CancelAfter": 556927412,
"Condition": "A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD810120",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn"
}
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"validated": true
}
}

View File

@@ -0,0 +1,78 @@
{
"id": 3,
"status": "success",
"type": "response",
"result": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Amount": "10000",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "10",
"FinishAfter": 557020800,
"Flags": 2147483648,
"Sequence": 1,
"SigningPubKey": "03C3555B7339FFDDB43495A8371A3A87B4C66B67D49D06CB9BA1FDBFEEB57B6E43",
"TransactionType": "EscrowCreate",
"TxnSignature": "304402203C9AA4C21E1A1A7427D41583283E7A513DDBDD967B246CADD3B2705D858A7A8E02201BEA7B923B18910EEB9F306F6DE3B3F53549BBFAD46335B62B4C34A6DCB4A476",
"date": 557014081,
"hash": "55B2057332F8999208C43BA1E7091B423A16E5ED2736C06300B4076085205263",
"inLedger": 1828796,
"ledger_index": 1828796,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"PreviousTxnID": "613B28E0890FC975F2CBA3D700F75116F623B1E3FE48CB7CB2EB216EAD6F097D",
"PreviousTxnLgrSeq": 1799920
}
},
{
"CreatedNode": {
"LedgerEntryType": "Escrow",
"LedgerIndex": "2B9845CB9DF686B9615BF04F3EC66095A334D985E03E71B893B90FCF6D4DC9E6",
"NewFields": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Amount": "10000",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"FinishAfter": 557020800
}
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Balance": "9999989990",
"Flags": 0,
"OwnerCount": 1,
"Sequence": 2
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "AE5AB6584A76C37C7382B6880609FC7792D90CDA36FF362AF412EB914C1715D3",
"PreviousFields": {
"Balance": "10000000000",
"OwnerCount": 0,
"Sequence": 1
},
"PreviousTxnID": "F181D45FD094A7417926F791D9DF958B84CE4B7B3D92CC9DDCACB1D5EC59AAAA",
"PreviousTxnLgrSeq": 1828732
}
},
{
"CreatedNode": {
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "D623EBEEEE701D4323D0ADA5320AF35EA8CC6520EBBEF69343354CD593DABC88",
"NewFields": {
"Owner": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"RootIndex": "D623EBEEEE701D4323D0ADA5320AF35EA8CC6520EBBEF69343354CD593DABC88"
}
}
}
],
"TransactionIndex": 3,
"TransactionResult": "tesSUCCESS"
},
"validated": true
}
}

View File

@@ -0,0 +1,95 @@
{
"id": 20,
"status": "success",
"type": "response",
"result": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Condition": "A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD810120",
"Fee": "500",
"Flags": 2147483648,
"Fulfillment": "A0228020D280D1A02BAD0D2EBC0528B92E9BF37AC3E2530832C2C52620307135156F1048",
"OfferSequence": 2,
"Owner": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Sequence": 4,
"SigningPubKey": "03E498E35BC1E109C5995BD3AB0A6D4FFAB61B853C8F6010FABC5DABAF34478B61",
"TransactionType": "EscrowFinish",
"TxnSignature": "3045022100925FEBE21C2E57F81C472A4E5869CAB1D0164C472A46532F39F6F9F7ED6846D002202CF9D9063ADC4CC0ADF4C4692B7EE165C5D124CAA855649389E245D993F41D4D",
"date": 556838610,
"hash": "0E88368CAFC69A722ED829FAE6E2DD3575AE9C192691E60B5ACDF706E219B2BF",
"inLedger": 1771204,
"ledger_index": 1771204,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Balance": "400100000",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 1
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"PreviousFields": {
"Balance": "400000000"
},
"PreviousTxnID": "795CBC8AFAAB9DC7BD9944C7FAEABF9BB0802A84520BC649213AD6A2C3256C95",
"PreviousTxnLgrSeq": 1770775
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"RootIndex": "4B4EBB6D8563075813D47491CC325865DFD3DC2E94889F0F39D59D9C059DD81F"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "4B4EBB6D8563075813D47491CC325865DFD3DC2E94889F0F39D59D9C059DD81F"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Balance": "9999898980",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 5
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "5F3B7107F4B524367A173A2B0EAB66E8CC4D2178C1B0C0528CB2F73A8B6BF254",
"PreviousFields": {
"Balance": "9999899480",
"OwnerCount": 1,
"Sequence": 4
},
"PreviousTxnID": "5C2A1E7B209A7404D3722A010D331A8C1C853109A47DDF620DE5E3D59F026581",
"PreviousTxnLgrSeq": 1771042
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "rEhw9vD98ZrkY4tZPvkZst5H18RysqFdaB",
"Amount": "100000",
"Condition": "A0258020E24D9E1473D4DF774F6D8E089067282034E4FA7ECACA2AD2E547953B2C113CBD810120",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"FinishAfter": 556838185,
"Flags": 0,
"OwnerNode": "0000000000000000",
"PreviousTxnID": "795CBC8AFAAB9DC7BD9944C7FAEABF9BB0802A84520BC649213AD6A2C3256C95",
"PreviousTxnLgrSeq": 1770775
},
"LedgerEntryType": "Escrow",
"LedgerIndex": "DC524D17B3F650E7A215B332F418E54AE59B0DFC5392E74958B0037AFDFE8C8D"
}
}
],
"TransactionIndex": 1,
"TransactionResult": "tesSUCCESS"
},
"validated": true
}
}

View File

@@ -0,0 +1,92 @@
{
"id": 21,
"status": "success",
"type": "response",
"result": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Fee": "10",
"Flags": 2147483648,
"OfferSequence": 1,
"Owner": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Sequence": 2,
"SigningPubKey": "03C3555B7339FFDDB43495A8371A3A87B4C66B67D49D06CB9BA1FDBFEEB57B6E43",
"TransactionType": "EscrowFinish",
"TxnSignature": "3045022100923B91BA4FD6450813F5335D71C64BA9EB81304A86859A631F2AD8571424A46502200CCE660D36781B84634C5F23619EB6CFCCF942709F54DCCF27CF6F499AE78C9B",
"date": 557256681,
"hash": "41856A742B3CAF307E7B4D0B850F302101F0F415B785454F7501E9960A2A1F6B",
"inLedger": 1908257,
"ledger_index": 1908257,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Balance": "400210000",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 1
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"PreviousFields": {
"Balance": "400200000"
},
"PreviousTxnID": "55B2057332F8999208C43BA1E7091B423A16E5ED2736C06300B4076085205263",
"PreviousTxnLgrSeq": 1828796
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Amount": "10000",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"FinishAfter": 557020800,
"Flags": 0,
"OwnerNode": "0000000000000000",
"PreviousTxnID": "55B2057332F8999208C43BA1E7091B423A16E5ED2736C06300B4076085205263",
"PreviousTxnLgrSeq": 1828796
},
"LedgerEntryType": "Escrow",
"LedgerIndex": "2B9845CB9DF686B9615BF04F3EC66095A334D985E03E71B893B90FCF6D4DC9E6"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"Balance": "9999989980",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 3
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "AE5AB6584A76C37C7382B6880609FC7792D90CDA36FF362AF412EB914C1715D3",
"PreviousFields": {
"Balance": "9999989990",
"OwnerCount": 1,
"Sequence": 2
},
"PreviousTxnID": "55B2057332F8999208C43BA1E7091B423A16E5ED2736C06300B4076085205263",
"PreviousTxnLgrSeq": 1828796
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"RootIndex": "D623EBEEEE701D4323D0ADA5320AF35EA8CC6520EBBEF69343354CD593DABC88"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "D623EBEEEE701D4323D0ADA5320AF35EA8CC6520EBBEF69343354CD593DABC88"
}
}
],
"TransactionIndex": 2,
"TransactionResult": "tesSUCCESS"
},
"validated": true
}
}

View File

@@ -1,87 +1,80 @@
{
"result": {
"ledger_hash": "3787026448652A36491493C1202A443B2A6CC6022599BB0B25DDB0802DD7F1E7",
"ledger_index": 82681623,
"ledger_hash": "0C445F6F348AA5FF25A631C904F7277980F7FD2A6BACBB3A74FCF95F671D4884",
"ledger_index": 82681558,
"validated": true,
"ledger": {
"account_hash": "39D34D858A0FD652143ED84B67A09193772DE0CCEBD2D63619E679293B7A3388",
"account_hash": "60BF81E9BCA5CEDB629B8D19DE0791F13318B4C6B6886E35A211824F9EB04DE5",
"close_flags": 0,
"close_time": 748569571,
"close_time_human": "2023-Sep-20 23:59:31.000000000 UTC",
"close_time": 748569330,
"close_time_human": "2023-Sep-20 23:55:30.000000000 UTC",
"close_time_resolution": 10,
"close_time_iso": "2023-09-20T23:59:31Z",
"ledger_hash": "3787026448652A36491493C1202A443B2A6CC6022599BB0B25DDB0802DD7F1E7",
"parent_close_time": 748569570,
"parent_hash": "674FF6C68956E06CB9628833677C3DD71824C87C0AEFB487984CF98C3964DAEE",
"total_coins": "99988406188847858",
"transaction_hash": "11EE9C448D6B07B88A80B4FC7935B485E513816B3B47D0976CE9F51E7CF10A85",
"ledger_index": 82681623,
"closed": true,
"ledger_hash": "0C445F6F348AA5FF25A631C904F7277980F7FD2A6BACBB3A74FCF95F671D4884",
"ledger_index": "82681558",
"parent_close_time": 748569321,
"parent_hash": "817E4F1791BE34C1214E78E02CAB794C54615F69E765D140D0BD820EA81BF0E9",
"total_coins": "99988406204421588",
"transaction_hash": "2D7808600F9CF57E263EC1EC4AA7357586AE949908EA7DBF023D241812CDC9B5",
"diff": [
{
"object_id": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E134815E74400",
"object_id": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E155AF07E5400",
"object": {
"ExchangeRate": "4f0e134815e74400",
"ExchangeRate": "4f0e155af07e5400",
"Flags": 0,
"Indexes": [
"AA0B31FB7FEF4A2546DA2BD0C44E9EC0D3A173EDE92DA1D50F78E61024BAFE4F"
"4CF31E76F470F4CBE7E7EDD1973CDFA564A59672D14C577C51517A1E3469E53A"
],
"LedgerEntryType": "DirectoryNode",
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E134815E74400",
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E155AF07E5400",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "000000000000000000000000434E590000000000",
"TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A",
"index": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E134815E74400"
"index": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F0E155AF07E5400"
}
},
# ... (trimmed for length) ...
{
"object_id": "F65CCB13C33A1739BE63CBF6C77636429B0F4F506766D5E427A7CCC6C102037D",
"object_id": "F0B9A528CE25FE77C51C38040A7FEC016C2C841E74C1418D5B0A3845AE4FF3FC",
"object": {
"Balance": {
"currency": "MAG",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "-0.0157136905"
},
"Flags": 2228224,
"HighLimit": {
"currency": "MAG",
"issuer": "rwED3Kn7qu2og2nhCiDun5gKfWBDZ1YzfM",
"value": "45999776.589682"
},
"HighNode": "0",
"LedgerEntryType": "RippleState",
"LowLimit": {
"currency": "MAG",
"issuer": "rXmagwMmnFtVet3uL26Q2iwk287SRvVMJ",
"value": "0"
},
"LowNode": "8d",
"PreviousTxnID": "82783FBAE34A01C1AFA580F105FD716FA083B572BCE91254FD1B93B580E6DD3C",
"PreviousTxnLgrSeq": 82681623,
"index": "F65CCB13C33A1739BE63CBF6C77636429B0F4F506766D5E427A7CCC6C102037D"
"ExchangeRate": "5b0a3845ae4ff3fc",
"Flags": 0,
"Indexes": [
"7C085618D0A2BC3A8919A032699A2219C08D112CC4020E615CE37C4ABE31A13C"
],
"LedgerEntryType": "DirectoryNode",
"RootIndex": "F0B9A528CE25FE77C51C38040A7FEC016C2C841E74C1418D5B0A3845AE4FF3FC",
"TakerGetsCurrency": "0000000000000000000000005553440000000000",
"TakerGetsIssuer": "2ADB0B3959D60A6E6991F729E1918B7163925230",
"TakerPaysCurrency": "0000000000000000000000000000000000000000",
"TakerPaysIssuer": "0000000000000000000000000000000000000000",
"index": "F0B9A528CE25FE77C51C38040A7FEC016C2C841E74C1418D5B0A3845AE4FF3FC"
}
},
{
"object_id": "F7F1E123DC7B155F93DA6E122C4ED86B7032DFB6C399A5514A422635A8459821",
"object_id": "F0B9A528CE25FE77C51C38040A7FEC016C2C841E74C1418D5B0A395385B74F22",
"object": ""
},
{
"object_id": "FA295451E29A37C8BDEC209DB56B2E7D35F714492A1CBD20258FD8E806906E1F",
"object_id": "F97B88D103742E8C7CBDB982FF8843DC9E128E968668837B9468B1DB47EABBDC",
"object": {
"Account": "rff9KstNpP3eFWDp81uv3vizh5dreQRVZv",
"Balance": "11720167",
"Domain": "6D61726B6574696E67",
"EmailHash": "A5EC2C95531D608F0DB6369F8097A16E",
"Account": "r4AZpDKVoBxVcYUJCWMcqZzyWsHTteC4ZE",
"BookDirectory": "623C4C4AD65873DA787AC85A0A1385FE6233B6DE100799474F12ED4BF0EFEAD9",
"BookNode": "0",
"Flags": 0,
"LedgerEntryType": "AccountRoot",
"OwnerCount": 1,
"PreviousTxnID": "295A3AE6C90436F80EABB833B716DB52EC234C3D148622C2E5A449539C9FB0EE",
"PreviousTxnLgrSeq": 82681623,
"Sequence": 68507056,
"index": "FA295451E29A37C8BDEC209DB56B2E7D35F714492A1CBD20258FD8E806906E1F",
"urlgravatar": "http://www.gravatar.com/avatar/a5ec2c95531d608f0db6369f8097a16e"
"LedgerEntryType": "Offer",
"OwnerNode": "0",
"PreviousTxnID": "15D26953F0CE5216DC8BC7123E3DB8C8EC210D6127A7F34E182318206E0F2DFE",
"PreviousTxnLgrSeq": 82681558,
"Sequence": 132450778,
"TakerGets": "3677818937",
"TakerPays": {
"currency": "CNY",
"issuer": "rJ1adrpGS3xsnQMb9Cw54tWJVFPuSdZHK",
"value": "19593.43327917432"
},
"index": "F97B88D103742E8C7CBDB982FF8843DC9E128E968668837B9468B1DB47EABBDC"
}
}
]
@@ -94,4 +87,5 @@
"message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"
}
]
}
}

View File

@@ -6,8 +6,7 @@
"transactions": false,
"expand": false,
"owner_funds": false,
"diff": false,
"api_version": 2
"diff": false
}
]
}
}

View File

@@ -1,22 +1,21 @@
{
"result": {
"ledger_hash": "3787026448652A36491493C1202A443B2A6CC6022599BB0B25DDB0802DD7F1E7",
"ledger_index": 82681623,
"ledger_hash": "4E2F27F997943EAF522FB0D6AE4B25B1F54FDDE531E0469EF436B18391CFC7D9",
"ledger_index": 82681548,
"validated": true,
"ledger": {
"account_hash": "39D34D858A0FD652143ED84B67A09193772DE0CCEBD2D63619E679293B7A3388",
"account_hash": "608FCCDB3261FEF57B6EB76C89E3FE11B7C8D198DF443831BABF33D08FC8C12A",
"close_flags": 0,
"close_time": 748569571,
"close_time_human": "2023-Sep-20 23:59:31.000000000 UTC",
"close_time": 748569290,
"close_time_human": "2023-Sep-20 23:54:50.000000000 UTC",
"close_time_resolution": 10,
"close_time_iso": "2023-09-20T23:59:31Z",
"ledger_hash": "3787026448652A36491493C1202A443B2A6CC6022599BB0B25DDB0802DD7F1E7",
"parent_close_time": 748569570,
"parent_hash": "674FF6C68956E06CB9628833677C3DD71824C87C0AEFB487984CF98C3964DAEE",
"total_coins": "99988406188847858",
"transaction_hash": "11EE9C448D6B07B88A80B4FC7935B485E513816B3B47D0976CE9F51E7CF10A85",
"ledger_index": 82681623,
"closed": true
"closed": true,
"ledger_hash": "4E2F27F997943EAF522FB0D6AE4B25B1F54FDDE531E0469EF436B18391CFC7D9",
"ledger_index": "82681548",
"parent_close_time": 748569282,
"parent_hash": "DCECE701AE72CD9E3C1161EC6C98048DFF5797045CD49AD6038BE6D4610EED93",
"total_coins": "99988406204467365",
"transaction_hash": "95491C538DC25D4980AADC5E2ABAB90E1D4E20A02E772EA6A1C514BFC19987E4"
},
"status": "success"
},
@@ -26,4 +25,4 @@
"message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"
}
]
}
}

View File

@@ -1,9 +1,9 @@
{
"id": "example_ledger_req",
"id": 14,
"command": "ledger",
"ledger_index": "validated",
"transactions": false,
"expand": false,
"owner_funds": false,
"api_version": 2
}
"diff": false
}

View File

@@ -9,18 +9,15 @@
"close_time": 748569571,
"close_time_human": "2023-Sep-20 23:59:31.000000000 UTC",
"close_time_resolution": 10,
"close_time_iso": "2023-09-20T23:59:31Z",
"closed": true,
"ledger_hash": "3787026448652A36491493C1202A443B2A6CC6022599BB0B25DDB0802DD7F1E7",
"ledger_index": "82681623",
"parent_close_time": 748569570,
"parent_hash": "674FF6C68956E06CB9628833677C3DD71824C87C0AEFB487984CF98C3964DAEE",
"total_coins": "99988406188847858",
"transaction_hash": "11EE9C448D6B07B88A80B4FC7935B485E513816B3B47D0976CE9F51E7CF10A85",
"ledger_index": 82681623,
"closed": true
"transaction_hash": "11EE9C448D6B07B88A80B4FC7935B485E513816B3B47D0976CE9F51E7CF10A85"
}
},
"id": "example_ledger_req",
"api_version": 2,
"status": "success",
"type": "response",
"warnings": [
@@ -29,4 +26,4 @@
"message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"
}
]
}
}

View File

@@ -1,23 +1,22 @@
{
"result": {
"ledger_hash": "9DAAAE85FC0D64E95506608FDB48E8B77706EF64FF144F18EEBC2FC4366D9B20",
"ledger_index": 100972465,
"validated": true,
"ledger": {
"account_hash": "6FD2916DDD574886EBCBAA1CE0048D94E5A57E13EA5DD7B0283A7AB63EBF0131",
"close_flags": 0,
"close_time": 819429360,
"close_time_human": "2025-Dec-19 03:16:00.000000000 UTC",
"close_time_resolution": 10,
"close_time_iso": "2025-12-19T03:16:00Z",
"ledger_hash": "9DAAAE85FC0D64E95506608FDB48E8B77706EF64FF144F18EEBC2FC4366D9B20",
"parent_close_time": 819429352,
"parent_hash": "1FB3618846E1201E38FED328BD13A9D62012469193C0B5BA4ECE6C8BDAA2BFC9",
"total_coins": "99985738467416092",
"transaction_hash": "B61C7B94F583DBFEEDA58DE348518D6FC2F397053EA0E3AC4B8F2BD440629F19",
"ledger_index": 100972465,
"closed": true
},
"status": "success"
}
}
"result": {
"ledger": {
"account_hash": "23C1C8F8ACCEFACBDD9A1804CC25E652A324F9EABD7D0BEF103DA56D6E0306E7",
"close_flags": 0,
"close_time": 752188801,
"close_time_human": "2023-Nov-01 21:20:01.000000000 UTC",
"close_time_resolution": 10,
"closed": true,
"ledger_hash": "140B769E9ED61FCD675A6EEC1F005084614314C1D675C2CFDD11A1024BBD2C96",
"ledger_index": "83626952",
"parent_close_time": 752188800,
"parent_hash": "7D169A530960AFA8A0E38D036D8EF960BC2C2E02C4A0CE848A4200B9376AC99C",
"total_coins": "99988256304478252",
"transaction_hash": "77226182F58D9B5C798262F0E9D8C575D174E434F0C3C7119FB658BA70004CE9"
},
"ledger_hash": "140B769E9ED61FCD675A6EEC1F005084614314C1D675C2CFDD11A1024BBD2C96",
"ledger_index": 83626952,
"status": "success",
"validated": true
}
}

View File

@@ -1,26 +1,24 @@
{
"result": {
"ledger_hash": "9D346B0C050C6C5C5172BD731063C33A50C4E1D89EB51F47BBE73E4DA340A684",
"ledger_index": 100972403,
"validated": true,
"ledger": {
"account_hash": "3227B0AE820CA0C7B96A761942912785A27CFC5F3407A39AF03DA0BE9C6A4298",
"close_flags": 0,
"close_time": 819429112,
"close_time_human": "2025-Dec-19 03:11:52.000000000 UTC",
"close_time_resolution": 10,
"close_time_iso": "2025-12-19T03:11:52Z",
"ledger_hash": "9D346B0C050C6C5C5172BD731063C33A50C4E1D89EB51F47BBE73E4DA340A684",
"parent_close_time": 819429111,
"parent_hash": "667CE88E45EC7E9C71436A93970437F2F1C14D5A367F24BE3B571A27846C1EF3",
"total_coins": "99985738468528946",
"transaction_hash": "BC2E8BC91AF126D924CD4C43F0A28DF0DF5DE271A11A781516697C56488F03F7",
"ledger_index": 100972403,
"closed": true
}
},
"id": "example_ledger_req",
"api_version": 2,
"status": "success",
"type": "response"
}
"id": "example_ledger_req",
"result": {
"ledger": {
"account_hash": "B8B2C0C3F9E75E3AEE31D467B2544AB56244E618890BA58679707D6BFC0AF41D",
"close_flags": 0,
"close_time": 752188602,
"close_time_human": "2023-Nov-01 21:16:42.000000000 UTC",
"close_time_resolution": 10,
"closed": true,
"ledger_hash": "1BEECD5D21592EABDEF98D8E4BC038AD10B5700FF7E98011870DF5D6C2A2F39B",
"ledger_index": "83626901",
"parent_close_time": 752188601,
"parent_hash": "6B32CFC42B32C5FB90019AE17F701D96B499A4C8E148A002E18135A434A19D98",
"total_coins": "99988256314388830",
"transaction_hash": "21586C664DC47E12AF34F22EBF1DB55D23F8C98972542BAC0C39B1009CAC84D4"
},
"ledger_hash": "1BEECD5D21592EABDEF98D8E4BC038AD10B5700FF7E98011870DF5D6C2A2F39B",
"ledger_index": 83626901,
"validated": true
},
"status": "success",
"type": "response"
}

View File

@@ -0,0 +1,115 @@
{
"result": {
"tx_json": {
"Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"DeliverMax": {
"currency": "USD",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "1"
},
"Destination": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"Fee": "10",
"Flags": 0,
"Paths": [
[{
"account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"currency": "USD",
"issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"type": 49
}],
[{
"account": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x",
"currency": "USD",
"issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x",
"type": 49
}, {
"account": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY",
"currency": "USD",
"issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY",
"type": 49
}, {
"account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"currency": "USD",
"issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"type": 49
}]
],
"SendMax": {
"currency": "USD",
"issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"value": "1.01"
},
"Sequence": 88,
"SigningPubKey": "02EAE5DAB54DD8E1C49641D848D5B97D1B29149106174322EDF98A1B2CCE5D7F8E",
"TransactionType": "Payment",
"TxnSignature": "30440220791B6A3E036ECEFFE99E8D4957564E8C84D1548C8C3E80A87ED1AA646ECCFB16022037C5CAC97E34E3021EBB426479F2ACF3ACA75DB91DCC48D1BCFB4CF547CFEAA0",
"date": 416445410,
"ledger_index": 348734
},
"ctid": "C005523E00000000",
"hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7",
"meta": {
"AffectedNodes": [{
"ModifiedNode": {
"FinalFields": {
"Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"Balance": "59328999119",
"Flags": 0,
"OwnerCount": 11,
"Sequence": 89
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06",
"PreviousFields": {
"Balance": "59328999129",
"Sequence": 88
},
"PreviousTxnID": "C26AA6B4F7C3B9F55E17CD0D11F12032A1C7AD2757229FFD277C9447A8815E6E",
"PreviousTxnLgrSeq": 348700
}
}, {
"ModifiedNode": {
"FinalFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "-1"
},
"Flags": 131072,
"HighLimit": {
"currency": "USD",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "100"
},
"HighNode": "0",
"LowLimit": {
"currency": "USD",
"issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"value": "0"
},
"LowNode": "0"
},
"LedgerEntryType": "RippleState",
"LedgerIndex": "EA4BF03B4700123CDFFB6EB09DC1D6E28D5CEB7F680FB00FC24BC1C3BB2DB959",
"PreviousFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
}
},
"PreviousTxnID": "53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8",
"PreviousTxnLgrSeq": 343570
}
}],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS",
"delivered_amount": "unavailable"
},
"validated": true,
"ledger_index": 348734,
"ledger_hash": "195F62F34EB2CCFA4C5888BA20387E82EB353DDB4508BAE6A835AF19FB8B0C09",
"close_time_iso": "2013-03-12T23:16:50Z",
"status": "success"
}
}

View File

@@ -0,0 +1,116 @@
{
"result": {
"tx_json": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee": "12",
"Flags": 0,
"LastLedgerSequence": 56865248,
"OfferSequence": 5037708,
"Sequence": 5037710,
"SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9",
"date": 648248020,
"ledger_index": 56865245
},
"ctid": "C363B1DD00000000",
"hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"meta": {
"AffectedNodes": [{
"ModifiedNode": {
"FinalFields": {
"ExchangeRate": "4f04c66806cf7400",
"Flags": 0,
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "000000000000000000000000434E590000000000",
"TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
}, {
"ModifiedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance": "10404767991",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 5037711
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields": {
"Balance": "10404768003",
"Sequence": 5037710
},
"PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq": 56865244
}
}, {
"DeletedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode": "0",
"Flags": 0,
"OwnerNode": "0",
"PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq": 56865244,
"Sequence": 5037708,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
},
"LedgerEntryType": "Offer",
"LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
}, {
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "0",
"IndexPrevious": "0",
"Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
}, {
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence": 5037710,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
}
}
}],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"validated": true,
"ledger_index": 56865245,
"ledger_hash": "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"close_time_iso": "2020-07-16T20:53:40Z",
"status": "success"
}
}

View File

@@ -1,123 +0,0 @@
{
"result": {
"tx_json": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee": "12",
"Flags": 0,
"LastLedgerSequence": 56865248,
"OfferSequence": 5037708,
"Sequence": 5037710,
"SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9",
"ledger_index": 56865245,
"ctid": "C363B1DD00000000",
"date": 648248020
},
"hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"ExchangeRate": "4f04c66806cf7400",
"Flags": 0,
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "000000000000000000000000434E590000000000",
"TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance": "10404767991",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 5037711
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields": {
"Balance": "10404768003",
"Sequence": 5037710
},
"PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq": 56865244
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode": "0",
"Flags": 0,
"OwnerNode": "0",
"PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq": 56865244,
"Sequence": 5037708,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
},
"LedgerEntryType": "Offer",
"LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "0",
"IndexPrevious": "0",
"Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
},
{
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence": 5037710,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
}
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"validated": true,
"ledger_index": 56865245,
"ledger_hash": "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"close_time_iso": "2020-07-16T20:53:40Z",
"ctid": "C363B1DD00000000",
"status": "success"
}
}

View File

@@ -0,0 +1,127 @@
{
"result": {
"tx_json": {
"Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"DeliverMax": {
"currency": "USD",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "1"
},
"Destination": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"Fee": "10",
"Flags": 0,
"Paths": [
[
{
"account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"currency": "USD",
"issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"type": 49
}
],
[
{
"account": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x",
"currency": "USD",
"issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x",
"type": 49
},
{
"account": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY",
"currency": "USD",
"issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY",
"type": 49
},
{
"account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"currency": "USD",
"issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"type": 49
}
]
],
"SendMax": {
"currency": "USD",
"issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"value": "1.01"
},
"Sequence": 88,
"SigningPubKey": "02EAE5DAB54DD8E1C49641D848D5B97D1B29149106174322EDF98A1B2CCE5D7F8E",
"TransactionType": "Payment",
"TxnSignature": "30440220791B6A3E036ECEFFE99E8D4957564E8C84D1548C8C3E80A87ED1AA646ECCFB16022037C5CAC97E34E3021EBB426479F2ACF3ACA75DB91DCC48D1BCFB4CF547CFEAA0",
"date": 416445410,
"ledger_index": 348734
},
"ctid": "C005523E00000000",
"hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7",
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"Balance": "59328999119",
"Flags": 0,
"OwnerCount": 11,
"Sequence": 89
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06",
"PreviousFields": {
"Balance": "59328999129",
"Sequence": 88
},
"PreviousTxnID": "C26AA6B4F7C3B9F55E17CD0D11F12032A1C7AD2757229FFD277C9447A8815E6E",
"PreviousTxnLgrSeq": 348700
}
},
{
"ModifiedNode": {
"FinalFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "-1"
},
"Flags": 131072,
"HighLimit": {
"currency": "USD",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "100"
},
"HighNode": "0",
"LowLimit": {
"currency": "USD",
"issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"value": "0"
},
"LowNode": "0"
},
"LedgerEntryType": "RippleState",
"LedgerIndex": "EA4BF03B4700123CDFFB6EB09DC1D6E28D5CEB7F680FB00FC24BC1C3BB2DB959",
"PreviousFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
}
},
"PreviousTxnID": "53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8",
"PreviousTxnLgrSeq": 343570
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS",
"delivered_amount": "unavailable"
},
"validated": true,
"ledger_index": 348734,
"ledger_hash": "195F62F34EB2CCFA4C5888BA20387E82EB353DDB4508BAE6A835AF19FB8B0C09",
"close_time_iso": "2013-03-12T23:16:50Z"
},
"id": "CTID example",
"api_version": 2,
"status": "success",
"type": "response"
}

View File

@@ -0,0 +1,126 @@
{
"result": {
"tx_json": {
"Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"DeliverMax": {
"currency": "USD",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "1"
},
"Destination": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"Fee": "10",
"Flags": 0,
"Paths": [
[
{
"account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"currency": "USD",
"issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"type": 49
}
],
[
{
"account": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x",
"currency": "USD",
"issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x",
"type": 49
},
{
"account": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY",
"currency": "USD",
"issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY",
"type": 49
},
{
"account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"currency": "USD",
"issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"type": 49
}
]
],
"SendMax": {
"currency": "USD",
"issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"value": "1.01"
},
"Sequence": 88,
"SigningPubKey": "02EAE5DAB54DD8E1C49641D848D5B97D1B29149106174322EDF98A1B2CCE5D7F8E",
"TransactionType": "Payment",
"TxnSignature": "30440220791B6A3E036ECEFFE99E8D4957564E8C84D1548C8C3E80A87ED1AA646ECCFB16022037C5CAC97E34E3021EBB426479F2ACF3ACA75DB91DCC48D1BCFB4CF547CFEAA0",
"date": 416445410,
"ledger_index": 348734
},
"ctid": "C005523E00000000",
"hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7",
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"Balance": "59328999119",
"Flags": 0,
"OwnerCount": 11,
"Sequence": 89
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06",
"PreviousFields": {
"Balance": "59328999129",
"Sequence": 88
},
"PreviousTxnID": "C26AA6B4F7C3B9F55E17CD0D11F12032A1C7AD2757229FFD277C9447A8815E6E",
"PreviousTxnLgrSeq": 348700
}
},
{
"ModifiedNode": {
"FinalFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "-1"
},
"Flags": 131072,
"HighLimit": {
"currency": "USD",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "100"
},
"HighNode": "0",
"LowLimit": {
"currency": "USD",
"issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"value": "0"
},
"LowNode": "0"
},
"LedgerEntryType": "RippleState",
"LedgerIndex": "EA4BF03B4700123CDFFB6EB09DC1D6E28D5CEB7F680FB00FC24BC1C3BB2DB959",
"PreviousFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
}
},
"PreviousTxnID": "53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8",
"PreviousTxnLgrSeq": 343570
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS",
"delivered_amount": "unavailable"
},
"validated": true,
"ledger_index": 348734,
"ledger_hash": "195F62F34EB2CCFA4C5888BA20387E82EB353DDB4508BAE6A835AF19FB8B0C09",
"close_time_iso": "2013-03-12T23:16:50Z"
},
"api_version": 2,
"status": "success",
"type": "response"
}

View File

@@ -1,126 +0,0 @@
{
"result": {
"tx_json": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee": "12",
"Flags": 0,
"LastLedgerSequence": 56865248,
"OfferSequence": 5037708,
"Sequence": 5037710,
"SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9",
"ledger_index": 56865245,
"ctid": "C363B1DD00000000",
"date": 648248020
},
"hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"ExchangeRate": "4f04c66806cf7400",
"Flags": 0,
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "000000000000000000000000434E590000000000",
"TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance": "10404767991",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 5037711
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields": {
"Balance": "10404768003",
"Sequence": 5037710
},
"PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq": 56865244
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode": "0",
"Flags": 0,
"OwnerNode": "0",
"PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq": 56865244,
"Sequence": 5037708,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
},
"LedgerEntryType": "Offer",
"LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "0",
"IndexPrevious": "0",
"Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
},
{
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence": 5037710,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
}
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"validated": true,
"ledger_index": 56865245,
"ledger_hash": "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"close_time_iso": "2020-07-16T20:53:40Z",
"ctid": "C363B1DD00000000"
},
"id": "example_tx_hash",
"api_version": 2,
"status": "success",
"type": "response"
}

View File

@@ -1,174 +1,51 @@
import { Client, isoTimeToRippleTime, rippleTimeToISOTime, validate, getBalanceChanges } from 'xrpl'
'use strict'
const xrpl = require('xrpl');
const client = new Client('wss://s.altnet.rippletest.net:51233')
await client.connect()
// Preqrequisites:
// 1. Create an escrow using the create-escrow.js snippet
// 2. Replace the OfferSequence with the sequence number of the escrow you created
// 3. Paste the seed of the account that created the escrow
// 4. Run this snippet
console.log('Funding new wallet from faucet...')
const { wallet } = await client.fundWallet()
// const destinationAddress = 'rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe' // Testnet faucet
// Alternative: Get another account to send the escrow to. Use this if you get
// a tecDIR_FULL error trying to create escrows to the Testnet faucet.
const destinationAddress = (await client.fundWallet()).wallet.address
const seed = "sEd7jfWyNG6J71dEojB3W9YdHp2KCjy"; // replace with your seed
const sequenceNumber = 0; // replace with the sequence number of your escrow
// Create an escrow that won't be finished -------------------------------------
const cancelDelay = 30
const cancelAfter = new Date()
cancelAfter.setSeconds(cancelAfter.getSeconds() + cancelDelay)
console.log('This escrow will expire after:', cancelAfter)
// Convert cancelAfter to seconds since the Ripple Epoch:
const cancelAfterRippleTime = isoTimeToRippleTime(cancelAfter.toISOString())
const conditionHex = 'A02580200000000000000000000000000000000000000000000000000000000000000000810120'
async function main() {
try {
// Connect -------------------------------------------------------------------
const client = new xrpl.Client('wss://s.altnet.rippletest.net:51233');
await client.connect();
const escrowCreate = {
TransactionType: 'EscrowCreate',
Account: wallet.address,
Destination: destinationAddress,
Amount: '123456',
Condition: conditionHex,
CancelAfter: cancelAfterRippleTime
}
validate(escrowCreate)
// Prepare wallet to sign the transaction -------------------------------------
const wallet = await xrpl.Wallet.fromSeed(seed);
console.log("Wallet Address: ", wallet.address);
console.log("Seed: ", seed);
console.log('Signing and submitting the EscrowCreate transaction.')
const response = await client.submitAndWait(escrowCreate, {
wallet,
autofill: true // Note: fee is higher based on condition size in bytes
})
console.log(JSON.stringify(response.result, null, 2))
const escrowCreateResultCode = response.result.meta.TransactionResult
if (escrowCreateResultCode !== 'tesSUCCESS') {
console.error(`EscrowCreate failed with code ${escrowCreateResultCode}.`)
client.disconnect()
process.exit(1)
}
// Construct the escrow cancel transaction ------------------------------------
// Wait for the escrow to expire -----------------------------------------------
// Since ledger close times can be rounded by up to 10 seconds, wait an extra
// 10 seconds to make sure the escrow has officially expired.
console.log(`Waiting ${cancelDelay + 10} seconds for the escrow to expire...`)
await sleep(cancelDelay + 10)
if(!sequenceNumber){
throw new Error("Please specify the sequence number of the escrow you created");
};
/* Sleep function that can be used with await */
function sleep (delayInSeconds) {
const delayInMs = delayInSeconds * 1000
return new Promise((resolve) => setTimeout(resolve, delayInMs))
}
const escrowCancelTransaction = {
"Account": wallet.address,
"TransactionType": "EscrowCancel",
"Owner": wallet.address,
"OfferSequence": sequenceNumber, // Sequence number
};
// Look up the official close time of the validated ledger ---------------------
const ledger = await client.request({
command: 'ledger',
ledger_index: 'validated'
})
if (ledger.error) {
console.error(`Error looking up validated ledger: ${ledger.error}`)
client.disconnect()
process.exit(1)
}
const closeTime = ledger.result.ledger.close_time
console.log('Latest validated ledger closed at',
rippleTimeToISOTime(closeTime)
)
const ledgerHash = ledger.result.ledger.ledger_hash
xrpl.validate(escrowCancelTransaction);
// Look up escrows connected to the account, handling pagination ---------------
let marker
let expiredEscrow
while (true) {
console.log(`Requesting page of account_objects with marker ${marker}`)
const resp = await client.request({
command: 'account_objects',
account: wallet.address,
ledger_hash: ledgerHash,
type: 'escrow',
marker
})
if (resp.error) {
console.error('account_objects failed with error', resp)
client.disconnect()
process.exit(1)
}
// Sign and submit the transaction --------------------------------------------
console.log('Signing and submitting the transaction: ', JSON.stringify(escrowCancelTransaction, null, "\t"));
const response = await client.submitAndWait(escrowCancelTransaction, { wallet });
console.log(`Finished submitting! \n${JSON.stringify(response.result, null, "\t")}`);
// Add new escrows to the full list
for (const escrow of resp.result.account_objects) {
if (!escrow.hasOwnProperty('CancelAfter')) {
console.log('This escrow does not have an expiration.')
} else if (escrow.CancelAfter < closeTime) {
console.log('This escrow has expired.')
expiredEscrow = escrow
break
} else {
const expirationTime = rippleTimeToISOTime(escrow.CancelAfter)
console.log('This escrow expires at', expirationTime)
}
}
await client.disconnect();
if (expiredEscrow) {
// Found an expired escrow, stop paginating
break
}
// If there's a marker, loop and fetch the next page of results
if (resp.result.marker) {
marker = resp.result.marker
} else {
break
} catch (error) {
console.log(error);
}
}
if (!expiredEscrow) {
console.error('Did not find any expired escrows.')
process.exit(1)
}
// Find the sequence number of the expired escrow ------------------------------
let escrow_seq
const txResp = await client.request({
command: 'tx',
transaction: expiredEscrow.PreviousTxnID
})
if (txResp.error) {
console.error("Couldn't get transaction. Maybe this server doesn't have",
'enough transaction history available?')
client.disconnect()
process.exit(1)
}
if (txResp.result.tx_json.TransactionType === 'EscrowCreate') {
// Save this sequence number for canceling the escrow
escrow_seq = txResp.result.tx_json.Sequence
if (escrow_seq === 0) {
// This transaction used a Ticket, so use TicketSequence instead.
escrow_seq = response.result.tx_json.TicketSequence
}
} else {
console.error("This escrow's previous transaction wasn't EscrowCreate!")
client.disconnect()
process.exit(1)
}
// Send EscrowCancel transaction -----------------------------------------------
const escrowCancel = {
TransactionType: 'EscrowCancel',
Account: wallet.address,
Owner: expiredEscrow.Account,
OfferSequence: escrow_seq
}
validate(escrowCancel)
console.log('Signing and submitting the EscrowCancel transaction.')
const cancelResponse = await client.submitAndWait(escrowCancel, {
wallet,
autofill: true
})
console.log(JSON.stringify(cancelResponse.result, null, 2))
const cancelResultCode = cancelResponse.result.meta.TransactionResult
if (cancelResultCode !== 'tesSUCCESS') {
console.error(`EscrowCancel failed with result code ${cancelResultCode}`)
client.disconnect()
process.exit(1)
}
console.log('Escrow canceled. Balance changes:')
console.log(JSON.stringify(getBalanceChanges(cancelResponse.result.meta), null, 2))
client.disconnect()
main()

View File

@@ -0,0 +1,69 @@
'use strict'
const xrpl = require('xrpl');
const cc = require('five-bells-condition');
const crypto = require('crypto');
// Useful Documentation:-
// 1. five-bells-condition: https://www.npmjs.com/package/five-bells-condition
// 2. Crypto module: https://nodejs.org/api/crypto.html
// Your seed value, for testing purposes you can make one with the faucet:
// https://xrpl.org/resources/dev-tools/xrp-faucets
const seed = "sEd7jfWyNG6J71dEojB3W9YdHp2KCjy";
async function main() {
try {
// Connect ----------------------------------------------------------------
const client = new xrpl.Client('wss://s.altnet.rippletest.net:51233');
await client.connect();
// Prepare wallet to sign the transaction ---------------------------------
const wallet = await xrpl.Wallet.fromSeed(seed);
console.log("Wallet Address: ", wallet.address);
console.log("Seed: ", seed);
// Set the escrow finish time ---------------------------------------------
let finishAfter = new Date((new Date().getTime() / 1000) + 120); // 2 minutes from now
finishAfter = new Date(finishAfter * 1000);
console.log("This escrow will finish after: ", finishAfter);
// Construct condition and fulfillment ------------------------------------
const preimageData = crypto.randomBytes(32);
const myFulfillment = new cc.PreimageSha256();
myFulfillment.setPreimage(preimageData);
const conditionHex = myFulfillment.getConditionBinary().toString('hex').toUpperCase();
console.log('Condition:', conditionHex);
console.log('Fulfillment:', myFulfillment.serializeBinary().toString('hex').toUpperCase());
// Prepare EscrowCreate transaction ------------------------------------
const escrowCreateTransaction = {
"TransactionType": "EscrowCreate",
"Account": wallet.address,
"Destination": wallet.address,
"Amount": "6000000", //drops XRP
"DestinationTag": 2023,
"Condition": conditionHex, // Omit this for time-held escrows
"Fee": "12",
"FinishAfter": xrpl.isoTimeToRippleTime(finishAfter.toISOString()),
};
xrpl.validate(escrowCreateTransaction);
// Sign and submit the transaction ----------------------------------------
console.log('Signing and submitting the transaction:',
JSON.stringify(escrowCreateTransaction, null, "\t"), "\n"
);
const response = await client.submitAndWait(escrowCreateTransaction, { wallet });
console.log(`Sequence number: ${response.result.tx_json.Sequence}`);
console.log(`Finished submitting! ${JSON.stringify(response.result, null, "\t")}`);
await client.disconnect();
} catch (error) {
console.log(error);
}
}
main()

View File

@@ -0,0 +1,60 @@
'use strict'
const xrpl = require('xrpl')
// Preqrequisites:
// 1. Create an escrow using the create-escrow.js snippet
// 2. Replace the OfferSequence with the sequence number of the escrow you created
// 3. Replace the Condition and Fulfillment with the values from the escrow you created
// 4. Paste the seed of the account that created the escrow
// 5. Run the snippet
const seed = "sEd7jfWyNG6J71dEojB3W9YdHp2KCjy"; // Test seed. Don't use
const offerSequence = null;
const condition = "";
const fulfillment = "";
const main = async () => {
try {
// Connect ----------------------------------------------------------------
const client = new xrpl.Client('wss://s.altnet.rippletest.net:51233');
await client.connect();
// Prepare wallet to sign the transaction ---------------------------------
const wallet = await xrpl.Wallet.fromSeed(seed);
console.log("Wallet Address: ", wallet.address);
console.log("Seed: ", seed);
if((!offerSequence)|| (condition === "" || fulfillment === "")){
throw new Error("Please specify the sequence number, condition and fulfillment of the escrow you created");
};
// Prepare EscrowFinish transaction ---------------------------------
const escrowFinishTransaction = {
"Account": wallet.address,
"TransactionType": "EscrowFinish",
"Owner": wallet.address,
// This should equal the sequence number of the escrow transaction
"OfferSequence": offerSequence,
// Crypto condition that must be met before escrow can be completed, passed on escrow creation.
// Omit this for time-held escrows.
"Condition": condition,
// Fulfillment of the condition, passed on escrow creation.
// Omit this for time-held escrows.
"Fulfillment": fulfillment,
};
xrpl.validate(escrowFinishTransaction);
// Sign and submit the transaction ----------------------------------------
console.log('Signing and submitting the transaction:', JSON.stringify(escrowFinishTransaction, null, "\t"));
const response = await client.submitAndWait(escrowFinishTransaction, { wallet });
console.log(`Finished submitting! ${JSON.stringify(response.result, null, "\t")}`);
await client.disconnect();
} catch (error) {
console.log(error);
}
}
main()

View File

@@ -1,114 +1,54 @@
import { Client, dropsToXrp, rippleTimeToISOTime } from 'xrpl'
const xrpl = require('xrpl')
// Set up client and address
const address = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn'
console.log('Connecting to Mainnet...')
const client = new Client('wss://xrplcluster.com/')
// List the Escrows on an existing account filtered by source and destination
// https://xrpl.org/escrow.html#escrow
// https://xrpl.org/account_objects.html#account_objects
async function main() {
// Testnet example: rPRKeXbcFMcn69nR2bovp4bEcP8kZx7x5i
account = "rPRKeXbcFMcn69nR2bovp4bEcP8kZx7x5i"
// Connect to a testnet node
console.log("Connecting to Testnet...")
const client = new xrpl.Client('wss://s.altnet.rippletest.net:51233/')
await client.connect()
// Look up the official close time of the validated ledger ---------------------
const ledger = await client.request({
command: 'ledger',
ledger_index: 'validated'
const response = await client.request({
"command": "account_objects",
"account": account,
"ledger_index": "validated",
"type": "escrow"
})
if (ledger.error) {
console.error(`Error looking up validated ledger: ${ledger.error}`)
client.disconnect()
process.exit(1)
}
const close_time = ledger.result.ledger.close_time
const ledger_hash = ledger.result.ledger.ledger_hash
// Look up objects filtered to escrows, handling pagination --------------------
let marker
const escrows = []
while (true) {
console.log(`Requesting page of account_objects with marker ${marker}`)
const resp = await client.request({
command: 'account_objects',
account: address,
ledger_hash, // Caution: if you use a shortcut
// such as "validated", the ledger may
// change during iteration, leading to
// inconsistent results.
type: 'escrow',
marker
})
if (resp.error) {
console.error('account_objects failed with error', resp)
client.disconnect()
process.exit(1)
}
var incoming = []
var outgoing = []
// Add new escrows to the full list
for (const escrow of resp.result.account_objects) {
escrows.push(escrow)
}
// If there's a marker, loop and fetch the next page of results
if (resp.result.marker) {
marker = resp.result.marker
} else {
break
}
}
// Define helper function for displaying amounts -------------------------------
function display_amount (amount) {
if (typeof amount === 'string') {
// amount is drops of XRP.
const decimal_xrp = dropsToXrp(amount)
return `${decimal_xrp} XRP`
} else if (amount.hasOwnProperty('mpt_issuance_id')) {
// amount is an MPT.
// More info may be available, but that would require looking it up.
return `${amount.value} units of MPT ${amount.mpt_issuance_id}`
} else if (amount.hasOwnProperty('issuer')) {
// amount is a trust line token.
// Currency may be 3 chars or hex. For guidelines parsing hex codes,
// see "Normalize Currency Codes" code sample.
return `${amount.value} ${amount.currency} issued by ${amount.issuer}`
}
console.error(`Unexpected type of amount: ${amount}`)
client.disconnect()
process.exit(1)
}
// Summarize results -----------------------------------------------------------
console.log(`Found ${escrows.length} escrow(s).`)
for (const escrow of escrows) {
if (escrow.Account === address) {
console.log(`Outgoing escrow to ${escrow.Destination}`)
} else if (escrow.Destination === address) {
console.log(`Incoming escrow from ${escrow.Account}`)
} else {
console.log('Neither incoming nor outgoing? This is unexexpected.')
}
console.log(` Amount: ${display_amount(escrow.Amount)}`)
if (escrow.hasOwnProperty('Condition')) {
console.log(` Condition: ${escrow.Condition}`)
}
if (escrow.FinishAfter) {
const mature_time_display = rippleTimeToISOTime(escrow.FinishAfter)
if (escrow.FinishAfter < close_time) {
console.log(` Matured at ${mature_time_display}`)
for (var i = 0; i < response.result.account_objects.length; i++) {
if (response.result.account_objects[i].Account == account) {
outgoing.push(response.result.account_objects[i])
} else {
console.log(` Will mature at ${mature_time_display}`)
incoming.push(response.result.account_objects[i])
}
}
}
if (escrow.hasOwnProperty('CancelAfter')) {
const cancel_time_display = rippleTimeToISOTime(escrow.CancelAfter)
if (escrow.CancelAfter < close_time) {
console.log(` EXPIRED at ${cancel_time_display}`)
} else {
console.log(` Expires at ${cancel_time_display}`)
}
}
console.log("\nIncoming/Received escrow(s):")
for (var i = 0; i < incoming.length; i++) {
console.log(`\n${i+1}. Index (ObjectID/keylet): ${incoming[i].index}`)
console.log(` - Account: ${incoming[i].Account})`)
console.log(` - Destination: ${incoming[i].Destination}`)
console.log(` - Amount: ${incoming[i].Amount} drops`)
}
console.log("\nOutgoing/Sent escrow(s):")
for (var i = 0; i < outgoing.length; i++) {
console.log(`\n${i+1}. Index (ObjectID/keylet): ${outgoing[i].index}`)
console.log(` - Account: ${outgoing[i].Account})`)
console.log(` - Destination: ${outgoing[i].Destination}`)
console.log(` - Amount: ${outgoing[i].Amount} drops`)
}
client.disconnect()
// End main()
}
main()

View File

@@ -0,0 +1,9 @@
const cc = require('five-bells-condition')
const crypto = require('crypto')
const preimageData = crypto.randomBytes(32)
const myFulfillment = new cc.PreimageSha256()
myFulfillment.setPreimage(preimageData)
console.log('Condition:', myFulfillment.getConditionBinary().toString('hex').toUpperCase())
console.log('Fulfillment:', myFulfillment.serializeBinary().toString('hex').toUpperCase())

View File

@@ -1,10 +1,9 @@
{
"name": "escrow-examples",
"version": "2.0.0",
"version": "0.0.3",
"license": "MIT",
"dependencies": {
"five-bells-condition": "*",
"xrpl": "^4.4.0"
},
"type": "module"
"xrpl": "^4.0.0"
}
}

View File

@@ -1,89 +0,0 @@
import xrpl from 'xrpl'
import { PreimageSha256 } from 'five-bells-condition'
import { randomBytes } from 'crypto'
const client = new xrpl.Client('wss://s.altnet.rippletest.net:51233')
await client.connect()
console.log('Funding new wallet from faucet...')
const { wallet } = await client.fundWallet()
// const destination_address = 'rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe' // Testnet faucet
// Alternative: Get another account to send the escrow to. Use this if you get
// a tecDIR_FULL error trying to create escrows to the Testnet faucet.
const destination_address = (await client.fundWallet()).wallet.address
// Create the crypto-condition for release ----------------------------------
const preimage = randomBytes(32)
const fulfillment = new PreimageSha256()
fulfillment.setPreimage(preimage)
const fulfillmentHex = fulfillment.serializeBinary().toString('hex').toUpperCase()
const conditionHex = fulfillment.getConditionBinary().toString('hex').toUpperCase()
console.log('Condition:', conditionHex)
console.log('Fulfillment:', fulfillmentHex)
// Set the escrow expiration ------------------------------------------------
const cancelDelay = 300 // Seconds in the future when the escrow should expire
const cancelAfter = new Date() // Current time
cancelAfter.setSeconds(cancelAfter.getSeconds() + cancelDelay)
console.log('This escrow will expire after:', cancelAfter)
// Convert cancelAfter to seconds since the Ripple Epoch:
const cancelAfterRippleTime = xrpl.isoTimeToRippleTime(cancelAfter.toISOString())
// Send EscrowCreate transaction --------------------------------------------
const escrowCreate = {
TransactionType: 'EscrowCreate',
Account: wallet.address,
Destination: destination_address,
Amount: '123456', // drops of XRP
Condition: conditionHex,
CancelAfter: cancelAfterRippleTime
}
xrpl.validate(escrowCreate)
console.log('Signing and submitting the transaction:',
JSON.stringify(escrowCreate, null, 2))
const response = await client.submitAndWait(escrowCreate, {
wallet,
autofill: true // Note: fee is higher based on condition size in bytes
})
// Check result of submitting -----------------------------------------------
console.log(JSON.stringify(response.result, null, 2))
const escrowCreateResultCode = response.result.meta.TransactionResult
if (escrowCreateResultCode === 'tesSUCCESS') {
console.log('Escrow created successfully.')
} else {
console.error(`EscrowCreate failed with code ${escrowCreateResultCode}.`)
client.disconnect()
process.exit(1)
}
// Save the sequence number so you can identify the escrow later.
const escrowSeq = response.result.tx_json.Sequence
console.log(`Escrow sequence is ${escrowSeq}.`)
// Send EscrowFinish transaction --------------------------------------------
const escrowFinish = {
TransactionType: 'EscrowFinish',
Account: wallet.address,
Owner: wallet.address,
OfferSequence: escrowSeq,
Condition: conditionHex,
Fulfillment: fulfillmentHex
}
xrpl.validate(escrowFinish)
console.log('Signing and submitting the transaction:',
JSON.stringify(escrowFinish, null, 2))
const response2 = await client.submitAndWait(escrowFinish, {
wallet,
autofill: true // Note: fee is higher based on fulfillment size in bytes
})
console.log(JSON.stringify(response2.result, null, 2))
if (response2.result.meta.TransactionResult === 'tesSUCCESS') {
console.log('Escrow finished successfully.')
} else {
console.log(`Failed with result code ${response2.result.meta.TransactionResult}`)
}
client.disconnect()

View File

@@ -1,108 +0,0 @@
import xrpl from 'xrpl'
const client = new xrpl.Client('wss://s.altnet.rippletest.net:51233')
await client.connect()
console.log('Funding new wallet from faucet...')
const { wallet } = await client.fundWallet()
// const destination_address = 'rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe' // Testnet faucet
// Alternative: Get another account to send the escrow to. Use this if you get
// a tecDIR_FULL error trying to create escrows to the Testnet faucet.
const destination_address = (await client.fundWallet()).wallet.address
// Set the escrow finish time -----------------------------------------------
const delay = 30 // Seconds in the future when the escrow should mature
const finishAfter = new Date() // Current time
finishAfter.setSeconds(finishAfter.getSeconds() + delay)
console.log('This escrow will finish after:', finishAfter)
// Convert finishAfter to seconds since the Ripple Epoch:
const finishAfterRippleTime = xrpl.isoTimeToRippleTime(finishAfter.toISOString())
// Send EscrowCreate transaction --------------------------------------------
const escrowCreate = {
TransactionType: 'EscrowCreate',
Account: wallet.address,
Destination: destination_address,
Amount: '123456', // drops of XRP
FinishAfter: finishAfterRippleTime
}
xrpl.validate(escrowCreate)
console.log('Signing and submitting the transaction:',
JSON.stringify(escrowCreate, null, 2))
const response = await client.submitAndWait(escrowCreate, {
wallet,
autofill: true
})
console.log(JSON.stringify(response.result, null, 2))
const escrowCreateResultCode = response.result.meta.TransactionResult
if (escrowCreateResultCode === 'tesSUCCESS') {
console.log('Escrow created successfully.')
} else {
console.error(`EscrowCreate failed with code ${escrowCreateResultCode}.`)
client.disconnect()
process.exit(1)
}
// Save the sequence number so you can identify the escrow later.
const escrowSeq = response.result.tx_json.Sequence
console.log(`Escrow sequence is ${escrowSeq}.`)
// Wait for the escrow to be finishable -------------------------------------
console.log(`Waiting ${delay} seconds for the escrow to mature...`)
await sleep(delay)
/* Sleep function that can be used with await */
function sleep (delayInSeconds) {
const delayInMs = delayInSeconds * 1000
return new Promise((resolve) => setTimeout(resolve, delayInMs))
}
// Check if escrow can be finished -------------------------------------------
let escrowReady = false
while (!escrowReady) {
// Check the close time of the latest validated ledger.
// Close times are rounded by about 10 seconds, so the exact time the escrow
// is ready to finish may vary by +/- 10 seconds.
const validatedLedger = await client.request({
command: 'ledger',
ledger_index: 'validated'
})
const ledgerCloseTime = validatedLedger.result.ledger.close_time
console.log('Latest validated ledger closed at',
xrpl.rippleTimeToISOTime(ledgerCloseTime))
if (ledgerCloseTime > finishAfterRippleTime) {
escrowReady = true
console.log('Escrow is mature.')
} else {
let timeDifference = finishAfterRippleTime - ledgerCloseTime
if (timeDifference === 0) { timeDifference = 1 }
console.log(`Waiting another ${timeDifference} second(s).`)
await sleep(timeDifference)
}
}
// Send EscrowFinish transaction --------------------------------------------
const escrowFinish = {
TransactionType: 'EscrowFinish',
Account: wallet.address,
Owner: wallet.address,
OfferSequence: escrowSeq
}
xrpl.validate(escrowFinish)
console.log('Signing and submitting the transaction:',
JSON.stringify(escrowFinish, null, 2))
const response2 = await client.submitAndWait(escrowFinish, {
wallet,
autofill: true
})
console.log(JSON.stringify(response2.result, null, 2))
if (response2.result.meta.TransactionResult === 'tesSUCCESS') {
console.log('Escrow finished successfully. Balance changes:')
console.log(
JSON.stringify(xrpl.getBalanceChanges(response2.result.meta), null, 2)
)
}
client.disconnect()

View File

@@ -1,136 +1,31 @@
import json
from datetime import datetime, timedelta, UTC
from time import sleep
from xrpl.clients import JsonRpcClient
from xrpl.models import EscrowCreate, EscrowCancel
from xrpl.models.requests import AccountObjects, Ledger, Tx
from xrpl.models import EscrowCancel
from xrpl.transaction import submit_and_wait
from xrpl.utils import datetime_to_ripple_time, ripple_time_to_datetime, get_balance_changes
from xrpl.wallet import generate_faucet_wallet
# Set up client and get a wallet
client = JsonRpcClient("https://s.altnet.rippletest.net:51234")
print("Funding new wallet from faucet...")
wallet = generate_faucet_wallet(client, debug=True)
# destination_address = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe" # Testnet faucet
# Alternative: Get another account to send the escrow to. Use this if you get
# a tecDIR_FULL error trying to create escrows to the Testnet faucet.
destination_address = generate_faucet_wallet(client, debug=True).address
client = JsonRpcClient("https://s.altnet.rippletest.net:51234") # Connect to the testnetwork
# Create an escrow that won't be finished --------------------------------------
cancel_delay = 30
cancel_after = datetime.now(tz=UTC) + timedelta(seconds=cancel_delay)
print("This escrow will expire after", cancel_after)
cancel_after_rippletime = datetime_to_ripple_time(cancel_after)
# Use a crypto-condition that nobody knows the fulfillment for
condition_hex = "A02580200000000000000000000000000000000000000000000000000000000000000000810120"
escrow_create = EscrowCreate(
account=wallet.address,
destination=destination_address,
amount="123456", # drops of XRP
condition=condition_hex,
cancel_after=cancel_after_rippletime
# Cancel an escrow
# An Escrow can only be canceled if it was created with a CancelAfter time
escrow_sequence = 30215126
# Sender wallet object
sender_wallet = generate_faucet_wallet(client=client)
# Build escrow cancel transaction
cancel_txn = EscrowCancel(
account=sender_wallet.address,
owner=sender_wallet.address,
offer_sequence=escrow_sequence
)
print("Signing and submitting the EscrowCreate transaction.")
response = submit_and_wait(escrow_create, client, wallet, autofill=True)
print(json.dumps(response.result, indent=2))
result_code = response.result["meta"]["TransactionResult"]
if result_code != "tesSUCCESS":
print(f"EscrowCreate failed with result code {result_code}")
exit(1)
# Autofill, sign, then submit transaction and wait for result
stxn_response = submit_and_wait(cancel_txn, client, sender_wallet)
# Wait for the escrow to expire ------------------------------------------------
# Since ledger close times can be rounded by up to 10 seconds, wait an extra
# 10 seconds to make sure the escrow has officially expired.
print(f"Waiting {cancel_delay + 10} seconds for the escrow to expire.")
sleep(cancel_delay + 10)
# Parse response and return result
stxn_result = stxn_response.result
# Look up the official close time of the validated ledger ----------------------
validated_ledger = client.request(Ledger(ledger_index="validated"))
close_time = validated_ledger.result["ledger"]["close_time"]
print("Latest validated ledger closed at",
ripple_time_to_datetime(close_time)
)
ledger_hash = validated_ledger.result["ledger"]["ledger_hash"]
# Look up escrows connected to the account, handling pagination ----------------
expired_escrow = None
marker = None
while True:
try:
response = client.request(AccountObjects(
account=wallet.address,
ledger_hash=ledger_hash,
type="escrow",
marker=marker
))
except Exception as e:
print(f"Error: account_objects failed: {e}")
exit(1)
for escrow in response.result["account_objects"]:
if "CancelAfter" not in escrow:
print("This escrow does not have an expiration")
elif escrow["CancelAfter"] < close_time:
print("This escrow has expired.")
expired_escrow = escrow
break
else:
expiration_time = ripple_time_to_datetime(escrow["CancelAfter"])
print(f"This escrow expires at {expiration_time}.")
if expired_escrow:
# Found an expired escrow, stop paginating
break
if "marker" in response.result.keys():
marker=marker
else:
# This is the last page of results
break
if not expired_escrow:
print("Did not find any expired escrows.")
exit(1)
# Find the sequence number of the expired escrow -------------------------------
response = client.request(Tx(transaction=expired_escrow["PreviousTxnID"]))
if not response.is_successful():
print("Couldn't get transaction. Maybe this server doesn't have enough "
"transaction history available?")
exit(1)
if response.result["tx_json"]["TransactionType"] == "EscrowCreate":
# Save this sequence number for canceling the escrow
escrow_seq = response.result["tx_json"]["Sequence"]
if escrow_seq == 0:
# This transaction used a Ticket, so use the TicketSequence instead.
escrow_seq = response.result["tx_json"]["TicketSequence"]
else:
# Currently, this is impossible since no current transaction can update
# an escrow without finishing or canceling it. But in the future, if
# that becomes possible, you would have to look at the transaction
# metadata to find the previous transaction and repeat until you found
# the transaction that created the escrow.
print("The escrow's previous transaction wasn't EscrowCreate!")
exit(1)
# Send EscrowCancel transaction ------------------------------------------------
escrow_cancel = EscrowCancel(
account=wallet.address,
owner=expired_escrow["Account"],
offer_sequence=escrow_seq
)
print("Signing and submitting the EscrowCancel transaction.")
response2 = submit_and_wait(escrow_cancel, client, wallet, autofill=True)
print(json.dumps(response2.result, indent=2))
result_code = response2.result["meta"]["TransactionResult"]
if result_code != "tesSUCCESS":
print(f"EscrowCancel failed with result code {result_code}")
exit(1)
print("Escrow canceled. Balance changes:")
print(json.dumps(get_balance_changes(response2.result["meta"]), indent=2))
# Parse result and print out the transaction result and transaction hash
print(stxn_result["meta"]["TransactionResult"])
print(stxn_result["hash"])

View File

@@ -0,0 +1,52 @@
from datetime import datetime, timedelta
from xrpl.clients import JsonRpcClient
from xrpl.models import EscrowCreate
from xrpl.transaction import submit_and_wait
from xrpl.utils import datetime_to_ripple_time, xrp_to_drops
from xrpl.wallet import generate_faucet_wallet
# Create Escrow
client = JsonRpcClient("https://s.altnet.rippletest.net:51234") # Connect to client
amount_to_escrow = 10.000
receiver_addr = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe" # Example: send back to Testnet Faucet
# Escrow will be available to claim after 3 days
claim_date = datetime_to_ripple_time(datetime.now() + timedelta(days=3))
# Escrow will expire after 5 days
expiry_date = datetime_to_ripple_time(datetime.now() + timedelta(days=5))
# Optional field
# You can optionally use a Crypto Condition to allow for dynamic release of funds. For example:
condition = "A02580205A0E9E4018BE1A6E0F51D39B483122EFDF1DDEF3A4BE83BE71522F9E8CDAB179810120" # do not use in production
# sender wallet object
sender_wallet = generate_faucet_wallet(client=client)
# Build escrow create transaction
create_txn = EscrowCreate(
account=sender_wallet.address,
amount=xrp_to_drops(amount_to_escrow),
destination=receiver_addr,
finish_after=claim_date,
cancel_after=expiry_date,
condition=condition # Omit this for time-held escrows
)
# Autofill, sign, then submit transaction and wait for result
stxn_response = submit_and_wait(create_txn, client, sender_wallet)
# Return result of transaction
stxn_result = stxn_response.result
# Parse result and print out the neccesary info
print(stxn_result["tx_json"]["Account"])
print(stxn_result["tx_json"]["Sequence"])
print(stxn_result["meta"]["TransactionResult"])
print(stxn_result["hash"])

View File

@@ -0,0 +1,44 @@
from xrpl.clients import JsonRpcClient
from xrpl.models import EscrowFinish
from xrpl.transaction import submit_and_wait
from xrpl.wallet import generate_faucet_wallet
client = JsonRpcClient("https://s.altnet.rippletest.net:51234") # Connect to the testnetwork
# Complete an escrow
# Cannot be called until the finish time is reached
# Required fields (modify to match an escrow you create)
escrow_creator = generate_faucet_wallet(client=client).address
escrow_sequence = 27641268
# Optional fields
# Crypto condition that must be met before escrow can be completed, passed on escrow creation
condition = "A02580203882E2EB9B44130530541C4CC360D079F265792C4A7ED3840968897CB7DF2DA1810120"
# Crypto fulfillment of the condtion
fulfillment = "A0228020AED2C5FE4D147D310D3CFEBD9BFA81AD0F63CE1ADD92E00379DDDAF8E090E24C"
# Sender wallet object
sender_wallet = generate_faucet_wallet(client=client)
# Build escrow finish transaction
finish_txn = EscrowFinish(
account=sender_wallet.address,
owner=escrow_creator,
offer_sequence=escrow_sequence, # The sequence number of the escrow transaction
condition=condition, # Omit this for time-held escrows
fulfillment=fulfillment # Omit this for time-held escrows
)
# Autofill, sign, then submit transaction and wait for result
stxn_response = submit_and_wait(finish_txn, client, sender_wallet)
# Parse response and return result
stxn_result = stxn_response.result
# Parse result and print out the transaction result and transaction hash
print(stxn_result["meta"]["TransactionResult"])
print(stxn_result["hash"])

View File

@@ -0,0 +1,19 @@
import random
from os import urandom
from cryptoconditions import PreimageSha256
# """Generate a condition and fulfillment for escrows"""
# Generate a random preimage with at least 32 bytes of cryptographically-secure randomness.
secret = urandom(32)
# Generate cryptic image from secret
fufill = PreimageSha256(preimage=secret)
# Parse image and return the condition and fulfillment
condition = str.upper(fufill.condition_binary.hex()) # conditon
fulfillment = str.upper(fufill.serialize_binary().hex()) # fulfillment
# Print condition and fulfillment
print(f"condition: {condition} \n fulfillment {fulfillment}")

View File

@@ -1,88 +0,0 @@
from xrpl.clients import JsonRpcClient
from xrpl.models.requests import AccountObjects, Ledger
from xrpl.utils import ripple_time_to_datetime, drops_to_xrp
address = "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn"
client = JsonRpcClient("https://xrplcluster.com/")
# Look up the official close time of the validated ledger ----------------------
validated_ledger = client.request(Ledger(ledger_index="validated"))
close_time = validated_ledger.result["ledger"]["close_time"]
print("Latest validated ledger closed at",
ripple_time_to_datetime(close_time)
)
ledger_hash = validated_ledger.result["ledger"]["ledger_hash"]
# Look up objects filtered to escrows, handling pagination ---------------------
escrows = []
marker = None
while True:
try:
response = client.request(AccountObjects(
account=address,
ledger_hash=ledger_hash, # Caution: if you use a shortcut such as
# ledger_index="validated", the ledger may
# change during iteration, leading to
# inconsistent results.
type="escrow",
marker=marker
))
except Exception as e:
print(f"Error: account_objects failed: {e}")
exit(1)
# Concatenate escrows from this page to the full list
escrows += response.result["account_objects"]
# If there's a marker, loop and fetch the next page of results
if "marker" in response.result.keys():
marker=marker
else:
break
# Define helper function for displaying amounts --------------------------------
def display_amount(amount):
if type(amount) == str:
# amount is drops of XRP
decimal_xrp = drops_to_xrp(amount)
return f"{decimal_xrp} XRP"
elif "mpt_issuance_id" in amount.keys():
# amount is an MPT.
# More info may be available, but that would require looking it up.
return f"{amount['value']} units of MPT {amount['mpt_issuance_id']}"
elif "issuer" in amount.keys():
# amount is a trust line token.
# Currency may be 3 chars or hex. For guidelines parsing hex codes,
# see "Normalize Currency Codes" code sample.
return f"{amount['value']} {amount['currency']} issued by {amount['issuer']}"
print(f"Unexpected type of amount: {amount}")
exit(1)
# Summarize results ------------------------------------------------------------
print(f"Found {len(escrows)} escrow(s).")
for escrow in escrows:
if escrow['Account'] == address:
print(f"Outgoing escrow to {escrow['Destination']}")
elif escrow['Destination'] == address:
print(f"Incoming escrow from {escrow['Account']}")
else:
print("Neither incoming nor outgoing? This is unexpected.")
if "Condition" in escrow.keys():
print(f" Condition: {escrow['Condition']}")
if "FinishAfter" in escrow.keys():
mature_time_display = ripple_time_to_datetime(escrow['FinishAfter'])
if escrow["FinishAfter"] < close_time:
print(" Matured at", mature_time_display)
else:
print(" Will mature at", mature_time_display)
if "CancelAfter" in escrow.keys():
cancel_time_display = ripple_time_to_datetime(escrow['CancelAfter'])
if escrow["CancelAfter"] < close_time:
print(" EXPIRED AT", cancel_time_display)
else:
print(" Expires at", cancel_time_display)

View File

@@ -1,2 +1,2 @@
xrpl-py>=3.0.0
cryptoconditions==0.8.1
cryptoconditions

View File

@@ -0,0 +1,24 @@
from xrpl.clients import JsonRpcClient
from xrpl.models import Tx
client = JsonRpcClient("https://s.altnet.rippletest.net:51234") # Connect to the testnetwork
prev_txn_id = "" # should look like this '84503EA84ADC4A65530C6CC91C904FCEE64CFE2BB973C023476184288698991F'
# Return escrow seq from `PreviousTxnID` for finishing or cancelling escrows
if prev_txn_id == "":
print("No transaction id provided. Use create_escrow.py to generate an escrow transaction, then you can look it up by modifying prev_txn_id to use that transaction's id.")
# Build and send query for PreviousTxnID
req = Tx(transaction=prev_txn_id)
response = client.request(req)
# Return the result
result = response.result
# Print escrow sequence if available
if "Sequence" in result:
print(f'escrow sequence: {result["Sequence"]}')
# Use escrow ticket sequence if escrow sequence is not available
if "TicketSequence" in result:
print(f'escrow ticket sequence: {result["TicketSequence"]}')

View File

@@ -1,74 +0,0 @@
import json
from datetime import datetime, timedelta, UTC
from os import urandom
from cryptoconditions import PreimageSha256
from xrpl.clients import JsonRpcClient
from xrpl.models import EscrowCreate, EscrowFinish
from xrpl.transaction import submit_and_wait
from xrpl.utils import datetime_to_ripple_time
from xrpl.wallet import generate_faucet_wallet
# Set up client and get a wallet
client = JsonRpcClient("https://s.altnet.rippletest.net:51234")
print("Funding new wallet from faucet...")
wallet = generate_faucet_wallet(client, debug=True)
#destination_address = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe" # Testnet faucet
# Alternative: Get another account to send the escrow to. Use this if you get
# a tecDIR_FULL error trying to create escrows to the Testnet faucet.
destination_address = generate_faucet_wallet(client, debug=True).address
# Create the crypto-condition for release -----------------------------------
preimage = urandom(32)
fulfillment = PreimageSha256(preimage=preimage)
condition_hex = fulfillment.condition_binary.hex().upper()
fulfillment_hex = fulfillment.serialize_binary().hex().upper()
print("Condition:", condition_hex)
print("Fulfillment:", fulfillment_hex)
# Set the escrow expiration -------------------------------------------------
cancel_delay = 300
cancel_after = datetime.now(tz=UTC) + timedelta(seconds=cancel_delay)
print("This escrow will expire after", cancel_after)
cancel_after_rippletime = datetime_to_ripple_time(cancel_after)
# Send EscrowCreate transaction ---------------------------------------------
escrow_create = EscrowCreate(
account=wallet.address,
destination=destination_address,
amount="123456", # drops of XRP
condition=condition_hex,
cancel_after=cancel_after_rippletime
)
print("Signing and submitting the EscrowCreate transaction.")
response = submit_and_wait(escrow_create, client, wallet, autofill=True)
print(json.dumps(response.result, indent=2))
# Check result of submitting ------------------------------------------------
result_code = response.result["meta"]["TransactionResult"]
if result_code != "tesSUCCESS":
print(f"EscrowCreate failed with result code {result_code}")
exit(1)
# Save the sequence number so you can identify the escrow later
escrow_seq = response.result["tx_json"]["Sequence"]
# Send EscrowFinish transaction ---------------------------------------------
escrow_finish = EscrowFinish(
account=wallet.address,
owner=wallet.address,
offer_sequence=escrow_seq,
condition=condition_hex,
fulfillment=fulfillment_hex
)
print("Signing and submitting the EscrowFinish transaction.")
response2 = submit_and_wait(escrow_finish, client, wallet, autofill=True)
print(json.dumps(response2.result, indent=2))
result_code = response2.result["meta"]["TransactionResult"]
if result_code != "tesSUCCESS":
print(f"EscrowFinish failed with result code {result_code}")
exit(1)
print("Escrow finished successfully.")

View File

@@ -1,86 +0,0 @@
import json
from datetime import datetime, timedelta, UTC
from time import sleep
from xrpl.clients import JsonRpcClient
from xrpl.models import EscrowCreate, EscrowFinish
from xrpl.models.requests import Ledger
from xrpl.transaction import submit_and_wait
from xrpl.utils import datetime_to_ripple_time, ripple_time_to_datetime
from xrpl.wallet import generate_faucet_wallet
# Set up client and get a wallet
client = JsonRpcClient("https://s.altnet.rippletest.net:51234")
print("Funding new wallet from faucet...")
wallet = generate_faucet_wallet(client, debug=True)
# destination_address = "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe" # Testnet faucet
# Alternative: Get another account to send the escrow to. Use this if you get
# a tecDIR_FULL error trying to create escrows to the Testnet faucet.
destination_address = generate_faucet_wallet(client, debug=True).address
# Set the escrow finish time ------------------------------------------------
delay = 30
finish_after = datetime.now(tz=UTC) + timedelta(seconds=delay)
print("This escrow will mature after", finish_after)
finish_after_rippletime = datetime_to_ripple_time(finish_after)
# Send EscrowCreate transaction ---------------------------------------------
escrow_create = EscrowCreate(
account=wallet.address,
destination=destination_address,
amount="123456", # drops of XRP
finish_after=finish_after_rippletime
)
print("Signing and submitting the EscrowCreate transaction.")
response = submit_and_wait(escrow_create, client, wallet, autofill=True)
print(json.dumps(response.result, indent=2))
# Check result of submitting ------------------------------------------------
result_code = response.result["meta"]["TransactionResult"]
if result_code != "tesSUCCESS":
print(f"EscrowCreate failed with result code {result_code}")
exit(1)
# Save the sequence number so you can identify the escrow later
escrow_seq = response.result["tx_json"]["Sequence"]
print(f"Escrow sequence is {escrow_seq}.")
# Wait for the escrow to be finishable --------------------------------------
sleep(delay)
# Check if escrow can be finished -------------------------------------------
escrow_ready = False
while not escrow_ready:
validated_ledger = client.request(Ledger(ledger_index="validated"))
ledger_close_time = validated_ledger.result["ledger"]["close_time"]
print("Latest validated ledger closed at",
ripple_time_to_datetime(ledger_close_time)
)
if ledger_close_time > finish_after_rippletime:
escrow_ready = True
print("Escrow is mature.")
else:
time_difference = finish_after_rippletime - ledger_close_time
if time_difference == 0:
time_difference = 1
print(f"Waiting another {time_difference} seconds.")
sleep(time_difference)
# Send EscrowFinish transaction ---------------------------------------------
escrow_finish = EscrowFinish(
account=wallet.address,
owner=wallet.address,
offer_sequence=escrow_seq
)
print("Signing and submitting the EscrowFinish transaction.")
response2 = submit_and_wait(escrow_finish, client, wallet, autofill=True)
print(json.dumps(response2.result, indent=2))
result_code = response2.result["meta"]["TransactionResult"]
if result_code != "tesSUCCESS":
print(f"EscrowFinish failed with result code {result_code}")
exit(1)
print("Escrow finished successfully.")

View File

@@ -1,9 +1,7 @@
// @chunk {"steps": ["import-node-tag"]}
// Import the library
import xrpl from "xrpl"
// @chunk-end
// @chunk {"steps": ["connect-tag"]}
import xrpl from "xrpl"
// Define the network client
const SERVER_URL = "wss://s.altnet.rippletest.net:51233/"
const client = new xrpl.Client(SERVER_URL)

View File

@@ -6,34 +6,27 @@ Quick install & usage:
```sh
npm install
node ./verify_credential.js
```
The output should look something like this:
`verify_credential.js` can also be used as a commandline utility. Full usage statement:
```text
Looking up credential...
{
"command": "ledger_entry",
"credential": {
"subject": "rsYhHbanGpnYe3M6bsaMeJT5jnLTfDEzoA",
"issuer": "rEzikzbnH6FQJ2cCr4Bqmf6c3jyWLzkonS",
"credential_type": "6D795F63726564656E7469616C"
},
"ledger_index": "validated"
}
Found credential:
{
"CredentialType": "6D795F63726564656E7469616C",
"Flags": 65536,
"Issuer": "rEzikzbnH6FQJ2cCr4Bqmf6c3jyWLzkonS",
"IssuerNode": "0",
"LedgerEntryType": "Credential",
"PreviousTxnID": "7D1257779E2D298C07C7E0C73CD446534B143FBD1F13DB268A878E40FD153B9A",
"PreviousTxnLgrSeq": 803275,
"Subject": "rsYhHbanGpnYe3M6bsaMeJT5jnLTfDEzoA",
"SubjectNode": "0",
"index": "9603F0E204A8B1C61823625682EB0ECE98A4ECF22FF46CD4845FA9BFA3606B24"
}
Credential is valid.
```sh
$ ./verify_credential.js -h
Usage: verify-credential [options] [issuer] [subject] [credential_type]
Verify an XRPL credential
Arguments:
issuer Credential issuer address as base58 (default:
"rEzikzbnH6FQJ2cCr4Bqmf6c3jyWLzkonS")
subject Credential subject (holder) address as base58 (default:
"rsYhHbanGpnYe3M6bsaMeJT5jnLTfDEzoA")
credential_type Credential type as string. (default: "my_credential")
Options:
-b, --binary Use binary (hexadecimal) for credential_type
-n, --network <network> {devnet,testnet,mainnet} Use the specified network for lookup (default: "devnet")
-q, --quiet Don't print log messages
-h, --help display help for command
```

View File

@@ -1,9 +1,18 @@
{
"name": "verify_credentials",
"version": "2.0.0",
"description": "Sample code showing how to check if a credential on the XRPL exists and is valid.",
"name": "issuer_service",
"version": "1.0.0",
"description": "",
"main": "verify_credential.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "module",
"dependencies": {
"commander": "^13.1.0",
"winston": "^3.17.0",
"xrpl": "^4.2.5"
}
}

View File

@@ -1,68 +1,184 @@
import { Client, rippleTimeToISOTime, convertStringToHex } from "xrpl"
#!/usr/bin/env node
const client = new Client("wss://s.devnet.rippletest.net:51233")
await client.connect()
import { Command } from "commander";
import { Client, rippleTimeToISOTime, convertStringToHex } from "xrpl";
import winston from "winston";
const SUBJECT_ADDRESS = "rsYhHbanGpnYe3M6bsaMeJT5jnLTfDEzoA"
const ISSUER_ADDRESS = "rEzikzbnH6FQJ2cCr4Bqmf6c3jyWLzkonS"
const CREDENTIAL_TYPE = convertStringToHex("my_credential").toUpperCase()
// Set up logging --------------------------------------------------------------
// Use WARNING by default in case verify_credential is called from elsewhere.
const logger = winston.createLogger({
level: "warn",
transports: [new winston.transports.Console()],
format: winston.format.simple(),
});
// Look up Credential ledger entry --------------------------------------------
const ledgerEntryRequest = {
command: "ledger_entry",
credential: {
subject: SUBJECT_ADDRESS,
issuer: ISSUER_ADDRESS,
credential_type: CREDENTIAL_TYPE,
},
ledger_index: "validated",
// Define an error to throw when XRPL lookup fails unexpectedly
class XRPLLookupError extends Error {
constructor(error) {
super("XRPL look up error");
this.name = "XRPLLookupError";
this.body = error;
}
}
console.log("Looking up credential...")
console.log(JSON.stringify(ledgerEntryRequest, null, 2))
let xrplResponse
try {
xrplResponse = await client.request(ledgerEntryRequest)
} catch (err) {
if (err.data?.error === "entryNotFound") {
console.error("Credential was not found")
const CREDENTIAL_REGEX = /^[0-9A-F]{2,128}$/;
// See https://xrpl.org/docs/references/protocol/ledger-data/ledger-entry-types/credential#credential-flags
// to learn more about the lsfAccepted flag.
const LSF_ACCEPTED = 0x00010000;
async function verifyCredential(client, issuer, subject, credentialType, binary=false) {
/**
* Check whether an XRPL account holds a specified credential,
* as of the most recently validated ledger.
* Parameters:
* client - Client for interacting with rippled servers.
* issuer - Address of the credential issuer, in base58.
* subject - Address of the credential holder/subject, in base58.
* credentialType - Credential type to check for as a string,
* which will be encoded as UTF-8 (1-128 characters long).
* binary - Specifies that the credential type is provided in hexadecimal format.
* You must provide the credential_type as input.
* Returns True if the account holds the specified, valid credential.
* Returns False if the credential is missing, expired, or not accepted.
*/
// Encode credentialType as uppercase hex, if needed
let credentialTypeHex = "";
if (binary) {
credentialTypeHex = credentialType.toUpperCase();
} else {
console.error(err)
credentialTypeHex = convertStringToHex(credentialType).toUpperCase();
logger.info(`Encoded credential_type as hex: ${credentialTypeHex}`);
}
process.exit(1)
}
const credential = xrplResponse.result.node
console.log("Found credential:")
console.log(JSON.stringify(credential, null, 2))
if (credentialTypeHex.length % 2 !== 0 || !CREDENTIAL_REGEX.test(credentialTypeHex)) {
// Hexadecimal is always 2 chars per byte, so an odd length is invalid.
throw new Error("Credential type must be 128 characters as hexadecimal.");
}
// Check if the credential has been accepted ----------------------------------
const lsfAccepted = 0x00010000
if (!(credential.Flags & lsfAccepted)) {
console.log("Credential is not accepted.")
process.exit(2)
}
// Confirm that the credential is not expired ---------------------------------
if (credential.Expiration) {
const expirationTime = rippleTimeToISOTime(credential.Expiration)
console.log(`Credential has expiration: ${expirationTime}`)
console.log("Looking up validated ledger to check for expiration.")
const ledgerResponse = await client.request({
command: "ledger",
// Perform XRPL lookup of Credential ledger entry --------------------------
const ledgerEntryRequest = {
command: "ledger_entry",
credential: {
subject: subject,
issuer: issuer,
credential_type: credentialTypeHex,
},
ledger_index: "validated",
})
};
logger.info("Looking up credential...");
logger.info(JSON.stringify(ledgerEntryRequest, null, 2));
const closeTime = rippleTimeToISOTime(ledgerResponse.result.ledger.close_time)
console.log(`Most recent validated ledger was at: ${closeTime}`)
let xrplResponse;
try {
xrplResponse = await client.request(ledgerEntryRequest);
} catch (err) {
if (err.data?.error === "entryNotFound") {
logger.info("Credential was not found");
return false;
} else {
// Other errors, for example invalidly specified addresses.
throw new XRPLLookupError(err?.data || err);
}
}
if (new Date(closeTime) > new Date(expirationTime)) {
console.log("Credential is expired.")
process.exit(3)
const credential = xrplResponse.result.node;
logger.info("Found credential:");
logger.info(JSON.stringify(credential, null, 2));
// Check if the credential has been accepted ---------------------------
if (!(credential.Flags & LSF_ACCEPTED)) {
logger.info("Credential is not accepted.");
return false
}
// Confirm that the credential is not expired ------------------------------
if (credential.Expiration) {
const expirationTime = rippleTimeToISOTime(credential.Expiration);
logger.info(`Credential has expiration: ${expirationTime}`);
logger.info("Looking up validated ledger to check for expiration.");
let ledgerResponse;
try {
ledgerResponse = await client.request({
command: "ledger",
ledger_index: "validated",
});
} catch (err) {
throw new XRPLLookupError(err?.data || err);
}
const closeTime = rippleTimeToISOTime(ledgerResponse.result.ledger.close_time);
logger.info(`Most recent validated ledger is: ${closeTime}`);
if (new Date(closeTime) > new Date(expirationTime)) {
logger.info("Credential is expired.");
return false;
}
}
// Credential has passed all checks ---------------------------------------
logger.info("Credential is valid.");
return true;
}
// Commandline usage -----------------------------------------------------------
async function main() {
// Websocket URLs of public servers
const NETWORKS = {
devnet: "wss://s.devnet.rippletest.net:51233",
testnet: "wss://s.altnet.rippletest.net:51233",
mainnet: "wss://xrplcluster.com/",
};
// Parse arguments ---------------------------------------------------------
let result = false
const program = new Command();
program
.name("verify-credential")
.description("Verify an XRPL credential")
.argument("[issuer]", "Credential issuer address as base58", "rEzikzbnH6FQJ2cCr4Bqmf6c3jyWLzkonS")
.argument("[subject]", "Credential subject (holder) address as base58", "rsYhHbanGpnYe3M6bsaMeJT5jnLTfDEzoA")
.argument("[credential_type]", "Credential type as string.", "my_credential")
.option("-b, --binary", "Use binary (hexadecimal) for credential_type")
.option(
`-n, --network <network> {${Object.keys(NETWORKS)}}`,
"Use the specified network for lookup",
(value) => {
if (!Object.keys(NETWORKS).includes(value)) {
throw new Error(`Must be one of: ${Object.keys(NETWORKS)}`);
}
return value;
},
"devnet"
)
.option("-q, --quiet", "Don't print log messages")
// Call verify_credential with appropriate args ----------------------------
.action(async (issuer, subject, credentialType, options) => {
const client = new Client(NETWORKS[options.network]);
await client.connect();
// Use INFO level by default when called from the commandline.
if (!options.quiet) { logger.level = "info" }
// Commander.js automatically sets options.binary to a boolean:
// - If you provide -b or --binary on the command line then options.binary = true
// - If you do not provide it then options.binary = false
result = await verifyCredential(client, issuer, subject, credentialType, options.binary);
await client.disconnect();
});
await program.parseAsync(process.argv);
// Return a nonzero exit code if credential verification failed -----------
if (!result) {
process.exit(1);
}
}
// Credential has passed all checks -------------------------------------------
console.log("Credential is valid.")
client.disconnect()
main().catch((err) => {
console.error("Fatal startup error:", err);
process.exit(1);
});

142
blog/2025/clio-2.7.0.md Normal file
View File

@@ -0,0 +1,142 @@
---
category: 2025
date: "2025-12-15"
template: '../../@theme/templates/blogpost'
seo:
title: Introducing Clio version 2.7.0
description: Version 2.7.0 of Clio, an XRP Ledger API server optimized for HTTP and WebSocket API calls, is now available. This release adds new features and bug fixes.
labels:
- Clio Release Notes
markdown:
editPage:
hide: true
---
# Introducing Clio version 2.7.0
Version 2.7.0 of Clio, an XRP Ledger API server optimized for HTTP and WebSocket API calls, is now available. This release adds new features and bug fixes.
## Install / Upgrade
| Package |
| :------- |
| [Clio Server Linux Release (GCC)](https://github.com/XRPLF/clio/releases/download/2.7.0/clio_server_Linux_Release_gcc.zip) |
| [Clio Server macOS Release (Apple Clang 17)](https://github.com/XRPLF/clio/releases/download/2.7.0/clio_server_macOS_Release_apple-clang.zip) |
For other platforms, please [build from source](https://github.com/XRPLF/clio/releases/tag/2.7.0). The most recent commit in the git log should be:
```text
TBD
```
## What's Changed
See the [Full Changelog on GitHub](https://github.com/XRPLF/clio/compare/2.6.0...2.7.0).
### Features
- Adds `account_mptoken_issuances` API method to retrieve all `MPTokenIssuances` created by a specified account, and `account_mptokens` API method to retrieve all `MPTokens` held by a specified account ([#2680](https://github.com/XRPLF/clio/pull/2680)).
- Enables new ETL (ETLng) by default and removes old ETL implementation ([#2752](https://github.com/XRPLF/clio/pull/2752)).
- Adds DynamicMPT support to `account_mptoken_issuances` handler ([#2820](https://github.com/XRPLF/clio/pull/2820)).
### Improvements
- Added async framework `submit` method for running one-shot tasks on strand/context without requiring a handle to retrieve results ([#2751](https://github.com/XRPLF/clio/pull/2751)).
- Updated the Ledger Publisher to use async framework instead of directly using `io_context` ([#2756](https://github.com/XRPLF/clio/pull/2756)).
- Added normal/high priority support to `WorkQueue` ([#2721](https://github.com/XRPLF/clio/pull/2721)).
- Added ability to read and write `LedgerCache` to file ([#2761](https://github.com/XRPLF/clio/pull/2761)).
- Added graceful shutdown for old web server ([#2786](https://github.com/XRPLF/clio/pull/2786)).
- Prometheus requests are now handled in `WorkQueue` ([#2790](https://github.com/XRPLF/clio/pull/2790)).
- Added observable value utility to enable reactive approach across the codebase ([#2831](https://github.com/XRPLF/clio/pull/2831)).
### Bug Fixes
- Fixed an issue where `account_info` was omitting the `signer_lists` field when requested for accounts with no signer lists. An empty array is now returned. ([#2746](https://github.com/XRPLF/clio/pull/2746)).
- Matched `ledger_entry` error codes with `rippled` ([#2549](https://github.com/XRPLF/clio/pull/2549)).
- Enhanced cache saving error to include more information ([#2794](https://github.com/XRPLF/clio/pull/2794)).
### Refactor
- Refactored duplicate `ledger_index` pattern in RPC handlers into a common function ([#2755](https://github.com/XRPLF/clio/pull/2755)).
- Refactored `getLedgerIndex` to return `std::expected` instead of throwing exceptions ([#2788](https://github.com/XRPLF/clio/pull/2788)).
### Documentation
- Removed `logging.md` from README ([#2710](https://github.com/XRPLF/clio/pull/2710)).
- Fixed `graceful_period` description ([#2791](https://github.com/XRPLF/clio/pull/2791)).
### Styling
- Fixed pre-commit style issues ([#2743](https://github.com/XRPLF/clio/pull/2743)).
- Fixed comment in `pre-commit-autoupdate.yml` ([#2750](https://github.com/XRPLF/clio/pull/2750)).
- Fixed hadolint issues ([#2777](https://github.com/XRPLF/clio/pull/2777)).
- Added black pre-commit hook ([#2811](https://github.com/XRPLF/clio/pull/2811)).
- Updated pre-commit hooks ([#2825](https://github.com/XRPLF/clio/pull/2825)).
- Used shfmt for shell scripts ([#2841](https://github.com/XRPLF/clio/pull/2841)).
### Testing
- Fixed flaky `DeadlineIsHandledCorrectly` test ([#2716](https://github.com/XRPLF/clio/pull/2716)).
- Fixed flaky test ([#2729](https://github.com/XRPLF/clio/pull/2729)).
### Miscellaneous Tasks
- Pinned all GitHub actions ([#2712](https://github.com/XRPLF/clio/pull/2712)).
- Used intermediate environment variables for improved security ([#2713](https://github.com/XRPLF/clio/pull/2713)).
- Saved full logs for failed sanitized tests ([#2715](https://github.com/XRPLF/clio/pull/2715)).
- Enabled clang asan builds ([#2717](https://github.com/XRPLF/clio/pull/2717)).
- Improved pre-commit failure message ([#2720](https://github.com/XRPLF/clio/pull/2720)).
- Used XRPLF/get-nproc ([#2727](https://github.com/XRPLF/clio/pull/2727)).
- Released nightly with date ([#2731](https://github.com/XRPLF/clio/pull/2731)).
- Fixed nightly commits link ([#2738](https://github.com/XRPLF/clio/pull/2738)).
- Used new prepare-runner ([#2742](https://github.com/XRPLF/clio/pull/2742)).
- Updated tooling in Docker images ([#2737](https://github.com/XRPLF/clio/pull/2737)).
- Installed pre-commit in the main CI image as well ([#2744](https://github.com/XRPLF/clio/pull/2744)).
- Updated docker images ([#2745](https://github.com/XRPLF/clio/pull/2745)).
- Added date to nightly release title ([#2748](https://github.com/XRPLF/clio/pull/2748)).
- Updated prepare-runner to fix ccache on macOS ([#2749](https://github.com/XRPLF/clio/pull/2749)).
- Removed backticks from release date ([#2754](https://github.com/XRPLF/clio/pull/2754)).
- Specified apple-clang 17.0 in conan profile ([#2757](https://github.com/XRPLF/clio/pull/2757)).
- Fixed pre commit hook failing on empty file ([#2766](https://github.com/XRPLF/clio/pull/2766)).
- Changed default `max_queue_size` to 1000 ([#2771](https://github.com/XRPLF/clio/pull/2771)).
- Specified bash as default shell in workflows ([#2772](https://github.com/XRPLF/clio/pull/2772)).
- Forced ucontext in ASAN builds ([#2775](https://github.com/XRPLF/clio/pull/2775)).
- Started using xrpl/3.0.0-rc1 ([#2776](https://github.com/XRPLF/clio/pull/2776)).
- Used ucontext with ASAN ([#2774](https://github.com/XRPLF/clio/pull/2774)).
- Removed redundant silencing of ASAN errors in CI ([#2779](https://github.com/XRPLF/clio/pull/2779)).
- Used env vars instead of input ([#2781](https://github.com/XRPLF/clio/pull/2781)).
- Improved cache implementation ([#2780](https://github.com/XRPLF/clio/pull/2780)).
- Updated nudb recipe to remove linker warnings ([#2787](https://github.com/XRPLF/clio/pull/2787)).
- Used env vars instead of input in cache-key ([#2789](https://github.com/XRPLF/clio/pull/2789)).
- Added defines for asan/tsan to conan profile ([#2784](https://github.com/XRPLF/clio/pull/2784)).
- Enabled TSAN in CI ([#2785](https://github.com/XRPLF/clio/pull/2785)).
- Stopped downloading ccache on develop branch ([#2792](https://github.com/XRPLF/clio/pull/2792)).
- Always uploaded cache on develop ([#2793](https://github.com/XRPLF/clio/pull/2793)).
- Updated spdlog and fmt libraries ([#2804](https://github.com/XRPLF/clio/pull/2804)).
- Ran clang-tidy 3 times to make sure we don't have to fix again ([#2803](https://github.com/XRPLF/clio/pull/2803)).
- Fixed repeat-based tests TSAN issues ([#2810](https://github.com/XRPLF/clio/pull/2810)).
- Fixed WebServerAdminTestsSuit TSAN issues ([#2809](https://github.com/XRPLF/clio/pull/2809)).
- Used boost::asio::ssl::stream instead of boost::beast::ssl_stream ([#2814](https://github.com/XRPLF/clio/pull/2814)).
- Installed latest Ninja in images ([#2813](https://github.com/XRPLF/clio/pull/2813)).
- Updated images to use latest Ninja ([#2817](https://github.com/XRPLF/clio/pull/2817)).
- Updated lockfile ([#2818](https://github.com/XRPLF/clio/pull/2818)).
- Added mathbunnyru to maintainers ([#2823](https://github.com/XRPLF/clio/pull/2823)).
- Fixed TSAN async-signal-unsafe issue ([#2824](https://github.com/XRPLF/clio/pull/2824)).
- Reduced delay in ETL taskman ([#2802](https://github.com/XRPLF/clio/pull/2802)).
- Added systemd file to the debian package ([#2844](https://github.com/XRPLF/clio/pull/2844)).
- Switched to xrpl/3.0.0 ([#2843](https://github.com/XRPLF/clio/pull/2843)).
- Multiple Dependabot updates for GitHub actions and Docker components.
## Contributors
The following people contributed directly to this release:
- [@godexsoft](https://github.com/godexsoft)
- [@mathbunnyru](https://github.com/mathbunnyru)
- [@kuznetsss](https://github.com/kuznetsss)
- [@yinyiqian1](https://github.com/yinyiqian1)
- [@emreariyurek](https://github.com/emreariyurek)
- [@PeterChen13579](https://github.com/PeterChen13579)
## Feedback
To report an issue or propose a new idea, please [open an issue](https://github.com/XRPLF/clio/issues).

View File

@@ -29,13 +29,13 @@ The providers to fetch data from:
Each oracle document contains real-time pricing data for key assets—including XRP, RLUSD, and more — making it simple for developers to retrieve trusted market prices directly from the ledger.
### 1.2 Oracle Accounts
### 1.2 Account Funding for Transaction Fees
DIA uses the following accounts to publish oracle price data to the XRPL:
To ensure uninterrupted oracle operation when pushing data to your contracts, it is crucial to maintain a sufficient XRP balance in the relevant XRPL account. This balance must cover the XRP reserve requirements for the account and the minor transaction fees incurred with each transaction. You can monitor the accounts listed below to ensure they remain adequately funded at all times.
| Network | Account |
|:-------------|:--------------|
| XRPL Mainnet | [rP24Lp7bcUHvEW7T7c8xkxtQKKd9fZyra7](https://livenet.xrpl.org/accounts/rP24Lp7bcUHvEW7T7c8xkxtQKKd9fZyra7) |
|:-------------|:------------------|
| XRPL Mainnet | [rP24Lp7bcUHvEW7T7c8xkxtQKKd9fZyra7](https://livenet.xrpl.org/accounts/rP24Lp7bcUHvEW7T7c8xkxtQKKd9fZyra7) |
| XRPL Testnet | [r3U1mL5u2SCPr4mApqYyF96nvwvKoGf7aH](https://testnet.xrpl.org/accounts/r3U1mL5u2SCPr4mApqYyF96nvwvKoGf7aH) |
You can monitor these wallets on-chain for transparency and operational assurance.
@@ -44,11 +44,11 @@ You can monitor these wallets on-chain for transparency and operational assuranc
Settings that dictate how the oracle computes and updates data.
| Setting | Details |
|:----------------------------------|:-------------|
| Pricing Methodology | [VWAPIR](https://www.diadata.org/docs/guides/methodologies/pricing-methodologies/vwapir-volume-weighted-average-price-with-interquartile-range-filter) |
| Setting | Details |
|:-------------|:------------------|
| Pricing Methodology | [VWAP](https://nexus.diadata.org/reference/pricing-methodologies/vwap-volume-weighted-average-price) |
| Deviation (%) & Refresh Frequency | 1% and 120 seconds |
| Heartbeat | 24h |
| Heartbeat | 24h |
This configuration ensures that price updates are both reactive and consistent, maintaining high accuracy without overwhelming the network.
@@ -65,18 +65,6 @@ These asset feeds serve as foundational infrastructure for a wide range of XRPL-
| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | [USDC markets](https://www.diadata.org/app/price/asset/Ethereum/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/) |
| USDT | 0xdAC17F958D2ee523a2206206994597C13D831ec7 | [USDT markets](https://www.diadata.org/app/price/asset/Ethereum/0xdAC17F958D2ee523a2206206994597C13D831ec7/) |
### 1.5 Request a Custom Oracle
DIA offers highly customizable oracles that are individually tailored to each dApp's needs. Each oracle can be customized in the following ways:
- Data sources (specific exchanges/DEXs or aggregated feeds)
- Pricing methodologies (VWAPIR, MAIR, TWAP, custom models)
- Update triggers (deviation thresholds or time-based)
- Asset coverage (any of 20,000+ supported assets)
These custom oracle feeds are designed to support everything from DeFi and RWAs to advanced financial applications, and are available for free for dApps to set up and use.
You can reach out to the [DIA team](https://www.diadata.org/docs/guides/how-to-guides/request-a-custom-oracle) to request and deploy oracles that match their specific protocol requirements.
## How the Oracle Works
@@ -86,12 +74,14 @@ The `oracleUpdater` in the `DIAOracleV2` contract is the gas wallet responsible
Check out the full audit report [here](https://content.gitbook.com/content/TURK2sDMSvoX6oxbS6WA/blobs/vJuu8yMWLXokC7m3aqKg/02_Smart%20Contract%20Audit_DIA_Oracle_v2.pdf) for the DIAOracleV2 contract.
## How to Access Data
The DIA oracle object can be retrieved with the [ledger_entry API](https://xrpl.org/resources/dev-tools/websocket-api-tool#ledger_entry-oracle) call by specifying the `account` and `oracle_document_id`. You can access the mainnet and testnet accounts [here](https://docs.google.com/document/d/1GGLxcKSYlCP-yxrcP5Gzd8nsm-WzcjNvwWMvvJjXwbw/edit?tab=t.0#heading=h.e29ryp9qtwct).
This is the request JSON for mainnet:
```json
{
"id": "example_get_oracle",
@@ -121,4 +111,4 @@ Understanding the following terms is crucial when configuring DIA oracles for yo
## Support
You can always reach out to the dedicated DIA support channel on Slack, [Discord](https://discord.gg/ZvGjVY5uvs), or [Telegram](https://t.me/diadata_org). You can also follow XRPL-specific updates and best practices via XRPL Dev To or join XRPL developer channels for peer guidance and integration showcases. [XRPL Dev Discord](https://discord.gg/sfX3ERAMjH)
You can always reach out to the dedicated DIA support channel on Slack, [Discord](https://discord.gg/ZvGjVY5uvs), or [Telegram](https://t.me/diadata_org). You can also follow XRPL-specific updates and best practices via XRPL Dev To or join XRPL developer channels for peer guidance and integration showcases. [XRPL Dev Discord](https://discord.gg/sfX3ERAMjH)

View File

@@ -10,6 +10,7 @@
- group: '2025'
expanded: false
items:
- page: 2025/clio-2.7.0.md
- page: 2025/rippled-3.0.0.md
- page: 2025/rippled-2.6.2.md
- page: 2025/rippled-2.6.1.md

View File

@@ -1,353 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.2">
<zoom_level>10</zoom_level>
<element>
<id>UMLObject</id>
<coordinates>
<x>20</x>
<y>300</y>
<w>160</w>
<h>80</h>
</coordinates>
<panel_attributes>Escrow ledger entry
--
Account
PreviousTxnID
...</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>170</x>
<y>330</y>
<w>210</w>
<h>50</h>
</coordinates>
<panel_attributes>lt=&lt;.
look up transaction
by Previous TxnID</panel_attributes>
<additional_attributes>190.0;20.0;10.0;20.0</additional_attributes>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>360</x>
<y>300</y>
<w>160</w>
<h>140</h>
</coordinates>
<panel_attributes>Transaction
--
tx_json
TransactionType
Sequence
...
meta
AffectedNodes
...
halign=left</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLSpecialState</id>
<coordinates>
<x>420</x>
<y>520</y>
<w>40</w>
<h>40</h>
</coordinates>
<panel_attributes>type=decision</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>430</x>
<y>430</y>
<w>270</w>
<h>110</h>
</coordinates>
<panel_attributes>lt=&lt;-
Is TransactionType == EscrowCreate?</panel_attributes>
<additional_attributes>10.0;90.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>450</x>
<y>520</y>
<w>120</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;-
Yes</panel_attributes>
<additional_attributes>100.0;20.0;10.0;20.0</additional_attributes>
</element>
<element>
<id>UMLSpecialState</id>
<coordinates>
<x>610</x>
<y>880</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes>type=final
</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>300</x>
<y>520</y>
<w>140</w>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;-
No</panel_attributes>
<additional_attributes>10.0;20.0;120.0;20.0</additional_attributes>
</element>
<element>
<id>UMLState</id>
<coordinates>
<x>160</x>
<y>490</y>
<w>150</w>
<h>100</h>
</coordinates>
<panel_attributes>Check metadata for the same Escrow.
Get the prior PreviousTxnID.
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>190</x>
<y>340</y>
<w>30</w>
<h>170</h>
</coordinates>
<panel_attributes>lt=.&gt;</panel_attributes>
<additional_attributes>10.0;150.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLState</id>
<coordinates>
<x>430</x>
<y>740</y>
<w>170</w>
<h>100</h>
</coordinates>
<panel_attributes>Use the escrow's Account and this transaction's Sequence number to finish or cancel the escrow.
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>500</x>
<y>830</y>
<w>130</w>
<h>80</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>110.0;60.0;10.0;60.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>80</x>
<y>110</y>
<w>790</w>
<h>210</h>
</coordinates>
<panel_attributes>lt=&lt;-
r2=No, or yes but this escrow is from before that</panel_attributes>
<additional_attributes>10.0;190.0;10.0;20.0;770.0;20.0</additional_attributes>
</element>
<element>
<id>UMLSpecialState</id>
<coordinates>
<x>860</x>
<y>20</y>
<w>20</w>
<h>20</h>
</coordinates>
<panel_attributes>type=initial</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLSpecialState</id>
<coordinates>
<x>600</x>
<y>640</y>
<w>40</w>
<h>40</h>
</coordinates>
<panel_attributes>type=decision</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLState</id>
<coordinates>
<x>550</x>
<y>500</y>
<w>150</w>
<h>90</h>
</coordinates>
<panel_attributes>This is the transaction that created the escrow.
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>610</x>
<y>580</y>
<w>140</w>
<h>80</h>
</coordinates>
<panel_attributes>lt=&lt;-
Is Sequence == 0?</panel_attributes>
<additional_attributes>10.0;60.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>500</x>
<y>640</y>
<w>120</w>
<h>120</h>
</coordinates>
<panel_attributes>lt=&lt;-
r2=No</panel_attributes>
<additional_attributes>10.0;100.0;10.0;20.0;100.0;20.0</additional_attributes>
</element>
<element>
<id>UMLState</id>
<coordinates>
<x>640</x>
<y>740</y>
<w>170</w>
<h>110</h>
</coordinates>
<panel_attributes>Use the escrow's Account and this transaction's TicketSequence number to finish or cancel the escrow.
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>630</x>
<y>640</y>
<w>120</w>
<h>120</h>
</coordinates>
<panel_attributes>lt=&lt;-
r2=Yes</panel_attributes>
<additional_attributes>100.0;100.0;100.0;20.0;10.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>620</x>
<y>840</y>
<w>130</w>
<h>70</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;50.0;110.0;50.0;110.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>860</x>
<y>190</y>
<w>30</w>
<h>740</h>
</coordinates>
<panel_attributes>lt=..</panel_attributes>
<additional_attributes>10.0;720.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLSpecialState</id>
<coordinates>
<x>850</x>
<y>110</y>
<w>40</w>
<h>40</h>
</coordinates>
<panel_attributes>bg=green
type=decision</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>860</x>
<y>30</y>
<w>340</w>
<h>100</h>
</coordinates>
<panel_attributes>lt=&lt;-
Is the IncludeKeyletFields amendment enabled?
(new in rippled 3.0.0)
</panel_attributes>
<additional_attributes>10.0;80.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>880</x>
<y>90</y>
<w>250</w>
<h>220</h>
</coordinates>
<panel_attributes>lt=&lt;-
r2=Yes, and this escrow was \ncreated after it went live</panel_attributes>
<additional_attributes>230.0;200.0;230.0;40.0;10.0;40.0</additional_attributes>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>1030</x>
<y>290</y>
<w>160</w>
<h>100</h>
</coordinates>
<panel_attributes>Escrow ledger entry
--
Account
Sequence
PreviousTxnID
...</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLState</id>
<coordinates>
<x>1030</x>
<y>460</y>
<w>170</w>
<h>100</h>
</coordinates>
<panel_attributes>Use the escrow's Account and Sequence fields to finish or cancel the escrow.
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1100</x>
<y>380</y>
<w>30</w>
<h>100</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;80.0;10.0;10.0</additional_attributes>
</element>
</diagram>

BIN
docs/img/tut-struct1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
docs/img/tut-struct2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
docs/img/tut-struct3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
docs/img/tut-struct4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
docs/img/tut-struct5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -26,7 +26,7 @@ In a genesis ledger, the [genesis address](../../concepts/accounts/addresses.md#
## Settings in New Genesis Ledgers
In a new genesis ledger, the hard-coded default [Reserve](../../concepts/accounts/reserves.md) is **10 XRP** minimum for funding a new address, with an increment of **2 XRP** per object in the ledger. These values are higher than the current reserve requirements of the production network. (See also: [Fee Voting](../../concepts/consensus-protocol/fee-voting.md))
In a new genesis ledger, the hard-coded default [Reserve](../../concepts/accounts/reserves.md) is **200 XRP** minimum for funding a new address, with an increment of **50 XRP** per object in the ledger. These values are higher than the current reserve requirements of the production network. (See also: [Fee Voting](../../concepts/consensus-protocol/fee-voting.md))
By default, a new genesis ledger has no [amendments](../../concepts/networks-and-servers/amendments.md) enabled. If you start a new genesis ledger with `--start`, the genesis ledger contains an [EnableAmendment pseudo-transaction](../../references/protocol/transactions/pseudo-transaction-types/enableamendment.md) to turn on all amendments natively supported by the `rippled` server, except for amendments that you explicitly disable in the config file. The effects of those amendments are available starting from the very next ledger version. (Reminder: in stand-alone mode, you must [advance the ledger manually](advance-the-ledger-in-stand-alone-mode.md).)

View File

@@ -19,7 +19,7 @@ An example of the request format:
{% tab label="WebSocket" %}
```json
{
"id": "example_account_tx",
"id": 2,
"command": "account_tx",
"account": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"ledger_index_min": -1,
@@ -97,230 +97,160 @@ An example of a successful response:
```json
{
"result": {
"account": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"ledger_index_min": 32570,
"ledger_index_max": 100973977,
"ledger_index_max": 91824401,
"transactions": [
{
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574",
"PreviousTxnID": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"PreviousTxnLgrSeq": 98918099
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"RootIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2",
"PreviousTxnID": "565B7B3D2DBE8EF1206A195965DC82413C7D0EE81CFAA99F79EE419217237F7C",
"PreviousTxnLgrSeq": 98918107
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"RootIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395",
"PreviousTxnID": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"PreviousTxnLgrSeq": 98918099
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Balance": "24799961",
"Flags": 0,
"OwnerCount": 4,
"Sequence": 98916980
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"AccountTxnID": "932CC7E9BAC1F7B9FA5381679F293EEC0A646E5E7F2F6D14C85FEE2102F0E66C",
"Balance": "1086222646",
"Domain": "6D64756F31332E636F6D",
"EmailHash": "98B4375E1D753E5B91627516F6D70977",
"Flags": 9568256,
"MessageKey": "0000000000000000000000070000000300",
"OwnerCount": 17,
"RegularKey": "rD9iJmieYHn8jTtPjwwkW2Wm9sVDvPXLoJ",
"Sequence": 393,
"TicketCount": 5,
"TransferRate": 4294967295
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "6221E36CC407593A1E74EC8BDCEF82BFF1C4275B92FC4D6877AA9013214133CA",
"LedgerIndex": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"PreviousFields": {
"Balance": "24799971",
"OwnerCount": 3,
"Sequence": 98916979
"Balance": "1086222601"
},
"PreviousTxnID": "565B7B3D2DBE8EF1206A195965DC82413C7D0EE81CFAA99F79EE419217237F7C",
"PreviousTxnLgrSeq": 98918107
"PreviousTxnID": "7E50969CDEF8E12B1AD26E64B338935813624A4D1CDDC4C9457832524F0FF74C",
"PreviousTxnLgrSeq": 89353048
}
},
{
"CreatedNode": {
"LedgerEntryType": "RippleState",
"LedgerIndex": "BCDE567C108FB674AA379BCDBEFF705899B38A39535A1EFA23E9906F96403A9F",
"NewFields": {
"Balance": {
"currency": "BTC",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 1179648,
"HighLimit": {
"currency": "BTC",
"issuer": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"value": "10"
},
"LowLimit": {
"currency": "BTC",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "0"
}
}
"ModifiedNode": {
"FinalFields": {
"Account": "rPJARH5nLWQisdmvDAbvzwS7N32Z1kusTZ",
"Balance": "55022190",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 89113341
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "C0363F86E070B70E7DA129736C3B05E509261C8668F61A7E958C4C10F17EAB90",
"PreviousFields": {
"Balance": "55022245",
"Sequence": 89113340
},
"PreviousTxnID": "60D0FE881F9B1457FB1711011C6E490C22532B1D495557D6488BE3A634167CEE",
"PreviousTxnLgrSeq": 90136515
}
}
],
"TransactionIndex": 68,
"TransactionResult": "tesSUCCESS"
"TransactionIndex": 2,
"TransactionResult": "tesSUCCESS",
"delivered_amount": "45"
},
"tx_json": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Account": "rPJARH5nLWQisdmvDAbvzwS7N32Z1kusTZ",
"DeliverMax": "45",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"DestinationTag": 316562,
"Fee": "10",
"LastLedgerSequence": 98918129,
"LimitAmount": {
"currency": "BTC",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "10"
},
"Sequence": 98916979,
"SigningPubKey": "ED954DCBC5CB557C330BEAB71D36A18DEED0CAA5DE5A8FF8C9589A49D3253B50CF",
"TransactionType": "TrustSet",
"TxnSignature": "23EE556A37E6E5A4C16B87489CE7E0A5E0FFDAC5DB4B5DA3A6682FA355A8258025DA0EF6F920116080AB7196C4CF82D37760CBB6EEA6E199B9DCC29BD6BC7A09",
"ledger_index": 98918111,
"ctid": "C5E55EDF00440000",
"date": 811446652
"Sequence": 89113340,
"SigningPubKey": "EDE21591E615E1D77C8C8A7F95372D001B3DF090AB47B99729CFCBC1E4E07D35F4",
"TransactionType": "Payment",
"TxnSignature": "D229FEB6ED82367102AC12DE5045BE6D548CBB52E0CB8F037A23171910A6158FA3377F5118B6CEAFDB07D6D43F76FE29CC26BE1ACBC7A86C9D86E14043C66104",
"ledger_index": 90136515,
"date": 777284672
},
"ledger_index": 98918111,
"hash": "C58EB987B4AC3AE984ADF70DE375AD9B8A180569C30072DE57D6E17EFC69E7F0",
"ledger_hash": "3A134DDA87A60A2531B9B9D504FA6EBDAC99738B0DB20C476BCD6196592B08B2",
"close_time_iso": "2025-09-17T17:50:52Z",
"ledger_index": 90136515,
"hash": "894541402AC968C98C329A88D097170B14BF4DEB8B2A7DF377EE89DDD332E018",
"ledger_hash": "14110F60753176E1F6A71AA084B6AD8663CBB46193CCFCDFAC02561626AA6B75",
"close_time_iso": "2024-08-18T08:24:32Z",
"validated": true
},
{
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574",
"PreviousTxnID": "5E5313BA3C55755ED3FDACB53C53A7143997D997DAF5FB5C24B83C6B995D6363",
"PreviousTxnLgrSeq": 98055207
}
},
{
"CreatedNode": {
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2",
"NewFields": {
"Owner": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"RootIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2"
}
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"RootIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Balance": "24799991",
"Flags": 0,
"OwnerCount": 1,
"Sequence": 98916977
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"AccountTxnID": "932CC7E9BAC1F7B9FA5381679F293EEC0A646E5E7F2F6D14C85FEE2102F0E66C",
"Balance": "1086222601",
"Domain": "6D64756F31332E636F6D",
"EmailHash": "98B4375E1D753E5B91627516F6D70977",
"Flags": 9568256,
"MessageKey": "0000000000000000000000070000000300",
"OwnerCount": 17,
"RegularKey": "rD9iJmieYHn8jTtPjwwkW2Wm9sVDvPXLoJ",
"Sequence": 393,
"TicketCount": 5,
"TransferRate": 4294967295
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "6221E36CC407593A1E74EC8BDCEF82BFF1C4275B92FC4D6877AA9013214133CA",
"LedgerIndex": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"PreviousFields": {
"Balance": "24800001",
"OwnerCount": 0,
"Sequence": 98916976
"Balance": "1086222552"
},
"PreviousTxnID": "71BBF54C1EABA54B375702085EA089037909B1B2B6F618979131C1ECD4337575",
"PreviousTxnLgrSeq": 98916982
"PreviousTxnID": "EED9EB1880B951FAB3EE0DBBEB67B7ABEE3FA77F15782B6BD40342B3C23CFB75",
"PreviousTxnLgrSeq": 89343389
}
},
{
"CreatedNode": {
"LedgerEntryType": "RippleState",
"LedgerIndex": "CE8F932A1CA2D2EDEAA1267BAEE88978BAA886034C389B76FB242860A82572A6",
"NewFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 1179648,
"HighLimit": {
"currency": "USD",
"issuer": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"value": "10000"
},
"LowLimit": {
"currency": "USD",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "0"
}
}
"ModifiedNode": {
"FinalFields": {
"Account": "rPSDqHdMPsnkmyUX4BvBkY8rycQYwrhUqw",
"Balance": "52611432",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 89196186
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "20761D2C37004C70318F7A3C5A1C35817A90A0AE56485F6E3281FB2B3F05B0C9",
"PreviousFields": {
"Balance": "52611491",
"Sequence": 89196185
},
"PreviousTxnID": "BAF86C2776C08407E0FAF42D374874E10430CB8C23AD464D9D9097EA326ABE92",
"PreviousTxnLgrSeq": 89353024
}
}
],
"TransactionIndex": 20,
"TransactionResult": "tesSUCCESS"
"TransactionIndex": 4,
"TransactionResult": "tesSUCCESS",
"delivered_amount": "49"
},
"tx_json": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Account": "rPSDqHdMPsnkmyUX4BvBkY8rycQYwrhUqw",
"DeliverMax": "49",
"Destination": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"DestinationTag": 342662134,
"Fee": "10",
"LastLedgerSequence": 98918117,
"LimitAmount": {
"currency": "USD",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "10000"
},
"Sequence": 98916976,
"SigningPubKey": "ED954DCBC5CB557C330BEAB71D36A18DEED0CAA5DE5A8FF8C9589A49D3253B50CF",
"TransactionType": "TrustSet",
"TxnSignature": "785C1D134E017F1C0C6168427F208950679DA90D4C90E479DB397DF8E2D3FEEED24466A63B1A18A41AEB6BE1806497E5314AF7B55939B6B8EF20F3E3876CF400",
"ledger_index": 98918099,
"ctid": "C5E55ED300140000",
"date": 811446610
"Sequence": 89196185,
"SigningPubKey": "ED7E4A2970ADFCCE93D59D469322745E98CBEB3D7D5388728B3BB2268E71F30B0F",
"TransactionType": "Payment",
"TxnSignature": "8CE14FD18BD186694DED8C204C3FCC2A527CC24AD51C2E0B2B792D035C85D662BC1A1450A8DF04BBEC66821B362056311127C627056AC7779B385517FD3A9202",
"ledger_index": 89353048,
"date": 774249571
},
"ledger_index": 98918099,
"hash": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"ledger_hash": "EBA54645E31446A2A79F60F6241B357EFFEB98A6F43E17B7B2F1EE4E80C132D6",
"close_time_iso": "2025-09-17T17:50:10Z",
"ledger_index": 89353048,
"hash": "7E50969CDEF8E12B1AD26E64B338935813624A4D1CDDC4C9457832524F0FF74C",
"ledger_hash": "ED54DA98F3E495C36C2B0D9A511565E04454A1F4503B9DEE3FD39301D7625865",
"close_time_iso": "2024-07-14T05:19:31Z",
"validated": true
}
],
"validated": true,
"marker": {
"ledger": 98918099,
"seq": 20
"ledger": 89353048,
"seq": 4
},
"limit": 2
},
"id": "example_account_tx",
"api_version": 2,
"status": "success",
"type": "response"
@@ -330,469 +260,164 @@ An example of a successful response:
{% tab label="JSON-RPC" %}
```json
200 OK
{
"result": {
"account": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"ledger_index_min": 32570,
"ledger_index_max": 100974014,
"transactions": [
{
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574",
"PreviousTxnID": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"PreviousTxnLgrSeq": 98918099
}
"result": {
"account": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"ledger_index_min": 32570,
"ledger_index_max": 91824423,
"transactions": [{
"meta": {
"AffectedNodes": [{
"ModifiedNode": {
"FinalFields": {
"Account": "rLJmawLfNAFNyyYHFbNErTfCrfsbmRzrTc",
"Balance": "77694521",
"Domain": "7872702D6C65646765722D746F6D6C2E68746D6C",
"EmailHash": "CE29D0E8928E95C3FF5BDD8CFE82F445",
"Flags": 8388608,
"MessageKey": "02000000000000000000000000A9E7611C8B9AFE2DEDA42039DBF09F3BFA185F76",
"OwnerCount": 26,
"RegularKey": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"Sequence": 62418073
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "548E97B1F63273FC2F339CBEB8C202FBF9231C4C61BC1BA51A6239501A2F6FB9",
"PreviousFields": {
"Balance": "77694533",
"Sequence": 62418072
},
"PreviousTxnID": "5FDB0B2ECE005EEA87DC35B33204424D0766AB37B764F1618A6C69C06BDDD511",
"PreviousTxnLgrSeq": 87319056
}
}],
"TransactionIndex": 24,
"TransactionResult": "tesSUCCESS"
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"RootIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2"
"tx_json": {
"Account": "rLJmawLfNAFNyyYHFbNErTfCrfsbmRzrTc",
"Fee": "12",
"Flags": 131072,
"LastLedgerSequence": 88061884,
"LimitAmount": {
"currency": "QNT",
"issuer": "rGPsXnzAkdv1FYKkhC59GRp3M42axDhE1d",
"value": "500000000"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2",
"PreviousTxnID": "565B7B3D2DBE8EF1206A195965DC82413C7D0EE81CFAA99F79EE419217237F7C",
"PreviousTxnLgrSeq": 98918107
}
"Sequence": 62418072,
"SigningPubKey": "023833AB55CD985EB4F7744DC2B02D34886A71ECC0177EE59749A0113ABEE8D64A",
"TransactionType": "TrustSet",
"TxnSignature": "304402201B00F6D2D9C3B290B8EB3CBAB15612C16C7C06E1D5D8A8B55528D4E1762EB7110220565D2A7369884D84F324FB3CA521BA4EDAFF8F2DDDE48AF8992CF99DF0EEB3F0",
"ledger_index": 88061876,
"date": 769309032
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"RootIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395",
"PreviousTxnID": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"PreviousTxnLgrSeq": 98918099
}
"ledger_index": 88061876,
"hash": "735E296F0F271382FF8FBBBD0058AC7330419B8A1C955388A7384E5E3D5B2FCB",
"ledger_hash": "95B2DA521829572779128884B145DF921B4239CC74057C08EB570DD31641A8F5",
"close_time_iso": "2024-05-18T00:57:12Z",
"validated": true
}, {
"meta": {
"AffectedNodes": [{
"ModifiedNode": {
"FinalFields": {
"Account": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"Balance": "8579705270",
"Flags": 131072,
"OwnerCount": 0,
"Sequence": 1152385
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574",
"PreviousFields": {
"Balance": "8554705270"
},
"PreviousTxnID": "DB31B6D0A304777F125CAD069E2D2C60829475BC30A5DB63376C425C10B85752",
"PreviousTxnLgrSeq": 86879421
}
}, {
"ModifiedNode": {
"FinalFields": {
"Account": "rpKoCafrEz7FxQZ9FfktocuBGNZZyrz4KH",
"Balance": "802086263",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 60818358
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "481C0CDDC838688B61B960A1EE721F657BD8E501F64141A51E9A905A1D87A2C9",
"PreviousFields": {
"Balance": "827086275",
"Sequence": 60818357
},
"PreviousTxnID": "7C1671C63D75EBDDD87672D1DE9D5A9EAEAF34C37BDB29D1359301B85ECEF776",
"PreviousTxnLgrSeq": 60818357
}
}],
"TransactionIndex": 39,
"TransactionResult": "tesSUCCESS",
"delivered_amount": "25000000"
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Balance": "24799961",
"Flags": 0,
"OwnerCount": 4,
"Sequence": 98916980
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "6221E36CC407593A1E74EC8BDCEF82BFF1C4275B92FC4D6877AA9013214133CA",
"PreviousFields": {
"Balance": "24799971",
"OwnerCount": 3,
"Sequence": 98916979
},
"PreviousTxnID": "565B7B3D2DBE8EF1206A195965DC82413C7D0EE81CFAA99F79EE419217237F7C",
"PreviousTxnLgrSeq": 98918107
}
"tx_json": {
"Account": "rpKoCafrEz7FxQZ9FfktocuBGNZZyrz4KH",
"DeliverMax": "25000000",
"Destination": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"DestinationTag": 997786069,
"Fee": "12",
"LastLedgerSequence": 87598991,
"Sequence": 60818357,
"SigningPubKey": "0229DA128237D9A63FBA95666C5B8794F455875D843EDF39F6C02DF07FD5B4720D",
"TransactionType": "Payment",
"TxnSignature": "304402203B0048779085087566AABB4B878EF30EB41D3B29581937111F2708780EE4168702203E2D3B1B73F3F8B86EE009F818B226467E3BFC444B831AE851E0E0B0FB7F49C8",
"ledger_index": 87598983,
"date": 767543720
},
{
"CreatedNode": {
"LedgerEntryType": "RippleState",
"LedgerIndex": "BCDE567C108FB674AA379BCDBEFF705899B38A39535A1EFA23E9906F96403A9F",
"NewFields": {
"Balance": {
"currency": "BTC",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 1179648,
"HighLimit": {
"currency": "BTC",
"issuer": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"value": "10"
},
"LowLimit": {
"currency": "BTC",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "0"
}
}
}
}
],
"TransactionIndex": 68,
"TransactionResult": "tesSUCCESS"
"ledger_index": 87598983,
"hash": "16DFB8551F5301E3B7D1BCEAA8DB92E9AF5D783E6DCA7C0E11FD143D988E904A",
"ledger_hash": "2B363FD30EA376E2662777CEBDDDE22C035A87DA3CD3EA0E6125CBBC9D8A7873",
"close_time_iso": "2024-04-27T14:35:20Z",
"validated": true
}],
"validated": true,
"marker": {
"ledger": 87598983,
"seq": 39
},
"tx_json": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Fee": "10",
"LastLedgerSequence": 98918129,
"LimitAmount": {
"currency": "BTC",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "10"
},
"Sequence": 98916979,
"SigningPubKey": "ED954DCBC5CB557C330BEAB71D36A18DEED0CAA5DE5A8FF8C9589A49D3253B50CF",
"TransactionType": "TrustSet",
"TxnSignature": "23EE556A37E6E5A4C16B87489CE7E0A5E0FFDAC5DB4B5DA3A6682FA355A8258025DA0EF6F920116080AB7196C4CF82D37760CBB6EEA6E199B9DCC29BD6BC7A09",
"ledger_index": 98918111,
"ctid": "C5E55EDF00440000",
"date": 811446652
},
"ledger_index": 98918111,
"hash": "C58EB987B4AC3AE984ADF70DE375AD9B8A180569C30072DE57D6E17EFC69E7F0",
"ledger_hash": "3A134DDA87A60A2531B9B9D504FA6EBDAC99738B0DB20C476BCD6196592B08B2",
"close_time_iso": "2025-09-17T17:50:52Z",
"validated": true
},
{
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574",
"PreviousTxnID": "5E5313BA3C55755ED3FDACB53C53A7143997D997DAF5FB5C24B83C6B995D6363",
"PreviousTxnLgrSeq": 98055207
}
},
{
"CreatedNode": {
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2",
"NewFields": {
"Owner": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"RootIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2"
}
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"RootIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Balance": "24799991",
"Flags": 0,
"OwnerCount": 1,
"Sequence": 98916977
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "6221E36CC407593A1E74EC8BDCEF82BFF1C4275B92FC4D6877AA9013214133CA",
"PreviousFields": {
"Balance": "24800001",
"OwnerCount": 0,
"Sequence": 98916976
},
"PreviousTxnID": "71BBF54C1EABA54B375702085EA089037909B1B2B6F618979131C1ECD4337575",
"PreviousTxnLgrSeq": 98916982
}
},
{
"CreatedNode": {
"LedgerEntryType": "RippleState",
"LedgerIndex": "CE8F932A1CA2D2EDEAA1267BAEE88978BAA886034C389B76FB242860A82572A6",
"NewFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 1179648,
"HighLimit": {
"currency": "USD",
"issuer": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"value": "10000"
},
"LowLimit": {
"currency": "USD",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "0"
}
}
}
}
],
"TransactionIndex": 20,
"TransactionResult": "tesSUCCESS"
},
"tx_json": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Fee": "10",
"LastLedgerSequence": 98918117,
"LimitAmount": {
"currency": "USD",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "10000"
},
"Sequence": 98916976,
"SigningPubKey": "ED954DCBC5CB557C330BEAB71D36A18DEED0CAA5DE5A8FF8C9589A49D3253B50CF",
"TransactionType": "TrustSet",
"TxnSignature": "785C1D134E017F1C0C6168427F208950679DA90D4C90E479DB397DF8E2D3FEEED24466A63B1A18A41AEB6BE1806497E5314AF7B55939B6B8EF20F3E3876CF400",
"ledger_index": 98918099,
"ctid": "C5E55ED300140000",
"date": 811446610
},
"ledger_index": 98918099,
"hash": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"ledger_hash": "EBA54645E31446A2A79F60F6241B357EFFEB98A6F43E17B7B2F1EE4E80C132D6",
"close_time_iso": "2025-09-17T17:50:10Z",
"validated": true
}
],
"validated": true,
"marker": {
"ledger": 98918099,
"seq": 20
},
"limit": 2,
"status": "success"
}
"limit": 2,
"status": "success"
}
}
```
{% /tab %}
{% tab label="Commandline" %}
```json
Loading: "/etc/opt/ripple/rippled.cfg"
2025-Dec-19 03:16:00.638871262 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result": {
"account": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"ledger_index_min": 32570,
"ledger_index_max": 100974014,
"transactions": [
{
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574",
"PreviousTxnID": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"PreviousTxnLgrSeq": 98918099
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"RootIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2",
"PreviousTxnID": "565B7B3D2DBE8EF1206A195965DC82413C7D0EE81CFAA99F79EE419217237F7C",
"PreviousTxnLgrSeq": 98918107
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"RootIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395",
"PreviousTxnID": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"PreviousTxnLgrSeq": 98918099
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Balance": "24799961",
"Flags": 0,
"OwnerCount": 4,
"Sequence": 98916980
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "6221E36CC407593A1E74EC8BDCEF82BFF1C4275B92FC4D6877AA9013214133CA",
"PreviousFields": {
"Balance": "24799971",
"OwnerCount": 3,
"Sequence": 98916979
},
"PreviousTxnID": "565B7B3D2DBE8EF1206A195965DC82413C7D0EE81CFAA99F79EE419217237F7C",
"PreviousTxnLgrSeq": 98918107
}
},
{
"CreatedNode": {
"LedgerEntryType": "RippleState",
"LedgerIndex": "BCDE567C108FB674AA379BCDBEFF705899B38A39535A1EFA23E9906F96403A9F",
"NewFields": {
"Balance": {
"currency": "BTC",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 1179648,
"HighLimit": {
"currency": "BTC",
"issuer": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"value": "10"
},
"LowLimit": {
"currency": "BTC",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "0"
}
}
}
}
],
"TransactionIndex": 68,
"TransactionResult": "tesSUCCESS"
},
"tx_json": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Fee": "10",
"LastLedgerSequence": 98918129,
"LimitAmount": {
"currency": "BTC",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "10"
},
"Sequence": 98916979,
"SigningPubKey": "ED954DCBC5CB557C330BEAB71D36A18DEED0CAA5DE5A8FF8C9589A49D3253B50CF",
"TransactionType": "TrustSet",
"TxnSignature": "23EE556A37E6E5A4C16B87489CE7E0A5E0FFDAC5DB4B5DA3A6682FA355A8258025DA0EF6F920116080AB7196C4CF82D37760CBB6EEA6E199B9DCC29BD6BC7A09",
"ledger_index": 98918111,
"ctid": "C5E55EDF00440000",
"date": 811446652
},
"ledger_index": 98918111,
"hash": "C58EB987B4AC3AE984ADF70DE375AD9B8A180569C30072DE57D6E17EFC69E7F0",
"ledger_hash": "3A134DDA87A60A2531B9B9D504FA6EBDAC99738B0DB20C476BCD6196592B08B2",
"close_time_iso": "2025-09-17T17:50:52Z",
"validated": true
"result" : {
"account" : "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"ledger_index_max" : 57112094,
"ledger_index_min" : 57105464,
"limit" : 2,
"marker" : {
"ledger" : 57112074,
"seq" : 9
},
{
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574",
"PreviousTxnID": "5E5313BA3C55755ED3FDACB53C53A7143997D997DAF5FB5C24B83C6B995D6363",
"PreviousTxnLgrSeq": 98055207
}
},
{
"CreatedNode": {
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2",
"NewFields": {
"Owner": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"RootIndex": "31ECB4AC7F3713FB1FD97E07F5F4589FF872D746AB1B8BA604BA40ED8F9F3CD2"
}
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"RootIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "347C7476C61B99D4E7F6BBECDA911220042020C92A3E209282B69290BAE2F395"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Balance": "24799991",
"Flags": 0,
"OwnerCount": 1,
"Sequence": 98916977
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "6221E36CC407593A1E74EC8BDCEF82BFF1C4275B92FC4D6877AA9013214133CA",
"PreviousFields": {
"Balance": "24800001",
"OwnerCount": 0,
"Sequence": 98916976
},
"PreviousTxnID": "71BBF54C1EABA54B375702085EA089037909B1B2B6F618979131C1ECD4337575",
"PreviousTxnLgrSeq": 98916982
}
},
{
"CreatedNode": {
"LedgerEntryType": "RippleState",
"LedgerIndex": "CE8F932A1CA2D2EDEAA1267BAEE88978BAA886034C389B76FB242860A82572A6",
"NewFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 1179648,
"HighLimit": {
"currency": "USD",
"issuer": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"value": "10000"
},
"LowLimit": {
"currency": "USD",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "0"
}
}
}
}
],
"TransactionIndex": 20,
"TransactionResult": "tesSUCCESS"
},
"tx_json": {
"Account": "r48QyLLbot7VCfw325LrXAUtP6CRfU3tb4",
"Fee": "10",
"LastLedgerSequence": 98918117,
"LimitAmount": {
"currency": "USD",
"issuer": "rLNaPoKeeBjZe2qs6x52yVPZpZ8td4dc6w",
"value": "10000"
},
"Sequence": 98916976,
"SigningPubKey": "ED954DCBC5CB557C330BEAB71D36A18DEED0CAA5DE5A8FF8C9589A49D3253B50CF",
"TransactionType": "TrustSet",
"TxnSignature": "785C1D134E017F1C0C6168427F208950679DA90D4C90E479DB397DF8E2D3FEEED24466A63B1A18A41AEB6BE1806497E5314AF7B55939B6B8EF20F3E3876CF400",
"ledger_index": 98918099,
"ctid": "C5E55ED300140000",
"date": 811446610
},
"ledger_index": 98918099,
"hash": "33BD699AEFAC9B5CEE05495FE7590F71B58BAC8BCFB70A9E5FAF149EF9D2E116",
"ledger_hash": "EBA54645E31446A2A79F60F6241B357EFFEB98A6F43E17B7B2F1EE4E80C132D6",
"close_time_iso": "2025-09-17T17:50:10Z",
"validated": true
}
],
"validated": true,
"marker": {
"ledger": 98918099,
"seq": 20
},
"limit": 2,
"status": "success"
}
"status" : "success",
"transactions" : [
{
"ledger_index" : 57112090,
"meta" : "201C0000002EF8E51100612503677617551E0297F38EF4FED7004E074D246B4EA3E550D9AE0F61BE40E08D3432091D52CE56140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574E624000AB96E624000037771BFD270E1E7220002000024000AB96F2D0000000062400003776C784A418114D2E44C9FAF7BE9C536219800A6E698E4C7D2C911E1E1E311006156F7D315E0E992B1F1AC66B309C9D68961AA327FE770101B74D4C975F8C5DEC96AE8240367761A624000000005478807811403C95DC0C7CE402E8044A5F13304108013CE9963E1E1F1031000",
"tx_blob" : "120000228000000024000AB96E201B036776306140000000054788076840000000000000287321020A46D8D02AC780C59853ACA309EAA92E7D8E02DD72A0B6AC315A7D18A6C3276A74463044022054811EEF61ACCFA1B5FC6BB05D2FA49CF5174062740370328382E6EA557C0E6A0220480584D487638C333A87CA37100354BD36209E355E8DB9FE79791A56E24C1F268114D2E44C9FAF7BE9C536219800A6E698E4C7D2C911831403C95DC0C7CE402E8044A5F13304108013CE9963",
"validated" : true
},
{
"ledger_index" : 57112087,
"meta" : "201C00000026F8E5110061250367760A556B80EE9A9AD3FC40F471F29DCB80C678375137CE36220718902EF1EDCD375E7156140FA03FE8C39540CA8189BC7A7956795C712BC0A542C6409C041150703C8574E66240000376DEB77118E1E7220002000024000AB96E2D00000000624000037771BFD2708114D2E44C9FAF7BE9C536219800A6E698E4C7D2C911E1E1E511006125036776155591DA498D40AFD90670555F3D719883B48D224B4E4E906C634DEFA21163E8197756CC20FEBEA6D2AF969EC46F2BD92684D9FBABC3F238E841B5E056FE4EBF4379A9E62400071DA26240000001C0D849F8E1E722000200002400071DA32D0000000062400000012DCFE87881146914CB622B8E41E150DE431F48DA244A69809366E1E1F1031000",
"tx_blob" : "12000022800000002400071DA22E00000001201B0367762D61400000009308615868400000000000002873210381575032E254BF4D699C3D8D6EFDB63B3A71F97475C6F6885BC7DAEEE55D9A0174473045022100E592BCCFD85CCE0B39075EFC66D6BCA594EBB451F12AD5AD9EE533A267F1381B02203635AB46AC110848FC44E797BD19D77A19E10A0F463AA5540B1C62E5D48C81F081146914CB622B8E41E150DE431F48DA244A698093668314D2E44C9FAF7BE9C536219800A6E698E4C7D2C911",
"validated" : true
}
],
"validated" : true
}
}
```
{% /tab %}
@@ -821,7 +446,7 @@ Each transaction object includes the following fields, depending on whether it w
| `Field` | Type | Description |
|:-----------------|:----------------|:-------------------------|
| `close_time_iso` | String | The time the ledger containing this transaction was closed, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. |
| `close_time_iso` | String | The ledger close time represented in ISO 8601 time format. |
| `hash` | String | The unique hash identifier of the transaction. |
| `ledger_hash` | String | A hex string of the ledger version that included this transaction. |
| `ledger_index` | Integer | The [ledger index][] of the ledger version that included this transaction. |

View File

@@ -69,7 +69,7 @@ An example of a successful response:
{% /tab %}
{% tab label="JSON-RPC (with diff)" %}
{% code-snippet file="/_api-examples/ledger-clio/jsonrpc-diff-response.json" language="json" prefix="200 OK\n\n" /%}
{% code-snippet file="/_api-examples/ledger-clio/jsonrpc-diff-response.json" language="json" /%}
{% /tab %}
{% /tabs %}
@@ -84,7 +84,6 @@ The response follows the [standard format][], with a successful result containin
| `ledger.close_flags` | Integer | A bit-map of [flags relating to the closing of this ledger](../../../protocol/ledger-data/ledger-header.md#close-flags). |
| `ledger.close_time` | Integer | The time this ledger was closed, in [seconds since the Ripple Epoch][]. |
| `ledger.close_time_human` | String | The time this ledger was closed, in human-readable format. Always uses the UTC time zone. |
| `ledger.close_time_iso` | String | The time this ledger was closed, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. |
| `ledger.close_time_resolution` | Integer | Ledger close times are rounded to within this many seconds. |
| `ledger.closed` | Boolean | Whether or not this ledger has been closed. |
| `ledger.ledger_hash` | String | Unique identifying hash of the entire ledger. |

View File

@@ -22,8 +22,7 @@ An example of the request format:
"ledger_index": "validated",
"transactions": false,
"expand": false,
"owner_funds": false,
"api_version": 2
"owner_funds": false
}
```
{% /tab %}
@@ -37,8 +36,7 @@ An example of the request format:
"ledger_index": "validated",
"transactions": false,
"expand": false,
"owner_funds": false,
"api_version": 2
"owner_funds": false
}
]
}
@@ -56,7 +54,7 @@ rippled ledger validated
{% /tabs %}
{% try-it method="ledger" /%}
{% try-it method="ledger" server="xrplcluster" /%}
The request can contain the following parameters:
@@ -88,7 +86,7 @@ An example of a successful response:
{% /tab %}
{% tab label="Commandline" %}
{% code-snippet file="/_api-examples/ledger/jsonrpc-response.json" language="json" prefix="Loading: \"/etc/opt/ripple/rippled.cfg\"\n2025-Dec-19 03:16:00.638871262 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005\n\n" /%}
{% code-snippet file="/_api-examples/ledger/jsonrpc-response.json" language="json" prefix="Loading: \"/etc/opt/ripple/rippled.cfg\"\n2023-Nov-01 21:38:14.638871262 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005\n\n" /%}
{% /tab %}
{% /tabs %}
@@ -102,7 +100,6 @@ The response follows the [standard format][], with a successful result containin
| `ledger.close_flags` | Number | A bit-map of [flags relating to the closing of this ledger](../../../protocol/ledger-data/ledger-header.md#close-flags). |
| `ledger.close_time` | Number | The time this ledger was closed, in [seconds since the Ripple Epoch][]. |
| `ledger.close_time_human` | String | The time this ledger was closed, in human-readable format. Always uses the UTC time zone. |
| `ledger.close_time_iso` | String | The time this ledger was closed, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. |
| `ledger.close_time_resolution` | Number | Ledger close times are rounded to within this many seconds. |
| `ledger.closed` | Boolean | Whether or not this ledger has been closed. |
| `ledger.ledger_hash` | String | Unique identifying hash of the entire ledger. |

View File

@@ -20,11 +20,11 @@ An example of the request format:
{% tab label="WebSocket" %}
```json
{
"id": "example_ledger_data",
"id": 2,
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"command": "ledger_data",
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"limit": 5,
"api_version": 2
"binary": true
}
```
{% /tab %}
@@ -35,9 +35,9 @@ An example of the request format:
"method": "ledger_data",
"params": [
{
"binary": true,
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"limit": 5,
"api_version": 2
"limit": 5
}
]
}
@@ -59,9 +59,7 @@ A request can include the following fields:
| `marker` | [Marker][] | No | Value from a previous paginated response. Resume retrieving data where that response left off. |
| `type` | String | No | Filter results to a specific type of ledger entry. This field accepts canonical names of [ledger entry types](../../../protocol/ledger-data/ledger-entry-types/index.md) (case insensitive) or [short names](../../api-conventions/ledger-entry-short-names.md). If omitted, return ledger entries of all types. |
{% admonition type="warning" name="Caution" %}
The `ledger` request parameter is deprecated and may be removed without further notice. Use `ledger_hash` or `ledger_index` instead.
{% /admonition %}
The `ledger` field is deprecated and may be removed without further notice.
## Response Format
@@ -70,161 +68,138 @@ An example of a successful response:
{% tabs %}
{% tab label="WebSocket (binary:false)" %}
{% tab label="WebSocket (binary:true)" %}
```json
{
"result": {
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"ledger_index": 6885842,
"validated": true,
"state": [
{
"Account": "rKKzk9ghA2iuy3imqMXUHJqdRPMtNDGf4c",
"Balance": "893730848",
"Flags": 0,
"LedgerEntryType": "AccountRoot",
"OwnerCount": 0,
"PreviousTxnID": "C204A65CF2542946289A3358C67D991B5E135FABFA89F271DBA7A150C08CA046",
"PreviousTxnLgrSeq": 6487716,
"Sequence": 1,
"index": "00001A2969BE1FC85F1D7A55282FA2E6D95C71D2E4B9C0FDD3D9994F3C00FF8F"
},
{
"Account": "rGryPmNWFognBgMtr9k4quqPbbEcCrhNmD",
"BookDirectory": "71633D7DE1B6AEB32F87F1A73258B13FC8CC32942D53A66D4F038D7EA4C68000",
"BookNode": "0",
"Flags": 0,
"LedgerEntryType": "Offer",
"OwnerNode": "0",
"PreviousTxnID": "555B93628BF3EC318892BB7C7CDCB6732FF53D12B6EEC4FAF60DD1AEE1C6101F",
"PreviousTxnLgrSeq": 3504261,
"Sequence": 3,
"TakerGets": "1000000",
"TakerPays": {
"currency": "BTC",
"issuer": "rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK",
"value": "1"
},
"index": "000037C6659BB98F8D09F2F4CFEB27DE8EFEAFE54DD9E1C13AECDF5794B0C0F5"
},
{
"Account": "rUy8tW38MW9ma7kSjRgB2GHtTkQAFRyrN8",
"BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4C1AA535D3D0C000",
"BookNode": "0",
"Flags": 131072,
"LedgerEntryType": "Offer",
"OwnerNode": "0",
"PreviousTxnID": "A160BC41A45B6BB118DF23D77E4FF23C723431B917F50DCB41319ECC2821F34C",
"PreviousTxnLgrSeq": 6764892,
"Sequence": 10,
"TakerGets": "780000000000",
"TakerPays": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "5850"
},
"index": "0000A8791F78CC9B39200E12A9BDAACCF40A72A512FA815525CFC9BA772990F7"
},
{
"Account": "rh3C81VfNDhhWPQWCU8ZGgknvdgNUvRtM9",
"Balance": "13000000000",
"Flags": 0,
"LedgerEntryType": "AccountRoot",
"OwnerCount": 0,
"PreviousTxnID": "286498B513710CFEB2D723A554C7557983D1952DF4DEE342C40DCB43067C9A21",
"PreviousTxnLgrSeq": 4092975,
"Sequence": 1,
"index": "0000B717320558E2DE1A3B9FDB24E9A695BF05D1A44E4A4683212BB1DD0FBA23"
},
{
"Balance": {
"currency": "BTC",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 131072,
"HighLimit": {
"currency": "BTC",
"issuer": "rKUK9omZqVEnraCipKNFb5q4tuNTeqEDZS",
"value": "10"
},
"HighNode": "0",
"LedgerEntryType": "RippleState",
"LowLimit": {
"currency": "BTC",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "0"
},
"LowNode": "0",
"PreviousTxnID": "87591A63051645F37B85D1FBA55EE69B1C96BFF16904F5C99F03FB93D42D0375",
"PreviousTxnLgrSeq": 746872,
"index": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58"
}
],
"ledger": {
"account_hash": "016661124C467D20034890D16E2519019E4C3911C3A1CBE96A39067AEA9B3C97",
"close_flags": 0,
"close_time": 454621560,
"close_time_human": "2014-May-28 19:46:00.000000000 UTC",
"close_time_resolution": 10,
"close_time_iso": "2014-05-28T19:46:00Z",
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"parent_close_time": 454621550,
"parent_hash": "DEF64F075DD2DAD8C76292B43888DCC88214E61E7323C2B0364733AC71A4EFBC",
"total_coins": "99999990103498274",
"transaction_hash": "09190FE6C4176E8A445F171B0D52613CEEA772687A1F11E4D061B574CB2AD993",
"ledger_index": 6885842,
"closed": true
"id": 2,
"result": {
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"ledger_index": "6885842",
"marker": "0002A590029B53BE7857EFF9985F770EC792CE483720EB5E963C4D6A607D43DF",
"state": [
{
"data": "11006122000000002400000001250062FEA42D0000000055C204A65CF2542946289A3358C67D991B5E135FABFA89F271DBA7A150C08CA0466240000000354540208114C909F42250CFE8F12A7A1A0DFBD3CBD20F32CD79",
"index": "00001A2969BE1FC85F1D7A55282FA2E6D95C71D2E4B9C0FDD3D9994F3C00FF8F"
},
{
"data": "11006F22000000002400000003250035788533000000000000000034000000000000000055555B93628BF3EC318892BB7C7CDCB6732FF53D12B6EEC4FAF60DD1AEE1C6101F501071633D7DE1B6AEB32F87F1A73258B13FC8CC32942D53A66D4F038D7EA4C6800064D4838D7EA4C68000000000000000000000000000425443000000000035DD7DF146893456296BF4061FBE68735D28F3286540000000000F42408114A4B8F5F7B644AEDC3447F9459C132EEB016A133B",
"index": "000037C6659BB98F8D09F2F4CFEB27DE8EFEAFE54DD9E1C13AECDF5794B0C0F5"
},
{
"data": "11006F2200020000240000000A250067395C33000000000000000034000000000000000055A160BC41A45B6BB118DF23D77E4FF23C723431B917F50DCB41319ECC2821F34C5010DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4C1AA535D3D0C00064D554C88B43EFA00000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D165400000B59B9F780081148366FB9ACD2A0FD822E31112D2EB6F98C317C2C1",
"index": "0000A8791F78CC9B39200E12A9BDAACCF40A72A512FA815525CFC9BA772990F7"
},
{
"data": "1100612200000000240000000125003E742F2D0000000055286498B513710CFEB2D723A554C7557983D1952DF4DEE342C40DCB43067C9A21624000000306DC42008114225BAB89C4A4B94624BB069D6DB3C819F934991C",
"index": "0000B717320558E2DE1A3B9FDB24E9A695BF05D1A44E4A4683212BB1DD0FBA23"
},
{
"data": "110072220002000025000B65783700000000000000003800000000000000005587591A63051645F37B85D1FBA55EE69B1C96BFF16904F5C99F03FB93D42D03756280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000042544300000000000A20B3C85F482532A9578DBB3950B85CA06594D167D4C38D7EA4C680000000000000000000000000004254430000000000C795FDF8A637BCAAEDAD1C434033506236C82A2D",
"index": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58"
}
]
},
"marker": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58"
},
"id": "example_ledger_data",
"api_version": 2,
"status": "success",
"type": "response"
"status": "success",
"type": "response"
}
```
{% /tab %}
{% tab label="WebSocket (binary:true)" %}
{% tab label="WebSocket (binary:false)" %}
```json
{
"result": {
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"ledger_index": 6885842,
"validated": true,
"state": [
{
"data": "11006122000000002400000001250062FEA42D0000000055C204A65CF2542946289A3358C67D991B5E135FABFA89F271DBA7A150C08CA0466240000000354540208114C909F42250CFE8F12A7A1A0DFBD3CBD20F32CD79",
"index": "00001A2969BE1FC85F1D7A55282FA2E6D95C71D2E4B9C0FDD3D9994F3C00FF8F"
},
{
"data": "11006F22000000002400000003250035788533000000000000000034000000000000000055555B93628BF3EC318892BB7C7CDCB6732FF53D12B6EEC4FAF60DD1AEE1C6101F501071633D7DE1B6AEB32F87F1A73258B13FC8CC32942D53A66D4F038D7EA4C6800064D4838D7EA4C68000000000000000000000000000425443000000000035DD7DF146893456296BF4061FBE68735D28F3286540000000000F42408114A4B8F5F7B644AEDC3447F9459C132EEB016A133B",
"index": "000037C6659BB98F8D09F2F4CFEB27DE8EFEAFE54DD9E1C13AECDF5794B0C0F5"
},
{
"data": "11006F2200020000240000000A250067395C33000000000000000034000000000000000055A160BC41A45B6BB118DF23D77E4FF23C723431B917F50DCB41319ECC2821F34C5010DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4C1AA535D3D0C00064D554C88B43EFA00000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D165400000B59B9F780081148366FB9ACD2A0FD822E31112D2EB6F98C317C2C1",
"index": "0000A8791F78CC9B39200E12A9BDAACCF40A72A512FA815525CFC9BA772990F7"
},
{
"data": "1100612200000000240000000125003E742F2D0000000055286498B513710CFEB2D723A554C7557983D1952DF4DEE342C40DCB43067C9A21624000000306DC42008114225BAB89C4A4B94624BB069D6DB3C819F934991C",
"index": "0000B717320558E2DE1A3B9FDB24E9A695BF05D1A44E4A4683212BB1DD0FBA23"
},
{
"data": "110072220002000025000B65783700000000000000003800000000000000005587591A63051645F37B85D1FBA55EE69B1C96BFF16904F5C99F03FB93D42D03756280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000042544300000000000A20B3C85F482532A9578DBB3950B85CA06594D167D4C38D7EA4C680000000000000000000000000004254430000000000C795FDF8A637BCAAEDAD1C434033506236C82A2D",
"index": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58"
}
],
"ledger": {
"ledger_data": "006911D2016345760FA95E22DEF64F075DD2DAD8C76292B43888DCC88214E61E7323C2B0364733AC71A4EFBC09190FE6C4176E8A445F171B0D52613CEEA772687A1F11E4D061B574CB2AD993016661124C467D20034890D16E2519019E4C3911C3A1CBE96A39067AEA9B3C971B18F96E1B18F9780A00",
"closed": true
"id": 2,
"result": {
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"ledger_index": "6885842",
"marker": "0002A590029B53BE7857EFF9985F770EC792CE483720EB5E963C4D6A607D43DF",
"state": [
{
"Account": "rKKzk9ghA2iuy3imqMXUHJqdRPMtNDGf4c",
"Balance": "893730848",
"Flags": 0,
"LedgerEntryType": "AccountRoot",
"OwnerCount": 0,
"PreviousTxnID": "C204A65CF2542946289A3358C67D991B5E135FABFA89F271DBA7A150C08CA046",
"PreviousTxnLgrSeq": 6487716,
"Sequence": 1,
"index": "00001A2969BE1FC85F1D7A55282FA2E6D95C71D2E4B9C0FDD3D9994F3C00FF8F"
},
{
"Account": "rGryPmNWFognBgMtr9k4quqPbbEcCrhNmD",
"BookDirectory": "71633D7DE1B6AEB32F87F1A73258B13FC8CC32942D53A66D4F038D7EA4C68000",
"BookNode": "0000000000000000",
"Flags": 0,
"LedgerEntryType": "Offer",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "555B93628BF3EC318892BB7C7CDCB6732FF53D12B6EEC4FAF60DD1AEE1C6101F",
"PreviousTxnLgrSeq": 3504261,
"Sequence": 3,
"TakerGets": "1000000",
"TakerPays": {
"currency": "BTC",
"issuer": "rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK",
"value": "1"
},
"index": "000037C6659BB98F8D09F2F4CFEB27DE8EFEAFE54DD9E1C13AECDF5794B0C0F5"
},
{
"Account": "rUy8tW38MW9ma7kSjRgB2GHtTkQAFRyrN8",
"BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4C1AA535D3D0C000",
"BookNode": "0000000000000000",
"Flags": 131072,
"LedgerEntryType": "Offer",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "A160BC41A45B6BB118DF23D77E4FF23C723431B917F50DCB41319ECC2821F34C",
"PreviousTxnLgrSeq": 6764892,
"Sequence": 10,
"TakerGets": "780000000000",
"TakerPays": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "5850"
},
"index": "0000A8791F78CC9B39200E12A9BDAACCF40A72A512FA815525CFC9BA772990F7"
},
{
"Account": "rh3C81VfNDhhWPQWCU8ZGgknvdgNUvRtM9",
"Balance": "13000000000",
"Flags": 0,
"LedgerEntryType": "AccountRoot",
"OwnerCount": 0,
"PreviousTxnID": "286498B513710CFEB2D723A554C7557983D1952DF4DEE342C40DCB43067C9A21",
"PreviousTxnLgrSeq": 4092975,
"Sequence": 1,
"index": "0000B717320558E2DE1A3B9FDB24E9A695BF05D1A44E4A4683212BB1DD0FBA23"
},
{
"Balance": {
"currency": "BTC",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 131072,
"HighLimit": {
"currency": "BTC",
"issuer": "rKUK9omZqVEnraCipKNFb5q4tuNTeqEDZS",
"value": "10"
},
"HighNode": "0000000000000000",
"LedgerEntryType": "RippleState",
"LowLimit": {
"currency": "BTC",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "0"
},
"LowNode": "0000000000000000",
"PreviousTxnID": "87591A63051645F37B85D1FBA55EE69B1C96BFF16904F5C99F03FB93D42D0375",
"PreviousTxnLgrSeq": 746872,
"index": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58"
}
]
},
"marker": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58"
},
"id": "example_ledger_data",
"api_version": 2,
"status": "success",
"type": "response"
"status": "success",
"type": "response"
}
```
{% /tab %}
@@ -234,39 +209,34 @@ An example of a successful response:
200 OK
{
"result": {
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"ledger_index": 6885842,
"validated": true,
"state": [
{
"data": "11006122000000002400000001250062FEA42D0000000055C204A65CF2542946289A3358C67D991B5E135FABFA89F271DBA7A150C08CA0466240000000354540208114C909F42250CFE8F12A7A1A0DFBD3CBD20F32CD79",
"index": "00001A2969BE1FC85F1D7A55282FA2E6D95C71D2E4B9C0FDD3D9994F3C00FF8F"
},
{
"data": "11006F22000000002400000003250035788533000000000000000034000000000000000055555B93628BF3EC318892BB7C7CDCB6732FF53D12B6EEC4FAF60DD1AEE1C6101F501071633D7DE1B6AEB32F87F1A73258B13FC8CC32942D53A66D4F038D7EA4C6800064D4838D7EA4C68000000000000000000000000000425443000000000035DD7DF146893456296BF4061FBE68735D28F3286540000000000F42408114A4B8F5F7B644AEDC3447F9459C132EEB016A133B",
"index": "000037C6659BB98F8D09F2F4CFEB27DE8EFEAFE54DD9E1C13AECDF5794B0C0F5"
},
{
"data": "11006F2200020000240000000A250067395C33000000000000000034000000000000000055A160BC41A45B6BB118DF23D77E4FF23C723431B917F50DCB41319ECC2821F34C5010DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4C1AA535D3D0C00064D554C88B43EFA00000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D165400000B59B9F780081148366FB9ACD2A0FD822E31112D2EB6F98C317C2C1",
"index": "0000A8791F78CC9B39200E12A9BDAACCF40A72A512FA815525CFC9BA772990F7"
},
{
"data": "1100612200000000240000000125003E742F2D0000000055286498B513710CFEB2D723A554C7557983D1952DF4DEE342C40DCB43067C9A21624000000306DC42008114225BAB89C4A4B94624BB069D6DB3C819F934991C",
"index": "0000B717320558E2DE1A3B9FDB24E9A695BF05D1A44E4A4683212BB1DD0FBA23"
},
{
"data": "110072220002000025000B65783700000000000000003800000000000000005587591A63051645F37B85D1FBA55EE69B1C96BFF16904F5C99F03FB93D42D03756280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000042544300000000000A20B3C85F482532A9578DBB3950B85CA06594D167D4C38D7EA4C680000000000000000000000000004254430000000000C795FDF8A637BCAAEDAD1C434033506236C82A2D",
"index": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58"
}
],
"ledger": {
"ledger_data": "006911D2016345760FA95E22DEF64F075DD2DAD8C76292B43888DCC88214E61E7323C2B0364733AC71A4EFBC09190FE6C4176E8A445F171B0D52613CEEA772687A1F11E4D061B574CB2AD993016661124C467D20034890D16E2519019E4C3911C3A1CBE96A39067AEA9B3C971B18F96E1B18F9780A00",
"closed": true
},
"marker": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58",
"status": "success"
}
"result": {
"ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
"ledger_index": "6885842",
"marker": "0002A590029B53BE7857EFF9985F770EC792CE483720EB5E963C4D6A607D43DF",
"state": [
{
"data": "11006122000000002400000001250062FEA42D0000000055C204A65CF2542946289A3358C67D991B5E135FABFA89F271DBA7A150C08CA0466240000000354540208114C909F42250CFE8F12A7A1A0DFBD3CBD20F32CD79",
"index": "00001A2969BE1FC85F1D7A55282FA2E6D95C71D2E4B9C0FDD3D9994F3C00FF8F"
},
{
"data": "11006F22000000002400000003250035788533000000000000000034000000000000000055555B93628BF3EC318892BB7C7CDCB6732FF53D12B6EEC4FAF60DD1AEE1C6101F501071633D7DE1B6AEB32F87F1A73258B13FC8CC32942D53A66D4F038D7EA4C6800064D4838D7EA4C68000000000000000000000000000425443000000000035DD7DF146893456296BF4061FBE68735D28F3286540000000000F42408114A4B8F5F7B644AEDC3447F9459C132EEB016A133B",
"index": "000037C6659BB98F8D09F2F4CFEB27DE8EFEAFE54DD9E1C13AECDF5794B0C0F5"
},
{
"data": "11006F2200020000240000000A250067395C33000000000000000034000000000000000055A160BC41A45B6BB118DF23D77E4FF23C723431B917F50DCB41319ECC2821F34C5010DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4C1AA535D3D0C00064D554C88B43EFA00000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D165400000B59B9F780081148366FB9ACD2A0FD822E31112D2EB6F98C317C2C1",
"index": "0000A8791F78CC9B39200E12A9BDAACCF40A72A512FA815525CFC9BA772990F7"
},
{
"data": "1100612200000000240000000125003E742F2D0000000055286498B513710CFEB2D723A554C7557983D1952DF4DEE342C40DCB43067C9A21624000000306DC42008114225BAB89C4A4B94624BB069D6DB3C819F934991C",
"index": "0000B717320558E2DE1A3B9FDB24E9A695BF05D1A44E4A4683212BB1DD0FBA23"
},
{
"data": "110072220002000025000B65783700000000000000003800000000000000005587591A63051645F37B85D1FBA55EE69B1C96BFF16904F5C99F03FB93D42D03756280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000042544300000000000A20B3C85F482532A9578DBB3950B85CA06594D167D4C38D7EA4C680000000000000000000000000004254430000000000C795FDF8A637BCAAEDAD1C434033506236C82A2D",
"index": "000103996A3BAD918657F86E12A67D693E8FC8A814DA4B958A244B5F14D93E58"
}
],
"status": "success"
}
}
```
{% /tab %}
@@ -277,7 +247,6 @@ The response follows the [standard format][], with a successful result containin
| `Field` | Type | Description |
|:---------------|:------------------------------------|:----------------------|
| `ledger` | Object | The complete [ledger header data](../../../protocol/ledger-data/ledger-header.md) for this ledger version. |
| `ledger_index` | Unsigned Integer - [Ledger Index][] | The ledger index of this ledger version. |
| `ledger_hash` | String - [Hash][] | Unique identifying hash of this ledger version. |
| `state` | Array | Array of JSON objects containing data from the ledger's state tree, as defined below. |

View File

@@ -8,11 +8,7 @@ labels:
# path_find
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/PathFind.cpp "Source")
{% admonition type="warning" name="Caution" %}
WebSocket API only!
{% /admonition %}
The `path_find` method searches for a [path](../../../../concepts/tokens/fungible-tokens/paths.md) along which a transaction can possibly be made, and periodically sends updates when the path changes over time. For a simpler version that is supported by JSON-RPC, see the [ripple_path_find method][]. For payments occurring strictly in XRP, it is not necessary to find a path, because XRP can be sent directly to any account.
*WebSocket API only!* The `path_find` method searches for a [path](../../../../concepts/tokens/fungible-tokens/paths.md) along which a transaction can possibly be made, and periodically sends updates when the path changes over time. For a simpler version that is supported by JSON-RPC, see the [ripple_path_find method][]. For payments occurring strictly in XRP, it is not necessary to find a path, because XRP can be sent directly to any account.
There are three different modes, or sub-commands, of the path_find command. Specify which one you want with the `subcommand` parameter:

View File

@@ -39,11 +39,7 @@ An example of the request format:
{% try-it method="server_definitions" /%}
The request includes the following parameters:
| Field | Type | Required? | Description |
|:------------------|:-------|:----------|-------------|
| `hash` | String | No | If included and the hash matches the server's hash, the full set of definitions will not be returned. |
The request does not take any parameters.
## Response Format

View File

@@ -344,7 +344,7 @@ Transaction stream messages have the following fields:
| Field | Type | Description |
|:------------------------|:--------------------------|:-----------------------|
| `close_time_iso` | String | The time the ledger containing this transaction was closed, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. |
| `close_time_iso` | String | The ledger close time represented in ISO 8601 time format. |
| `type` | String | `transaction` indicates this is the notification of a transaction, which could come from several possible streams. |
| `engine_result` | String | String [Transaction result code](../../../protocol/transactions/transaction-results/index.md) |
| `engine_result_code` | Number | Numeric [transaction response code](../../../protocol/transactions/transaction-results/index.md), if applicable. |

View File

@@ -18,11 +18,10 @@ An example of the request format:
{% tab label="WebSocket" %}
```json
{
"id": "example_transaction_entry",
"id": 4,
"command": "transaction_entry",
"tx_hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"ledger_index": 56865245,
"api_version": 2
"ledger_index": 56865245
}
```
{% /tab %}
@@ -34,8 +33,7 @@ An example of the request format:
"params": [
{
"tx_hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"ledger_index": 56865245,
"api_version": 2
"ledger_index": 56865245
}
]
}
@@ -72,14 +70,16 @@ An example of a successful response:
{% tab label="WebSocket" %}
```json
{
"id": 4,
"result": {
"validated": true,
"ledger_hash": "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"ledger_index": 56865245,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"ExchangeRate": "4f04c66806cf7400",
"ExchangeRate": "4F04C66806CF7400",
"Flags": 0,
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
@@ -115,9 +115,9 @@ An example of a successful response:
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode": "0",
"BookNode": "0000000000000000",
"Flags": 0,
"OwnerNode": "0",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq": 56865244,
"Sequence": 5037708,
@@ -136,8 +136,8 @@ An example of a successful response:
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "0",
"IndexPrevious": "0",
"IndexNext": "0000000000000000",
"IndexPrevious": "0000000000000000",
"Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
@@ -181,15 +181,11 @@ An example of a successful response:
"value": "20160.75"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9"
"TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9",
"hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9"
},
"ledger_index": 56865245,
"ledger_hash": "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"close_time_iso": "2020-07-16T20:53:40Z",
"hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9"
"validated": true
},
"id": "example_transaction_entry",
"api_version": 2,
"status": "success",
"type": "response"
}
@@ -198,253 +194,246 @@ An example of a successful response:
{% tab label="JSON-RPC" %}
```json
200 OK
{
"result": {
"validated": true,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"ExchangeRate": "4f04c66806cf7400",
"Flags": 0,
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "000000000000000000000000434E590000000000",
"TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
"result": {
"ledger_hash": "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"ledger_index": 56865245,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"ExchangeRate": "4F04C66806CF7400",
"Flags": 0,
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "000000000000000000000000434E590000000000",
"TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance": "10404767991",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 5037711
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields": {
"Balance": "10404768003",
"Sequence": 5037710
},
"PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq": 56865244
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode": "0000000000000000",
"Flags": 0,
"OwnerNode": "0000000000000000",
"PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq": 56865244,
"Sequence": 5037708,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
},
"LedgerEntryType": "Offer",
"LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "0000000000000000",
"IndexPrevious": "0000000000000000",
"Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
},
{
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence": 5037710,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
}
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance": "10404767991",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 5037711
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields": {
"Balance": "10404768003",
"Sequence": 5037710
},
"PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq": 56865244
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode": "0",
"Flags": 0,
"OwnerNode": "0",
"PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq": 56865244,
"Sequence": 5037708,
"TakerGets": "15000000000",
"TakerPays": {
"status": "success",
"tx_json": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee": "12",
"Flags": 0,
"LastLedgerSequence": 56865248,
"OfferSequence": 5037708,
"Sequence": 5037710,
"SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
},
"LedgerEntryType": "Offer",
"LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9",
"hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9"
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "0",
"IndexPrevious": "0",
"Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
},
{
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence": 5037710,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
}
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"tx_json": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee": "12",
"Flags": 0,
"LastLedgerSequence": 56865248,
"OfferSequence": 5037708,
"Sequence": 5037710,
"SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9"
},
"ledger_index": 56865245,
"ledger_hash": "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"close_time_iso": "2020-07-16T20:53:40Z",
"hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"status": "success"
}
"validated": true
}
}
```
{% /tab %}
{% tab label="Commandline" %}
```json
Loading: "/etc/opt/ripple/rippled.cfg"
2025-Dec-19 03:16:00.638871262 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result": {
"validated": true,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"ExchangeRate": "4f04c66806cf7400",
"Flags": 0,
"RootIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "000000000000000000000000434E590000000000",
"TakerPaysIssuer": "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
"result" : {
"ledger_hash" : "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"ledger_index" : 56865245,
"meta" : {
"AffectedNodes" : [
{
"ModifiedNode" : {
"FinalFields" : {
"ExchangeRate" : "4F04C66806CF7400",
"Flags" : 0,
"RootIndex" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency" : "0000000000000000000000000000000000000000",
"TakerGetsIssuer" : "0000000000000000000000000000000000000000",
"TakerPaysCurrency" : "000000000000000000000000434E590000000000",
"TakerPaysIssuer" : "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
},
"LedgerEntryType" : "DirectoryNode",
"LedgerIndex" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance": "10404767991",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 5037711
{
"ModifiedNode" : {
"FinalFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance" : "10404767991",
"Flags" : 0,
"OwnerCount" : 3,
"Sequence" : 5037711
},
"LedgerEntryType" : "AccountRoot",
"LedgerIndex" : "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields" : {
"Balance" : "10404768003",
"Sequence" : 5037710
},
"PreviousTxnID" : "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq" : 56865244
}
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields": {
"Balance": "10404768003",
"Sequence": 5037710
{
"DeletedNode" : {
"FinalFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode" : "0000000000000000",
"Flags" : 0,
"OwnerNode" : "0000000000000000",
"PreviousTxnID" : "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq" : 56865244,
"Sequence" : 5037708,
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
}
},
"LedgerEntryType" : "Offer",
"LedgerIndex" : "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
},
"PreviousTxnID": "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq": 56865244
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode": "0",
"Flags": 0,
"OwnerNode": "0",
"PreviousTxnID": "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq": 56865244,
"Sequence": 5037708,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
{
"ModifiedNode" : {
"FinalFields" : {
"Flags" : 0,
"IndexNext" : "0000000000000000",
"IndexPrevious" : "0000000000000000",
"Owner" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex" : "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType" : "DirectoryNode",
"LedgerIndex" : "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
},
"LedgerEntryType": "Offer",
"LedgerIndex": "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "0",
"IndexPrevious": "0",
"Owner": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
},
{
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory": "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence": 5037710,
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
}
{
"CreatedNode" : {
"LedgerEntryType" : "Offer",
"LedgerIndex" : "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence" : 5037710,
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
}
}
}
}
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"tx_json": {
"Account": "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee": "12",
"Flags": 0,
"LastLedgerSequence": 56865248,
"OfferSequence": 5037708,
"Sequence": 5037710,
"SigningPubKey": "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets": "15000000000",
"TakerPays": {
"currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "20160.75"
],
"TransactionIndex" : 0,
"TransactionResult" : "tesSUCCESS"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9"
},
"ledger_index": 56865245,
"ledger_hash": "793E56131D8D4ABFB27FA383BFC44F2978B046E023FF46C588D7E0C874C2472A",
"close_time_iso": "2020-07-16T20:53:40Z",
"hash": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"status": "success"
}
"status" : "success",
"tx_json" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee" : "12",
"Flags" : 0,
"LastLedgerSequence" : 56865248,
"OfferSequence" : 5037708,
"Sequence" : 5037710,
"SigningPubKey" : "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
},
"TransactionType" : "OfferCreate",
"TxnSignature" : "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9",
"hash" : "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9"
},
"validated" : true
}
}
```
{% /tab %}
@@ -459,7 +448,7 @@ The response follows the [standard format][], with a successful result containin
| `Field` | Type | Description |
|:-----------------|:--------------------------|:--------------------------------|
| `close_time_iso` | String | The time the ledger containing this transaction was closed, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. |
| `close_time_iso` | String | The ledger close time represented in ISO 8601 time format. |
| `hash` | String | The unique hash identifier of the transaction. |
| `ledger_index` | Number - [Ledger Index][] | The ledger index of the ledger version the transaction was found in; this is the same as the one from the request. |
| `ledger_hash` | String - [Hash][] | _(May be omitted)_ The identifying hash of the ledger version the transaction was found in; this is the same as the one from the request. |

View File

@@ -20,7 +20,7 @@ An example of the request format:
{% tab label="WebSocket (Hash)" %}
```json
{
"id": "example_tx_hash",
"id": 1,
"command": "tx",
"transaction": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"binary": false,
@@ -32,9 +32,9 @@ An example of the request format:
{% tab label="WebSocket (CTID)" %}
```json
{
"id": "example_tx_ctid",
"id": "CTID example",
"command": "tx",
"ctid": "C363B1DD00000000",
"ctid": "C005523E00000000",
"binary": false,
"api_version": 2
}
@@ -62,7 +62,7 @@ An example of the request format:
"method": "tx",
"params": [
{
"ctid": "C363B1DD00000000",
"ctid": "C005523E00000000",
"binary": false,
"api_version": 2
}
@@ -102,16 +102,142 @@ An example of a successful response:
{% tabs %}
{% tab label="WebSocket" %}
{% code-snippet file="/_api-examples/tx/ws-response.json" language="json" /%}
{% tab label="WebSocket (Hash)" %}
{% code-snippet file="/_api-examples/tx/ws-response-hash.json" language="json" /%}
{% /tab %}
{% tab label="JSON-RPC" %}
{% code-snippet file="/_api-examples/tx/jsonrpc-response.json" language="json" prefix="200 OK\n\n" /%}
{% tab label="WebSocket (CTID)" %}
{% code-snippet file="/_api-examples/tx/ws-response-ctid.json" language="json" /%}
{% /tab %}
{% tab label="JSON-RPC (Hash)" %}
{% code-snippet file="/_api-examples/tx/jsonrpc-response-hash.json" language="json" /%}
{% /tab %}
{% tab label="JSON-RPC (CTID)" %}
{% code-snippet file="/_api-examples/tx/jsonrpc-response-ctid.json" language="json" /%}
{% /tab %}
{% tab label="Commandline" %}
{% code-snippet file="/_api-examples/tx/jsonrpc-response.json" language="json" prefix="Loading: \"/etc/opt/ripple/rippled.cfg\"\n2025-Dec-19 03:16:00.638871262 UTC HTTPClient:NFO Connecting to 127.0.0.1:5005\n\n" /%}
```json
{
"result" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Fee" : "12",
"Flags" : 0,
"LastLedgerSequence" : 56865248,
"OfferSequence" : 5037708,
"Sequence" : 5037710,
"SigningPubKey" : "03B51A3EDF70E4098DA7FB053A01C5A6A0A163A30ED1445F14F87C7C3295FCB3BE",
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
},
"TransactionType" : "OfferCreate",
"TxnSignature" : "3045022100A5023A0E64923616FCDB6D664F569644C7C9D1895772F986CD6B981B515B02A00220530C973E9A8395BC6FE2484948D2751F6B030FC7FB8575D1BFB406368AD554D9",
"date" : 648248020,
"hash" : "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9",
"inLedger" : 56865245,
"ledger_index" : 56865245,
"meta" : {
"AffectedNodes" : [
{
"ModifiedNode" : {
"FinalFields" : {
"ExchangeRate" : "4F04C66806CF7400",
"Flags" : 0,
"RootIndex" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"TakerGetsCurrency" : "0000000000000000000000000000000000000000",
"TakerGetsIssuer" : "0000000000000000000000000000000000000000",
"TakerPaysCurrency" : "000000000000000000000000434E590000000000",
"TakerPaysIssuer" : "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A"
},
"LedgerEntryType" : "DirectoryNode",
"LedgerIndex" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400"
}
},
{
"ModifiedNode" : {
"FinalFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"Balance" : "10404767991",
"Flags" : 0,
"OwnerCount" : 3,
"Sequence" : 5037711
},
"LedgerEntryType" : "AccountRoot",
"LedgerIndex" : "1DECD9844E95FFBA273F1B94BA0BF2564DDF69F2804497A6D7837B52050174A2",
"PreviousFields" : {
"Balance" : "10404768003",
"Sequence" : 5037710
},
"PreviousTxnID" : "4DC47B246B5EB9CCE92ABA8C482479E3BF1F946CABBEF74CA4DE36521D5F9008",
"PreviousTxnLgrSeq" : 56865244
}
},
{
"DeletedNode" : {
"FinalFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"BookNode" : "0000000000000000",
"Flags" : 0,
"OwnerNode" : "0000000000000000",
"PreviousTxnID" : "8F5FF57B404827F12BDA7561876A13C3E3B3095CBF75334DBFB5F227391A660C",
"PreviousTxnLgrSeq" : 56865244,
"Sequence" : 5037708,
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
}
},
"LedgerEntryType" : "Offer",
"LedgerIndex" : "26AAE6CA8D29E28A47C92ADF22D5D96A0216F0551E16936856DDC8CB1AAEE93B"
}
},
{
"ModifiedNode" : {
"FinalFields" : {
"Flags" : 0,
"IndexNext" : "0000000000000000",
"IndexPrevious" : "0000000000000000",
"Owner" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"RootIndex" : "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
},
"LedgerEntryType" : "DirectoryNode",
"LedgerIndex" : "47FAF5D102D8CE655574F440CDB97AC67C5A11068BB3759E87C2B9745EE94548"
}
},
{
"CreatedNode" : {
"LedgerEntryType" : "Offer",
"LedgerIndex" : "8BAEE3C7DE04A568E96007420FA11ABD0BC9AE44D35932BB5640E9C3FB46BC9B",
"NewFields" : {
"Account" : "rhhh49pFH96roGyuC4E5P4CHaNjS1k8gzM",
"BookDirectory" : "02BAAC1E67C1CE0E96F0FA2E8061020536CEDD043FEB0FF54F04C66806CF7400",
"Sequence" : 5037710,
"TakerGets" : "15000000000",
"TakerPays" : {
"currency" : "CNY",
"issuer" : "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value" : "20160.75"
}
}
}
}
],
"TransactionIndex" : 0,
"TransactionResult" : "tesSUCCESS"
},
"status" : "success",
"validated" : true
}
}
```
{% /tab %}
{% /tabs %}
@@ -122,19 +248,18 @@ An example of a successful response:
The response follows the [standard format][], with a successful result containing the fields of the [Transaction object](../../../protocol/transactions/index.md) as well as the following additional fields:
| `Field` | Type | Description |
|:-----------------|:----------------|:-------------------------|
| `ctid` | String | The transaction's [compact transaction identifier](../../api-conventions/ctid.md). {% badge href="https://github.com/XRPLF/rippled/releases/tag/1.12.0" %}New in: rippled 1.12.0{% /badge %} _(Not supported in Clio v2.0 and earlier.)_ |
| `close_time_iso` | String | The time the ledger containing this transaction was closed, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format. |
| `date` | Number | The [close time](../../../../concepts/ledgers/ledger-close-times.md) of the ledger in which the transaction was applied, in [seconds since the Ripple Epoch][]. |
| `hash` | String | The unique [identifying hash][] of the transaction |
| `inLedger` | Number | _(Deprecated)_ Alias for `ledger_index`. |
| `ledger_index` | Number | The [ledger index][] of the ledger that includes this transaction. |
| `meta` | Object (JSON) | (JSON mode) [Transaction metadata](../../../protocol/transactions/metadata.md), which describes the results of the transaction. |
| `meta_blob` | String (binary) | (Binary mode) [Transaction metadata](../../../protocol/transactions/metadata.md), which describes the results of the transaction, represented as a hex string. |
| `tx_blob` | String (binary) | (Binary mode) The transaction data represented as a hex string. |
| `tx_json` | Object (JSON) | The transaction data represented in JSON. |
| `validated` | Boolean | If `true`, this data comes from a validated ledger version; if omitted or set to `false`, this data is not final. |
| `Field` | Type | Description |
|:---------------|:---------------------------------|:-------------------------|
| `ctid` | String | The transaction's [compact transaction identifier](../../api-conventions/ctid.md). {% badge href="https://github.com/XRPLF/rippled/releases/tag/1.12.0" %}New in: rippled 1.12.0{% /badge %} _(Not supported in Clio v2.0 and earlier.)_ |
| `date` | Number | The [close time](../../../../concepts/ledgers/ledger-close-times.md) of the ledger in which the transaction was applied, in [seconds since the Ripple Epoch][]. |
| `hash` | String | The unique [identifying hash][] of the transaction |
| `inLedger` | Number | _(Deprecated)_ Alias for `ledger_index`. |
| `ledger_index` | Number | The [ledger index][] of the ledger that includes this transaction. |
| `meta` | Object (JSON) | (JSON mode) [Transaction metadata](../../../protocol/transactions/metadata.md), which describes the results of the transaction. |
| `meta_blob` | String (binary) | (Binary mode) [Transaction metadata](../../../protocol/transactions/metadata.md), which describes the results of the transaction, represented as a hex string. |
| `tx_blob` | String (binary) | (Binary mode) The transaction data represented as a hex string. |
| `tx_json` | Object (JSON) | The transaction data represented in JSON. |
| `validated` | Boolean | If `true`, this data comes from a validated ledger version; if omitted or set to `false`, this data is not final. |
{% /tab %}

View File

@@ -45,6 +45,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| `Domain` | String | Blob | No | A domain associated with this account. In JSON, this is the hexadecimal for the ASCII representation of the domain. [Cannot be more than 256 bytes in length.](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/include/xrpl/protocol/Protocol.h#L98) |
| `EmailHash` | String | UInt128 | No | The md5 hash of an email address. Clients can use this to look up an avatar through services such as [Gravatar](https://en.gravatar.com/). |
| `FirstNFTokenSequence` | Number | UInt32 | No | The account's [Sequence Number][] at the time it minted its first [non-fungible-token](../../../../concepts/tokens/nfts/index.md). {% amendment-disclaimer name="fixNFTokenRemint" /%} |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0061`, mapped to the string `AccountRoot`, indicates that this is an AccountRoot object. |
| `MessageKey` | String | Blob | No | A public key that may be used to send encrypted messages to this account. In JSON, uses hexadecimal. Must be exactly 33 bytes, with the first byte indicating the key type: `0x02` or `0x03` for secp256k1 keys, `0xED` for Ed25519 keys. |
| `MintedNFTokens` | Number | UInt32 | No | How many total [non-fungible tokens](../../../../concepts/tokens/nfts/index.md) have been minted by and on behalf of this account. {% amendment-disclaimer name="NonFungibleTokensV1_1" /%} |
| `NFTokenMinter` | String | AccountID | No | Another account that can mint [non-fungible tokens](../../../../concepts/tokens/nfts/index.md) on behalf of this account. {% amendment-disclaimer name="NonFungibleTokensV1_1" /%} |

View File

@@ -49,6 +49,8 @@ In addition to the [common fields](../common-fields.md), the {% code-page-name /
| Name | JSON Type | [Internal Type][] | Required? | Description |
|---------------------|-----------|-------------------|-----------|-------------|
| `Amendments` | Array | Vector256 | No | Array of 256-bit [amendment IDs](../../../../concepts/networks-and-servers/amendments.md) for all currently enabled amendments. If omitted, there are no enabled amendments. |
| `Flags` | Number | UInt32 | Yes | A bit-map of boolean flags enabled for this object. Currently, the protocol defines no flags for `Amendments` objects. The value is always `0`. |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0066`, mapped to the string `Amendments`, indicates that this object describes the status of amendments to the XRP Ledger. |
| `Majorities` | Array | Array | No | Array of objects describing the status of amendments that have majority support but are not yet enabled. If omitted, there are no pending amendments with majority support. |
| `PreviousTxnID` | String | UInt256 | No | The identifying hash of the transaction that most recently modified this entry. {% amendment-disclaimer name="fixPreviousTxnID" /%} |
| `PreviousTxnLgrSeq` | Number | UInt32 | No | The [index of the ledger][Ledger Index] that contains the transaction that most recently modified this entry. {% amendment-disclaimer name="fixPreviousTxnID" /%} |

View File

@@ -44,6 +44,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| `DestinationTag` | Number | UInt32 | No | An arbitrary tag to further specify the destination for this Check, such as a hosted recipient at the destination address. |
| `Expiration` | Number | UInt32 | No | Indicates the time after which this Check is considered expired. See [Specifying Time][] for details. |
| `InvoiceID` | String | UInt256 | No | Arbitrary 256-bit hash provided by the sender as a specific reason or identifier for this Check. |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0043`, mapped to the string `Check`, indicates that this object is a Check object. |
| `OwnerNode` | String | UInt64 | Yes | A hint indicating which page of the sender's owner directory links to this object, in case the directory consists of multiple pages. |
| `PreviousTxnID` | String | UInt256 | Yes | The identifying hash of the transaction that most recently modified this object. |
| `PreviousTxnLgrSeq` | Number | UInt32 | Yes |The [index of the ledger][Ledger Index] that contains the transaction that most recently modified this object. |

View File

@@ -62,6 +62,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| `Account` | String | Account | Yes | The account that granted the preauthorization. (The destination of the preauthorized payments.) |
| `Authorize` | String | Account | No | The account that received the preauthorization. (The sender of the preauthorized payments.) |
| `AuthorizeCredentials` | Array | Array | No | The set of credentials that received preauthorization. (Any account with these credentials is preauthorized.) This array has a minimum length of 1 and a maximum length of 8 credentials. |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0070`, mapped to the string `DepositPreauth`, indicates that this is a DepositPreauth object. |
| `OwnerNode` | String | UInt64 | Yes | A hint indicating which page of the sender's owner directory links to this object, in case the directory consists of multiple pages. **Note:** The object does not contain a direct link to the owner directory containing it, since that value can be derived from the `Account`. |
| `PreviousTxnID` | String - [Hash][] | UInt256 | Yes | The identifying hash of the transaction that most recently modified this object. |
| `PreviousTxnLgrSeq` | Number | UInt32 | Yes | The [index of the ledger][Ledger Index] that contains the transaction that most recently modified this object. |

View File

@@ -37,6 +37,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| `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 | UInt256 | 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. |

View File

@@ -99,9 +99,11 @@ All types of directories are automatically updated by the protocol as necessary.
|:--------------------|:----------|:------------------|:----------|:------------|
| `DomainID` | String | UInt256 | No | (Offer directories only) The ledger entry ID of a permissioned domain. If present, this order book belongs to the corresponding [Permissioned DEX](../../../../concepts/tokens/decentralized-exchange/permissioned-dexes.md). Otherwise, this order book is part of the open DEX. {% amendment-disclaimer name="PermissionedDEX" /%} |
| `ExchangeRate` | String | UInt64 | No | (Offer directories only) **DEPRECATED**. Do not use. |
| `Flags` | Number | UInt32 | Yes | A bit-map of boolean flags enabled for this object. Currently, the protocol defines no flags for `DirectoryNode` objects. The value is always `0`. |
| `Indexes` | Array | Vector256 | Yes | The contents of this directory: an array of IDs of other objects. |
| `IndexNext` | Number | UInt64 | No | If this directory consists of multiple pages, this ID links to the next object in the chain, wrapping around at the end. |
| `IndexPrevious` | Number | UInt64 | No | If this directory consists of multiple pages, this ID links to the previous object in the chain, wrapping around at the beginning. |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0064`, mapped to the string `DirectoryNode`, indicates that this object is part of a directory. |
| `NFTokenID` | String | UInt256 | No | (NFT offer directories only) ID of the NFT in a buy or sell offer. |
| `Owner` | String | AccountID | No | (Owner directories only) The address of the account that owns the objects in this directory. |
| `PreviousTxnID` | String | UInt256 | No | The identifying hash of the transaction that most recently modified this entry. {% amendment-disclaimer name="fixPreviousTxnID" /%} |

View File

@@ -47,6 +47,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| `DestinationNode` | String | UInt64 | No | A hint indicating which page of the destination's owner directory links to this object, in case the directory consists of multiple pages. Omitted on escrows created before enabling the [fix1523 amendment][]. |
| `DestinationTag` | Number | UInt32 | No | An arbitrary tag to further specify the destination for this escrow, such as a hosted recipient at the destination address. |
| `FinishAfter` | Number | UInt32 | No | The time, in [seconds since the Ripple Epoch][], after which this escrow can be finished. Any [EscrowFinish transaction][] before this time fails. (Specifically, this is compared with the close time of the previous validated ledger.) |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0075`, mapped to the string `Escrow`, indicates that this is an `Escrow` entry. |
| `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 | UInt256 | Yes | The identifying hash of the transaction that most recently modified this entry. |
| `PreviousTxnLgrSeq` | Number | UInt32 | Yes | The [index of the ledger][Ledger Index] that contains the transaction that most recently modified this entry. |

View File

@@ -47,6 +47,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| `FirstLedgerSequence` | Number | UInt32 | No | **DEPRECATED** Do not use. (The "recent hashes" object on Mainnet has the value `2` in this field as a result of an old software bug. That value gets carried forward as the "recent hashes" object is updated. New "previous history" objects do not have this field, nor do "recent hashes" objects in [parallel networks](../../../../concepts/networks-and-servers/parallel-networks.md) started with more recent versions of `rippled`.) |
| `Hashes` | Array of Strings | Vector256 | Yes | An array of up to 256 ledger hashes. The contents depend on which sub-type of `LedgerHashes` object this is. |
| `LastLedgerSequence` | Number | UInt32 | No | The [Ledger Index][] of the last entry in this object's `Hashes` array. |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0068`, mapped to the string `LedgerHashes`, indicates that this object is a list of ledger hashes. |
## Recent History LedgerHashes

View File

@@ -40,6 +40,7 @@ In addition to the [common fields](../common-fields.md), the {% code-page-name /
| Name | JSON Type | [Internal Type][] | Required? | Description |
|:----------------------|:----------|:------------------|:----------|:---------------------|
| `DisabledValidators` | Array | Array | No | A list of `DisabledValidator` objects (see below), each representing a trusted validator that is currently disabled. |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x004E`, mapped to the string `NegativeUNL`, indicates that this entry is the Negative UNL. |
| `PreviousTxnID` | String | UInt256 | No | The identifying hash of the transaction that most recently modified this entry. {% amendment-disclaimer name="fixPreviousTxnID" /%} |
| `PreviousTxnLgrSeq` | Number | UInt32 | No | The [index of the ledger][Ledger Index] that contains the transaction that most recently modified this entry. {% amendment-disclaimer name="fixPreviousTxnID" /%} |
| `ValidatorToDisable` | String | Blob | No | The public key of a trusted validator that is scheduled to be disabled in the next flag ledger. |

View File

@@ -45,6 +45,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| Field Name | JSON Type | [Internal Type][] | Required? | Description |
|:--------------------|:----------|:------------------|:----------|:------------|
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x0050`, mapped to the string `NFTokenPage`, indicates that this is a page containing `NFToken` objects.|
| `NextPageMin` | String | UInt256 | No | The locator of the next page, if any. Details about this field and how it should be used are outlined below. |
| `NFTokens` | Array | Array | Yes | The collection of `NFToken` objects contained in this NFTokenPage object. This specification places an upper bound of 32 NFToken objects per page. Objects are sorted from low to high with the `NFTokenID` used as the sorting parameter.|
| `PreviousPageMin` | String | UInt256 | No | The locator of the previous page, if any. Details about this field and how it should be used are outlined below. |

View File

@@ -47,6 +47,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| `BookNode` | String | UInt64 | Yes | A hint indicating which page of the offer directory links to this entry, in case the directory consists of multiple pages. |
| `DomainID` | String - [Hash][] | UInt256 | No | The ledger entry ID of a permissioned domain. If present, this offer belongs to the corresponding [Permissioned DEX](../../../../concepts/tokens/decentralized-exchange/permissioned-dexes.md). {% amendment-disclaimer name="PermissionedDEX" /%} |
| `Expiration` | Number | UInt32 | No | Indicates the time after which this offer is considered unfunded. See [Specifying Time][] for details. |
| `LedgerEntryType` | String | UInt16 | Yes | The value `0x006F`, mapped to the string `Offer`, indicates that this is an offer entry. |
| `OwnerNode` | String | UInt64 | Yes | A hint indicating which page of the owner directory links to this entry, in case the directory consists of multiple pages. |
| `PreviousTxnID` | String - [Hash][] | UInt256 | Yes | The identifying hash of the transaction that most recently modified this entry. |
| `PreviousTxnLgrSeq` | Number | UInt32 | Yes | The [index of the ledger][Ledger Index] that contains the transaction that most recently modified this object. |

Some files were not shown because too many files have changed in this diff Show More