Compare commits

...

82 Commits

Author SHA1 Message Date
Oliver Eggert
506b1c7b21 add release notes 2025-12-05 13:42:51 -08:00
Oliver Eggert
ad280c2c1b initial release notes 2025-12-01 17:03:41 -08:00
Oliver Eggert
682389e4e7 update binary format for signed int 2025-11-25 15:16:36 -08:00
Oliver Eggert
5c467f1c9b initialize 3.0 doc branch 2025-11-25 15:16:36 -08:00
oeggert
7cf6dccdd2 Merge pull request #3391 from XRPLF/ws-hydration-error
Fix WebSocket API Tool errors
2025-11-25 11:00:34 -08:00
Oliver Eggert
f44370009c fix hydration and browser navigation errors 2025-11-24 22:46:41 -08:00
Maria Shodunke
78fc4f49e6 Merge pull request #3388 from XRPLF/dependabot/go_modules/_code-samples/deposit-preauth/go/golang.org/x/crypto-0.45.0
Bump golang.org/x/crypto from 0.35.0 to 0.45.0 in /_code-samples/deposit-preauth/go
2025-11-24 02:37:52 -08:00
oeggert
adb09928cc Merge pull request #3387 from XRPLF/remove-rbac
Remove unused rbac configuration.
2025-11-21 10:24:40 -08:00
dependabot[bot]
36cd69821b Bump golang.org/x/crypto in /_code-samples/deposit-preauth/go
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.35.0 to 0.45.0.
- [Commits](https://github.com/golang/crypto/compare/v0.35.0...v0.45.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.45.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-21 13:53:04 +00:00
Maria Shodunke
1e91335f83 Merge pull request #3384 from XRPLF/dependabot/go_modules/_code-samples/send-xrp/go/golang.org/x/crypto-0.45.0
Bump golang.org/x/crypto from 0.35.0 to 0.45.0 in /_code-samples/send-xrp/go
2025-11-21 05:51:50 -08:00
Maria Shodunke
1ff667bb21 Merge pull request #3383 from XRPLF/dependabot/go_modules/_code-samples/multisigning/go/golang.org/x/crypto-0.45.0
Bump golang.org/x/crypto from 0.35.0 to 0.45.0 in /_code-samples/multisigning/go
2025-11-21 05:51:36 -08:00
Oliver Eggert
d1969d3919 remove rbac to enable anonymous mcp connections 2025-11-20 14:46:57 -08:00
oeggert
92230d702c Merge pull request #3385 from XRPLF/rippled-2.6.2
Rippled 2.6.2
2025-11-20 10:48:05 -08:00
oeggert
30c6a42519 Update blog/2025/rippled-2.6.2.md
Co-authored-by: Amarantha Kulkarni <amarantha-k@users.noreply.github.com>
2025-11-20 07:26:04 -08:00
oeggert
24a374e2bf Update blog/2025/rippled-2.6.2.md
Co-authored-by: Amarantha Kulkarni <amarantha-k@users.noreply.github.com>
2025-11-20 07:25:49 -08:00
Maria Shodunke
cac56c37f6 Merge pull request #3372 from XRPLF/batch-transactions-tutorial
Javascript: Batch transactions tutorial
2025-11-20 03:58:58 -08:00
Oliver Eggert
bd06feb49c remove sha512half script 2025-11-19 21:04:49 -08:00
Oliver Eggert
815df642e0 add commit message and download links 2025-11-19 21:02:28 -08:00
dependabot[bot]
46ed7fc569 Bump golang.org/x/crypto in /_code-samples/send-xrp/go
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.35.0 to 0.45.0.
- [Commits](https://github.com/golang/crypto/compare/v0.35.0...v0.45.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.45.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-20 01:39:20 +00:00
dependabot[bot]
f99277b841 Bump golang.org/x/crypto in /_code-samples/multisigning/go
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.35.0 to 0.45.0.
- [Commits](https://github.com/golang/crypto/compare/v0.35.0...v0.45.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.45.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-20 01:38:04 +00:00
Oliver Eggert
6c64a1e449 update tecdir_full error messages 2025-11-19 15:44:05 -08:00
Oliver Eggert
9e343558cc update tec codes and release notes 2025-11-19 15:16:42 -08:00
Maria Shodunke
fb33561a98 Address review comments 2025-11-19 12:22:32 +00:00
Oliver Eggert
567d980713 update known amendments with fixdirectorylimit 2025-11-17 15:32:44 -08:00
Maria Shodunke
7f16532b07 Calculate inner transaction hash to verify success 2025-11-17 19:13:57 +00:00
Oliver Eggert
62759ec261 add 2.6.2 release notes 2025-11-14 13:21:30 -08:00
Rome Reginelli
003927517f Merge pull request #3379 from XRPLF/rr-mpt-dupe-flag
Remove duplicate flags field in sample JSON
2025-11-14 12:19:31 -08:00
Rome Reginelli
9c8c231900 Remove duplicate flags field in sample JSON 2025-11-11 15:53:25 -08:00
Maria Shodunke
382a10bda9 Add temARRAY_EMPTY error for Batch transaction 2025-11-06 16:52:31 +00:00
Maria Shodunke
d2cf306ec6 Mention minimum number of transactions required in a Batch 2025-11-06 12:15:58 +00:00
Maria Shodunke
3e41224ef0 Add Batch transactions tutorials 2025-11-06 10:28:01 +00:00
Maria Shodunke
01ed3055ec Merge pull request #3299 from XRPLF/python-get-started-code-walkthrough
Add Get Started Walkthrough for Python
2025-11-06 10:17:26 +00:00
Maria Shodunke
eb174b8700 Add review comments 2025-11-06 09:57:51 +00:00
Maria Shodunke
9e96d40799 Add Get Started Walkthrough for Python 2025-11-06 09:57:51 +00:00
Maria Shodunke
d6b55ab177 Merge pull request #3375 from XRPLF/build-fix
Fix for build failure
2025-11-06 09:31:21 +00:00
Maria Shodunke
d8b216bdd7 Fix for build failure 2025-11-05 14:43:17 +00:00
Rome Reginelli
1e095599fd Merge pull request #3345 from XRPLF/dependabot/npm_and_yarn/multi-fa24b26d6e
Bump hono and @redocly/realm
2025-10-30 13:47:27 -07:00
Rome Reginelli
d27888182c Merge pull request #3370 from XRPLF/fix_src_links_public_apis
Update source links in public API methods
2025-10-30 13:42:22 -07:00
mDuo13
7dd37e6b19 Clean up path_find formatting 2025-10-30 13:38:04 -07:00
mDuo13
3347fc965d Remove note about MultiSign amendment (unconditionalized) 2025-10-30 11:55:09 -07:00
mDuo13
30c8e22eeb Fix source links in public API method pages 2025-10-30 01:52:48 -07:00
Rome Reginelli
8d2d3850ec Merge pull request #3368 from XRPLF/rwa-updates
Refactor RWA tokenization buttons
2025-10-29 12:20:26 -07:00
akcodez
c7961f692e use Link component for link 2025-10-29 12:17:21 -07:00
akcodez
dbcdb508aa add arrow to get started now 2025-10-29 12:15:59 -07:00
akcodez
982386d0f6 Update CompanyLogo component to use anchor tag for external links, enhancing accessibility and security with target and rel attributes. 2025-10-29 07:36:34 -07:00
akcodez
9dde1114ca remove arrow from internal link 2025-10-29 07:32:47 -07:00
akcodez
4ee47a63dc fix css build issues 2025-10-29 07:29:41 -07:00
Rome Reginelli
41b07a458e Merge pull request #3364 from XRPLF/fix_links_from_concepts
Fix source links in concepts and infrastructure sections
2025-10-28 14:12:58 -07:00
Rome Reginelli
e6765094a9 Merge pull request #3365 from XRPLF/fix_links_from_protocol_refs
Update links in protocol references
2025-10-28 13:56:23 -07:00
Maria Shodunke
fdcbc6c747 Merge pull request #3367 from XRPLF/kennyzlei/lending-protocol-faucet
Add new faucet configuration for Lending-Devnet
2025-10-28 16:07:44 +00:00
akcodez
5f3dc85e5b Refactor tokenization page layout and styles; update button structure and link behavior for improved responsiveness and user experience. 2025-10-27 12:11:40 -07:00
Kenny Lei
ea0c186fa0 Add new faucet configuration for Lending-Devnet 2025-10-27 09:30:51 -07:00
Maria Shodunke
31ff09c093 Merge pull request #3359 from XRPLF/mpt-metadata-schema
Add MPT Metadata Schema section to concept docs
2025-10-23 17:09:42 +01:00
mDuo13
3fa6394b09 Update links in protocol references 2025-10-22 16:03:12 -07:00
Rome Reginelli
4319594cf1 Merge pull request #3346 from XRPLF/contrib_titles_and_markdoc_tags
Update contributor documentation w/ more info
2025-10-22 15:03:45 -07:00
Rome Reginelli
7d9b9f7c17 Merge pull request #3360 from XRPLF/consistent_tx_examples
Add mainnet AMMCreate and OracleSet transaction examples
2025-10-22 15:03:18 -07:00
mDuo13
483c7c55e2 Adjust rate limiting log message example 2025-10-22 15:01:57 -07:00
Rome Reginelli
0d73d6d851 Merge pull request #3341 from XRPLF/fix_lsfammnode
Fix lsfAMMNode docs
2025-10-22 09:25:49 -07:00
mDuo13
408c0f27e8 Fix source links in concepts and infrastructure sections 2025-10-21 18:08:31 -07:00
oeggert
e7cb03a88d Merge pull request #3355 from XRPLF/remove-sidechain-devnet
remove mentions of Sidechain-Devnet
2025-10-21 14:29:05 -07:00
Rome Reginelli
18985ad7e5 Merge pull request #3356 from XRPLF/events-updates-2025-10-16
add xrpl hackathon, update image for italy hackathon
2025-10-21 14:12:27 -07:00
akcodez
09708e58de update event images 2025-10-21 08:57:03 -07:00
mDuo13
6e6247952f Revise contrib documentation per review 2025-10-20 17:56:06 -07:00
mDuo13
d7ca624269 Update translation contribution docs (fix #3239) 2025-10-20 17:53:19 -07:00
Rome Reginelli
d07d6dae6d Reword flags reminder per suggestion
Co-authored-by: Maria Shodunke <maria-robobug@users.noreply.github.com>
2025-10-17 11:47:55 -07:00
Maria Shodunke
bc0c698692 Add MPT Metadata Schema section to concept docs
- Updates MPT Concept docs with metadata schema
- Updates issue-mpt-with-metdata example code with new schema changes.
2025-10-17 18:34:36 +01:00
Mayukha Vadari
878f1ba77c change URLs 2025-10-17 10:50:58 -04:00
Maria Shodunke
c83fc47941 Merge pull request #3328 from XRPLF/mptoken-authorize-transaction-sample
Add example JSON for MPTokenAuthorize transaction
2025-10-17 08:23:27 +01:00
akcodez
588da44a2e add xrpl hackathon, update image for italy hackathon 2025-10-16 09:12:14 -07:00
Maria Shodunke
f511a23ea2 Additional changes for other MPToken transactions 2025-10-16 12:08:25 +01:00
Maria Shodunke
20225b5f62 Update JSON + add Mainnet transaction 2025-10-16 11:36:10 +01:00
Mayukha Vadari
10c974249f remove mentions of Sidechain-Devnet 2025-10-15 18:03:36 -04:00
mDuo13
5d45562fc6 Add mainnet AMMCreate and OracleSet transaction examples 2025-10-15 11:40:05 -07:00
oeggert
befd012ffa Merge pull request #3350 from XRPLF/update-nft_history
Update nft_history command
2025-10-15 09:58:13 -07:00
Maria Shodunke
4481320636 Add example JSON for MPTokenAuthorize transaction 2025-10-14 17:03:15 +01:00
Oliver Eggert
f248b92d0d update nft_history command with actual responses and notes about api_version 2 2025-10-10 15:51:51 -07:00
Rome Reginelli
904761dc51 Merge pull request #3348 from nzicko/fix/custom-plugins-imports
Fix broken imports in custom plugins for `@redocly/realm@0.126.0`
2025-10-09 10:47:49 -07:00
Nazarii Mykhailets
b2f345edd5 fix: imports in custom plugins 2025-10-09 13:01:08 +03:00
mDuo13
b1c8a33de9 Fix display of child pages in contributor documentation 2025-10-08 17:58:10 -07:00
mDuo13
755b15383b Update contributor documentation w/ more info
- Clarify frontmatter, especially titles
- Document more markdoc tags
2025-10-08 17:53:13 -07:00
dependabot[bot]
9e40756dd1 Bump hono and @redocly/realm
Bumps [hono](https://github.com/honojs/hono) to 4.9.7 and updates ancestor dependency @redocly/realm. These dependencies need to be updated together.


Updates `hono` from 4.6.5 to 4.9.7
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.6.5...v4.9.7)

Updates `@redocly/realm` from 0.122.3 to 0.126.0

---
updated-dependencies:
- dependency-name: hono
  dependency-version: 4.9.7
  dependency-type: indirect
- dependency-name: "@redocly/realm"
  dependency-version: 0.126.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-08 19:13:43 +00:00
mDuo13
b2aa96e283 Fix lsfAMMNode docs 2025-10-07 12:21:26 -07:00
130 changed files with 4611 additions and 2233 deletions

View File

@@ -17,8 +17,6 @@ Para ayudar a miembros de la comunidad del XRP Ledger a interactuar con la tecno
| Mainnet | Lanzamientos estables | _El_ [XRP Ledger](/about/), un libro contable criptográfico descentralizado impulsado por una red de servidores peer-to-peer y el hogar de [XRP](../../introduction/what-is-xrp.md). |
| Testnet | Lanzamientos estables | Una red de "universo alternativo" que actua como un campo de pruebas para el software construido en el XRP Ledger, sin impactar a los usuarios del XRP Ledger de producción y sin arriesgar dinero real. El [estado de enmienda](/resources/known-amendments.md) de Testnet está destinado a reflejar de cerca el de la Mainnet, aunque pueden ocurrir ligeras variaciones en el tiempo debido a la naturaleza impredecible de los sistemas descentralizados. |
| Devnet | Lanzamientos Beta | Una vista previa de las próximas atracciones, donde cambios inestables en el software principal de XRP Ledger se pueden probar. Los desarrolladores pueden utilizar esta altnet para interactuar y aprender sobre funcionalidades nuevas planficiadas para el XRP Ledger y enmiendas que no están habilitadas en la Mainnet. |
| [Hooks V3 Testnet](https://hooks-testnet-v3.xrpl-labs.com/) | [Servidor Hooks](https://github.com/XRPL-Labs/xrpld-hooks) | Una vista previa de la funcionalidad de smart contract en la cadena utilizando [hooks](https://xrpl-hooks.readme.io/). |
| Sidechain-Devnet | Lanzamientos Beta | Una sidechain para probar funcionalidades en puentes cross-chain. Devnet se trata como la cadena de bloqueo y esta sidechain es la cadena de emisión.<br>Soporte a la librería:<br>- [xrpl.js 2.12.0](https://www.npmjs.com/package/xrpl/v/2.12.0)<br>- [xrpl-py 2.4.0](https://pypi.org/project/xrpl-py/2.4.0/)<br>**Nota**: También puedes usar la herramienta de línea de comandos [`xbridge-cli`](https://github.com/XRPLF/xbridge-cli) para configurar un puente entre cadenas en tu máquina local. |
Cada altnet tiene su propia distribución separada de XRP de prueba, que se [regala gratis](/resources/dev-tools/xrp-faucets) a partes interesadas en experimentar con el XRP Ledger y desarrollar aplicaciones e integraciones. El XRP test no tiene valor en el mundo real y se pierde cuando la red se reinicia.

View File

@@ -17,8 +17,6 @@ XRP Ledgerコミュニティのメンバーが、メインネットに影響を
| Mainnet | 安定版リリース | ピアツーピアサーバのネットワーク機能を備えた分散型の暗号台帳であり、[XRP](../../introduction/what-is-xrp.md)の土台となる[XRP Ledger](/about/)です。 |
| Testnet | 安定版リリース | XRP Ledger上に構築したソフトウェアのテスト環境として動作する「代替環境」のネットワークです。本番環境のXRP Ledgerユーザに影響を及ぼすことも、本物の通貨をリスクにさらすこともありません。Testnetの[Amendmentのステータス](/resources/known-amendments.md)は、Mainnetを厳密に反映するようになっていますが、分散型システムが持つ予測不可能な性質により、タイミングにわずかな違いが生じることがあります。 |
| Devnet | ベータ版リリース | 次期リリースのプレビューネットワークです。XRP Ledgerのコアソフトウェアへの不安定な変更がテストされます。このAltNetを使用すると、開発者はまだMainnetで有効になっていないXRPLの計画段階の新機能やAmendmentを操作したり学習したりすることができます。 |
| [Hooks V3 Testnet](https://hooks-testnet-v3.xrpl-labs.com/) | [Hooksサーバ](https://github.com/XRPL-Labs/xrpld-hooks) | [Hooks](https://xrpl-hooks.readme.io/)を使用したオンチェーン・スマートコントラクト機能のプレビューネットワークです。 |
| Sidechain-Devnet | ベータ版リリース | クロスチェーンブリッジ機能をテストするためのサイドチェーンです。<br>ライブラリのサポート:<br>- [xrpl.js 2.12.0](https://www.npmjs.com/package/xrpl/v/2.12.0)<br>- [xrpl-py 2.4.0](https://pypi.org/project/xrpl-py/2.4.0/)<br>**注記**: また、[`xbridge-cli`](https://github.com/XRPLF/xbridge-cli)コマンドラインツールを使用して、ローカルマシンにクロスチェーンブリッジをセットアップすることもできます。 |
テスト用XRPは、XRP Ledgerの実験やアプリケーションの開発、統合に興味のある人々に[無償で提供](/resources/dev-tools/xrp-faucets)されています。テスト用のXRPは実際には価値を持たず、ネットワークがリセットされると失われます。

View File

@@ -43,11 +43,6 @@ labels:
# No [ips] stanza. Use the default hubs to connect to Mainnet.
```
```{% label="Sidechain-Devnet" %}
[ips]
sidechain-net2.devnet.rippletest.net 51235
```
{% /tabs %}
2. 以前の `[ips]`があれば、コメントアウトしてください。
@@ -78,11 +73,6 @@ labels:
main
```
```{% label="Sidechain-Devnet" %}
[network_id]
262
```
{% /tabs %}
カスタムネットワークの場合、そのネットワークに接続する全員が、そのネットワークに固有の値を使用する必要があります。新しいネットワークを作成するときは、ネットワークIDを11から4,294,967,295までの整数からランダムに選択します。
@@ -121,14 +111,6 @@ labels:
ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734
```
```{% label="Sidechain-Devnet" %}
[validator_list_sites]
https://vlsidechain-net2.devnet.rippletest.net
[validator_list_keys]
EDA5504C7133743FADA46342229B4E9CBBE1CF9BCA19D16633574F7CBB72F79569
```
{% /tabs %}
{% admonition type="success" name="ヒント" %}プレビュー版パッケージには必要な項目があらかじめ設定されている場合がありますが、念のため確認してください。{% /admonition %}
@@ -182,13 +164,6 @@ labels:
```
{% /tab %}
{% tab label="Sidechain-Devnet" %}
```
[features]
XChainBridge
```
{% /tab %}
{% /tabs %}
{% admonition type="danger" name="警告" %}メインネットまたはテストネットに接続するときは、`[features]`を使用しないでください。他のネットワークと異なる機能を強制的に有効にすると、サーバがネットワークから分断される可能性があります。{% /admonition %}

View File

@@ -26,7 +26,6 @@ labels:
| Ripple[¹][] | Testnet (Clio) | `https://clio.altnet.rippletest.net:51234/` | `wss://clio.altnet.rippletest.net:51233/` | Clioを使用したTestnet公開サーバ |
| Ripple[¹][] | Devnet | `https://s.devnet.rippletest.net:51234/` | `wss://s.devnet.rippletest.net:51233/` | Devnet 公開サーバ |
| Ripple[¹][] | Devnet (Clio) | `https://clio.devnet.rippletest.net:51234/` | `wss://clio.devnet.rippletest.net:51233/` | Clioを使用したDevnet公開サーバ |
| Ripple[¹][] | Sidechain-Devnet | `https://sidechain-net2.devnet.rippletest.net:51234/` | `wss://sidechain-net2.devnet.rippletest.net:51233/` | クロスチェーンブリッジ機能をテストするためのサイドチェーンDevnet。Devnetはロックチェーンとして機能し、このサイドチェーンは発行チェーンとして機能します。 |
| XRPL Labs | Xahau Testnet | `https://xahau-test.net/` | `wss://xahau-test.net/` | [Hooksが有効](https://hooks.xrpl.org/)なXahau Testnet |
[ネットワーク]: ../concepts/networks-and-servers/parallel-networks.md

View File

@@ -1,6 +1,6 @@
// @ts-check
import { getInnerText } from '@redocly/realm/dist/shared/markdoc.js';
import { getInnerText } from '@redocly/realm/dist/server/plugins/markdown/markdoc/helpers/get-inner-text.js';
import { dirname, relative, join as joinPath } from 'path';
import markdoc from '@markdoc/markdoc';
@@ -47,6 +47,7 @@ export function blogPosts() {
actions.createSharedData('blog-posts', { blogPosts: sortedPosts });
actions.addRouteSharedData('/blog/', 'blog-posts', 'blog-posts');
actions.addRouteSharedData('/ja/blog/', 'blog-posts', 'blog-posts');
actions.addRouteSharedData('/es-es/blog/', 'blog-posts', 'blog-posts');
} catch (e) {
console.log(e);
}

View File

@@ -1,6 +1,6 @@
// @ts-check
import { getInnerText } from '@redocly/realm/dist/shared/markdoc.js';
import { getInnerText } from '@redocly/realm/dist/server/plugins/markdown/markdoc/helpers/get-inner-text.js';
import { dirname, relative, join as joinPath } from 'path';
@@ -44,6 +44,7 @@ export function codeSamples() {
});
actions.addRouteSharedData('/resources/code-samples/', 'code-samples', 'code-samples');
actions.addRouteSharedData('/ja/resources/code-samples/', 'code-samples', 'code-samples');
actions.addRouteSharedData('/es-es/resources/code-samples/', 'code-samples', 'code-samples');
} catch (e) {
console.log(e);
}

View File

@@ -0,0 +1,15 @@
{
"alternatives": [
// ... paths omitted from this example; same format as the initial response ...
],
"destination_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"destination_amount": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "0.001"
},
"full_reply": true,
"id": 8,
"source_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"type": "path_find"
}

View File

@@ -0,0 +1,75 @@
{
"id": 8,
"result": {
"alternatives": [
{
"paths_computed": [
[
{
"currency": "USD",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"type": 48
},
{
"account": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"type": 1
},
{
"account": "rLzpfEnrB2Ro2LtaGd6Af7znRqGxULc4rW",
"type": 1
}
],
[
{
"currency": "USD",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"type": 48
},
{
"account": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"type": 1
},
{
"account": "rQhbp2h133vD3TJGWkNY5zePHKQUq6vSVm",
"type": 1
}
],
[
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48
}
],
[
{
"currency": "USD",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"type": 48
},
{
"account": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"type": 1
},
{
"account": "r4cjaKtZqP2GDjwK3eT9qua4Hqk9Zk2kSy",
"type": 1
}
]
],
"source_amount": "390"
}
],
"destination_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"destination_amount": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "0.001"
},
"full_reply": false,
"id": 8,
"source_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"
},
"status": "success",
"type": "response"
}

View File

@@ -1,4 +1,5 @@
# Batch
Code samples showing how to create and submit a [Batch transaction](../../docs/concepts/transactions/batch-transactions.md).
Both for simple and multi account batch transactions.
Code samples showing how to create and submit a [Batch transaction](https://xrpl.org/docs/concepts/transactions/batch-transactions).
Both for single and multi-account batch transactions.

View File

@@ -0,0 +1,301 @@
# Send a Batch Transaction
Code samples showing how to create and submit a [Batch transaction](https://xrpl.org/docs/concepts/transactions/batch-transactions) with Javascript.
Both for single and multi-account batch transactions.
## Single Account Batch Transaction
Quick setup and usage:
```sh
npm install xrpl
node singleAccountBatch.js
```
The script should output the following:
```sh
=== Funding new wallets from faucet... ===
Sender: rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim, Balance: 100 XRP
Wallet1: rGx6SACvYEvX8SRrvTPD91UhBmJ16pxL94, Balance: 100 XRP
Wallet2: r3qetgSfAtyCpGc4rvKNz4LX3F3urMSJJy, Balance: 100 XRP
=== Creating Batch transaction... ===
{
"TransactionType": "Batch",
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
"Flags": 65536,
"RawTransactions": [
{
"RawTransaction": {
"TransactionType": "Payment",
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
"Destination": "rGx6SACvYEvX8SRrvTPD91UhBmJ16pxL94",
"Amount": "2000000",
"Flags": 1073741824
}
},
{
"RawTransaction": {
"TransactionType": "Payment",
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
"Destination": "r3qetgSfAtyCpGc4rvKNz4LX3F3urMSJJy",
"Amount": "5000000",
"Flags": 1073741824
}
}
]
}
=== Submitting Batch transaction... ===
Batch transaction submitted successfully!
Result:
{
"close_time_iso": "2025-11-17T12:04:50Z",
"ctid": "C013313800030002",
"hash": "AE118213B0A183528418ABC5F14E3BFD6524020C5DB1C060157A0D3FDE15B900",
"ledger_hash": "621183809B68A794371C5EC6522105FF04E502C48EBDC8171B80224991E33394",
"ledger_index": 1257784,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
"Balance": "99999996",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 1257779
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "42CC98AF0A28EDDDC7E359B5622CC5748BDE2A93E124AF5C32647ECA8F68D480",
"PreviousFields": {
"Balance": "100000000",
"Sequence": 1257778
},
"PreviousTxnID": "081C42DAE12001735AC4E9A7F027636DF612DB17B4BFA2333F4DB8EA0C9D1E9F",
"PreviousTxnLgrSeq": 1257778
}
}
],
"TransactionIndex": 3,
"TransactionResult": "tesSUCCESS"
},
"tx_json": {
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
"Fee": "4",
"Flags": 65536,
"LastLedgerSequence": 1257802,
"RawTransactions": [
{
"RawTransaction": {
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
"Amount": "2000000",
"Destination": "rGx6SACvYEvX8SRrvTPD91UhBmJ16pxL94",
"Fee": "0",
"Flags": 1073741824,
"Sequence": 1257779,
"SigningPubKey": "",
"TransactionType": "Payment"
}
},
{
"RawTransaction": {
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
"Amount": "5000000",
"Destination": "r3qetgSfAtyCpGc4rvKNz4LX3F3urMSJJy",
"Fee": "0",
"Flags": 1073741824,
"Sequence": 1257780,
"SigningPubKey": "",
"TransactionType": "Payment"
}
}
],
"Sequence": 1257778,
"SigningPubKey": "ED7031CA5BA4EC745610AB495F5053F318C119E87567BE485A494773AD8ED4FBCE",
"TransactionType": "Batch",
"TxnSignature": "0610A277086943BC462C1A5F85BEB667B62B4BDA59525138B6014101C08297897A73D3D2D247CB37A06E1EA36267C53A51C0FDF32F3D8E974029BEDC41105B07",
"ctid": "C013313800030002",
"date": 816696290,
"ledger_index": 1257784
},
"validated": true
}
Batch transaction URL:
https://devnet.xrpl.org/transactions/AE118213B0A183528418ABC5F14E3BFD6524020C5DB1C060157A0D3FDE15B900
=== Verifying inner transactions... ===
Transaction 1 hash: D18EA54D5653BBB5C87F116978822EAB7A26EDFB1D6C41910F36D7484D4890E3
- Status: tesSUCCESS (Ledger 1257784)
- Transaction URL: https://devnet.xrpl.org/transactions/D18EA54D5653BBB5C87F116978822EAB7A26EDFB1D6C41910F36D7484D4890E3
Transaction 2 hash: 5660DB400F08EE5543C54D4D65824A2142F9D5AC17294A4ABF654260F129B44E
- Status: tesSUCCESS (Ledger 1257784)
- Transaction URL: https://devnet.xrpl.org/transactions/5660DB400F08EE5543C54D4D65824A2142F9D5AC17294A4ABF654260F129B44E
=== Final balances ===
Sender: rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim, Balance: 92.999996 XRP
Wallet1: rGx6SACvYEvX8SRrvTPD91UhBmJ16pxL94, Balance: 102 XRP
Wallet2: r3qetgSfAtyCpGc4rvKNz4LX3F3urMSJJy, Balance: 105 XRP
```
## Multi-Account Batch Transaction
```sh
npm install xrpl
node multiAccountBatch.js
```
The script should output the following:
```sh
=== Funding new wallets from faucet... ===
Alice: rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG, Balance: 100 XRP
Bob: r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq, Balance: 100 XRP
Charlie: rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA, Balance: 100 XRP
Third-party wallet: rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA, Balance: 100 XRP
=== Creating Batch transaction... ===
{
"TransactionType": "Batch",
"Account": "rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA",
"Flags": 65536,
"RawTransactions": [
{
"RawTransaction": {
"TransactionType": "Payment",
"Account": "rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA",
"Destination": "rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG",
"Amount": "50000000",
"Flags": 1073741824
}
},
{
"RawTransaction": {
"TransactionType": "Payment",
"Account": "r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq",
"Destination": "rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG",
"Amount": "50000000",
"Flags": 1073741824
}
}
]
}
=== Submitting Batch transaction... ===
Batch transaction submitted successfully!
Result:
{
"close_time_iso": "2025-11-17T12:08:31Z",
"ctid": "C013317600000002",
"hash": "1299D20C6B489DA5C632AE4DBE49475DBF42D9444C7E9C109CC9B8DD0FD55FEC",
"ledger_hash": "E45ECF69057084CD02BA49A17E4D0C9154D33A98BB3C95A11B2EB9BE18F32C9B",
"ledger_index": 1257846,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Account": "rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA",
"Balance": "99999994",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 1257845
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "2D9E0A02007241C38A8DF679E7E62AA0B273E8B12A5430B7B9D99300424F0E1F",
"PreviousFields": {
"Balance": "100000000",
"Sequence": 1257844
},
"PreviousTxnID": "3153DE8DE922538A6BE54AA8F783CAD4B848A321AFF028D3E6DD0E80C4B9C237",
"PreviousTxnLgrSeq": 1257844
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"tx_json": {
"Account": "rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA",
"BatchSigners": [
{
"BatchSigner": {
"Account": "rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA",
"SigningPubKey": "EDEB88C2868BD25BF03DB26050E16579FA6F8F9E3FF3172E0DC3DCBDA5408572EB",
"TxnSignature": "9508568084596147CFDCFC18A62DC298A78AD1148BA4B0EB99BEE1CD37E5555FE3930810790D5708F9739B0E3F79772012C154CA33C2280BDD5B72473C17A607"
}
},
{
"BatchSigner": {
"Account": "r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq",
"SigningPubKey": "ED82F98DA6A3FC3E88D2EE3A5469D92C7070513BEF4DEE75CAB0BDAA81E8AE378D",
"TxnSignature": "A482C8747F79857530474F1677599766C0BE283CB7E2A05AACF76E61BECCA16DCE3802D2D8244FBF4546A1C0E5EB70691255E3EFD2F8AC80B55357BDAB9ACD05"
}
}
],
"Fee": "6",
"Flags": 65536,
"LastLedgerSequence": 1257864,
"RawTransactions": [
{
"RawTransaction": {
"Account": "rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA",
"Amount": "50000000",
"Destination": "rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG",
"Fee": "0",
"Flags": 1073741824,
"Sequence": 1257842,
"SigningPubKey": "",
"TransactionType": "Payment"
}
},
{
"RawTransaction": {
"Account": "r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq",
"Amount": "50000000",
"Destination": "rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG",
"Fee": "0",
"Flags": 1073741824,
"Sequence": 1257841,
"SigningPubKey": "",
"TransactionType": "Payment"
}
}
],
"Sequence": 1257844,
"SigningPubKey": "ED22A32B61EDF083315515831723BC18F8311F03886BBA375DFF46335BB7A75F0B",
"TransactionType": "Batch",
"TxnSignature": "156791D2DBFAEFC9B0AC29F2D8D0CDB25E13F92E70E6D5414FE31BD8573CA23D3F62F8B34FC1F117BD556B25E4F748095A24C4342108AB32F1B2BAFBF1443501",
"ctid": "C013317600000002",
"date": 816696511,
"ledger_index": 1257846
},
"validated": true
}
Batch transaction URL:
https://devnet.xrpl.org/transactions/1299D20C6B489DA5C632AE4DBE49475DBF42D9444C7E9C109CC9B8DD0FD55FEC
=== Verifying inner transactions ===
Transaction 1 hash: 0F71979E3F641C980929F926640DCA886C30236ED0CD7C94B6CB36F0D42948AC
- Status: tesSUCCESS (Ledger 1257846)
- Transaction URL: https://devnet.xrpl.org/transactions/0F71979E3F641C980929F926640DCA886C30236ED0CD7C94B6CB36F0D42948AC
Transaction 2 hash: BC124CB29334AA1079139A9BE186B69A0AC467797F147754E2406714854D2A50
- Status: tesSUCCESS (Ledger 1257846)
- Transaction URL: https://devnet.xrpl.org/transactions/BC124CB29334AA1079139A9BE186B69A0AC467797F147754E2406714854D2A50
=== Final balances ===
Alice: rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG, Balance: 200 XRP
Bob: r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq, Balance: 50 XRP
Charlie: rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA, Balance: 50 XRP
Third-party wallet: rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA, Balance: 99.999994 XRP
```

View File

@@ -0,0 +1,143 @@
/**
* XRP Ledger Batch Transactions Tutorial
*
* This tutorial demonstrates how to use the Batch transaction feature (XLS-56)
* to perform a multi-account batch transaction.
* Concept doc: https://xrpl.org/docs/concepts/transactions/batch-transactions
* Reference doc: https://xrpl.org/docs/references/protocol/transactions/types/batch
*/
import xrpl from "xrpl"
const client = new xrpl.Client("wss://s.devnet.rippletest.net:51233/")
await client.connect()
// Create and fund wallets
console.log("=== Funding new wallets from faucet... ===");
const [
{ wallet: alice },
{ wallet: bob },
{ wallet: charlie },
{ wallet: thirdPartyWallet },
] = await Promise.all([
client.fundWallet(),
client.fundWallet(),
client.fundWallet(),
client.fundWallet(),
]);
console.log(`Alice: ${alice.address}, Balance: ${await client.getXrpBalance(alice.address)} XRP`)
console.log(`Bob: ${bob.address}, Balance: ${await client.getXrpBalance(bob.address)} XRP`)
console.log(`Charlie: ${charlie.address}, Balance: ${await client.getXrpBalance(charlie.address)} XRP`)
console.log(`Third-party wallet: ${thirdPartyWallet.address}, Balance: ${await client.getXrpBalance(thirdPartyWallet.address)} XRP`)
// Create inner transactions --------------------------------------------
// REQUIRED: Inner transactions MUST have the tfInnerBatchTxn flag (0x40000000).
// This marks them as part of a batch (requires Fee: 0 and empty SigningPubKey).
// Transaction 1: Charlie pays Alice
const charliePayment = {
TransactionType: "Payment",
Account: charlie.address,
Destination: alice.address,
Amount: xrpl.xrpToDrops(50),
Flags: xrpl.GlobalFlags.tfInnerBatchTxn // THIS IS REQUIRED
}
// Transaction 2: Bob pays Alice
const bobPayment = {
TransactionType: "Payment",
Account: bob.address,
Destination: alice.address,
Amount: xrpl.xrpToDrops(50),
Flags: xrpl.GlobalFlags.tfInnerBatchTxn // THIS IS REQUIRED
}
// Send Batch transaction --------------------------------------------
console.log("\n=== Creating Batch transaction... ===")
const batchTx = {
TransactionType: "Batch",
Account: thirdPartyWallet.address,
Flags: xrpl.BatchFlags.tfAllOrNothing, // tfAllOrNothing: All inner transactions must succeed
// Must include a minimum of 2 transactions and a maximum of 8 transactions.
RawTransactions: [
{ RawTransaction: charliePayment },
{ RawTransaction: bobPayment },
]
}
console.log(JSON.stringify(batchTx, null, 2))
// Validate the transaction structure
xrpl.validate(batchTx)
// Set the expected number of signers, which is 2 (Bob and Charlie) in this case, for this transaction.
// "autofill" will automatically add Fee: "0" and SigningPubKey: "" to inner transactions.
const autofilledBatchTx = await client.autofill(batchTx, 2)
// Gather batch signatures --------------------------------
// Each signer needs their own tx copy because signMultiBatch modifies the object.
// Charlie signs the Batch transaction
const charlieBatch = { ...autofilledBatchTx }
xrpl.signMultiBatch(charlie, charlieBatch)
// Bob signs the Batch transaction
const bobBatch = { ...autofilledBatchTx }
xrpl.signMultiBatch(bob, bobBatch)
// Combine inner transaction signatures.
// This returns a signed transaction blob (hex string) ready for submission.
const combinedSignedTx = xrpl.combineBatchSigners([charlieBatch, bobBatch])
// Submit the signed blob with the third-party's wallet
console.log("\n=== Submitting Batch transaction... ===")
const submitResponse = await client.submitAndWait(combinedSignedTx,
{ wallet: thirdPartyWallet }
)
// Check Batch transaction result --------------------------------
if (submitResponse.result.meta.TransactionResult !== "tesSUCCESS") {
const resultCode = submitResponse.result.meta.TransactionResult
console.warn(`\nTransaction failed with result code ${resultCode}`)
await client.disconnect()
process.exit(1)
}
console.log("\nBatch transaction submitted successfully!")
console.log("Result:\n", JSON.stringify(submitResponse.result, null, 2))
// View the transaction on the XRPL Explorer
console.log(`\nBatch transaction URL:\nhttps://devnet.xrpl.org/transactions/${submitResponse.result.hash}`)
// Calculate and verify inner transaction hashes --------------------------------------------
console.log("\n=== Verifying inner transactions ===")
const rawTransactions = submitResponse.result.tx_json.RawTransactions
let hasFailure = false
for (let i = 0; i < rawTransactions.length; i++) {
const innerTx = rawTransactions[i].RawTransaction
const hash = xrpl.hashes.hashSignedTx(innerTx)
console.log(`\nTransaction ${i + 1} hash: ${hash}`)
try {
const tx = await client.request({ command: 'tx', transaction: hash })
const status = tx.result.meta?.TransactionResult
console.log(` - Status: ${status} (Ledger ${tx.result.ledger_index})`)
console.log(` - Transaction URL: https://devnet.xrpl.org/transactions/${hash}`)
} catch (error) {
hasFailure = true
console.log(` - Transaction not found: ${error}`)
}
}
if (hasFailure) {
console.error("\n--- Error: One or more inner transactions failed. ---")
await client.disconnect()
process.exit(1)
}
// Verify balances after transaction
console.log("\n=== Final balances ===")
console.log(`Alice: ${alice.address}, Balance: ${await client.getXrpBalance(alice.address)} XRP`)
console.log(`Bob: ${bob.address}, Balance: ${await client.getXrpBalance(bob.address)} XRP`)
console.log(`Charlie: ${charlie.address}, Balance: ${await client.getXrpBalance(charlie.address)} XRP`)
console.log(`Third-party wallet: ${thirdPartyWallet.address}, Balance: ${await client.getXrpBalance(thirdPartyWallet.address)} XRP`)
await client.disconnect()

View File

@@ -0,0 +1,6 @@
{
"dependencies": {
"xrpl": "^4.4.3"
},
"type": "module"
}

View File

@@ -0,0 +1,120 @@
/**
* Single Account Batch Transaction Example
*
* This example demonstrates how to use the Batch transactions feature (XLS-56)
* to create a single-account batch transaction that sends payments
* to multiple destinations in one atomic operation.
* Concept doc: https://xrpl.org/docs/concepts/transactions/batch-transactions
* Reference doc: https://xrpl.org/docs/references/protocol/transactions/types/batch
*/
import xrpl from "xrpl"
const client = new xrpl.Client("wss://s.devnet.rippletest.net:51233/")
await client.connect()
// Create and fund wallets
console.log("=== Funding new wallets from faucet... ===");
const [{ wallet: sender }, { wallet: wallet1 }, { wallet: wallet2 }] =
await Promise.all([
client.fundWallet(),
client.fundWallet(),
client.fundWallet(),
]);
console.log(`Sender: ${sender.address}, Balance: ${await client.getXrpBalance(sender.address)} XRP`)
console.log(`Wallet1: ${wallet1.address}, Balance: ${await client.getXrpBalance(wallet1.address)} XRP`)
console.log(`Wallet2: ${wallet2.address}, Balance: ${await client.getXrpBalance(wallet2.address)} XRP`)
// Create inner transactions --------------------------------------------
// REQUIRED: Inner transactions MUST have the tfInnerBatchTxn flag (0x40000000).
// This marks them as part of a batch (requires Fee: 0 and empty SigningPubKey).
// Transaction 1
const payment1 = {
TransactionType: "Payment",
Account: sender.address,
Destination: wallet1.address,
Amount: xrpl.xrpToDrops(2),
Flags: xrpl.GlobalFlags.tfInnerBatchTxn // THIS IS REQUIRED
}
// Transaction 2
const payment2 = {
TransactionType: "Payment",
Account: sender.address,
Destination: wallet2.address,
Amount: xrpl.xrpToDrops(5),
Flags: xrpl.GlobalFlags.tfInnerBatchTxn // THIS IS REQUIRED
}
// Send Batch transaction --------------------------------------------
console.log("\n=== Creating Batch transaction... ===")
const batchTx = {
TransactionType: "Batch",
Account: sender.address,
Flags: xrpl.BatchFlags.tfAllOrNothing, // tfAllOrNothing: All inner transactions must succeed
// Must include a minimum of 2 transactions and a maximum of 8 transactions.
RawTransactions: [
{ RawTransaction: payment1 },
{ RawTransaction: payment2 }
]
}
console.log(JSON.stringify(batchTx, null, 2))
// Validate the transaction structure before submitting
xrpl.validate(batchTx)
// Submit and wait for validation
console.log("\n=== Submitting Batch transaction... ===")
const submitResponse = await client.submitAndWait(batchTx, {
wallet: sender,
// "autofill" will automatically add Fee: "0" and SigningPubKey: "" to inner transactions.
autofill: true
})
// Check Batch transaction result --------------------------------
if (submitResponse.result.meta.TransactionResult !== "tesSUCCESS") {
const resultCode = submitResponse.result.meta.TransactionResult
console.warn(`\nTransaction failed with result code ${resultCode}`)
await client.disconnect()
process.exit(1)
}
console.log("\nBatch transaction submitted successfully!")
console.log("Result:\n", JSON.stringify(submitResponse.result, null, 2))
// View the batch transaction on the XRPL Explorer
console.log(`\nBatch transaction URL:\nhttps://devnet.xrpl.org/transactions/${submitResponse.result.hash}`)
// Calculate and verify inner transaction hashes --------------------------------------------
console.log("\n=== Verifying inner transactions... ===")
const rawTransactions = submitResponse.result.tx_json.RawTransactions
let hasFailure = false
for (let i = 0; i < rawTransactions.length; i++) {
const innerTx = rawTransactions[i].RawTransaction
const hash = xrpl.hashes.hashSignedTx(innerTx)
console.log(`\nTransaction ${i + 1} hash: ${hash}`)
try {
const tx = await client.request({ command: 'tx', transaction: hash })
const status = tx.result.meta?.TransactionResult
console.log(` - Status: ${status} (Ledger ${tx.result.ledger_index})`)
console.log(` - Transaction URL: https://devnet.xrpl.org/transactions/${hash}`)
} catch (error) {
hasFailure = true
console.log(` - Transaction not found: ${error}`)
}
}
if (hasFailure) {
console.error("\n--- Error: One or more inner transactions failed. ---")
await client.disconnect()
process.exit(1)
}
// Verify balances after transaction
console.log("\n=== Final balances ===")
console.log(`Sender: ${sender.address}, Balance: ${await client.getXrpBalance(sender.address)} XRP`)
console.log(`Wallet1: ${wallet1.address}, Balance: ${await client.getXrpBalance(wallet1.address)} XRP`)
console.log(`Wallet2: ${wallet2.address}, Balance: ${await client.getXrpBalance(wallet2.address)} XRP`)
await client.disconnect()

View File

@@ -1,8 +1,6 @@
module github.com/XRPLF
go 1.23.0
toolchain go1.23.10
go 1.24.0
require github.com/Peersyst/xrpl-go v0.1.11
@@ -20,5 +18,5 @@ require (
github.com/tyler-smith/go-bip32 v1.0.0 // indirect
github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
golang.org/x/crypto v0.35.0 // indirect
golang.org/x/crypto v0.45.0 // indirect
)

View File

@@ -46,8 +46,8 @@ github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZ
golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

View File

@@ -0,0 +1,62 @@
# Get Started Using Python Library
Connects to the XRP Ledger and gets account information using Python.
To download the source code, see [Get Started Using Python Library](http://xrpl.org/docs/tutorials/python/build-apps/get-started).
## Run the Code
Quick setup and usage:
```sh
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python ./get-acct-info.py
```
You should see output similar to the following:
```sh
Creating a new wallet and funding it with Testnet XRP...
Attempting to fund address ravbHNootpSNQkxyEFCWevSkHsFGDHfyop
Faucet fund successful.
Wallet: ravbHNootpSNQkxyEFCWevSkHsFGDHfyop
Account Testnet Explorer URL:
https://testnet.xrpl.org/accounts/ravbHNootpSNQkxyEFCWevSkHsFGDHfyop
Getting account info...
Response Status: ResponseStatus.SUCCESS
{
"account_data": {
"Account": "ravbHNootpSNQkxyEFCWevSkHsFGDHfyop",
"Balance": "100000000",
"Flags": 0,
"LedgerEntryType": "AccountRoot",
"OwnerCount": 0,
"PreviousTxnID": "3DACF2438AD39F294C4EFF6132D5D88BCB65D2F2261C7650F40AC1F6A54C83EA",
"PreviousTxnLgrSeq": 12039759,
"Sequence": 12039759,
"index": "148E6F4B8E4C14018D679A2526200C292BDBC5AB77611BC3AE0CB97CD2FB84E5"
},
"account_flags": {
"allowTrustLineClawback": false,
"defaultRipple": false,
"depositAuth": false,
"disableMasterKey": false,
"disallowIncomingCheck": false,
"disallowIncomingNFTokenOffer": false,
"disallowIncomingPayChan": false,
"disallowIncomingTrustline": false,
"disallowIncomingXRP": false,
"globalFreeze": false,
"noFreeze": false,
"passwordSpent": false,
"requireAuthorization": false,
"requireDestinationTag": false
},
"ledger_hash": "CA624D717C4FCDD03BAD8C193F374A77A14F7D2566354A4E9617A8DAD896DE71",
"ledger_index": 12039759,
"validated": true
}
```

View File

@@ -1,34 +1,39 @@
# @chunk {"steps": ["connect-tag"]}
# Define the network client
from xrpl.clients import JsonRpcClient
from xrpl.wallet import generate_faucet_wallet
from xrpl.core import addresscodec
from xrpl.models.requests.account_info import AccountInfo
import json
JSON_RPC_URL = "https://s.altnet.rippletest.net:51234/"
client = JsonRpcClient(JSON_RPC_URL)
# @chunk-end
# Create a wallet using the testnet faucet:
# @chunk {"steps": ["get-account-create-wallet-tag"]}
# Create a wallet using the Testnet faucet:
# https://xrpl.org/xrp-testnet-faucet.html
from xrpl.wallet import generate_faucet_wallet
print("\nCreating a new wallet and funding it with Testnet XRP...")
test_wallet = generate_faucet_wallet(client, debug=True)
# Create an account str from the wallet
test_account = test_wallet.address
# Derive an x-address from the classic address:
# https://xrpaddress.info/
from xrpl.core import addresscodec
test_xaddress = addresscodec.classic_address_to_xaddress(test_account, tag=12345, is_test_network=True)
print("\nClassic address:\n\n", test_account)
print("X-address:\n\n", test_xaddress)
test_account = test_wallet.classic_address
print(f"Wallet: {test_account}")
print(f"Account Testnet Explorer URL: ")
print(f" https://testnet.xrpl.org/accounts/{test_account}")
# @chunk-end
# @chunk {"steps": ["query-xrpl-tag"]}
# Look up info about your account
from xrpl.models.requests.account_info import AccountInfo
print("\nGetting account info...")
acct_info = AccountInfo(
account=test_account,
ledger_index="validated",
strict=True,
)
response = client.request(acct_info)
result = response.result
print("response.status: ", response.status)
import json
print("Response Status: ", response.status)
print(json.dumps(response.result, indent=4, sort_keys=True))
# @chunk-end

View File

@@ -0,0 +1 @@
xrpl-py==4.3.0

View File

@@ -10,26 +10,26 @@ const { wallet } = await client.fundWallet()
// Define metadata as JSON
const mpt_metadata = {
ticker: 'TBILL',
name: 'T-Bill Yield Token',
desc: 'A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.',
icon: 'https://example.org/tbill-icon.png',
asset_class: 'rwa',
asset_subclass: 'treasury',
issuer_name: 'Example Yield Co.',
urls: [
t: 'TBILL',
n: 'T-Bill Yield Token',
d: 'A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.',
i: 'https://example.org/tbill-icon.png',
ac: 'rwa',
as: 'treasury',
in: 'Example Yield Co.',
us: [
{
url: 'https://exampleyield.co/tbill',
type: 'website',
title: 'Product Page'
u: 'https://exampleyield.co/tbill',
c: 'website',
t: 'Product Page'
},
{
url: 'https://exampleyield.co/docs',
type: 'docs',
title: 'Yield Token Docs'
u: 'https://exampleyield.co/docs',
c: 'docs',
t: 'Yield Token Docs'
}
],
additional_info: {
ai: {
interest_rate: '5.00%',
interest_type: 'variable',
yield_source: 'U.S. Treasury Bills',

View File

@@ -12,26 +12,26 @@ wallet = generate_faucet_wallet(client, debug=True)
# Define metadata as JSON
mpt_metadata = {
"ticker": "TBILL",
"name": "T-Bill Yield Token",
"desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.",
"icon": "https://example.org/tbill-icon.png",
"asset_class": "rwa",
"asset_subclass": "treasury",
"issuer_name": "Example Yield Co.",
"urls": [
"t": "TBILL",
"n": "T-Bill Yield Token",
"d": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.",
"i": "example.org/tbill-icon.png",
"ac": "rwa",
"as": "treasury",
"in": "Example Yield Co.",
"us": [
{
"url": "https://exampleyield.co/tbill",
"type": "website",
"title": "Product Page"
"u": "exampleyield.co/tbill",
"c": "website",
"t": "Product Page"
},
{
"url": "https://exampleyield.co/docs",
"type": "docs",
"title": "Yield Token Docs"
"u": "exampleyield.co/docs",
"c": "docs",
"t": "Yield Token Docs"
}
],
"additional_info": {
"ai": {
"interest_rate": "5.00%",
"interest_type": "variable",
"yield_source": "U.S. Treasury Bills",

View File

@@ -1,8 +1,6 @@
module github.com/XRPLF
go 1.23.0
toolchain go1.23.10
go 1.24.0
require github.com/Peersyst/xrpl-go v0.1.11
@@ -20,5 +18,5 @@ require (
github.com/tyler-smith/go-bip32 v1.0.0 // indirect
github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
golang.org/x/crypto v0.35.0 // indirect
golang.org/x/crypto v0.45.0 // indirect
)

View File

@@ -46,8 +46,8 @@ github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZ
golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

View File

@@ -1,8 +1,6 @@
module github.com/XRPLF
go 1.23.0
toolchain go1.23.10
go 1.24.0
require github.com/Peersyst/xrpl-go v0.1.11
@@ -20,5 +18,5 @@ require (
github.com/tyler-smith/go-bip32 v1.0.0 // indirect
github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
golang.org/x/crypto v0.35.0 // indirect
golang.org/x/crypto v0.45.0 // indirect
)

View File

@@ -46,8 +46,8 @@ github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZ
golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

View File

@@ -0,0 +1,70 @@
---
category: 2025
date: "2025-11-19"
template: '../../@theme/templates/blogpost'
seo:
title: Introducing XRP Ledger version 2.6.2
description: rippled version 2.6.2 is now available. This version contains a new amendment and a critical bug fix.
labels:
- rippled Release Notes
markdown:
editPage:
hide: true
---
# Introducing XRP Ledger version 2.6.2
Version 2.6.2 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release adds a new `fixDirectoryLimit` amendment and a critical bug fix.
## Action Required
If you run an XRP Ledger server, upgrade to version 2.6.2 as soon as possible to ensure service continuity.
## Install / Upgrade
On supported platforms, see the [instructions on installing or updating `rippled`](../../docs/infrastructure/installation/index.md).
| Package | SHA-256 |
|:--------|:--------|
| [RPM for Red Hat / CentOS (x86-64)](https://repos.ripple.com/repos/rippled-rpm/stable/rippled-2.6.2-1.el9.x86_64.rpm) | `e3b041906a75c3c52cc6423219d7ba9c199a5d736d2e3978a5ce0ac5ef693fdf` |
| [DEB for Ubuntu / Debian (x86-64)](https://repos.ripple.com/repos/rippled-deb/pool/stable/rippled_2.6.2-1_amd64.deb) | `0887b5a77c43c362ea7680b83df40b955a5748b712924acf2212b2de29e3373b` |
For other platforms, please [build from source](https://github.com/XRPLF/rippled/blob/master/BUILD.md). The most recent commit in the git log should be the change setting the version:
```text
commit df24ee077438e03673a9c6661c41e8f070b90cd9
Author: Vladislav Vysokikh <vvysokikh@gmail.com>
Date: Tue Nov 18 09:28:59 2025 +0000
Version 2.6.2
```
## Full Changelog
### Amendments
The following amendment is open for voting with this release:
- **fixDirectoryLimit** - Removes directory page limits. Object reserve requirements provide enough incentive to avoid creating unnecessary objects on the XRP Ledger. ([#5935](https://github.com/XRPLF/rippled/pull/5935))
### Bug Fixes
- Fixed an assertion failure when all the inner transactions of a `Batch` transaction were invalid. ([#5670](https://github.com/XRPLF/rippled/pull/5670))
## Credits
The following GitHub users contributed to this release:
- RippleX Engineering
- RippleX Docs
- RippleX Product
## Bug Bounties and Responsible Disclosures
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
To report a bug, please send a detailed report to: <bugs@xrpl.org>

223
blog/2025/rippled-3.0.0.md Normal file
View File

@@ -0,0 +1,223 @@
---
category: 2025
date: "2025-12-08"
template: '../../@theme/templates/blogpost'
seo:
title: Introducing XRP Ledger version 3.0.0
description: rippled version 3.0.0 is now available. This version introduces new amendments and bug fixes.
labels:
- rippled Release Notes
markdown:
editPage:
hide: true
---
# Introducing XRP Ledger version 3.0.0
Version 3.0.0 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release introduces new amendments and bug fixes.
## Action Required
If you run an XRP Ledger server, upgrade to version 3.0.0 as soon as possible to ensure service continuity.
## Install / Upgrade
On supported platforms, see the [instructions on installing or updating `rippled`](../../docs/infrastructure/installation/index.md).
| Package | SHA-256 |
|:--------|:--------|
| [RPM for Red Hat / CentOS (x86-64)](https://repos.ripple.com/repos/rippled-rpm/stable/rippled-2.6.1-1.el9.x86_64.rpm) | `0fbbff570e962fea4df4d604cb848976fc9af9ebc34512a1002eb4866549850d` |
| [DEB for Ubuntu / Debian (x86-64)](https://repos.ripple.com/repos/rippled-deb/pool/stable/rippled_2.6.1-1_amd64.deb) | `de3bfdae5fb95d922a4b5bffa5bc9441f1bc4bac15bd7b83f77f14166c65bb7e` |
For other platforms, please [build from source](https://github.com/XRPLF/rippled/blob/master/BUILD.md). The most recent commit in the git log should be the change setting the version:
```text
commit 70d5c624e8cf732a362335642b2f5125ce4b43c1
Author: Ed Hennis <ed@ripple.com>
Date: Tue Sep 30 16:09:11 2025 -0400
Set version to 2.6.1
```
## Full Changelog
### Amendments
- **fixTokenEscrowV1**: Fixes an accounting error in MPT escrows. Specifically, when an escrow unlocks MPTs that have a transfer fee, the system incorrectly reduces the MPT issuer's locked token balance by the gross amount (without fees) rather than the net amount (with fees). This leads to discrepancies in the token's total supply accounting. ([#5571](https://github.com/XRPLF/rippled/pull/5571))
- **fixIncludeKeyletFields**: Adds missing keylet fields to these ledger entries:
- `Sequence` to `Escrow` and `PayChannel`.
- `Owner` to `SignerList`.
- `OracleDocumentID` to `Oracle`. ([#5646](https://github.com/XRPLF/rippled/pull/5646))
- **fixPriceOracleOrder**: Fixes an issue where the order of asset pair data is different from when a price oracle is created versus when it is updated. ([#5485](https://github.com/XRPLF/rippled/pull/5485))
- **fixAMMClawbackRounding**: Fixes a rounding error that can occur in the `LPTokenBalance` of an AMM when performing an `AMMClawback` transaction. ([#5750](https://github.com/XRPLF/rippled/pull/5750))
- **fixMPTDeliveredAmount**: This amendment adds missing `DeliveredAmount` and `delivered_amount` metadata fields from direct MPT `Payment` transactions. ([#5569](https://github.com/XRPLF/rippled/pull/5569))
### Features
- Added `delivered_amount`, `nftoken_id`, `nftoken_ids`, `offer_id`, and `mpt_issuance_id` metadata fields to the `simulate` API method. ([#5754](https://github.com/XRPLF/rippled/pull/5754))
- Added `STInt32` as a new `SType` to support negative 32-bit integer fields. ([#5788](https://github.com/XRPLF/rippled/pull/5788))
### Bug Fixes
- Fixed consensus stall detection to not flag prematurely. ([#5658](https://github.com/XRPLF/rippled/pull/5658))
- Added additional logging to differentiate why peer connections were refused. ([#5690](https://github.com/XRPLF/rippled/pull/5690))
- Fixed a code coverage error. ([#5765](https://github.com/XRPLF/rippled/pull/5765))
- Raised severity of unexpected/invalid keys when handling UNL manifest from `INFO` to `WARN`. Also changed internal error code for invalid UNL manifest formats from `untrusted` to `invalid`. ([#5804](https://github.com/XRPLF/rippled/pull/5804))
- Fixed release build errors with GCC 15.2. ([#5864](https://github.com/XRPLF/rippled/pull/5864))
- Fixed JSON parsing of negative integers in `STNumber` and `STAmount`. ([#5990](https://github.com/XRPLF/rippled/pull/5990))
- Fixed HTTP header case sensitivity issue in `HttpClient.cpp`. ([#5767](https://github.com/XRPLF/rippled/pull/5767))
- Fixed transaction signature checking functions to accept only required parameters instead of full `PreclaimContext`. ([#5829](https://github.com/XRPLF/rippled/pull/5829))
- Fixed an issue where the `sfSubjectNode` wasn't populated by the `CredentialCreate` transaction for self-issued credentials. ([#5936](https://github.com/XRPLF/rippled/pull/5936))
- Fixed domain order books not populating during node startup. ([#5998](https://github.com/XRPLF/rippled/pull/5998))
### Refactors
- Refactor `ledger_entry` RPC source code and tests, improving readability and maintainability. ([#5237](https://github.com/XRPLF/rippled/pull/5237))
- Decoupled net module from xrpld and moved RPC related classes to the rpc folder. ([#5477](https://github.com/XRPLF/rippled/pull/5477))
- Moved ledger component to `libxrpl` as part of modularization effort. ([#5493](https://github.com/XRPLF/rippled/pull/5493))
- Refactored code in preparation for `LendingProtocol`. ([#5590](https://github.com/XRPLF/rippled/pull/5590))
- Refactored `parseLeaf` to separate the handlers for `STI_UINT16` and `STI_UINT32` into separate helper functions. ([#5591](https://github.com/XRPLF/rippled/pull/5591))
- Restructured `Transactor::preflight` to remove boilerplate code in derived classes' implementations of `preflight`. ([#5592](https://github.com/XRPLF/rippled/pull/5592))
- Restructured `Transactor` signature checking code to be able to handle a `sigObject`, which may be the full transaction or a field containing a separate transaction. ([#5594](https://github.com/XRPLF/rippled/pull/5594))
- Revamped CI workflows to leverage new Docker images and improve testing automation. ([#5661](https://github.com/XRPLF/rippled/pull/5661))
- Cleaned up `CTID.h` code for improved readability and maintainability. ([#5681](https://github.com/XRPLF/rippled/pull/5681))
- Added support for extra transaction signature validation. ([#5851](https://github.com/XRPLF/rippled/pull/5851))
- Replaced JSON `LastLedgerSequence` with `last_ledger_seq` to make tests simpler and easier to read. ([#5884](https://github.com/XRPLF/rippled/pull/5884))
- Replaced `boost::lexical_cast<std::string>` with `to_string` in tests. ([#5883](https://github.com/XRPLF/rippled/pull/5883))
- Replaced tests that write out JSONs as strings instead of using the `Json::Value` library. ([#5886](https://github.com/XRPLF/rippled/pull/5886))
- Added a `paychan` namespace to the TestHelpers and implementation files, improving organization and clarity. ([#5840](https://github.com/XRPLF/rippled/pull/5840))
- Improved and refactored txset handling. ([#5951](https://github.com/XRPLF/rippled/pull/5951))
### Documentation
- Updated old links and descriptions in `README.md`. ([#4701](https://github.com/XRPLF/rippled/pull/4701))
- Added compiler warning for `std::counting_semaphore` usage. ([#5595](https://github.com/XRPLF/rippled/pull/5595))
- Removed redundant word in code comment. ([#5752](https://github.com/XRPLF/rippled/pull/5752))
- Added remote to `conan lock create` command. ([#5770](https://github.com/XRPLF/rippled/pull/5770))
- Fixed typo in JSON writer documentation. ([#5881](https://github.com/XRPLF/rippled/pull/5881))
- Fixed spelling issues across the codebase. ([#6002](https://github.com/XRPLF/rippled/pull/6002))
- Fixed typos in code comments. ([#6040](https://github.com/XRPLF/rippled/pull/6040))
- Removed accidental copyright notice from `NetworkOps_test.cpp`. ([#6066](https://github.com/XRPLF/rippled/pull/6066))
### Testing
- Migrated json unit tests to use doctest framework. ([#5533](https://github.com/XRPLF/rippled/pull/5533))
- Added basic tests for `STInteger` and `STParsedJSON`. ([#5726](https://github.com/XRPLF/rippled/pull/5726))
- Fixed test framework to handle null metadata for unvalidated transactions in `env.meta`. ([#5715](https://github.com/XRPLF/rippled/pull/5715))
- Added more comprehensive tests for the `FeeVote` module. ([#5746](https://github.com/XRPLF/rippled/pull/5746))
- Added additional tests for `simulate` RPC metadata. ([#5827](https://github.com/XRPLF/rippled/pull/5827))
- Updated unit test summary to count crashed tests as failures. ([#5924](https://github.com/XRPLF/rippled/pull/5924))
- Fixed CI to upload all test binaries. ([#5932](https://github.com/XRPLF/rippled/pull/5932))
### CI/Build
- Modified GitHub Actions jobs to use `>>` instead of `tee` for `${GITHUB_OUTPUT}` to prevent output overwriting. ([#5699](https://github.com/XRPLF/rippled/pull/5699))
- Fixed CI workflow issues and reduced separate OS jobs into one by using a strategy matrix. ([#5700](https://github.com/XRPLF/rippled/pull/5700))
- Fixed `build_only` conditional check to correctly determine whether to run tests. ([#5708](https://github.com/XRPLF/rippled/pull/5708))
- Updated `clang-format` and added `prettier` to the `pre-commit`. Also added proto file formatting. ([#5709](https://github.com/XRPLF/rippled/pull/5709))
- Reverted formatting changes to external files and added formatting for proto files. ([#5711](https://github.com/XRPLF/rippled/pull/5711))
- Fixed `notify-clio` job to skip when running in forks, and reordered config fields for better job name visibility. ([#5712](https://github.com/XRPLF/rippled/pull/5712))
- Added workaround for CI build errors on arm64 with Clang 20. ([#5717](https://github.com/XRPLF/rippled/pull/5717))
- Fixed file formatting in anticipation of enabling additional `clang-format-hooks`. ([#5718](https://github.com/XRPLF/rippled/pull/5718))
- Removed codecov token check to support tokenless uploads from forks. ([#5722](https://github.com/XRPLF/rippled/pull/5722))
- Reverted PR pipeline trigger rules to fix unintended job skipping behavior. ([#5727](https://github.com/XRPLF/rippled/pull/5727))
- Replaced `on: pull_request: paths` with `changed-files` action for better CI control. ([#5728](https://github.com/XRPLF/rippled/pull/5728))
- Added support for `merge_group` event in GitHub CI to enable merge queues. ([#5734](https://github.com/XRPLF/rippled/pull/5734))
- Added codecov token to the `on-trigger` workflow to enable report uploading. ([#5736](https://github.com/XRPLF/rippled/pull/5736))
- Modified CI test jobs to run if files changed or PR has "Ready to merge" label. ([#5739](https://github.com/XRPLF/rippled/pull/5739))
- Used `XRPLF/prepare-runner` action to fix `CONAN_HOME` issues on macOS. Also removed old CMake code. ([#5740](https://github.com/XRPLF/rippled/pull/5740))
- Removed extraneous `LCOV_EXCL_START` marker from coverage reporting. ([#5744](https://github.com/XRPLF/rippled/pull/5744))
- Added conan lockfile for better dependency management and reproducible builds. ([#5751](https://github.com/XRPLF/rippled/pull/5751))
- Updated pre-commit to manage tools on its own. ([#5753](https://github.com/XRPLF/rippled/pull/5753))
- Added required `disable_ccache` option to workflow. ([#5756](https://github.com/XRPLF/rippled/pull/5756))
- Fixed coverage parameter in Cmake file. ([#5760](https://github.com/XRPLF/rippled/pull/5760))
- Added additional info to `notify-clio` workflow. ([#5761](https://github.com/XRPLF/rippled/pull/5761))
- Implemented separate upload workflow. ([#5762](https://github.com/XRPLF/rippled/pull/5762))
- Added `cleanup-workspace` action to clean workspace before builds. ([#5763](https://github.com/XRPLF/rippled/pull/5763))
- Added `conan.lock` to workflow file checks. ([#5769](https://github.com/XRPLF/rippled/pull/5769))
- Removed extra @ symbol in `notify-clio.yml`. ([#5771](https://github.com/XRPLF/rippled/pull/5771))
- Fixed `pre-commit` workflows. ([#5772](https://github.com/XRPLF/rippled/pull/5772))
- Switched `on-trigger` workflow to minimal build to reduce the number of builds. ([#5773](https://github.com/XRPLF/rippled/pull/5773))
- Fixed `passed` jobs to properly pass if all its dependencies passed or were skipped. ([#5776](https://github.com/XRPLF/rippled/pull/5776))
- Added `should-run` filtering back to `build-test` and `notify-clio` workflows. ([#5777](https://github.com/XRPLF/rippled/pull/5777))
- Switched CI pipeline `bookworm:gcc-13` from arm64 to amd64 architecture. ([#5779](https://github.com/XRPLF/rippled/pull/5779))
- Updated to self-hosted Windows runners to shorten build times. ([#5780](https://github.com/XRPLF/rippled/pull/5780))
- Limited `upload-conan-deps` to 10 parallel instances when using `max-parallel`. ([#5781](https://github.com/XRPLF/rippled/pull/5781))
- Changed when `upload-conan-deps` workflows run to avoid unnecessary execution on PRs. ([#5782](https://github.com/XRPLF/rippled/pull/5782))
- Added missing dependencies to workflows. ([#5783](https://github.com/XRPLF/rippled/pull/5783))
- Updated to use default conan install without `--format json`. ([#5784](https://github.com/XRPLF/rippled/pull/5784))
- Fixed secrets and variables in `upload-conan-deps` workflow. ([#5785](https://github.com/XRPLF/rippled/pull/5785))
- Modified Clio notifications to only happen when a PR targets the release or master branch. ([#5794](https://github.com/XRPLF/rippled/pull/5794))
- Wrapped all GitHub CI conditionals in curly braces for consistency. ([#5796](https://github.com/XRPLF/rippled/pull/5796))
- Limited CI build and test parallelism to 10 concurrent jobs. ([#5799](https://github.com/XRPLF/rippled/pull/5799))
- Enabled building and testing all configurations for daily scheduled runs. ([#5801](https://github.com/XRPLF/rippled/pull/5801))
- Excluded unit tests from code coverage reporting. ([#5803](https://github.com/XRPLF/rippled/pull/5803))
- Pinned all CI Docker image tags to latest versions in the XRPLF/CI repo. ([#5813](https://github.com/XRPLF/rippled/pull/5813))
- Implemented separate upload workflow for artifacts during build and test phases. ([#5817](https://github.com/XRPLF/rippled/pull/5817))
- Renamed all reusable workflows to include "reusable" in their names for clarity. ([#5818](https://github.com/XRPLF/rippled/pull/5818))
- Set free-form CI inputs as environment variables to prevent injection attacks. ([#5822](https://github.com/XRPLF/rippled/pull/5822))
- Removed extraneous coverage warnings. ([#5838](https://github.com/XRPLF/rippled/pull/5838))
- Excluded `UNREACHABLE` blocks from codecov to improve coverage accuracy. ([#5846](https://github.com/XRPLF/rippled/pull/5846))
- Excluded old, unreachable transaction code from codecov for better coverage reporting. ([#5847](https://github.com/XRPLF/rippled/pull/5847))
- Updated CI strategy matrix to use new RHEL 9 and RHEL 10 Docker images. ([#5856](https://github.com/XRPLF/rippled/pull/5856))
- Fixed Windows build log size issue by setting log verbosity to quiet. ([#5865](https://github.com/XRPLF/rippled/pull/5865))
- Added support for CMake 4 without workarounds. ([#5866](https://github.com/XRPLF/rippled/pull/5866))
- Added wildcard to support triggering for release pipelines. ([#5879](https://github.com/XRPLF/rippled/pull/5879))
- Added support for RHEL 8. ([#5880](https://github.com/XRPLF/rippled/pull/5880))
- Updated pre-commit workflow to latest version. ([#5902](https://github.com/XRPLF/rippled/pull/5902))
- Updated the Docker image hashes for `tools-rippled`. ([#5896](https://github.com/XRPLF/rippled/pull/5896))
- Set fail-fast to false unless it is run by a merge group. ([#5897](https://github.com/XRPLF/rippled/pull/5897))
- Cleaned up Conan variables in CI. ([#5903](https://github.com/XRPLF/rippled/pull/5903))
- Set explicit timeouts for build and test jobs. ([#5912](https://github.com/XRPLF/rippled/pull/5912))
- Removed unnecessary `LCOV_EXCL_LINE` marker in `Escrow.cpp`. ([#5913](https://github.com/XRPLF/rippled/pull/5913))
- Updated `${{ env.ENVVAR }}` syntax to `${ENVVAR}` in GitHub Actions. ([#5923](https://github.com/XRPLF/rippled/pull/5923))
- Cleaned up build profile options. ([#5934](https://github.com/XRPLF/rippled/pull/5934))
- Added network info output to CI test job to help diagnose port exhaustion issues. ([#5938](https://github.com/XRPLF/rippled/pull/5938))
- Reduced the number of cores used to build and test by two. ([#5939](https://github.com/XRPLF/rippled/pull/5939))
- Updated pre-commit failure message. ([#5940](https://github.com/XRPLF/rippled/pull/5940))
- Fixed CI to only run .exe files during test phase on Windows. ([#5947](https://github.com/XRPLF/rippled/pull/5947))
- Changed the CI concurrency group for pushes to the `develop` branch to use the commit hash instead of the target branch. ([#5950](https://github.com/XRPLF/rippled/pull/5950))
- Changed Conan remote login to only occur when uploading packages. ([#5952](https://github.com/XRPLF/rippled/pull/5952))
- Updated CI to only upload codecov reports in the original repo, not in forks. ([#5953](https://github.com/XRPLF/rippled/pull/5953))
- Updated CI to use new `prepare-runner` action. ([#5970](https://github.com/XRPLF/rippled/pull/5970))
- Updated CI image hashes to use netstat. ([#5987](https://github.com/XRPLF/rippled/pull/5987))
- Made CMake improvements, including removing unused definitions, moving variable definitions, and updating the minimum GCC and Clang versions required. ([#6010](https://github.com/XRPLF/rippled/pull/6010))
- Unified build and test jobs into a single job and added `ctest` to coverage reporting. ([#6013](https://github.com/XRPLF/rippled/pull/6013))
- Moved running of unit tests out of coverage target. ([#6018](https://github.com/XRPLF/rippled/pull/6018))
- Updated Conan to version 2.22.2. ([#6019](https://github.com/XRPLF/rippled/pull/6019))
- Specified bash as default shell in workflows. ([#6021](https://github.com/XRPLF/rippled/pull/6021))
- Updated the `cleanup-workspace` action to its latest version to add support for Windows. ([#6024](https://github.com/XRPLF/rippled/pull/6024))
- Added new Debian Trixie CI images to build and test with. ([#6034](https://github.com/XRPLF/rippled/pull/6034))
- Changed strategy matrix check to filter out Clang 20+ on ARM. ([#6046](https://github.com/XRPLF/rippled/pull/6046))
- Updated CI to only upload artifacts in XRPLF repo. ([#6060](https://github.com/XRPLF/rippled/pull/6060))
- Removed missing commits check. ([#6077](https://github.com/XRPLF/rippled/pull/6077))
- Updated CI to trigger Clio pipeline on PRs targeting any `release` branches. ([#6080](https://github.com/XRPLF/rippled/pull/6080))
## Credits
The following GitHub users contributed to this release:
- RippleX Engineering
- RippleX Docs
- RippleX Product
- @dangell7
- @tequdev
- @tzchenxixi
- @wojake
## Bug Bounties and Responsible Disclosures
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
To report a bug, please send a detailed report to: <bugs@xrpl.org>

View File

@@ -10,6 +10,8 @@
- group: '2025'
expanded: false
items:
- page: 2025/rippled-3.0.0.md
- page: 2025/rippled-2.6.2.md
- page: 2025/rippled-2.6.1.md
- page: 2025/vulnerabilitydisclosurereport-bug-sep2025.md
- page: 2025/devnet-reset-oct.md

View File

@@ -1270,7 +1270,7 @@ const events = [
link: "https://luma.com/llwjrmcx",
location: "Rome, Italy",
date: "November 07, 2025",
image: hackathon,
image: italyHackathon,
end_date: "November 08, 2025",
},
{
@@ -1306,6 +1306,17 @@ const events = [
date: "December 10, 2025",
end_date: "December 10, 2025",
},
{
name: "XRPL Hackathon @ Blockchain Kaigi 2025",
description:
"This is a 3-week online hackathon culminating in demos and an awards ceremony to be held in conjunction with Blockchain Kaigi 2025 in Mumbai, India.",
type: "hackathon",
link: "https://luma.com/ypj8ecj0",
location: "Online (with demos at IIT Bombay)",
date: "Nov 14 - Dec 06, 2025",
image: require("../static/img/events/hackathon-kaigi.png"),
end_date: "December 06, 2025",
},
];

View File

@@ -390,10 +390,22 @@ const events = [
link: "https://xrpl.vegahacks.xyz/",
location: "Virtual",
date: "October 01 - November 14, 2025",
image: hackathon,
image: italyHackathon,
end_date: "November 14, 2025",
start_date: "October 01, 2025",
},
{
name: "XRPL Hackathon @ Blockchain Kaigi 2025",
description:
"This is a 3-week online hackathon culminating in demos and an awards ceremony to be held in conjunction with Blockchain Kaigi 2025 in Mumbai, India.",
type: "hackathon",
link: "https://luma.com/ypj8ecj0",
location: "Online (with demos at IIT Bombay)",
date: "November 14 - December 06, 2025",
image: require("../static/img/events/hackathon-kaigi.png"),
start_date: "November 14, 2025",
end_date: "December 06, 2025",
},
];

View File

@@ -1,10 +1,8 @@
---
html: addresses.html
parent: accounts.html
seo:
description: Addresses uniquely identify XRP Ledger accounts, using base58 format.
labels:
- Accounts
- Accounts
---
# Addresses
@@ -24,16 +22,16 @@ Some addresses have special meaning, or historical uses, in the XRP Ledger. In m
|-------------------------------|------|---------|-------------|
| `rrrrrrrrrrrrrrrrrrrrrhoLvTp` | ACCOUNT\_ZERO | An address that is the XRP Ledger's [base58][] encoding of the value `0`. In peer-to-peer communications, `rippled` uses this address as the issuer for XRP. | Yes |
| `rrrrrrrrrrrrrrrrrrrrBZbvji` | ACCOUNT\_ONE | An address that is the XRP Ledger's [base58][] encoding of the value `1`. In the ledger, [RippleState entries](../../references/protocol/ledger-data/ledger-entry-types/ripplestate.md) use this address as a placeholder for the issuer of a trust line balance. | Yes |
| `rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh` | The genesis account | When `rippled` starts a new genesis ledger from scratch (for example, in stand-alone mode), this account holds all the XRP. This address is generated from the seed value `masterpassphrase` which is [hard-coded](https://github.com/XRPLF/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184). | No |
| `rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh` | The genesis account | When `rippled` starts a new genesis ledger from scratch (for example, in stand-alone mode), this account holds all the XRP. This address is generated from the seed value `masterpassphrase` which is [hard-coded](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/src/xrpld/app/ledger/Ledger.cpp#L184). | No |
| `rrrrrrrrrrrrrrrrrNAMEtxvNvQ` | Ripple Name reservation black-hole | In the past, Ripple asked users to send XRP to this account to reserve Ripple Names.| Yes |
| `rrrrrrrrrrrrrrrrrrrn5RM1rHd` | NaN Address | Previous versions of [ripple-lib](https://github.com/XRPLF/xrpl.js) generated this address when encoding the value [NaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN) using the XRP Ledger's [base58][] string encoding format. | Yes |
| `rrrrrrrrrrrrrrrrrrrn5RM1rHd` | NaN Address | Old JavaScript client libraries generated this address when encoding the value [NaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN) using the XRP Ledger's [base58][] string encoding format. | Yes |
## Address Encoding
{% admonition type="success" name="Tip" %}These technical details are only relevant for people building low-level library software for XRP Ledger compatibility!{% /admonition %}
[[Source]](https://github.com/XRPLF/rippled/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/AccountID.cpp#L109-L140 "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/src/libxrpl/protocol/AccountID.cpp#L133-L175 "Source")
XRP Ledger addresses are encoded using [base58][] with the _dictionary_ `rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz`. Since the XRP Ledger encodes several types of keys with base58, it prefixes the encoded data with a one-byte "type prefix" (also called a "version prefix") to distinguish them. The type prefix causes addresses to usually start with different letters in base58 format.

View File

@@ -154,14 +154,14 @@ The process of deriving a key pair depends on the signing algorithm. In all case
The key derivation processes described here are implemented in multiple places and programming languages:
- In C++ in the `rippled` code base:
- [Seed definition](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/Seed.h)
- [General & Ed25519 key derivation](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp)
- [secp256k1 key derivation](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp)
- [Seed definition](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/Seed.cpp)
- [General & Ed25519 key derivation](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/SecretKey.cpp)
- [secp256k1 key derivation](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/SecretKey.cpp)
- In Python 3 in {% repo-link path="_code-samples/key-derivation/py/key_derivation.py" %}this repository's code samples section{% /repo-link %}.
- In JavaScript in the [`ripple-keypairs`](https://github.com/XRPLF/xrpl.js/tree/main/packages/ripple-keypairs) package.
### Ed25519 Key Derivation
[[Source]](https://github.com/XRPLF/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/protocol/impl/SecretKey.cpp#L203 "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/src/libxrpl/protocol/SecretKey.cpp#L311-L317 "Source")
[{% inline-svg file="/docs/img/key-derivation-ed25519.svg" /%}](/docs/img/key-derivation-ed25519.svg "Passphrase → Seed → Secret Key → Prefix + Public Key")
@@ -182,7 +182,7 @@ The key derivation processes described here are implemented in multiple places a
Validator ephemeral keys cannot be Ed25519.
### secp256k1 Key Derivation
[[Source]](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/SecretKey.cpp "Source")
[{% inline-svg file="/docs/img/key-derivation-secp256k1.svg" /%}](/docs/img/key-derivation-secp256k1.svg "Passphrase → Seed → Root Key Pair → Intermediate Key Pair → Master Key Pair")
@@ -201,7 +201,7 @@ The steps to derive the XRP Ledger's secp256k1 account key pair from a seed valu
2. Calculate the [SHA-512Half][] of the concatenated (seed+root sequence) value.
3. If the result is not a valid secp256k1 secret key, increment the root sequence by 1 and start over. [[Source]](https://github.com/XRPLF/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/crypto/impl/GenerateDeterministicKey.cpp#L103 "Source")
3. If the result is not a valid secp256k1 secret key, increment the root sequence by 1 and start over. [[Source]](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/src/libxrpl/protocol/SecretKey.cpp#L103-L114 "Source")
A valid secp256k1 key must not be zero, and it must be numerically less than the _secp256k1 group order_. The secp256k1 group order is the constant value `0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141`.

View File

@@ -107,7 +107,7 @@ When the consensus process completes, each server independently computes a new l
2. Place the agreed-upon transaction set in _canonical order_ so that every server processes them the same way.
[Canonical order](https://github.com/XRPLF/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/src/ripple/app/misc/CanonicalTXSet.cpp#L25-L36) is not the order the transactions were received, because servers may receive the same transactions in different order. To prevent participants from competing over transaction ordering, canonical order is hard to manipulate.
[Canonical order](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/misc/CanonicalTXSet.cpp) is not the order the transactions were received, because servers may receive the same transactions in different order. To prevent participants from competing over transaction ordering, canonical order is hard to manipulate.
3. Process each transaction according to its instructions, in order. Update the ledger's state data accordingly.

View File

@@ -1,11 +1,9 @@
---
html: invariant-checking.html
parent: consensus.html
seo:
description: Understand what invariant checking is, why it exists, how it works, and what invariant checks are active.
labels:
- Blockchain
- Security
- Blockchain
- Security
---
# Invariant Checking
@@ -29,49 +27,25 @@ The processing of incorrect transaction would undermine the value of trust in th
## How it Works
The invariant checker is a second layer of code that runs automatically in real-time after each transaction. Before the transaction's results are committed to the ledger, the invariant checker examines those changes for correctness. If the transaction's results would break one of the XRP Ledger's strict rules, the invariant checker rejects the transaction. Transactions that are rejected this way have the result code `tecINVARIANT_FAILED` and are included in the ledger with no effects.
The invariant checker is a second layer of code that runs automatically in real-time after each transaction. Before the transaction's results are committed to the ledger, the invariant checker examines those changes for correctness. If the transaction's results would break one of the XRP Ledger's strict rules, the invariant checker rejects the transaction. Transactions that are rejected this way have the [result code](../../references/protocol/transactions/transaction-results/index.md) `tecINVARIANT_FAILED` and are included in the ledger with no effects.
To include the transaction in the ledger with a `tec`-class code, some minimal processing is necessary. If this minimal processing still breaks an invariant, the transaction fails with the code `tefINVARIANT_FAILED` instead, and is not included in the ledger at all.
## Active Invariants
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/tx/detail/InvariantCheck.h "Source")
The XRP Ledger checks all the following invariants on each transaction:
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L92 "Source")
- [Transaction Fee Check](#transaction-fee-check)
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L118 "Source")
- [XRP Not Created](#xrp-not-created)
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L146 "Source")
- [Account Roots Not Deleted](#account-roots-not-deleted)
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L173 "Source")
- [XRP Balance Checks](#xrp-balance-checks)
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L197 "Source")
- [Ledger Entry Types Match](#ledger-entry-types-match)
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L224 "Source")
- [No XRP Trust Lines](#no-xrp-trust-lines)
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L251 "Source")
- [No Bad Offers](#no-bad-offers)
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L275 "Source")
- [No Zero Escrow](#no-zero-escrow)
[[Source]](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h#L300 "Source")
- [Valid New Account Root](#valid-new-account-root)
@@ -97,7 +71,7 @@ The XRP Ledger checks all the following invariants on each transaction:
### XRP Balance Checks
- **Invariant Condition(s):**
- An account's XRP balance must be of type XRP, and it cannot be less than 0 or more than 100 billion XRP exactly.
- An account's XRP balance must be of type XRP, and it cannot be less than 0 or more than [100 billion XRP exactly](https://github.com/XRPLF/rippled/blob/a7792ebcae63db64e9ae3d7704576252837c2512/include/xrpl/protocol/SystemParameters.h#L44-L51).
### Ledger Entry Types Match
@@ -155,18 +129,12 @@ The XRP Ledger checks all the following invariants on each transaction:
## See Also
- **Blog:**
- [Protecting the Ledger: Invariant Checking](https://xrpl.org/blog/2017/invariant-checking.html)
- [Protecting the Ledger: Invariant Checking](/blog/2017/invariant-checking.md)
- **Repository:**
- [Invariant Check.h](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.h)
- [Invariant Check.cpp](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/app/tx/impl/InvariantCheck.cpp)
- [System Parameters](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/SystemParameters.h#L43)
- [XRP Amount](https://github.com/XRPLF/rippled/blob/develop/src/ripple/basics/XRPAmount.h#L244)
- [Ledger Formats](https://github.com/XRPLF/rippled/blob/023f5704d07d09e70091f38a0d4e5df213a3144b/src/ripple/protocol/LedgerFormats.h#L36-L94)
- [`InvariantCheck.h`](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/tx/detail/InvariantCheck.h)
- [`InvariantCheck.cpp`](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/tx/detail/InvariantCheck.cpp)
- [`XRPAmount.h`](https://github.com/XRPLF/rippled/blob/master/include/xrpl/protocol/XRPAmount.h)
- **Other:**
- [Authorized Trust Lines](../tokens/fungible-tokens/authorized-trust-lines.md)
- [Calculating Balance Changes for a Transaction](https://xrpl.org/blog/2015/calculating-balance-changes-for-a-transaction.html#calculating-balance-changes-for-a-transaction)
{% raw-partial file="/docs/_snippets/common-links.md" /%}

View File

@@ -1,11 +1,9 @@
---
html: peer-protocol.html
parent: networks-and-servers.html
seo:
description: The peer protocol specifies the language rippled servers speak to each other.
labels:
- Core Server
- Blockchain
- Core Server
- Blockchain
---
# Peer Protocol
@@ -18,11 +16,11 @@ The peer protocol is the main mode of communication between servers in the XRP L
- Requesting ledger data from historical ledgers, or providing that data.
- Proposing a set of transactions for consensus, or sharing the calculated outcome of applying a consensus transaction set.
To set up a peer-to-peer connection, one server connects to another using HTTPS and requests an [HTTP upgrade](https://tools.ietf.org/html/rfc7230#section-6.7) to switch to the `XRPL/2.0` protocol (formerly `RTXP/1.2`). (For more information, see the [Overlay Network](https://github.com/XRPLF/rippled/blob/96bbabbd2ece106779bb544aa0e4ce174e99fdf6/src/ripple/overlay/README.md#handshake) article in the [`rippled` repository](https://github.com/ripple/rippled).)
To set up a peer-to-peer connection, one server connects to another using HTTPS and requests an [HTTP upgrade](https://tools.ietf.org/html/rfc7230#section-6.7) to switch to the `XRPL/2.0` protocol (formerly `RTXP/1.2`). For more information, see the source code's [Overlay Network](https://github.com/XRPLF/rippled/blob/master/src/xrpld/overlay/README.md#handshake) article.
## Peer Discovery
The XRP Ledger uses a "gossip" protocol to help find servers find others to connect to in the XRP Ledger network. Whenever a server starts up, it reconnects to any other peers it previously connected to. As a fallback, it uses the [hardcoded public hubs](https://github.com/XRPLF/rippled/blob/fa57859477441b60914e6239382c6fba286a0c26/src/ripple/overlay/impl/OverlayImpl.cpp#L518-L525). After a server successfully connects to a peer, it asks that peer for the contact information (generally, IP address and port) of other XRP Ledger servers that may also be seeking peers. The server can then connect to those servers, and ask them for the contact information of yet more XRP Ledger servers to peer with. Through this process, the server makes enough peer connections that it can remain reliably connected to the rest of the network even if it loses a connection to any single peer.
The XRP Ledger uses a "gossip" protocol to help find servers find others to connect to in the XRP Ledger network. Whenever a server starts up, it reconnects to any other peers it previously connected to. As a fallback, it uses the [hardcoded public hubs](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/src/xrpld/overlay/detail/OverlayImpl.cpp#L495-L508). After a server successfully connects to a peer, it asks that peer for the contact information (generally, IP address and port) of other XRP Ledger servers that may also be seeking peers. The server can then connect to those servers, and ask them for the contact information of yet more XRP Ledger servers to peer with. Through this process, the server makes enough peer connections that it can remain reliably connected to the rest of the network even if it loses a connection to any single peer.
Typically, a server needs to connect to a public hub only once, for a short amount of time, to find other peers. After doing so, the server may or may not remain connected to the hub, depending on how stable its network connection is, how busy the hub is, and how many other high-quality peers the server finds. The server saves the addresses of these other peers so it can try reconnecting directly to those peers later, after a network outage or a restart.

View File

@@ -31,16 +31,10 @@ LP tokens enable liquidity providers to:
An AMM holds two different assets: at most one of these can be XRP, and one or both of them can be [tokens](../index.md).
For any given pair of assets, there can be up to one AMM in the ledger. Anyone can create the AMM for an asset pair if it doesn't exist, or deposit to an AMM if it already exists.
When you want to trade in the decentralized exchange, your [Offers](offers.md) and [Cross-Currency Payments](../../payment-types/cross-currency-payments.md) can automatically use AMMs to complete the trade. A single transaction might execute by matching Offers, AMMs, or a mix of both, depending on what's cheaper.
When you want to trade in the decentralized exchange, your [offers](offers.md) and [cross-currency payments](../../payment-types/cross-currency-payments.md) can automatically use AMMs to complete the trade. A single transaction might execute by matching offers, AMMs, or a mix of both, depending on what's cheaper. You can [read a transaction's metadata](../../transactions/finality-of-results/look-up-transaction-results.md) to see what liquidity it consumed.
![1 Transaction using offers, AMMs, or both.](/docs/img/cpt-amm-or-offer.png)
{% admonition type="info" name="Note" %}
You can determine if a `Payment` or `OfferCreate` transaction interacted with an AMM by checking for a [`RippleState`](../../../references/protocol/ledger-data/ledger-entry-types/ripplestate.md) ledger entry in the transaction metadata. A `Flags` value of `16777216` indicates AMM liquidity was consumed.
{% /admonition %}
An AMM sets its exchange rate based on the balance of assets in the pool. When you trade against an AMM, the exchange rate adjusts based on how much your trade shifts the balance of assets the AMM holds. As its supply of one asset goes down, the price of that asset goes up; as its supply of an asset goes up, the price of that asset goes down.
![As supply increases, prices drop, and vice-versa.](/docs/img/cpt-amm-balance.png)

View File

@@ -85,7 +85,7 @@ Trust line limits protect you from receiving more of a token as payment than you
Existing Offers are grouped by exchange rate, which is measured as the ratio between `TakerGets` and `TakerPays`. Offers with a higher exchange rate are taken preferentially. (That is, the person accepting the offer receives as much as possible for the amount of currency they pay out.) Offers with the same exchange rate are taken on the basis of which offer was placed first.
When Offers execute in the same ledger block, the order in which they execute is determined by the [canonical order](https://github.com/XRPLF/rippled/blob/release/src/ripple/app/misc/CanonicalTXSet.cpp "Source code: Transaction ordering") in which the transactions were [applied to the ledger](https://github.com/XRPLF/rippled/blob/5425a90f160711e46b2c1f1c93d68e5941e4bfb6/src/ripple/app/consensus/LedgerConsensus.cpp#L1435-L1538 "Source code: Applying transactions"). This behavior is designed to be deterministic, efficient, and hard to game.
When Offers execute in the same ledger block, the order in which they execute is determined by the [canonical order](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/misc/CanonicalTXSet.cpp "Source code: Transaction ordering") in which transactions were applied to the ledger. Transactions that fail initially can be pushed back and retried at the end of the ledger. This behavior is designed to be deterministic, efficient, and hard to game.
## Offer Expiration

View File

@@ -45,6 +45,94 @@ Every MPT issuance has a set of key properties defined in the ledger as an [MPTo
After the MPT is issued, the on-chain data cannot be changed. However, the proposed [XLS-94: Dynamic MPT standard](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0094-dynamic-MPT) {% not-enabled /%} would allow fields to be marked as mutable during creation, so that those fields can be changed later.
#### Metadata Schema
To fit within the 1024-byte limit, MPT metadata must use compressed JSON keys. The following table describes these keys and their corresponding fields:
| Field Name | Key | Type | Required? | Description |
|:--------------- |:---- |:---------------- |---------- |-------------|
| ticker | `t` | String | Yes | The ticker symbol used to represent the token. Must be uppercase letters (A-Z) and digits (0-9) only. A maximum of 6 characters is recommended. |
| name | `n` | String | Yes | The display name of the token. Any UTF-8 string is permitted. |
| desc | `d` | String | No | A short description of the token. Any UTF-8 string is permitted. |
| icon | `i` | String | Yes | The URI to the token icon. Can be `hostname/path` (HTTPS is assumed), or full URI for other protocols. |
| asset_class | `ac` | String | Yes | Categorizes tokens by their primary purpose and backing. See [Asset Class](#asset-class) for more details. |
| asset_subclass | `as` | String | No | An optional subcategory that is only required if the `asset_class` is `rwa`. See [Asset Subclass](#asset-subclass) for more details. |
| issuer_name | `in` | String | Yes | Name of the entity issuing the token. Any UTF-8 string is permitted. |
| uris | `us` | Array | No | The list of related URIs such as website, documentation, and social media. See [URIs](#uris) for more details.|
| additional_info | `ai` | Object or String | No | Freeform field for key token details like interest rate, maturity date, term, or other relevant info. Any valid JSON object or UTF-8 string is permitted. |
##### Asset Class
The `asset_class` field categorizes tokens by their primary purpose and backing. These categories help applications understand the nature of the token and its intended use case.
| Category | Definition |
|----------|------------|
| `rwa` | Tokens representing real-world assets (RWAs), which derive value from legally enforceable claims on physical or off-chain financial assets. |
| `memes` | Community-driven tokens without intrinsic backing or utility claims, primarily driven by internet culture or speculation. |
| `wrapped` | Tokens representing assets from other blockchains, typically backed 1:1 by bridges or custodians. |
| `gaming` | Tokens used in games or virtual worlds, often representing in-game currency, assets, or rewards. |
| `defi` | Tokens native to or used within DeFi protocols, including governance tokens, DEX tokens, and lending assets. |
| `other` | Tokens that do not clearly fit into the defined categories. This may include experimental, test, or tokens with unique use cases not covered elsewhere. |
##### Asset Subclass
When `asset_class` is set to `rwa`, an `asset_subclass` can be specified to provide more granular categorization. This describes what type of real-world asset backs the token and what legal or regulatory framework might apply.
| Subclass | Definition |
|----------|------------|
| `stablecoin` | Tokens pegged to a stable value, typically fiat currencies like USD, which are backed by reserves like cash, treasuries, or crypto collateral. |
| `commodity` | Tokens that represent physical commodities like gold, silver, or oil, often redeemable or legally linked to off-chain reserves. |
| `real_estate` | Tokens representing ownership or claims on real estate, including fractionalized property shares or REIT-like instruments. |
| `private_credit` | Tokens representing debt obligations from private entities, such as loans, invoices, or receivables. |
| `equity` | Tokens representing ownership shares in companies, similar to traditional stock or equity instruments. |
| `treasury` | Tokens backed by government debt instruments, such as U.S. Treasury bills or bonds. |
| `other` | Tokens that do not fit into the predefined categories, including experimental, hybrid, or emerging real-world asset types. |
##### URIs
The `us` array contains a list of URI objects, each with a URI link, category, and human-readable title.
| Field Name | Key | Type | Required? | Description |
|:---------- |:--- |:------ |:--------- |:-------------|
| uri | `u` | String | Yes |`hostname/path` or full URI link to the related resource. |
| category | `c` | String | Yes | The category of the link provided. Allowed values are: `website`, `social`, `docs`, `other`. |
| title | `t` | String | Yes | Human-readable label for the link. |
#### Example JSON Metadata
The following example shows metadata for a treasury-backed token.
```json
{
"t": "TBILL",
"n": "T-Bill Yield Token",
"d": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.",
"i": "example.org/tbill-icon.png",
"ac": "rwa",
"as": "treasury",
"in": "Example Yield Co.",
"us": [
{
"u": "exampleyield.co/tbill",
"c": "website",
"t": "Product Page"
},
{
"u": "exampleyield.co/docs",
"c": "docs",
"t": "Yield Token Docs"
}
],
"ai": {
"interest_rate": "5.00%",
"interest_type": "variable",
"yield_source": "U.S. Treasury Bills",
"maturity_date": "2045-06-30",
"cusip": "912796RX0"
}
}
```
### Transferability Controls
MPTs can be configured with different levels of transferability controls by adjusting the following flags:

View File

@@ -227,15 +227,15 @@ If the payment contains a `CreatedNode` with `"LedgerEntryType": "AccountRoot"`,
#### Token Payments
Payments involving tokens are a bit more complicated.
Payments involving [trust line tokens](../../tokens/fungible-tokens/trust-line-tokens.md) are a bit more complicated.
All changes in token balances are reflected in [RippleState objects](../../../references/protocol/ledger-data/ledger-entry-types/ripplestate.md), which represent [trust lines](../../tokens/fungible-tokens/index.md). An increase to one party's balance on a trust line is considered to decrease the counterparty's balance by equal amount; in the metadata, this is only recorded as a single change to the shared `Balance` for the RippleState object. Whether this change is recorded as an "increase" or "decrease" depends on which account has the numerically higher address.
All changes to trust line token balances are reflected in [RippleState entries](../../../references/protocol/ledger-data/ledger-entry-types/ripplestate.md), which represent [trust lines](../../tokens/fungible-tokens/index.md). An increase to one party's balance on a trust line is considered to decrease the counterparty's balance by equal amount; transaction metadata records only a single net change to the shared `Balance` of a `RippleState` entry. Whether this change is recorded as an "increase" or "decrease" depends on which account has the numerically higher address.
A single payment may go across a long [path](../../tokens/fungible-tokens/paths.md) consisting of several trust lines and order books. The process of changing the balances on several trust lines to connect parties indirectly is called [rippling](../../tokens/fungible-tokens/rippling.md). Depending on the `issuer` specified in the transaction's `Amount` field, it is also possible that the amount delivered may be split between several trust lines (`RippleState` accounts) connected to the destination account.
A single payment may go across a long [path](../../tokens/fungible-tokens/paths.md) consisting of several trust lines and order books. The process of changing the balances on several trust lines to connect parties indirectly is called [rippling](../../tokens/fungible-tokens/rippling.md). Depending on the `issuer` specified in the transaction's `Amount` field, it is also possible that the amount delivered may be split between several trust lines (separate RippleState entries) connected to the destination account.
{% admonition type="success" name="Tip" %}The order that modified objects are presented in the metadata does not necessarily match the order those objects were visited while processing a payment. To better understand payment execution, it may help to reorder `AffectedNodes` members to reconstruct the paths the funds took through the ledger.{% /admonition %}
Cross-currency payments consume [Offers](../../../references/protocol/ledger-data/ledger-entry-types/offer.md) in part or entirely to change between different currency codes and issuers. If a transaction shows `DeletedNode` objects for `Offer` types, that can indicate an Offer that was fully consumed, or an Offer that was found to be [expired or unfunded](../../tokens/decentralized-exchange/offers.md#lifecycle-of-an-offer) at the time of processing. If a transaction shows a `ModifiedNode` of type `Offer`, that indicates an Offer that was partially consumed.
Cross-currency payments use [offers](../../tokens/decentralized-exchange/offers.md) and [AMMs](../../tokens/decentralized-exchange/automated-market-makers.md) to convert between different currency codes and issuers. Offers can be partially or fully consumed. If a transaction shows `DeletedNode` objects for `Offer` types, that can indicate an offer that was fully consumed, or an offer that was found to be [expired or unfunded](../../tokens/decentralized-exchange/offers.md#lifecycle-of-an-offer) at the time of processing. If a transaction shows a `ModifiedNode` of type `Offer`, that indicates an offer that was partially consumed.
The [`QualityIn` and `QualityOut` settings of trust lines](../../../references/protocol/transactions/types/trustset.md) can affect how one side of a trust line values the token, so that the numeric change in balances is different from how the sender values that token. The `delivered_amount` shows how much was delivered as valued by the recipient.
@@ -243,9 +243,17 @@ If the amount to be sent or received is outside of the [token precision](../../.
Depending on the length of the [paths](../../tokens/fungible-tokens/paths.md), the metadata for cross-currency payments can be _long_. For example, [transaction 8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B](https://xrpcharts.ripple.com/#/transactions/8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B) delivered 2.788 GCB issued by `rHaaans...`, spending XRP but passing through USD from 2 issuers, paying XRP to 2 accounts, removing an unfunded offer from `r9ZoLsJ...` to trade EUR for ETH, plus bookkeeping for a total of 17 different ledger objects modified. <!-- SPELLING_IGNORE: gcb -->
#### Using AMM Liquidity
You can tell if an AMM was involved in a transaction by looking for [RippleState entries](../../../references/protocol/ledger-data/ledger-entry-types/ripplestate.md) that belong to an AMM. Check the `Flags` value of each `RippleState` entry in the `AffectedNodes` array; if the [`lsfAMMNode` flag](../../../references/protocol/ledger-data/ledger-entry-types/ripplestate.md#ripplestate-flags) is enabled, then that trust line is connected to an AMM. Flags are combined using bitwise operations. To check if `lsfAMMNode` is enabled, use a bitwise-AND operator, like the following pseudo-code:
```
isEnabled = RippleState.Flags & lsfAMMNode
```
### Offers
An [OfferCreate transaction][] may or may not create an object in the ledger, depending on how much was matched and whether the transaction used flags such as `tfImmediateOrCancel`. Look for a `CreatedNode` entry with `"LedgerEntryType": "Offer"` to see if the transaction added a new Offer to the ledger's order books. For example:
An [OfferCreate transaction][] may or may not create an object in the ledger, depending on how much was matched and whether the transaction used flags such as `tfImmediateOrCancel`. Look for a `CreatedNode` entry with `"LedgerEntryType": "Offer"` to see if the transaction added a new Offer entry to the ledger's order books. For example:
```json
{
@@ -268,11 +276,11 @@ An [OfferCreate transaction][] may or may not create an object in the ledger, de
}
```
A `ModifiedNode` of type `Offer` indicates an Offer that was matched and partially consumed. A single transaction can consume a large number of Offers. An Offer to trade two tokens might also consume Offers to trade XRP because of [auto-bridging](../../tokens/decentralized-exchange/autobridging.md). All or part of an exchange can be auto-bridged.
A `ModifiedNode` of type `Offer` indicates an offer that was matched and partially consumed. A single transaction can consume a large number of offers. An offer to trade two tokens might also consume offers to trade XRP because of [auto-bridging](../../tokens/decentralized-exchange/autobridging.md). All or part of an exchange can be auto-bridged. Offers can also use AMMs to convert currency; you can recognize when this happens by [checking for a `RippleState` entry with the `lsfAMMNode` flag](#using-amm-liquidity) in the `AffectedNodes` array.
A `DeletedNode` of type `Offer` can indicate a matching Offer that was fully consumed, an Offer that was found to be [expired or unfunded](../../tokens/decentralized-exchange/offers.md#lifecycle-of-an-offer) at the time of processing, or an Offer that was canceled as part of placing a new Offer. You can recognize a canceled Offer because the `Account` that placed it is the sender of the transaction that deleted it.
A `DeletedNode` of type `Offer` can indicate a matching offer that was fully consumed, an offer that was found to be [expired or unfunded](../../tokens/decentralized-exchange/offers.md#lifecycle-of-an-offer) at the time of processing, or an offer that was canceled as part of placing a new offer. You can recognize a canceled offer because the `Account` that placed it is the sender of the transaction that deleted it.
Example of a deleted Offer:
Example of a deleted offer:
```json
{
@@ -300,11 +308,11 @@ Example of a deleted Offer:
}
```
Offers can create, delete, and modify both types of [DirectoryNode objects](../../../references/protocol/ledger-data/ledger-entry-types/directorynode.md), to keep track of who placed which Offers and which Offers are available at which exchange rates. Generally, users don't need to pay close attention to this bookkeeping.
Offers can create, delete, and modify [DirectoryNode entries](../../../references/protocol/ledger-data/ledger-entry-types/directorynode.md), both to keep track of who placed which offers and which offers are available at which exchange rates. Generally, users don't need to pay close attention to this bookkeeping.
An [OfferCancel transaction][] may have the code `tesSUCCESS` even if there was no Offer to delete. Look for a `DeletedNode` of type `Offer` to confirm that the transaction actually deleted an Offer. If not, the Offer may already have been removed by a previous transaction, or the OfferCancel transaction may have used the wrong sequence number in the `OfferSequence` field.
An [OfferCancel transaction][] may have the code `tesSUCCESS` even if there was no offer to delete. Look for a `DeletedNode` of type `Offer` to confirm that the transaction actually deleted an offer. If not, the offer may already have been removed by a previous transaction, or the OfferCancel transaction may have used the wrong sequence number in the `OfferSequence` field.
If an OfferCreate transaction shows a `CreatedNode` of type `RippleState`, that indicates that [the Offer created a trust line](../../tokens/decentralized-exchange/offers.md#offers-and-trust) to hold a token received in the trade.
If an OfferCreate transaction shows a `CreatedNode` of type `RippleState`, that indicates that [the offer created a trust line](../../tokens/decentralized-exchange/offers.md#offers-and-trust) to hold a token received in the trade.
### Escrows

View File

@@ -64,7 +64,7 @@ For each new ledger version, the server picks a soft limit on the number of tran
The open ledger cost requirement is [proportional to the normal cost of the transaction](#fee-levels), not the absolute transaction cost. Transaction types that have a higher-than-normal requirement, such as [multi-signed transactions](../accounts/multi-signing.md) must pay more to meet the open ledger cost than transactions which have minimum transaction cost requirements.
See also: [Fee Escalation explanation in `rippled` repository](https://github.com/XRPLF/rippled/blob/release/src/ripple/app/misc/FeeEscalation.md).
See also: [Fee Escalation explanation in `rippled` repository](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/misc/FeeEscalation.md).
### Queued Transactions

View File

@@ -43,11 +43,6 @@ Edit your `rippled.cfg` file.
# No [ips] stanza. Use the default hubs to connect to Mainnet.
```
```{% label="Sidechain-Devnet" %}
[ips]
sidechain-net2.devnet.rippletest.net 51235
```
{% /tabs %}
2. Comment out the previous `[ips]` stanza, if there is one:
@@ -77,11 +72,6 @@ Edit your `rippled.cfg` file.
main
```
```{% label="Sidechain-Devnet" %}
[network_id]
262
```
{% /tabs %}
For custom networks, everyone who connects to the network should use a value unique to that network. When creating a new network, choose a network ID at random from the integers 11 to 4,294,967,295.
@@ -120,14 +110,6 @@ Edit your `validators.txt` file. This file is located in the same folder as your
ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734
```
```{% label="Sidechain-Devnet" %}
[validator_list_sites]
https://vlsidechain-net2.devnet.rippletest.net
[validator_list_keys]
EDA5504C7133743FADA46342229B4E9CBBE1CF9BCA19D16633574F7CBB72F79569
```
{% /tabs %}
{% admonition type="success" name="Tip" %}Preview packages might come with the necessary stanzas pre-configured, but check them just in case.{% /admonition %}
@@ -181,13 +163,6 @@ For some test networks using experimental features, you must also forcefully ena
```
{% /tab %}
{% tab label="Sidechain-Devnet" %}
```
[features]
XChainBridge
```
{% /tab %}
{% /tabs %}
{% admonition type="danger" name="Warning" %}Do not use the `[features]` stanza when connecting to Mainnet or Testnet. Forcefully enabling different features than the rest of the network could cause your server to diverge from the network.{% /admonition %}

View File

@@ -8,7 +8,7 @@ labels:
- Core Server
---
# Online Deletion
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/misc/SHAMapStoreImp.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/misc/SHAMapStoreImp.cpp "Source")
The online deletion feature lets the `rippled` server delete the server's local copy of old ledger versions to keep disk usage from rapidly growing over time. The default config file sets online deletion to run automatically, but online deletion can also be configured to run only when prompted.

View File

@@ -18,7 +18,7 @@ rippled -a --start --conf=/path/to/rippled.cfg
For more information on the options you can use when starting `rippled` in stand-alone mode, see [Commandline Usage: Stand-Alone Mode Options](../commandline-usage.md#stand-alone-mode-options).
In a genesis ledger, the [genesis address](../../concepts/accounts/addresses.md#special-addresses) holds all 100 billion XRP. The keys of the genesis address are [hardcoded](https://github.com/XRPLF/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184) as follows:
In a genesis ledger, the [genesis address](../../concepts/accounts/addresses.md#special-addresses) holds all 100 billion XRP. The keys of the genesis address are [hardcoded](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/src/xrpld/app/ledger/Ledger.cpp#L184) as follows:
**Address:** `rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`

View File

@@ -1,10 +1,8 @@
---
html: understanding-log-messages.html
parent: troubleshoot-the-rippled-server.html
seo:
description: Interpret and respond to warning and error messages in the debug log.
labels:
- Core Server
- Core Server
---
# Understanding Log Messages
@@ -122,10 +120,10 @@ A large number of these messages around the same time may indicate a problem, su
The following log message indicates that a client to the server's public API has been dropped as a result of [rate limiting](../../references/http-websocket-apis/api-conventions/rate-limiting.md):
```text
Resource:WRN Consumer entry 169.55.164.21 dropped with balance 15970 at or above drop threshold 15000
Resource:WRN Consumer entry 169.55.164.21 dropped with balance 25970 at or above drop threshold 25000
```
The entry contains the IP address of the client that exceeded its rate limit, and the client's "balance", which is a score estimating the rate at which the client has been using the API. The threshold for dropping a client is [hardcoded to a score of 15000](https://github.com/XRPLF/rippled/blob/06c371544acc3b488b9d9c057cee4e51f6bef7a2/src/ripple/resource/impl/Tuning.h#L34-L35).
The entry contains the IP address of the client that exceeded its rate limit, and the client's "balance", which is a score estimating the rate at which the client has been using the API. The threshold for dropping a client is [hardcoded to a score of 25000](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/include/xrpl/resource/detail/Tuning.h#L35). {% badge href="https://xrpl.org/blog/2025/rippled-2.3.1" %}Updated in: rippled 2.3.1{% /badge %}
If you see frequent messages from the same IP address, you may want to block those IP addresses from your network to reduce the load on your server's public API. (For example, you may be able to configure your firewall to block those IP addresses.)

View File

@@ -7,7 +7,7 @@ labels:
- Tokens
---
# account_currencies
[[Source]](https://github.com/XRPLF/rippled/blob/df966a9ac6dd986585ecccb206aff24452e41a30/src/ripple/rpc/handlers/AccountCurrencies.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/AccountCurrenciesHandler.cpp "Source")
The `account_currencies` command retrieves a list of currencies that an account can send or receive, based on its trust lines. (This is not a thoroughly confirmed list, but it can be used to populate user interfaces.)

View File

@@ -6,7 +6,7 @@ labels:
- XRP
---
# account_info
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/AccountInfo.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/AccountInfo.cpp "Source")
The `account_info` command retrieves information about an account, its activity, and its XRP balance. All information retrieved is relative to a particular version of the ledger.

View File

@@ -1,13 +1,11 @@
---
html: account_nfts.html
parent: account-methods.html
seo:
description: Get a list of all NFTs for an account.
labels:
- Non-fungible Tokens, NFTs
- Non-fungible Tokens, NFTs
---
# account_nfts
[[Source]](https://github.com/xrplf/rippled/blob/master/src/ripple/rpc/handlers/AccountObjects.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/AccountObjects.cpp "Source")
The `account_nfts` method returns a list of `NFToken` objects for the specified account.

View File

@@ -7,7 +7,7 @@ labels:
- Decentralized Exchange
---
# account_offers
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/AccountOffers.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/AccountOffers.cpp "Source")
The `account_offers` method retrieves a list of [offers](../../../../concepts/tokens/decentralized-exchange/offers.md) made by a given [account](../../../../concepts/accounts/index.md) that are outstanding as of a particular [ledger version](../../../../concepts/ledgers/index.md).

View File

@@ -1,14 +1,12 @@
---
html: account_tx.html
parent: account-methods.html
seo:
description: Get a list of transactions affecting an account.
labels:
- Payments
- Accounts
- Payments
- Accounts
---
# account_tx
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/AccountTx.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/AccountTx.cpp "Source")
The `account_tx` method retrieves a list of validated transactions that involve a given account.

View File

@@ -1,6 +1,4 @@
---
html: gateway_balances.html
parent: account-methods.html
seo:
description: Calculate total amounts issued by an account.
labels:
@@ -8,7 +6,7 @@ labels:
- Accounts
---
# gateway_balances
[[Source]](https://github.com/XRPLF/rippled/blob/9111ad1a9dc37d49d085aa317712625e635197c0/src/ripple/rpc/handlers/GatewayBalances.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/GatewayBalances.cpp "Source")
The `gateway_balances` command calculates the total balances issued by a given account, optionally excluding amounts held by [operational addresses](../../../../concepts/accounts/account-types.md).

View File

@@ -1,13 +1,11 @@
---
html: noripple_check.html
parent: account-methods.html
seo:
description: Get recommended changes to an account's Default Ripple and No Ripple settings.
labels:
- Tokens
- Tokens
---
# noripple_check
[[Source]](https://github.com/XRPLF/rippled/blob/9111ad1a9dc37d49d085aa317712625e635197c0/src/ripple/rpc/handlers/NoRippleCheck.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/NoRippleCheck.cpp "Source")
The `noripple_check` command provides a quick way to check the status of [the Default Ripple field for an account and the No Ripple flag of its trust lines](../../../../concepts/tokens/fungible-tokens/rippling.md), compared with the recommended settings.

View File

@@ -24,7 +24,7 @@ An example of the request format:
{
"id": 1,
"command": "nft_history",
"nft_id": "00080000B4F4AFC5FBCBD76873F18006173D2193467D3EE70000099B00000000"
"nft_id": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9"
}
```
{% /tab %}
@@ -35,7 +35,7 @@ An example of the request format:
"method": "nft_history",
"params": [
{
"nft_id": "00080000B4F4AFC5FBCBD76873F18006173D2193467D3EE70000099B00000000"
"nft_id": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9"
}
]
}
@@ -48,17 +48,17 @@ An example of the request format:
The request contains the following parameters:
| `Field` | Type | Description |
|:---------------|:---------------------------|:-------------------------------|
| `nft_id` | String | A unique identifier for the non-fungible token (NFT). |
| `ledger_index_min` | Integer | _(Optional)_ Use to specify the earliest ledger from which to include NFTs. A value of `-1` instructs the server to use the earliest validated ledger version available. |
| `ledger_index_max` | Integer | _(Optional)_ Use to specify the most recent ledger to include NFTs from. A value of `-1` instructs the server to use the most recent validated ledger version available. |
| `ledger_hash` | String | _(Optional)_ The unique hash of the ledger version to use. (See [Specifying Ledgers][]) |
| `ledger_index` | String or Unsigned Integer | _(Optional)_ The [ledger index][] of the ledger to use, or a shortcut string to choose a ledger automatically. Do not specify the `ledger_index` as `closed` or `current`; doing so forwards the request to the P2P `rippled` server and the `nft_history` API is not available on `rippled`. (See [Specifying Ledgers][]) |
| `binary` | Boolean | _(Optional)_ Defaults to `false`. If set to `true`, returns transactions as hex strings instead of JSON. |
| `forward` | Boolean | _(Optional)_ Defaults to `false`. If set to `true`, returns values indexed with the oldest ledger first. Otherwise, the results are indexed with the newest ledger first. (Each page of results might not be internally ordered, but the pages are ordered overall.) |
| `limit` | UInt32 | _(Optional)_ Limit the number of NFTs to retrieve. The server is not required to honor this value. |
| `marker` | Marker | Value from a previous paginated response. Resume retrieving data where that response left off. This value is NOT stable if there is a change in the server's range of available ledgers. If you are querying the “validated” ledger, it is possible that new NFTs are created during your paging. |
| `Field` | Type | Description |
|:-------------------|:---------------------------|:------------|
| `nft_id` | String | A unique identifier for the non-fungible token (NFT). |
| `ledger_index_min` | Integer | _(Optional)_ Use to specify the earliest ledger from which to include NFTs. A value of `-1` instructs the server to use the earliest validated ledger version available. |
| `ledger_index_max` | Integer | _(Optional)_ Use to specify the most recent ledger to include NFTs from. A value of `-1` instructs the server to use the most recent validated ledger version available. |
| `ledger_hash` | String | _(Optional)_ The unique hash of the ledger version to use. (See [Specifying Ledgers][]) |
| `ledger_index` | String or Unsigned Integer | _(Optional)_ The [ledger index][] of the ledger to use, or a shortcut string to choose a ledger automatically. Do not specify the `ledger_index` as `closed` or `current`; doing so forwards the request to the P2P `rippled` server and the `nft_history` API is not available on `rippled`. (See [Specifying Ledgers][]) |
| `binary` | Boolean | _(Optional)_ Defaults to `false`. If set to `true`, returns transactions as hex strings instead of JSON. |
| `forward` | Boolean | _(Optional)_ Defaults to `false`. If set to `true`, returns values indexed with the oldest ledger first. Otherwise, the results are indexed with the newest ledger first. (Each page of results might not be internally ordered, but the pages are ordered overall.) |
| `limit` | UInt32 | _(Optional)_ Limit the number of NFTs to retrieve. The server is not required to honor this value. |
| `marker` | Marker | Value from a previous paginated response. Resume retrieving data where that response left off. This value is NOT stable if there is a change in the server's range of available ledgers. If you are querying the “validated” ledger, it is possible that new NFTs are created during your paging. |
{% admonition type="info" name="Note" %}If you do not specify a ledger version, Clio uses the latest validated ledger.{% /admonition %}
@@ -71,78 +71,221 @@ An example of a successful response:
{% tab label="WebSocket" %}
```json
{
"id": 0,
"type": "response",
"result": {
"ledger_index_min": 21377274,
"ledger_index_max": 27876163,
"nft_id": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9",
"ledger_index_min": 32570,
"ledger_index_max": 99409949,
"transactions": [
{
"meta": {
"AffectedNodes": [
{
"CreatedNode": {
"LedgerEntryType": "NFTokenPage",
"LedgerIndex": "97707A94B298B50334C39FB46E245D4744C0F5B5FFFFFFFFFFFFFFFFFFFFFFFF",
"NewFields": {
"NFTokens": [
{
"NFToken": {
"NFTokenID": "0008271097707A94B298B50334C39FB46E245D4744C0F5B50000099B00000000",
"URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469"
}
}
]
}
"DeletedNode": {
"FinalFields": {
"Flags": 2,
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9",
"PreviousTxnID": "FD779D4C51C30730EB3EC7B20D07CDB0BC5A259D165F29C8CFDE86752D5A5619",
"PreviousTxnLgrSeq": 92840801,
"RootIndex": "1C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "1C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D"
}
},
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "587E28972F3B63D2260C0671E59593EE6C4D27AB857D1AF230F5CAA959BB3EAC",
"PreviousTxnID": "15DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A",
"PreviousTxnLgrSeq": 93800929
}
},
{
"DeletedNode": {
"FinalFields": {
"Amount": "3000000",
"Destination": "rpx9JThQ2y37FaGeeJP7PXDUVEXY3PHZSC",
"Flags": 1,
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9",
"NFTokenOfferNode": "0",
"Owner": "rBodLLeMx7mqEBv4B2BsaWeTJYnALQddd6",
"OwnerNode": "a3",
"PreviousTxnID": "FD779D4C51C30730EB3EC7B20D07CDB0BC5A259D165F29C8CFDE86752D5A5619",
"PreviousTxnLgrSeq": 92840801
},
"LedgerEntryType": "NFTokenOffer",
"LedgerIndex": "6267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rNoj836fhDm1eXaHHefPKs7iDb4gwzS7nc",
"Balance": "999999988",
"Account": "rBodLLeMx7mqEBv4B2BsaWeTJYnALQddd6",
"Balance": "270183296",
"BurnedNFTokens": 72,
"FirstNFTokenSequence": 66004341,
"Flags": 0,
"MintedNFTokens": 1,
"OwnerCount": 1,
"Sequence": 27876155
"MintedNFTokens": 111,
"OwnerCount": 1204,
"Sequence": 66025366
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "AC0A2AD29B67B5E6DA1C5DE696440F59BCD8DEA0A4CF7AFD683D1489AAB1ED24",
"LedgerIndex": "993F123FC11F0FDD065FB33C99007369E4768994C03936C67B92C44F47DE5019",
"PreviousFields": {
"Balance": "1000000000",
"OwnerCount": 0,
"Sequence": 27876154
"Balance": "270183308",
"OwnerCount": 1205,
"Sequence": 66025365
},
"PreviousTxnID": "B483F0F7100658380E42BCF1B15AD59B71C4082635AD53B78D08A5198BBB6939",
"PreviousTxnLgrSeq": 27876154
"PreviousTxnID": "15DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A",
"PreviousTxnLgrSeq": 93800929
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "a6",
"IndexPrevious": "a2",
"Owner": "rBodLLeMx7mqEBv4B2BsaWeTJYnALQddd6",
"RootIndex": "FF1CF158ED5CE0E41E954B6CD1C3B5ECF1D4A3901113F1E2B9DCBF9532FD7140"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "D397E071F0DE6F26875FA9ABD92FAFC13B1CE6E6A612DD9FDB1EF4FA2D79B0B6",
"PreviousTxnID": "15DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A",
"PreviousTxnLgrSeq": 93800929
}
}
],
"TransactionIndex": 0,
"TransactionIndex": 98,
"TransactionResult": "tesSUCCESS"
},
"tx": {
"Account": "rNoj836fhDm1eXaHHefPKs7iDb4gwzS7nc",
"Account": "rBodLLeMx7mqEBv4B2BsaWeTJYnALQddd6",
"Fee": "12",
"LastLedgerSequence": 93800952,
"NFTokenOffers": [
"6267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8"
],
"Sequence": 66025365,
"SigningPubKey": "03F314C754C26C0B9A859693C57CFCE464A14E86ADA0CAA174817A637E828E64D4",
"SourceTag": 101102979,
"TransactionType": "NFTokenCancelOffer",
"TxnSignature": "30450221009897AFA16980838EAB0DD819E199E77E80879AA303DAEFF36FB970406715050402205892143D89D07CBD95CA101B2DE561465615A05E670A0A7A15209A0EFC52FE44",
"hash": "324EA92E3B2FD79B53655682045667BA7B683D5FB1051BF33BDDA982F21CB531",
"ledger_index": 93800934,
"date": 791530220
},
"validated": true
}
// ... Additional Metadata omitted for brevity
},
{
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"NFTokens": [
{
"NFToken": {
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816B4066980521CFFD",
"URI": "697066733A2F2F516D577335764370506278664A48466351514335385534585778614536446E68376E36414457516F517154714364"
}
},
{
"NFToken": {
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816BABD2130521D078",
"URI": "697066733A2F2F516D50363735763661326A5379316263656D70444D355A70365638683842685677594E77737A667053417439394A"
}
}
// ... Additional NFToken entries omitted for brevity
],
"NextPageMin": "6807BF848FACD972F2F617E27003D75B2CAAC9812CAAC9818A6641830521CFE8",
"PreviousPageMin": "6807BF848FACD972F2F617E27003D75B2CAAC9812CAAC9816B4066980521CFFD"
},
"LedgerEntryType": "NFTokenPage",
"LedgerIndex": "6807BF848FACD972F2F617E27003D75B2CAAC9812CAAC98179E62DAF0521D014",
"PreviousFields": {
"NFTokens": [
{
"NFToken": {
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816B4066980521CFFD",
"URI": "697066733A2F2F516D577335764370506278664A48466351514335385534585778614536446E68376E36414457516F517154714364"
}
},
{
"NFToken": {
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816BABD2130521D078",
"URI": "697066733A2F2F516D50363735763661326A5379316263656D70444D355A70365638683842685677594E77737A667053417439394A"
}
}
// ... Additional NFToken entries omitted for brevity
]
},
"PreviousTxnID": "75036C0D3740CEBF1A45E1EAA080F434E8CE865375A962D9F809A92B79ABBBBE",
"PreviousTxnLgrSeq": 86769021
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rwVhZJLcdtioxdETLq31Ne2K97xm4zA8Jv",
"Balance": "62592375",
"BurnedNFTokens": 129,
"FirstNFTokenSequence": 86101877,
"Flags": 0,
"MintedNFTokens": 629,
"OwnerCount": 20,
"Sequence": 86102636
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "DD1EBD4FBD7B5FD90A271F416083636046FBEA37342114A0026C444F95FFE1F3",
"PreviousFields": {
"Balance": "62592387",
"MintedNFTokens": 628,
"Sequence": 86102635
},
"PreviousTxnID": "C43C70DD5921EAFEFDC2EDC43DF83FF0FE74FB796D9E3F32EA4BFAF890968876",
"PreviousTxnLgrSeq": 86774497
}
}
],
"TransactionIndex": 3,
"TransactionResult": "tesSUCCESS"
},
"tx": {
"Account": "rwVhZJLcdtioxdETLq31Ne2K97xm4zA8Jv",
"Fee": "12",
"Flags": 8,
"LastLedgerSequence": 27876176,
"LastLedgerSequence": 86774537,
"Memos": [
{
"Memo": {
"MemoData": "43726561746564206F6E206E66742E6F6E7872702E636F6D"
}
}
],
"NFTokenTaxon": 0,
"Sequence": 27876154,
"SigningPubKey": "EDDC20C6791F9FB13AFDCE2C717BE8779DD451BB556243F1FDBAA3CD159D68A9F6",
"Sequence": 86102635,
"SigningPubKey": "027A4E42790158269E1FAD03364B5A365C26D1C686DEA1A22BFE889AC0C759B2CD",
"SourceTag": 69420589,
"TransactionType": "NFTokenMint",
"TransferFee": 10000,
"TxnSignature": "EF657AB47E86FDC112BA054D90587DFE64A61604D9EDABAA7B01B61B56433E3C2AC5BF5AD2E8F5D2A9EAC22778F289094AC383A3F172B2304157A533E0C79802",
"URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
"hash": "E0774E1B8628E397C6E88F67D4424E55E4C81324607B19318255310A6FBAA4A2",
"ledger_index": 27876158,
"date": 735167200
"TxnSignature": "3045022100B6AD2D48CFBBA1700A45853D779CEA05A4E438F0B98A6BEDB2200ABEA1D9F87902207E5879CDE873807B945344D2C872632103989097AE3660DEEAD52D84640C414D",
"URI": "697066733A2F2F516D57515A4167695A337041327065654A4D7441703663326A394151666E78706A754E62674D5A505748617A3267",
"hash": "FB9F697C4C9C7E8248BA63E7EDB4435B3CC12AF0BF426E618B184B76B7F94D28",
"ledger_index": 86774529,
"date": 764373881
},
"validated": true
}
],
"nft_id": "0008271097707A94B298B50334C39FB46E245D4744C0F5B50000099B00000000",
"validated": true
},
"id": "example_nft_history",
"status": "success",
"type": "response",
"warnings": [
{
"id": 2001,
@@ -157,74 +300,216 @@ An example of a successful response:
```json
{
"result": {
"ledger_index_min": 21377274,
"ledger_index_max": 27876163,
"nft_id": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9",
"ledger_index_min": 32570,
"ledger_index_max": 99413196,
"transactions": [
{
"meta": {
"AffectedNodes": [
{
"CreatedNode": {
"LedgerEntryType": "NFTokenPage",
"LedgerIndex": "97707A94B298B50334C39FB46E245D4744C0F5B5FFFFFFFFFFFFFFFFFFFFFFFF",
"NewFields": {
"NFTokens": [
{
"NFToken": {
"NFTokenID": "0008271097707A94B298B50334C39FB46E245D4744C0F5B50000099B00000000",
"URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469"
}
}
]
}
"DeletedNode": {
"FinalFields": {
"Flags": 2,
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9",
"PreviousTxnID": "FD779D4C51C30730EB3EC7B20D07CDB0BC5A259D165F29C8CFDE86752D5A5619",
"PreviousTxnLgrSeq": 92840801,
"RootIndex": "1C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "1C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D"
}
},
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "587E28972F3B63D2260C0671E59593EE6C4D27AB857D1AF230F5CAA959BB3EAC",
"PreviousTxnID": "15DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A",
"PreviousTxnLgrSeq": 93800929
}
},
{
"DeletedNode": {
"FinalFields": {
"Amount": "3000000",
"Destination": "rpx9JThQ2y37FaGeeJP7PXDUVEXY3PHZSC",
"Flags": 1,
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9",
"NFTokenOfferNode": "0",
"Owner": "rBodLLeMx7mqEBv4B2BsaWeTJYnALQddd6",
"OwnerNode": "a3",
"PreviousTxnID": "FD779D4C51C30730EB3EC7B20D07CDB0BC5A259D165F29C8CFDE86752D5A5619",
"PreviousTxnLgrSeq": 92840801
},
"LedgerEntryType": "NFTokenOffer",
"LedgerIndex": "6267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8"
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rNoj836fhDm1eXaHHefPKs7iDb4gwzS7nc",
"Balance": "999999988",
"Account": "rBodLLeMx7mqEBv4B2BsaWeTJYnALQddd6",
"Balance": "270183296",
"BurnedNFTokens": 72,
"FirstNFTokenSequence": 66004341,
"Flags": 0,
"MintedNFTokens": 1,
"OwnerCount": 1,
"Sequence": 27876155
"MintedNFTokens": 111,
"OwnerCount": 1204,
"Sequence": 66025366
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "AC0A2AD29B67B5E6DA1C5DE696440F59BCD8DEA0A4CF7AFD683D1489AAB1ED24",
"LedgerIndex": "993F123FC11F0FDD065FB33C99007369E4768994C03936C67B92C44F47DE5019",
"PreviousFields": {
"Balance": "1000000000",
"OwnerCount": 0,
"Sequence": 27876154
"Balance": "270183308",
"OwnerCount": 1205,
"Sequence": 66025365
},
"PreviousTxnID": "B483F0F7100658380E42BCF1B15AD59B71C4082635AD53B78D08A5198BBB6939",
"PreviousTxnLgrSeq": 27876154
"PreviousTxnID": "15DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A",
"PreviousTxnLgrSeq": 93800929
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"IndexNext": "a6",
"IndexPrevious": "a2",
"Owner": "rBodLLeMx7mqEBv4B2BsaWeTJYnALQddd6",
"RootIndex": "FF1CF158ED5CE0E41E954B6CD1C3B5ECF1D4A3901113F1E2B9DCBF9532FD7140"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "D397E071F0DE6F26875FA9ABD92FAFC13B1CE6E6A612DD9FDB1EF4FA2D79B0B6",
"PreviousTxnID": "15DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A",
"PreviousTxnLgrSeq": 93800929
}
}
],
"TransactionIndex": 0,
"TransactionIndex": 98,
"TransactionResult": "tesSUCCESS"
},
"tx": {
"Account": "rNoj836fhDm1eXaHHefPKs7iDb4gwzS7nc",
"Account": "rBodLLeMx7mqEBv4B2BsaWeTJYnALQddd6",
"Fee": "12",
"LastLedgerSequence": 93800952,
"NFTokenOffers": [
"6267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8"
],
"Sequence": 66025365,
"SigningPubKey": "03F314C754C26C0B9A859693C57CFCE464A14E86ADA0CAA174817A637E828E64D4",
"SourceTag": 101102979,
"TransactionType": "NFTokenCancelOffer",
"TxnSignature": "30450221009897AFA16980838EAB0DD819E199E77E80879AA303DAEFF36FB970406715050402205892143D89D07CBD95CA101B2DE561465615A05E670A0A7A15209A0EFC52FE44",
"hash": "324EA92E3B2FD79B53655682045667BA7B683D5FB1051BF33BDDA982F21CB531",
"ledger_index": 93800934,
"date": 791530220
},
"validated": true
}
// ... Additional metadata entries omitted for brevity
{
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"NFTokens": [
{
"NFToken": {
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816B4066980521CFFD",
"URI": "697066733A2F2F516D577335764370506278664A48466351514335385534585778614536446E68376E36414457516F517154714364"
}
},
{
"NFToken": {
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816BABD2130521D078",
"URI": "697066733A2F2F516D50363735763661326A5379316263656D70444D355A70365638683842685677594E77737A667053417439394A"
}
}
// ... Additional NFToken entries omitted for brevity
],
"NextPageMin": "6807BF848FACD972F2F617E27003D75B2CAAC9812CAAC9818A6641830521CFE8",
"PreviousPageMin": "6807BF848FACD972F2F617E27003D75B2CAAC9812CAAC9816B4066980521CFFD"
},
"LedgerEntryType": "NFTokenPage",
"LedgerIndex": "6807BF848FACD972F2F617E27003D75B2CAAC9812CAAC98179E62DAF0521D014",
"PreviousFields": {
"NFTokens": [
{
"NFToken": {
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816B4066980521CFFD",
"URI": "697066733A2F2F516D577335764370506278664A48466351514335385534585778614536446E68376E36414457516F517154714364"
}
},
{
"NFToken": {
"NFTokenID": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816BABD2130521D078",
"URI": "697066733A2F2F516D50363735763661326A5379316263656D70444D355A70365638683842685677594E77737A667053417439394A"
}
}
// ... Additional NFToken entries omitted for brevity
]
},
"PreviousTxnID": "75036C0D3740CEBF1A45E1EAA080F434E8CE865375A962D9F809A92B79ABBBBE",
"PreviousTxnLgrSeq": 86769021
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "rwVhZJLcdtioxdETLq31Ne2K97xm4zA8Jv",
"Balance": "62592375",
"BurnedNFTokens": 129,
"FirstNFTokenSequence": 86101877,
"Flags": 0,
"MintedNFTokens": 629,
"OwnerCount": 20,
"Sequence": 86102636
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "DD1EBD4FBD7B5FD90A271F416083636046FBEA37342114A0026C444F95FFE1F3",
"PreviousFields": {
"Balance": "62592387",
"MintedNFTokens": 628,
"Sequence": 86102635
},
"PreviousTxnID": "C43C70DD5921EAFEFDC2EDC43DF83FF0FE74FB796D9E3F32EA4BFAF890968876",
"PreviousTxnLgrSeq": 86774497
}
}
],
"TransactionIndex": 3,
"TransactionResult": "tesSUCCESS"
},
"tx": {
"Account": "rwVhZJLcdtioxdETLq31Ne2K97xm4zA8Jv",
"Fee": "12",
"Flags": 8,
"LastLedgerSequence": 27876176,
"LastLedgerSequence": 86774537,
"Memos": [
{
"Memo": {
"MemoData": "43726561746564206F6E206E66742E6F6E7872702E636F6D"
}
}
],
"NFTokenTaxon": 0,
"Sequence": 27876154,
"SigningPubKey": "EDDC20C6791F9FB13AFDCE2C717BE8779DD451BB556243F1FDBAA3CD159D68A9F6",
"Sequence": 86102635,
"SigningPubKey": "027A4E42790158269E1FAD03364B5A365C26D1C686DEA1A22BFE889AC0C759B2CD",
"SourceTag": 69420589,
"TransactionType": "NFTokenMint",
"TransferFee": 10000,
"TxnSignature": "EF657AB47E86FDC112BA054D90587DFE64A61604D9EDABAA7B01B61B56433E3C2AC5BF5AD2E8F5D2A9EAC22778F289094AC383A3F172B2304157A533E0C79802",
"URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
"hash": "E0774E1B8628E397C6E88F67D4424E55E4C81324607B19318255310A6FBAA4A2",
"ledger_index": 27876158,
"date": 735167200
"TxnSignature": "3045022100B6AD2D48CFBBA1700A45853D779CEA05A4E438F0B98A6BEDB2200ABEA1D9F87902207E5879CDE873807B945344D2C872632103989097AE3660DEEAD52D84640C414D",
"URI": "697066733A2F2F516D57515A4167695A337041327065654A4D7441703663326A394151666E78706A754E62674D5A505748617A3267",
"hash": "FB9F697C4C9C7E8248BA63E7EDB4435B3CC12AF0BF426E618B184B76B7F94D28",
"ledger_index": 86774529,
"date": 764373881
},
"validated": true
}
],
"nft_id": "0008271097707A94B298B50334C39FB46E245D4744C0F5B50000099B00000000",
"validated": true
"validated": true,
"status": "success"
},
"warnings": [
{
@@ -240,28 +525,56 @@ An example of a successful response:
With the `binary` parameter set to _true_, you receive a compact response that uses hex strings. It's not human readable, but much more concise.
{% admonition type="info" name="Note" %}
The example response below uses `api_version: 2`.
{% /admonition %}
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"id": 0,
"type": "response",
"result": {
"ledger_index_min": 21377274,
"ledger_index_max": 27876275,
"nft_id": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9",
"ledger_index_min": 32570,
"ledger_index_max": 99435937,
"transactions": [
{
"meta": "201C00000000F8E31100505697707A94B298B50334C39FB46E245D4744C0F5B5FFFFFFFFFFFFFFFFFFFFFFFFE8FAEC5A0008271097707A94B298B50334C39FB46E245D4744C0F5B50000099B000000007542697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469E1F1E1E1E51100612501A95B3A55B483F0F7100658380E42BCF1B15AD59B71C4082635AD53B78D08A5198BBB693956AC0A2AD29B67B5E6DA1C5DE696440F59BCD8DEA0A4CF7AFD683D1489AAB1ED24E62401A95B3A2D0000000062400000003B9ACA00E1E722000000002401A95B3B2D00000001202B0000000162400000003B9AC9F4811497707A94B298B50334C39FB46E245D4744C0F5B5E1E1F1031000",
"tx_blob": "12001914271022000000082401A95B3A201B01A95B50202A0000000068400000000000000C7321EDDC20C6791F9FB13AFDCE2C717BE8779DD451BB556243F1FDBAA3CD159D68A9F67440EF657AB47E86FDC112BA054D90587DFE64A61604D9EDABAA7B01B61B56433E3C2AC5BF5AD2E8F5D2A9EAC22778F289094AC383A3F172B2304157A533E0C798027542697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469811497707A94B298B50334C39FB46E245D4744C0F5B5",
"ledger_index": 27876158,
"date": 735167200,
"meta_blob": "201C00000062F8E4110064561C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231DE72200000002250588A36155FD779D4C51C30730EB3EC7B20D07CDB0BC5A259D165F29C8CFDE86752D5A5619581C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9E1E1E511006125059749E15515DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A56587E28972F3B63D2260C0671E59593EE6C4D27AB857D1AF230F5CAA959BB3EACE1E4110037566267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8E72200000001250588A3613400000000000000A33C000000000000000055FD779D4C51C30730EB3EC7B20D07CDB0BC5A259D165F29C8CFDE86752D5A56195A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000002DC6C082147682B8C119F94724861D13A4B5307CBFABB669DD83141565EED165BA79999425204A8491C73B1301E34FE1E1E511006125059749E15515DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A56993F123FC11F0FDD065FB33C99007369E4768994C03936C67B92C44F47DE5019E62403EF77952D000004B56240000000101AAB8CE1E722000000002403EF77962D000004B4202B0000006F202C00000048203203EF25756240000000101AAB8081147682B8C119F94724861D13A4B5307CBFABB669DDE1E1E511006425059749E15515DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A56D397E071F0DE6F26875FA9ABD92FAFC13B1CE6E6A612DD9FDB1EF4FA2D79B0B6E722000000003100000000000000A63200000000000000A258FF1CF158ED5CE0E41E954B6CD1C3B5ECF1D4A3901113F1E2B9DCBF9532FD714082147682B8C119F94724861D13A4B5307CBFABB669DDE1E1F1031000",
"tx_blob": "12001C230606B5832403EF7795201B059749F868400000000000000C732103F314C754C26C0B9A859693C57CFCE464A14E86ADA0CAA174817A637E828E64D4744730450221009897AFA16980838EAB0DD819E199E77E80879AA303DAEFF36FB970406715050402205892143D89D07CBD95CA101B2DE561465615A05E670A0A7A15209A0EFC52FE4481147682B8C119F94724861D13A4B5307CBFABB669DD0413206267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8",
"ledger_index": 93800934,
"date": 791530220,
"validated": true
},
{
"meta_blob": "201C0000004BF8E3110064561C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231DE82200000002581C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9E1E1E5110061250588A35E55A1525FDCD490BD83BB936612B5C76D52507E40CB8384223AAC95E9ECDDD816BD56587E28972F3B63D2260C0671E59593EE6C4D27AB857D1AF230F5CAA959BB3EACE1E3110037566267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8E822000000013400000000000000A35A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000002DC6C082147682B8C119F94724861D13A4B5307CBFABB669DD83141565EED165BA79999425204A8491C73B1301E34FE1E1E5110061250588A35D554489CBBC591F7828A27B281FE513CDFC1E032ECF9483F01530404D3C29DDE5DC56993F123FC11F0FDD065FB33C99007369E4768994C03936C67B92C44F47DE5019E62403EF5AB42D00000A1A62400000003AD61EBEE1E722000000002403EF5AB52D00000A1B202B0000006F202C00000048203203EF257562400000003AD61EB281147682B8C119F94724861D13A4B5307CBFABB669DDE1E1E5110064250588A35D554489CBBC591F7828A27B281FE513CDFC1E032ECF9483F01530404D3C29DDE5DC56D397E071F0DE6F26875FA9ABD92FAFC13B1CE6E6A612DD9FDB1EF4FA2D79B0B6E722000000003200000000000000A258FF1CF158ED5CE0E41E954B6CD1C3B5ECF1D4A3901113F1E2B9DCBF9532FD714082147682B8C119F94724861D13A4B5307CBFABB669DDE1E1F1031000",
"tx_blob": "12001B2200000001230606B5832403EF5AB4201B0588A3735A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000002DC6C068400000000000000C732103F314C754C26C0B9A859693C57CFCE464A14E86ADA0CAA174817A637E828E64D474473045022100F9AD1F24218A86E0C4ED87D7A80D30E64BED3158F369383EE2DAF8F215779C7C0220059A7B626D7F38E352BCCA7F45D3B4C10726BA2CAE64F8147089CF057297062281147682B8C119F94724861D13A4B5307CBFABB669DD83141565EED165BA79999425204A8491C73B1301E34F",
"ledger_index": 92840801,
"date": 787788902,
"validated": true
},
{
"meta_blob": "201C00000001F8E311003756417A1F7087351FF2F091149125B8537A08561DAA07B35399943DC4A3B1E591DAE83400000000000000185A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000001EBF1882147682B8C119F94724861D13A4B5307CBFABB669DDE1E1E5110064566400E79FD76837F48323E54A66DA168891E601EBDBF0BA3F9AD6A334784407ABE7220000000032000000000000001758FF1CF158ED5CE0E41E954B6CD1C3B5ECF1D4A3901113F1E2B9DCBF9532FD714082147682B8C119F94724861D13A4B5307CBFABB669DDE1E1E311006456889A03272E16CBCA081FF39EE838C3A217485670113019DAA4A84932AEFC7F02E8220000000158889A03272E16CBCA081FF39EE838C3A217485670113019DAA4A84932AEFC7F025A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9E1E1E511006125052C7E41558176DA2BA3363B0901379B292270CA089EDE39A255D4A8F0224C86483467BCEA56993F123FC11F0FDD065FB33C99007369E4768994C03936C67B92C44F47DE5019E62403EF20182D0000017A6240000000E53A6064E1E722000000002403EF20192D0000017B6240000000E53A605881147682B8C119F94724861D13A4B5307CBFABB669DDE1E1F1031000",
"tx_blob": "12001B230423462D2403EF2018201B052C7E635A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000001EBF1868400000000000000C732103F314C754C26C0B9A859693C57CFCE464A14E86ADA0CAA174817A637E828E64D474473045022100991746A6AD5FC763B658D592AE6301AB19504C8032C97538AFE938FA375EBE8A0220200F7848848653D59151F432D6C6374C4838EE1373F7EFAA5C1EF4570B5FFBFA81147682B8C119F94724861D13A4B5307CBFABB669DD82146807BF848FACD972F2F617E27003D75B2CAAC981F9EA7D1843726561746564206F6E206E66742E6F6E7872702E636F6DE1F1",
"ledger_index": 86802011,
"date": 764479561,
"validated": true
},
{
"meta_blob": "201C0000000EF8E3110064561C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231DE82200000002581C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9E1E1E5110064566096E1D8134722843D499E983F3A092D9B74AD2039F7F4FC3C17587B34DAFA24E7220000000032000000000000000D58830BE57DF6ED1C3103070BF1968CEFB15ADE866418A1B176E9B188ECE82BC63382146807BF848FACD972F2F617E27003D75B2CAAC981E1E1E511006125052C1F3F558DA0521A7779A7F845981EA94D551062C611F492F60F9ECEF53978340A63E32B56CD3CA85955F9B786BAD89F9125200EB9BCBEE5DCC996CC71A565FAA876CD1ACCE1E311003756D8C83BE4736E856BD18F92FC9A4ABD45641313508E5412D6ACACB90A82F948F5E8220000000134000000000000000E5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000001E848082146807BF848FACD972F2F617E27003D75B2CAAC9818314112DE2804BD473EB8A77E01E1C43A9CDC79A6EBFE1E1E511006125052C1F3F558DA0521A7779A7F845981EA94D551062C611F492F60F9ECEF53978340A63E32B56DD1EBD4FBD7B5FD90A271F416083636046FBEA37342114A0026C444F95FFE1F3E6240521D44B2D000001EB62400000003C5AD883E1E72200000000240521D44C2D000001EC202B00000275202C0000008120320521CF7562400000003C5AD87781146807BF848FACD972F2F617E27003D75B2CAAC981E1E1F1031000",
"tx_blob": "12001B2200000001230423462D240521D44B201B052C1F4A5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000001E848068400000000000000C7321027A4E42790158269E1FAD03364B5A365C26D1C686DEA1A22BFE889AC0C759B2CD7447304502210084109EB534DC4C45F5CA0AA10C08E396FDC1A84925B20B4188426EA0E56090CD02203555F331713600C91C09E72EFAC8BCC594A95561C16880866735F62D1DB0794381146807BF848FACD972F2F617E27003D75B2CAAC9818314112DE2804BD473EB8A77E01E1C43A9CDC79A6EBFF9EA7D1843726561746564206F6E206E66742E6F6E7872702E636F6DE1F1",
"ledger_index": 86777666,
"date": 764385850,
"validated": true
}
// ... Additional metadata omitted for brevity
],
"nft_id": "0008271097707A94B298B50334C39FB46E245D4744C0F5B50000099B00000000",
"validated": true
},
"id": "example_nft_history",
"api_version": 2,
"status": "success",
"type": "response",
"warnings": [
{
"id": 2001,
@@ -276,19 +589,42 @@ With the `binary` parameter set to _true_, you receive a compact response that u
```json
{
"result": {
"ledger_index_min": 21377274,
"ledger_index_max": 27876275,
"nft_id": "000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9",
"ledger_index_min": 32570,
"ledger_index_max": 99435993,
"transactions": [
{
"meta": "201C00000000F8E31100505697707A94B298B50334C39FB46E245D4744C0F5B5FFFFFFFFFFFFFFFFFFFFFFFFE8FAEC5A0008271097707A94B298B50334C39FB46E245D4744C0F5B50000099B000000007542697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469E1F1E1E1E51100612501A95B3A55B483F0F7100658380E42BCF1B15AD59B71C4082635AD53B78D08A5198BBB693956AC0A2AD29B67B5E6DA1C5DE696440F59BCD8DEA0A4CF7AFD683D1489AAB1ED24E62401A95B3A2D0000000062400000003B9ACA00E1E722000000002401A95B3B2D00000001202B0000000162400000003B9AC9F4811497707A94B298B50334C39FB46E245D4744C0F5B5E1E1F1031000",
"tx_blob": "12001914271022000000082401A95B3A201B01A95B50202A0000000068400000000000000C7321EDDC20C6791F9FB13AFDCE2C717BE8779DD451BB556243F1FDBAA3CD159D68A9F67440EF657AB47E86FDC112BA054D90587DFE64A61604D9EDABAA7B01B61B56433E3C2AC5BF5AD2E8F5D2A9EAC22778F289094AC383A3F172B2304157A533E0C798027542697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469811497707A94B298B50334C39FB46E245D4744C0F5B5",
"ledger_index": 27876158,
"date": 735167200,
"meta_blob": "201C00000062F8E4110064561C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231DE72200000002250588A36155FD779D4C51C30730EB3EC7B20D07CDB0BC5A259D165F29C8CFDE86752D5A5619581C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9E1E1E511006125059749E15515DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A56587E28972F3B63D2260C0671E59593EE6C4D27AB857D1AF230F5CAA959BB3EACE1E4110037566267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8E72200000001250588A3613400000000000000A33C000000000000000055FD779D4C51C30730EB3EC7B20D07CDB0BC5A259D165F29C8CFDE86752D5A56195A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000002DC6C082147682B8C119F94724861D13A4B5307CBFABB669DD83141565EED165BA79999425204A8491C73B1301E34FE1E1E511006125059749E15515DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A56993F123FC11F0FDD065FB33C99007369E4768994C03936C67B92C44F47DE5019E62403EF77952D000004B56240000000101AAB8CE1E722000000002403EF77962D000004B4202B0000006F202C00000048203203EF25756240000000101AAB8081147682B8C119F94724861D13A4B5307CBFABB669DDE1E1E511006425059749E15515DF0F4622A6BBA7051D029A1ED16930DB3D476D2B29CDF63FFDA5B320BF385A56D397E071F0DE6F26875FA9ABD92FAFC13B1CE6E6A612DD9FDB1EF4FA2D79B0B6E722000000003100000000000000A63200000000000000A258FF1CF158ED5CE0E41E954B6CD1C3B5ECF1D4A3901113F1E2B9DCBF9532FD714082147682B8C119F94724861D13A4B5307CBFABB669DDE1E1F1031000",
"tx_blob": "12001C230606B5832403EF7795201B059749F868400000000000000C732103F314C754C26C0B9A859693C57CFCE464A14E86ADA0CAA174817A637E828E64D4744730450221009897AFA16980838EAB0DD819E199E77E80879AA303DAEFF36FB970406715050402205892143D89D07CBD95CA101B2DE561465615A05E670A0A7A15209A0EFC52FE4481147682B8C119F94724861D13A4B5307CBFABB669DD0413206267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8",
"ledger_index": 93800934,
"date": 791530220,
"validated": true
},
{
"meta_blob": "201C0000004BF8E3110064561C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231DE82200000002581C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9E1E1E5110061250588A35E55A1525FDCD490BD83BB936612B5C76D52507E40CB8384223AAC95E9ECDDD816BD56587E28972F3B63D2260C0671E59593EE6C4D27AB857D1AF230F5CAA959BB3EACE1E3110037566267FBBCE11EEFB9931BFD2BB7E2D4455A60CBA6DE60830266DA4C1C7966D2A8E822000000013400000000000000A35A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000002DC6C082147682B8C119F94724861D13A4B5307CBFABB669DD83141565EED165BA79999425204A8491C73B1301E34FE1E1E5110061250588A35D554489CBBC591F7828A27B281FE513CDFC1E032ECF9483F01530404D3C29DDE5DC56993F123FC11F0FDD065FB33C99007369E4768994C03936C67B92C44F47DE5019E62403EF5AB42D00000A1A62400000003AD61EBEE1E722000000002403EF5AB52D00000A1B202B0000006F202C00000048203203EF257562400000003AD61EB281147682B8C119F94724861D13A4B5307CBFABB669DDE1E1E5110064250588A35D554489CBBC591F7828A27B281FE513CDFC1E032ECF9483F01530404D3C29DDE5DC56D397E071F0DE6F26875FA9ABD92FAFC13B1CE6E6A612DD9FDB1EF4FA2D79B0B6E722000000003200000000000000A258FF1CF158ED5CE0E41E954B6CD1C3B5ECF1D4A3901113F1E2B9DCBF9532FD714082147682B8C119F94724861D13A4B5307CBFABB669DDE1E1F1031000",
"tx_blob": "12001B2200000001230606B5832403EF5AB4201B0588A3735A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000002DC6C068400000000000000C732103F314C754C26C0B9A859693C57CFCE464A14E86ADA0CAA174817A637E828E64D474473045022100F9AD1F24218A86E0C4ED87D7A80D30E64BED3158F369383EE2DAF8F215779C7C0220059A7B626D7F38E352BCCA7F45D3B4C10726BA2CAE64F8147089CF057297062281147682B8C119F94724861D13A4B5307CBFABB669DD83141565EED165BA79999425204A8491C73B1301E34F",
"ledger_index": 92840801,
"date": 787788902,
"validated": true
},
{
"meta_blob": "201C00000001F8E311003756417A1F7087351FF2F091149125B8537A08561DAA07B35399943DC4A3B1E591DAE83400000000000000185A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000001EBF1882147682B8C119F94724861D13A4B5307CBFABB669DDE1E1E5110064566400E79FD76837F48323E54A66DA168891E601EBDBF0BA3F9AD6A334784407ABE7220000000032000000000000001758FF1CF158ED5CE0E41E954B6CD1C3B5ECF1D4A3901113F1E2B9DCBF9532FD714082147682B8C119F94724861D13A4B5307CBFABB669DDE1E1E311006456889A03272E16CBCA081FF39EE838C3A217485670113019DAA4A84932AEFC7F02E8220000000158889A03272E16CBCA081FF39EE838C3A217485670113019DAA4A84932AEFC7F025A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9E1E1E511006125052C7E41558176DA2BA3363B0901379B292270CA089EDE39A255D4A8F0224C86483467BCEA56993F123FC11F0FDD065FB33C99007369E4768994C03936C67B92C44F47DE5019E62403EF20182D0000017A6240000000E53A6064E1E722000000002403EF20192D0000017B6240000000E53A605881147682B8C119F94724861D13A4B5307CBFABB669DDE1E1F1031000",
"tx_blob": "12001B230423462D2403EF2018201B052C7E635A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000001EBF1868400000000000000C732103F314C754C26C0B9A859693C57CFCE464A14E86ADA0CAA174817A637E828E64D474473045022100991746A6AD5FC763B658D592AE6301AB19504C8032C97538AFE938FA375EBE8A0220200F7848848653D59151F432D6C6374C4838EE1373F7EFAA5C1EF4570B5FFBFA81147682B8C119F94724861D13A4B5307CBFABB669DD82146807BF848FACD972F2F617E27003D75B2CAAC981F9EA7D1843726561746564206F6E206E66742E6F6E7872702E636F6DE1F1",
"ledger_index": 86802011,
"date": 764479561,
"validated": true
},
{
"meta_blob": "201C0000000EF8E3110064561C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231DE82200000002581C7421BF3CBA58699FF855EFF8BB68E63B843B17442FEED9CF3FDB5F497C231D5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E9E1E1E5110064566096E1D8134722843D499E983F3A092D9B74AD2039F7F4FC3C17587B34DAFA24E7220000000032000000000000000D58830BE57DF6ED1C3103070BF1968CEFB15ADE866418A1B176E9B188ECE82BC63382146807BF848FACD972F2F617E27003D75B2CAAC981E1E1E511006125052C1F3F558DA0521A7779A7F845981EA94D551062C611F492F60F9ECEF53978340A63E32B56CD3CA85955F9B786BAD89F9125200EB9BCBEE5DCC996CC71A565FAA876CD1ACCE1E311003756D8C83BE4736E856BD18F92FC9A4ABD45641313508E5412D6ACACB90A82F948F5E8220000000134000000000000000E5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000001E848082146807BF848FACD972F2F617E27003D75B2CAAC9818314112DE2804BD473EB8A77E01E1C43A9CDC79A6EBFE1E1E511006125052C1F3F558DA0521A7779A7F845981EA94D551062C611F492F60F9ECEF53978340A63E32B56DD1EBD4FBD7B5FD90A271F416083636046FBEA37342114A0026C444F95FFE1F3E6240521D44B2D000001EB62400000003C5AD883E1E72200000000240521D44C2D000001EC202B00000275202C0000008120320521CF7562400000003C5AD87781146807BF848FACD972F2F617E27003D75B2CAAC981E1E1F1031000",
"tx_blob": "12001B2200000001230423462D240521D44B201B052C1F4A5A000827106807BF848FACD972F2F617E27003D75B2CAAC9816CEE14840521D1E96140000000001E848068400000000000000C7321027A4E42790158269E1FAD03364B5A365C26D1C686DEA1A22BFE889AC0C759B2CD7447304502210084109EB534DC4C45F5CA0AA10C08E396FDC1A84925B20B4188426EA0E56090CD02203555F331713600C91C09E72EFAC8BCC594A95561C16880866735F62D1DB0794381146807BF848FACD972F2F617E27003D75B2CAAC9818314112DE2804BD473EB8A77E01E1C43A9CDC79A6EBFF9EA7D1843726561746564206F6E206E66742E6F6E7872702E636F6DE1F1",
"ledger_index": 86777666,
"date": 764385850,
"validated": true
}
// ... Additional metadata omitted for brevity
],
"nft_id": "0008271097707A94B298B50334C39FB46E245D4744C0F5B50000099B00000000",
"validated": true
"validated": true,
"status": "success"
},
"warnings": [
{
@@ -297,7 +633,6 @@ With the `binary` parameter set to _true_, you receive a compact response that u
}
]
}
```
{% /tab %}
@@ -319,13 +654,14 @@ The response follows the [standard format][], with a successful result containin
Each transaction object includes the following fields, depending on whether it was requested in JSON or hex string (`"binary":true`) format.
| `Field` | Type | Description |
|:---------------|:---------------------------------|:-------------------------|
| `ledger_index` | Integer | The [ledger index][] of the ledger version that included this transaction. |
| `meta` | Object (JSON) or String (Binary) | If `binary` is True, then this is a hex string of the transaction metadata. Otherwise, the transaction metadata is included in JSON format. |
| `tx` | Object | (JSON mode only) JSON object defining the transaction |
| `tx_blob` | String | (Binary mode only) Unique hashed String representing the transaction. |
| `validated` | Boolean | Whether or not the transaction is included in a validated ledger. Any transaction not yet in a validated ledger is subject to change. |
| `Field` | Type | Description |
|:----------------|:---------------------------------|:-------------------------|
| `ledger_index` | Integer | The [ledger index][] of the ledger version that included this transaction. |
| `meta` (API v1) | Object (JSON) or String (Binary) | If `binary` is true, then this is a hex string of the transaction metadata. Otherwise, the transaction metadata is included in JSON format. |
| `meta_blob` (API v2) | String (Binary) | If `binary` is true, then this is a hex string of the transaction metadata. Otherwise, the transaction metadata is included as `meta` in JSON format. |
| `tx` | Object | (JSON mode only) JSON object defining the transaction |
| `tx_blob` | String | (Binary mode only) Unique hashed String representing the transaction. |
| `validated` | Boolean | Whether or not the transaction is included in a validated ledger. Any transaction not yet in a validated ledger is subject to change. |
For definitions of the fields returned in the `tx` object, see [Transaction Metadata](../../../protocol/transactions/metadata.md).

View File

@@ -1,13 +1,11 @@
---
html: ledger.html # Watch carefully for clashes w/ this filename
parent: ledger-methods.html
seo:
description: Get info about a ledger version.
labels:
- Blockchain
- Blockchain
---
# ledger
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/LedgerHandler.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/LedgerHandler.cpp "Source")
Retrieve information about the public [ledger](../../../../concepts/ledgers/index.md).

View File

@@ -1,13 +1,11 @@
---
html: ledger_closed.html
parent: ledger-methods.html
seo:
description: Get the latest closed ledger version.
labels:
- Blockchain
- Blockchain
---
# ledger_closed
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/LedgerClosed.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/LedgerClosed.cpp "Source")
The `ledger_closed` method returns the unique identifiers of the most recently closed ledger. (This ledger is not necessarily validated and immutable yet.)

View File

@@ -1,13 +1,11 @@
---
html: ledger_current.html
parent: ledger-methods.html
seo:
description: Get the current working ledger version.
labels:
- Blockchain
- Blockchain
---
# ledger_current
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/LedgerCurrent.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/LedgerCurrent.cpp "Source")
The `ledger_current` method returns the unique identifiers of the current in-progress [ledger](../../../../concepts/ledgers/index.md). This command is mostly useful for testing, because the ledger returned is still in flux.

View File

@@ -1,14 +1,12 @@
---
html: ledger_data.html
parent: ledger-methods.html
seo:
description: Get the raw contents of a ledger version.
labels:
- Blockchain
- Data Retention
- Blockchain
- Data Retention
---
# ledger_data
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/LedgerData.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/LedgerData.cpp "Source")
The `ledger_data` method retrieves contents of the specified ledger. You can iterate through several calls to retrieve the entire contents of a single ledger version.

View File

@@ -1,14 +1,12 @@
---
html: ledger_entry.html
parent: ledger-methods.html
seo:
description: Get one element from a ledger version.
labels:
- Blockchain
- Data Retention
- Blockchain
- Data Retention
---
# ledger_entry
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/LedgerEntry.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/LedgerEntry.cpp "Source")
The `ledger_entry` method returns a single ledger entry from the XRP Ledger in its raw format. See [ledger format][] for information on the different types of entries you can retrieve.

View File

@@ -1,15 +1,13 @@
---
html: amm_info.html
parent: path-and-order-book-methods.html
seo:
description: Get info about an Automated Market Maker (AMM) instance.
labels:
- Decentralized Exchange
- Cross-Currency
- AMM
- Decentralized Exchange
- Cross-Currency
- AMM
---
# amm_info
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/AMMInfo.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/AMMInfo.cpp "Source")
The {% code-page-name /%} method gets information about an [Automated Market Maker (AMM)](/docs/concepts/tokens/decentralized-exchange/automated-market-makers) instance.

View File

@@ -2,11 +2,11 @@
seo:
description: Get information on order book changes
labels:
- Decentralized Exchange
- Cross-Currency
- Decentralized Exchange
- Cross-Currency
---
# book_changes
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/BookChanges.h "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/BookChanges.h "Source")
The {% code-page-name /%} method reports information about changes to the order books in the [decentralized exchange (DEX)](../../../../concepts/tokens/decentralized-exchange/index.md) compared with the previous ledger version. This may be useful for building "candlestick" charts.

View File

@@ -2,11 +2,11 @@
seo:
description: Get info about offers to exchange two currencies.
labels:
- Decentralized Exchange
- Cross-Currency
- Decentralized Exchange
- Cross-Currency
---
# book_offers
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/BookOffers.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/BookOffers.cpp "Source")
The `book_offers` method retrieves a list of [offers](../../../../concepts/tokens/decentralized-exchange/offers.md) between two currencies, also known as an _order book_. The response omits [unfunded offers](../../../../concepts/tokens/decentralized-exchange/offers.md#lifecycle-of-an-offer) and reports how much of each remaining offer's total is currently funded.

View File

@@ -2,11 +2,11 @@
seo:
description: Check whether an account is authorized to send money directly to another.
labels:
- Accounts
- Security
- Accounts
- Security
---
# deposit_authorized
[[Source]](https://github.com/XRPLF/rippled/blob/817d2339b8632cb2f97d3edd6f7af33aa7631744/src/ripple/rpc/handlers/DepositAuthorized.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/DepositAuthorized.cpp "Source")
The `deposit_authorized` command indicates whether one account is authorized to send payments directly to another. See [Deposit Authorization](../../../../concepts/accounts/depositauth.md) for information on how to require authorization to deliver money to your account.

View File

@@ -5,7 +5,7 @@ labels:
- Oracle
---
# get_aggregate_price
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/GetAggregatePrice.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/GetAggregatePrice.cpp "Source")
The `get_aggregate_price` method retrieves the aggregate price of specified `Oracle` objects, returning three price statistics: mean, median, and trimmed mean.

View File

@@ -1,13 +1,11 @@
---
html: nft_buy_offers.html
parent: path-and-order-book-methods.html
seo:
description: Get a list of all buy offers for a NFToken.
labels:
- Non-fungible Tokens, NFTs, NFTokens
- NFTs
---
# nft_buy_offers
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/NFTOffers.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/NFTOffers.cpp "Source")
The `nft_buy_offers` method returns a list of buy offers for a given [NFToken][] object.

View File

@@ -1,13 +1,11 @@
---
html: nft_sell_offers.html
parent: path-and-order-book-methods.html
seo:
description: Get a list of all sell offers for a NFToken.
labels:
- Non-fungible Tokens, NFTs, NFTokens
- NFTs
---
# nft_sell_offers
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/NFTOffers.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/NFTOffers.cpp "Source")
The `nft_sell_offers` method returns a list of sell offers for a given [NFToken][] object.

View File

@@ -1,14 +1,12 @@
---
html: path_find.html
parent: path-and-order-book-methods.html
seo:
description: Find a path for a payment between two accounts and receive updates.
labels:
- Cross-Currency
- Tokens
- Cross-Currency
- Tokens
---
# path_find
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/PathFind.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/PathFind.cpp "Source")
*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.
@@ -21,7 +19,6 @@ There are three different modes, or sub-commands, of the path_find command. Spec
Although the `rippled` server tries to find the cheapest path or combination of paths for making a payment, it is not guaranteed that the paths returned by this method are, in fact, the best paths. Due to server load, pathfinding may not find the best results. Additionally, you should be careful with the pathfinding results from untrusted servers. A server could be modified to return less-than-optimal paths to earn money for its operators. If you do not have your own server that you can trust with pathfinding, you should compare the results of pathfinding from multiple servers run by different parties, to minimize the risk of a single server returning poor results. (**Note:** A server returning less-than-optimal results is not necessarily proof of malicious behavior; it could also be a symptom of heavy server load.)
## path_find create
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/PathFind.cpp#L50-L56 "Source")
The `create` sub-command of `path_find` creates an ongoing request to find possible paths along which a payment transaction could be made from one specified account such that another account receives a desired amount of some currency. The initial response contains a suggested path between the two addresses that would result in the desired amount being received. After that, the server sends additional messages, with `"type": "path_find"`, with updates to the potential paths. The frequency of updates is left to the discretion of the server, but it usually means once every few seconds when there is a new ledger version.
@@ -62,9 +59,8 @@ The request includes the following parameters:
| `destination_account` | String - [Address][] | Yes | The account to find a path to. (In other words, the account that would receive a payment.) |
| `destination_amount` | [Currency Amount][] | Yes | How much the destination account would receive. **Special case:** You can specify `"-1"` (for XRP) or provide -1 as the contents of the `value` field (for tokens). This requests a path to deliver as much as possible, while spending no more than the amount specified in `send_max` (if provided). |
| `domain` | String - [Hash][] | No | The ledger entry ID of a permissioned domain. If provided, only return paths that use the corresponding [permissioned DEX](../../../../concepts/tokens/decentralized-exchange/permissioned-dexes.md). {% amendment-disclaimer name="PermissionedDEX" /%} |
| `paths` | Array | No | Array of arrays of objects, representing [payment paths](../../../../concepts/tokens/fungible-tokens/paths.md) to check.
| `send_max` | [Currency Amount][] | No | Maximum amount that would be spent. Not compatible with `source_currencies`. |
You can use this to keep updated on changes to particular paths you already know about, or to check the overall cost to make a payment along a certain path. |
| `paths` | Array | No | Array of arrays of objects, representing [payment paths](../../../../concepts/tokens/fungible-tokens/paths.md) to check. You can use this to keep updated on changes to particular paths you already know about, or to check the overall cost to make a payment along a certain path. |
| `send_max` | [Currency Amount][] | No | Maximum amount that would be spent. Not compatible with `source_currencies`. |
The server also recognizes the following fields, but the results of using them are not guaranteed: `source_currencies`, `bridges`. These fields should be considered reserved for future use.
@@ -75,392 +71,28 @@ An example of a successful response:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"id": 1,
"status": "success",
"type": "response",
"result": {
"alternatives": [
{
"paths_computed": [
[
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"currency": "USD",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"currency": "USD",
"issuer": "r9vbV3EHvXWjSkeQ6CAcYVPGeq7TuiXY2X",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "r9vbV3EHvXWjSkeQ6CAcYVPGeq7TuiXY2X",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"currency": "USD",
"issuer": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 1,
"type_hex": "0000000000000001"
}
]
],
"source_amount": "251686"
},
{
"paths_computed": [
[
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 1,
"type_hex": "0000000000000001"
}
]
],
"source_amount": {
"currency": "BTC",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "0.000001541291269274307"
}
},
{
"paths_computed": [
[
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
}
]
],
"source_amount": {
"currency": "CHF",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "0.0009211546262510451"
}
},
{
"paths_computed": [
[
{
"account": "razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"account": "razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
}
]
],
"source_amount": {
"currency": "CNY",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "0.006293562"
}
},
{
"paths_computed": [
[
{
"account": "rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"account": "rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"account": "rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"type": 1,
"type_hex": "0000000000000001"
}
]
],
"source_amount": {
"currency": "DYM",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "0.0007157142857142858"
}
},
{
"paths_computed": [
[
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"account": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
}
],
[
{
"account": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun",
"type": 1,
"type_hex": "0000000000000001"
}
]
],
"source_amount": {
"currency": "EUR",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "0.0007409623616236163"
}
},
{
"paths_computed": [
[
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
},
{
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 48,
"type_hex": "0000000000000030"
},
{
"account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"type": 1,
"type_hex": "0000000000000001"
}
]
],
"source_amount": {
"currency": "JPY",
"issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value": "0.103412412"
}
}
],
"destination_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"destination_amount": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "0.001"
},
"id": 1,
"source_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"full_reply": false
}
}
```
{% code-snippet file="/_api-examples/path_find/create-response.json" /%}
{% /tab %}
{% /tabs %}
The initial response follows the [standard format](../../api-conventions/response-formatting.md), with a successful result containing the following fields:
| Field | Type | Description |
|:----------------------|:-----------------|:----------------------------------|
| `alternatives` | Array | Array of objects with suggested [paths](../../../../concepts/tokens/fungible-tokens/paths.md) to take, as described below. If empty, then no paths were found connecting the source and destination accounts. |
| `destination_account` | String | Unique address of the account that would receive a transaction. |
| `destination_amount` | String or Object | [Currency Amount][] that the destination would receive in a transaction. |
| `source_account` | String | Unique address that would send a transaction. |
| `full_reply` | Boolean | If `false`, this is the result of an incomplete search. A later reply may have a better path. If `true`, then this is the best path found. (It is still theoretically possible that a better path could exist, but `rippled` won't find it.) Until you close the pathfinding request, `rippled` continues to send updates each time a new ledger closes. |
| Field | Type | Description |
|:----------------------|:---------------------|:----------------------------------|
| `alternatives` | Array | Array of objects with suggested [paths](../../../../concepts/tokens/fungible-tokens/paths.md) to take, as described below. If empty, then no paths were found connecting the source and destination accounts. |
| `destination_account` | String - [Address][] | The account that would receive a transaction. |
| `destination_amount` | [Currency Amount][] | How much the destination would receive in a transaction. |
| `source_account` | String - [Address][] | The account that would send a transaction. |
| `full_reply` | Boolean | If `false`, this is the result of an incomplete search. A later reply may have a better path. If `true`, then this is the best path found. (It is still theoretically possible that a better path could exist, but `rippled` won't find it.) Until you close the pathfinding request, `rippled` continues to send updates each time a new ledger closes. |
Each element in the `alternatives` array is an object that represents a path from one possible source currency (held by the initiating account) to the destination account and currency. This object has the following fields:
| Field | Type | Description |
|:---------------------|:-----------------|:---------------------------------------|
| `paths_computed` | Array | Array of arrays of objects defining [payment paths](../../../../concepts/tokens/fungible-tokens/paths.md) |
| `source_amount` | String or Object | [Currency Amount][] that the source would have to send along this path for the destination to receive the desired amount. |
| `destination_amount` | String or Object | _(May be omitted)_ [Currency Amount][] that the destination would receive along this path. Only included if the `destination_amount` from the request was the "-1" special case. |
| Field | Type | Description |
|:---------------------|:--------------------|:---------------------------------------|
| `paths_computed` | Array | Array of arrays of objects defining [payment paths](../../../../concepts/tokens/fungible-tokens/paths.md) |
| `source_amount` | [Currency Amount][] | How much the source would have to send along this path for the destination to receive the desired amount. |
| `destination_amount` | [Currency Amount][] | _(May be omitted)_ How much the destination would receive along this path. Only included if the `destination_amount` from the request was the "-1" special case. |
### Possible Errors
@@ -479,28 +111,12 @@ Here is an example of an asynchronous follow-up from a path_find create request:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"id": 1,
"type": "path_find",
"alternatives": [
/* paths omitted from this example; same format as the initial response */
],
"destination_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"destination_amount": {
"currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "0.001"
},
"source_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"
}
```
{% code-snippet file="/_api-examples/path_find/create-followup.json" /%}
{% /tab %}
{% /tabs %}
## path_find close
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/PathFind.cpp#L58-L67 "Source")
The `close` sub-command of `path_find` instructs the server to stop sending information about the current open pathfinding request.
@@ -545,7 +161,6 @@ If there was no outstanding pathfinding request, an error is returned instead.
* `noPathRequest` - You tried to close a pathfinding request when there is not an open one.
## path_find status
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/PathFind.cpp#L69-L77 "Source")
The `status` sub-command of `path_find` requests an immediate update about the client's currently-open pathfinding request.

View File

@@ -1,14 +1,12 @@
---
html: ripple_path_find.html
parent: path-and-order-book-methods.html
seo:
description: Find a path for payment between two accounts, once.
labels:
- Cross-Currency
- Tokens
- Cross-Currency
- Tokens
---
# ripple_path_find
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/RipplePathFind.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/RipplePathFind.cpp "Source")
The `ripple_path_find` method is a simplified version of the [path_find method][] that provides a single response with a [payment path](../../../../concepts/tokens/fungible-tokens/paths.md) you can use right away. It is available in both the WebSocket and JSON-RPC APIs. However, the results tend to become outdated as time passes. Instead of making multiple calls to stay updated, you should instead use the [path_find method][] to subscribe to continued updates where possible.

View File

@@ -2,13 +2,15 @@
seo:
description: Sign a claim for money from a payment channel.
labels:
- Payment Channels
- Payment Channels
---
# channel_authorize
[[Source]](https://github.com/XRPLF/rippled/blob/d4a56f223a3b80f64ff70b4e90ab6792806929ca/src/ripple/rpc/handlers/PayChanClaim.cpp#L41 "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/PayChanClaim.cpp "Source")
The `channel_authorize` method creates a signature that can be used to redeem a specific amount of XRP from a payment channel.
{% partial file="/docs/_snippets/public-signing-note.md" /%}
{% amendment-disclaimer name="PayChan" /%}
## Request Format

View File

@@ -1,13 +1,11 @@
---
html: channel_verify.html
parent: payment-channel-methods.html
seo:
description: Check a payment channel claim's signature.
labels:
- Payment Channels
- Payment Channels
---
# channel_verify
[[Source]](https://github.com/XRPLF/rippled/blob/d4a56f223a3b80f64ff70b4e90ab6792806929ca/src/ripple/rpc/handlers/PayChanClaim.cpp#L89 "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/PayChanClaim.cpp "Source")
The `channel_verify` method checks the validity of a signature that can be used to redeem a specific amount of XRP from a payment channel.

View File

@@ -1,13 +1,11 @@
---
html: fee.html
parent: server-info-methods.html
seo:
description: Get information about transaction cost.
labels:
- Fees
- Fees
---
# fee
[[Source]](https://github.com/XRPLF/rippled/blob/release/src/ripple/rpc/handlers/Fee1.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/Fee1.cpp "Source")
The `fee` command reports the current state of the open-ledger requirements for the [transaction cost](../../../../concepts/transactions/transaction-cost.md). This requires the [FeeEscalation amendment][] to be enabled.

View File

@@ -2,10 +2,10 @@
seo:
description: Look up the public information about a known validator.
labels:
- Blockchain
- Blockchain
---
# manifest
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Manifest.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/DoManifest.cpp "Source")
The {% code-page-name /%} method reports the current "manifest" information for a given validator public key. The "manifest" is a block of data that authorizes an ephemeral signing key with a signature from the validator's master key pair. {% badge href="https://github.com/XRPLF/rippled/releases/tag/1.7.0" %}Updated in: rippled 1.7.0{% /badge %}

View File

@@ -1,13 +1,11 @@
---
html: server_info.html
parent: server-info-methods.html
seo:
description: Retrieve status of the server in human-readable format.
labels:
- Core Server
- Core Server
---
# server_info (rippled)
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/ServerInfo.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/ServerInfo.cpp "Source")
The `server_info` command asks the server for a human-readable version of various information about [the `rippled` server](../../../../concepts/networks-and-servers/index.md) being queried. For [Clio servers](../../../../concepts/networks-and-servers/the-clio-server.md), see [`server_info` (Clio)](../clio-methods/server_info-clio.md) instead.

View File

@@ -1,14 +1,12 @@
---
html: server_state.html
parent: server-info-methods.html
seo:
description: Retrieve status of the server in machine-readable format.
labels:
- Core Server
- Core Server
---
# server_state
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/ServerState.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/ServerState.cpp "Source")
The `server_state` command asks the server for various machine-readable information about the `rippled` server's current state. The response is almost the same as the [server_info method][], but uses units that are easier to process instead of easier to read. (For example, XRP values are given in integer drops instead of scientific notation or decimal values, and time is given in milliseconds instead of seconds.)

View File

@@ -2,11 +2,11 @@
seo:
description: Retrieve API version information.
labels:
- Core Server
- Core Server
---
# version
[[Source]](https://github.com/XRPLF/rippled/blob/develop/src/ripple/beast/core/SemanticVersion.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/Version.h "Source")
The `version` command retrieves the API version information for the rippled server. For `Clio` servers, see [`version` (`clio`)](../clio-methods/version.md) instead.

View File

@@ -1,17 +1,15 @@
---
html: unsubscribe.html
parent: subscription-methods.html
seo:
description: Stop listening for updates about a particular subject.
labels:
- Payments
- Blockchain
- Accounts
- Smart Contracts
- Payments
- Blockchain
- Accounts
- Smart Contracts
---
# unsubscribe
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Unsubscribe.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/Unsubscribe.cpp "Source")
The `unsubscribe` command tells the server to stop sending messages for a particular subscription or set of subscriptions.

View File

@@ -1,14 +1,12 @@
---
html: submit.html
parent: transaction-methods.html
seo:
description: Send a transaction to the network.
labels:
- Transaction Sending
- Payments
- Transaction Sending
- Payments
---
# submit
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Submit.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/Submit.cpp "Source")
The `submit` method applies a [transaction](../../../protocol/transactions/index.md) and sends it to the network to be confirmed and included in future ledgers.

View File

@@ -1,18 +1,14 @@
---
html: submit_multisigned.html
parent: transaction-methods.html
seo:
description: Send a multi-signed transaction to the network.
labels:
- Transaction Sending
- Transaction Sending
---
# submit_multisigned
[[Source]](https://github.com/XRPLF/rippled/blob/release/src/ripple/rpc/handlers/SubmitMultiSigned.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/SubmitMultiSigned.cpp "Source")
The `submit_multisigned` command applies a [multi-signed](../../../../concepts/accounts/multi-signing.md) transaction and sends it to the network to be included in future ledgers. (You can also submit multi-signed transactions in binary form using the [`submit` command in submit-only mode](submit.md#submit-only-mode).)
This command requires the [MultiSign amendment][] to be enabled.
## Request Format
An example of the request format:

View File

@@ -1,13 +1,11 @@
---
html: transaction_entry.html
parent: transaction-methods.html
seo:
description: Retrieve info about a transaction from a particular ledger version.
labels:
- Transaction Sending
- Transaction Sending
---
# transaction_entry
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/TransactionEntry.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/TransactionEntry.cpp "Source")
The `transaction_entry` method retrieves information on a single transaction from a specific ledger version. (The [tx method][], by contrast, searches all ledgers for the specified transaction. We recommend using that method instead.)

View File

@@ -1,15 +1,13 @@
---
html: tx.html
parent: transaction-methods.html
seo:
description: Retrieve info about a transaction from all the ledgers on hand.
labels:
- Transaction Sending
- Payments
- Transaction Sending
- Payments
---
# tx
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Tx.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/Tx.cpp "Source")
The `tx` method retrieves information on a single [transaction](../../../protocol/transactions/index.md), by its [identifying hash][] or its [CTID](../../api-conventions/ctid.md).

View File

@@ -1,11 +1,9 @@
---
html: tx_history.html
parent: transaction-methods.html
seo:
description: Retrieve info about all recent transactions.
---
# tx_history
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/TxHistory.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/TxHistory.cpp "Source")
The `tx_history` method retrieves some of the most recent transactions made.

View File

@@ -1,13 +1,11 @@
---
html: ping.html
parent: utility-methods.html
seo:
description: Confirm connectivity with the server.
labels:
- Core Server
- Core Server
---
# ping
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Ping.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/Ping.cpp "Source")
The `ping` command returns an acknowledgement, so that clients can test the connection status and latency.

View File

@@ -1,14 +1,12 @@
---
html: random.html
parent: utility-methods.html
seo:
description: Generate a random number.
labels:
- Core Server
- Core Server
---
# random
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/rpc/handlers/Random.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/rpc/handlers/Random.cpp "Source")
The `random` command provides a random number to be used as a source of entropy for random number generation by clients.

View File

@@ -1,21 +1,12 @@
---
html: serialization.html
parent: protocol-reference.html
seo:
description: Conversion between JSON and canonical binary format for XRP Ledger transactions and other objects.
labels:
- Blockchain
- Transaction Sending
curated_anchors:
- name: Sample Code
anchor: "#sample-code"
- name: Canonical Field Order
anchor: "#canonical-field-order"
- name: Type List
anchor: "#type-list"
- Blockchain
- Transaction Sending
---
# Binary Format
[[Source]](https://github.com/XRPLF/rippled/blob/develop/include/xrpl/protocol/SField.h "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/include/xrpl/protocol/SField.h "Source")
This page describes the XRP Ledger's canonical binary format for transactions and other data. This binary format is necessary to create and verify digital signatures of those transactions' contents, and is also used in other places including in the [peer-to-peer communications between servers](../../concepts/networks-and-servers/peer-protocol.md). The [`rippled` APIs](../http-websocket-apis/index.md) typically use JSON to communicate with client applications. However, JSON is unsuitable as a format for serializing transactions for being digitally signed, because JSON can represent the same data in many different but equivalent ways.
@@ -55,7 +46,7 @@ Both signed and unsigned transactions can be represented in both JSON and binary
The serialization processes described here are implemented in multiple places and programming languages:
- In C++ [in the `rippled` code base](https://github.com/XRPLF/rippled/blob/develop/src/ripple/protocol/impl/STObject.cpp).
- In C++ [in the `rippled` code base](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/STObject.cpp).
- In JavaScript in {% repo-link path="_code-samples/tx-serialization/" %}this repository's code samples section{% /repo-link %}.
- In Python 3 in {% repo-link path="_code-samples/tx-serialization/" %}this repository's code samples section{% /repo-link %}.
@@ -65,7 +56,7 @@ Additionally, many [client libraries](../client-libraries.md) provide serializat
## Internal Format
Each field has an canonical binary format, or _internal format_ used in the XRP Ledger protocol to represent that field in transactions and ledger data. The binary format is needed for signing, but it is also used in peer-to-peer communications, in ledger storage, and in other places. The binary formats for all fields are defined in the source code of [`SField.h`](https://github.com/XRPLF/rippled/blob/develop/include/xrpl/protocol/SField.h). The JSON format for transactions and ledger data is standardized for convenience, but JSON is only used in APIs and client libraries: strictly speaking, only the binary format exists at the level of the XRP Ledger protocol.
Each field has an canonical binary format, or _internal format_ used in the XRP Ledger protocol to represent that field in transactions and ledger data. The binary format is needed for signing, but it is also used in peer-to-peer communications, in ledger storage, and in other places. The binary formats for all fields are defined in the source code of [`SField.h`](https://github.com/XRPLF/rippled/blob/master/include/xrpl/protocol/SField.h). The JSON format for transactions and ledger data is standardized for convenience, but JSON is only used in APIs and client libraries: strictly speaking, only the binary format exists at the level of the XRP Ledger protocol.
The [Transaction Format Reference](transactions/index.md) and [Ledger Data Reference](ledger-data/index.md) list both the JSON and the internal (binary) formats for all fields. For example, the `Flags` [common transaction field](transactions/common-fields.md) is a Number in JSON and a UInt32 in binary. Even though the JSON representation uses a data type that can contain decimal places or very large values, the field is limited to values that can be represented as a 32-bit unsigned integer.
@@ -198,6 +189,8 @@ Transactions and ledger entries may contain fields of any of the following types
| [UInt256][] | 5 | 256 | No | A 256-bit binary value. This usually represents the hash of a transaction, ledger version, or ledger entry. |
| [UInt384][] | 22 | 384 | No | **UNUSED.** A 384-bit binary value. |
| [UInt512][] | 23 | 512 | No | **UNUSED.** A 512-bit binary value. |
| [Int32][] | 10 | 32 | No | **UNUSED.** A 32-bit signed integer. |
| [Int64][] | 11 | 64 | No | **UNUSED.** A 64-bit signed integer. |
| [Vector256][] | 19 | Variable | Yes | A list of 256-bit binary values. This may be a list of ledger entries or other hash values. |
| [XChainBridge][] | 25 | Variable | No | A bridge between two blockchains, identified by the door accounts and issued assets on both chains. |
@@ -265,7 +258,7 @@ The following diagram shows the serialization formats for all three amount forma
[{% inline-svg file="/docs/img/serialization-amount.svg" /%}](/docs/img/serialization-amount.svg 'The first bit is an amount type bit (0 = XRP or MPT, 1 = fungible token). XRP has a sign bit (always 1 for positive), an MPT indicator bit (0=XRP) and 61 bits of precision. MPTs have a sign bit (always 1 for positive), an MPT indicator bit (1=MPT), 5 reserved bits, 64 bit integer quantity, and a 192 bit MPT Issuance ID which consists of the 32-bit Sequence number followed by 160-bit issuer AccountID. Fungible Token amounts consist start with an amount type bit of 1, a sign bit which can be 1 or 0, an exponent (8 bits), significant digits (54 bits), currency code (160 bits), and issuer (160 bits).')
#### Token Amount Format
[[Source]](https://github.com/XRPLF/rippled/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/STAmount.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/STAmount.cpp "Source")
[{% inline-svg file="/docs/img/currency-number-format.svg" /%}](/docs/img/currency-number-format.svg "Token Amount Format diagram")
@@ -354,12 +347,12 @@ The following example shows the serialization format for an object (a single `Me
The `Paths` field of a cross-currency [Payment transaction][] is a "PathSet", represented in JSON as an array of arrays. For more information on what paths are used for, see [Paths](../../concepts/tokens/fungible-tokens/paths.md).
A PathSet is serialized as **1 to 6** individual paths in sequence[[Source]](https://github.com/XRPLF/rippled/blob/4cff94f7a4a05302bdf1a248515379da99c5bcd4/src/ripple/app/tx/impl/Payment.h#L35-L36 "Source"). Each complete path is followed by a byte that indicates what comes next:
A PathSet is serialized as **1 to 6** individual paths in sequence[[Source]](https://github.com/XRPLF/rippled/blob/5e33ca56fd51b02a5490e8e156e2de65937cf88e/src/xrpld/app/tx/detail/Payment.h#L30 "Source"). Each complete path is followed by a byte that indicates what comes next:
- `0xff` indicates another path follows
- `0x00` indicates the end of the PathSet
Each path consists of **1 to 8** path steps in order[[Source]](https://github.com/XRPLF/rippled/blob/4cff94f7a4a05302bdf1a248515379da99c5bcd4/src/ripple/app/tx/impl/Payment.h#L38-L39 "Source"). Each step starts with a **type** byte, followed by one or more fields describing the path step. The type indicates which fields are present in that path step through bitwise flags. (For example, the value `0x30` indicates changing both currency and issuer.) If more than one field is present, the fields are always placed in a specific order.
Each path consists of **1 to 8** path steps in order[[Source]](https://github.com/XRPLF/rippled/blob/5e33ca56fd51b02a5490e8e156e2de65937cf88e/src/xrpld/app/tx/detail/Payment.h#L33 "Source"). Each step starts with a **type** byte, followed by one or more fields describing the path step. The type indicates which fields are present in that path step through bitwise flags. (For example, the value `0x30` indicates changing both currency and issuer.) If more than one field is present, the fields are always placed in a specific order.
The following table describes the possible fields and the bitwise flags to set in the type byte to indicate them:
@@ -403,6 +396,21 @@ The types UInt96, UInt384, and UInt512 are currently defined but not used.
The `TransactionType` field is a special case. In JSON, this field is conventionally represented as a string with the name of the transaction type. In binary, this field is a UInt16. The `TRANSACTION_TYPES` object in the [definitions file](#definitions-file) maps these strings to the numeric values used in the binary format.
### Int Fields
[Int32]: #int-fields
[Int64]: #int-fields
The XRP Ledger supports signed 32-bit integers (Int32), which use standard big-endian binary signed integer representation with two's complement to handle negative values.
In JSON format, Int32 fields can be represented as:
- JSON numbers (for values within JavaScript's safe integer range).
- Strings containing decimal numbers.
Although the protocol supports the Int32 type, no fields currently use it. An Int64 type has also been defined, but is unsupported.
### Vector256 Fields
[Vector256]: #vector256-fields

View File

@@ -28,7 +28,7 @@ Each closed [Ledger](../ledger-data/index.md) has a [Ledger Index][] and a [Hash
### Hash Prefixes
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/HashPrefix.h "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/include/xrpl/protocol/HashPrefix.h "Source")
In many cases, the XRP Ledger prefixes an object's binary data with a 4-byte code before calculating its hash, so that objects of different types have different hashes even if their binary formats are the same. The existing 4-byte codes are structured as three alphabetic characters, encoded as ASCII, followed by a zero byte.

View File

@@ -1,10 +1,9 @@
---
html: ledger-entry-common-fields.html
seo:
description: These common fields are part of every ledger entry.
---
# Ledger Entry Common Fields
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp)
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/LedgerFormats.cpp)
Every entry in a [ledger](../../../concepts/ledgers/index.md)'s state data has the same set of common fields, plus additional fields based on the [ledger entry type](ledger-entry-types/index.md). Field names are case-sensitive. The common fields for all ledger entries are:
@@ -19,9 +18,9 @@ Every entry in a [ledger](../../../concepts/ledgers/index.md)'s state data has t
## Ledger Entry ID
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/Indexes.cpp)
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/Indexes.cpp)
Each ledger entry has a unique ID. The ID is derived by hashing important contents of the entry, along with a [namespace identifier](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/LedgerFormats.h). The [ledger entry type](ledger-entry-types/index.md) determines the namespace identifier to use and which contents to include in the hash. This ensures every ID is unique. The hash function is [SHA-512Half][].
Each ledger entry has a unique ID. The ID is derived by hashing important contents of the entry, along with a _namespace identifier_ which is a 16 bit value. The [ledger entry type](ledger-entry-types/index.md) determines the namespace identifier to use and which contents to include in the hash. This ensures every ID is unique. The hash function is [SHA-512Half][].
Generally, a ledger entry's ID is returned as the `index` field in JSON, at the same level as the object's contents. In [transaction metadata](../transactions/metadata.md), the ledger object's ID in JSON is `LedgerIndex`.

View File

@@ -42,7 +42,7 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
| `AMMID` | String | UInt256 | No | {% amendment-disclaimer name="AMM" /%} The ledger entry ID of the corresponding AMM ledger entry. Set during account creation; cannot be modified. If present, indicates that this is a special AMM AccountRoot; always omitted on non-AMM accounts. |
| `Balance` | String | Amount | No | The account's current [XRP balance in drops][XRP, in drops], represented as a string. |
| `BurnedNFTokens` | Number | UInt32 | No | How many total of this account's issued [non-fungible tokens](../../../../concepts/tokens/nfts/index.md) have been burned. This number is always equal or less than `MintedNFTokens`. |
| `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/55dc7a252e08a0b02cd5aa39e9b4777af3eafe77/src/ripple/app/tx/impl/SetAccount.h#L34) |
| `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. |

View File

@@ -64,7 +64,7 @@ There are no flags defined for {% code-page-name /%} entries.
## Check ID Format
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/Indexes.cpp#L193-L200 "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/src/libxrpl/protocol/Indexes.cpp#L335-L339 "Source")
The ID of a `Check` entry is the [SHA-512Half][] of the following values, concatenated in order:

View File

@@ -72,7 +72,7 @@ There are no flags defined for {% code-page-name /%} entries.
## LedgerHashes ID Formats
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/Indexes.cpp#L26-L42)
[[Source]](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/src/libxrpl/protocol/Indexes.cpp#L195-L211)
There are two formats for `LedgerHashes` ledger entry IDs, depending on whether the entry is a "recent history" sub-type or a "previous history" sub-type.

View File

@@ -2,7 +2,7 @@
seo:
description: A trust line, which tracks the net balance of fungible tokens between two accounts.
labels:
- Tokens
- Tokens
---
# RippleState
[[Source]](https://github.com/XRPLF/rippled/blob/f64cf9187affd69650907d0d92e097eb29693945/include/xrpl/protocol/detail/ledger_entries.macro#L277-L289 "Source")
@@ -69,19 +69,19 @@ In addition to the [common fields](../common-fields.md), {% code-page-name /%} e
`RippleState` entries can have the following flags combined into the `Flags` field:
| Flag Name | Hex Value | Decimal Value | Corresponding [TrustSet Flag](../../transactions/types/trustset.md#trustset-flags) | Description |
|-------------------|--------------|---------------|-----------------|---------|
| `lsfAMMNode` | `0x01000000` | 16777216 | (None) | This entry consumed AMM liquidity to complete a [`Payment`](../../transactions/types/payment.md) transaction. |
| `lsfLowReserve` | `0x00010000` | 65536 | (None) | This entry [contributes to the low account's owner reserve](#ripplestate-reserve). |
| `lsfHighReserve` | `0x00020000` | 131072 | (None) | This entry [contributes to the high account's owner reserve](#ripplestate-reserve). |
| `lsfLowAuth` | `0x00040000` | 262144 | `tfSetAuth` | The low account has authorized the high account to hold tokens issued by the low account. |
| `lsfHighAuth` | `0x00080000` | 524288 | `tfSetAuth` | The high account has authorized the low account to hold tokens issued by the high account. |
| `lsfLowNoRipple` | `0x00100000` | 1048576 | `tfSetNoRipple` | The low account [has disabled rippling](../../../../concepts/tokens/fungible-tokens/rippling.md) from this trust line. |
| `lsfHighNoRipple` | `0x00200000` | 2097152 | `tfSetNoRipple` | The high account [has disabled rippling](../../../../concepts/tokens/fungible-tokens/rippling.md) from this trust line. |
| `lsfLowFreeze` | `0x00400000` | 4194304 | `tfSetFreeze` | The low account has frozen the trust line, preventing the high account from transferring the asset. |
| `lsfHighFreeze` | `0x00800000` | 8388608 | `tfSetFreeze` | The high account has frozen the trust line, preventing the low account from transferring the asset. |
| `lsfLowDeepFreeze` | `0x02000000` | 33554432 |`tfSetLowDeepFreeze` | The low account has deep-frozen the trust line, preventing the high account from sending and receiving the asset. |
| `lsfHighDeepFreeze` | `0x04000000` | 67108864 | `tfSetHighDeepFreeze` | The high account has deep-frozen the trust line, preventing the low account from sending and receiving the asset. |
| Flag Name | Hex Value | Decimal Value | Corresponding [TrustSet Flag](../../transactions/types/trustset.md#trustset-flags) | Description |
|---------------------|--------------|---------------|-----------------------|---------|
| `lsfLowReserve` | `0x00010000` | 65536 | (None) | This entry [contributes to the low account's owner reserve](#ripplestate-reserve). |
| `lsfHighReserve` | `0x00020000` | 131072 | (None) | This entry [contributes to the high account's owner reserve](#ripplestate-reserve). |
| `lsfLowAuth` | `0x00040000` | 262144 | `tfSetAuth` | The low account has authorized the high account to hold tokens issued by the low account. |
| `lsfHighAuth` | `0x00080000` | 524288 | `tfSetAuth` | The high account has authorized the low account to hold tokens issued by the high account. |
| `lsfLowNoRipple` | `0x00100000` | 1048576 | `tfSetNoRipple` | The low account [has disabled rippling](../../../../concepts/tokens/fungible-tokens/rippling.md) from this trust line. |
| `lsfHighNoRipple` | `0x00200000` | 2097152 | `tfSetNoRipple` | The high account [has disabled rippling](../../../../concepts/tokens/fungible-tokens/rippling.md) from this trust line. |
| `lsfLowFreeze` | `0x00400000` | 4194304 | `tfSetFreeze` | The low account has frozen the trust line, preventing the high account from transferring the asset. |
| `lsfHighFreeze` | `0x00800000` | 8388608 | `tfSetFreeze` | The high account has frozen the trust line, preventing the low account from transferring the asset. |
| `lsfAMMNode` | `0x01000000` | 16777216 | (None) | This trust line holds one of the assets in an [Automated Market Maker](../../../../concepts/tokens/decentralized-exchange/automated-market-makers.md)'s pool; one of this trust line's accounts is the AMM, and the other is the issuer of the token. {% amendment-disclaimer name="AMM" /%} |
| `lsfLowDeepFreeze` | `0x02000000` | 33554432 |`tfSetLowDeepFreeze` | The low account has deep-frozen the trust line, preventing the high account from sending and receiving the asset. {% amendment-disclaimer name="DeepFreeze" /%} |
| `lsfHighDeepFreeze` | `0x04000000` | 67108864 | `tfSetHighDeepFreeze` | The high account has deep-frozen the trust line, preventing the low account from sending and receiving the asset. {% amendment-disclaimer name="DeepFreeze" /%} |
The two accounts connected by the trust line can each change their own settings with a [TrustSet transaction][].

View File

@@ -8,7 +8,7 @@ labels:
- Blockchain
---
# Ledger Header
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/ledger/ReadView.h#L71 "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/consensus/RCLCxLedger.h "Source")
Every [ledger version](../../../concepts/ledgers/index.md) has a unique header that describes the contents. You can look up a ledger's header information with the [ledger method][]. The contents of the ledger header are as follows:

View File

@@ -8,7 +8,7 @@ labels:
---
# Transaction Results
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/TER.h "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/TER.cpp "Source")
The `rippled` server summarizes transaction results with result codes, which appear in fields such as `engine_result` and `meta.TransactionResult`. These codes are grouped into several categories of with different prefixes:

View File

@@ -7,7 +7,7 @@ labels:
- Transaction Sending
---
# tec Codes
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/protocol/impl/TER.cpp "Source")
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/TER.cpp "Source")
These codes indicate that the transaction did not succeed, but it was applied to a ledger to apply the [transaction cost](../../../../concepts/transactions/transaction-cost.md) and may have had other side effects to the ledger. The `tec` codes have numerical values in the range 100 to 199. It is recommended to use the text code, not the numeric value.
@@ -27,7 +27,7 @@ A transaction that fails with a `tec` code destroys the XRP paid as a [transacti
| `tecCANT_ACCEPT_OWN_NFTOKEN_OFFER` | 157 | The transaction tried to accept an offer that was placed by the same account to buy or sell a [non-fungible token](../../../../concepts/tokens/nfts/index.md). {% amendment-disclaimer name="NonFungibleTokensV1_1" /%} |
| `tecCLAIM` | 100 | Unspecified failure, with transaction cost destroyed. |
| `tecCRYPTOCONDITION_ERROR` | 146 | This [EscrowCreate][] or [EscrowFinish][] transaction contained a malformed or mismatched crypto-condition. |
| `tecDIR_FULL` | 121 | The transaction tried to add an object (such as a trust line, Check, Escrow, or Payment Channel) to an account's owner directory, but that account cannot own any more objects in the ledger. |
| `tecDIR_FULL` | 121 | The transaction tried to add an object (such as a trust line, Check, Escrow, or Payment Channel) to an account's owner directory, but that account cannot own any more objects in the ledger.<br>This error is effectively impossible to receive if {% amendment-disclaimer name="fixDirectoryLimit" compact=true /%} is enabled. |
| `tecDUPLICATE` | 149 | The transaction tried to create an object (such as a [DepositPreauth][] authorization) that already exists. |
| `tecDST_TAG_NEEDED` | 143 | The [Payment transaction][] omitted a [destination tag](../../../../concepts/transactions/source-and-destination-tags.md), but the destination account has the `lsfRequireDestTag` flag enabled. |
| `tecEMPTY_DID` | 187 | The transaction tried to create a [DID entry][] with no contents. A DID must not be empty. {% amendment-disclaimer name="DID" /%} |

View File

@@ -30,7 +30,7 @@ Modify the settings or properties of an [account in the XRP Ledger](../../../../
| Field | JSON Type | [Internal Type][] | Description |
|:-----------------|:-----------------|:------------------|:-------------------|
| [`ClearFlag`](#accountset-flags) | Number | UInt32 | Unique identifier of a flag to disable for this account. |
| [`Domain`](#domain) | String | Blob | The domain that owns this account, as a string of hex representing the ASCII for the domain in lowercase. [Cannot be more than 256 bytes in length.](https://github.com/XRPLF/rippled/blob/55dc7a252e08a0b02cd5aa39e9b4777af3eafe77/src/ripple/app/tx/impl/SetAccount.h#L34) |
| [`Domain`](#domain) | String | Blob | The domain that owns this account, as a string of hex representing the ASCII for the domain in lowercase. [Cannot be more than 256 bytes in length.](https://github.com/XRPLF/rippled/blob/70d5c624e8cf732a362335642b2f5125ce4b43c1/include/xrpl/protocol/Protocol.h#L98) |
| `EmailHash` | String | UInt128 | An arbitrary 128-bit value. Conventionally, clients treat this as the md5 hash of an email address to use for displaying a [Gravatar](http://en.gravatar.com/site/implement/hash/) image. |
| `MessageKey` | String | Blob | Public key for sending encrypted messages to this account. To set the key, it must be exactly 33 bytes, with the first byte indicating the key type: `0x02` or `0x03` for secp256k1 keys, `0xED` for Ed25519 keys. To remove the key, use an empty value. |
| `NFTokenMinter` | String - [Address][] | AccountID | Another account that can [mint NFTokens for you](../../../../tutorials/javascript/nfts/assign-an-authorized-minter.md). {% amendment-disclaimer name="NonFungibleTokensV1_1" /%} |

View File

@@ -19,21 +19,32 @@ Creates both an [AMM entry][] and a [special AccountRoot entry](../../ledger-dat
```json
{
"Account" : "rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
"Amount" : {
"currency" : "TST",
"issuer" : "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd",
"value" : "25"
},
"Amount2" : "250000000",
"Fee" : "2000000",
"Flags" : 2147483648,
"Sequence" : 6,
"TradingFee" : 500,
"TransactionType" : "AMMCreate"
"Account": "r3qNwezAqKp2FRFteiFjhC4V1at4KePFx7",
"Amount": {
"currency": "SKY",
"issuer": "rSKYachd4cqUgztsTr83mEKTAcNZG4Ez2",
"value": "80"
},
"Amount2": "20000000",
"Fee": "200000",
"Flags": 2147483648,
"LastLedgerSequence": 99502897,
"Memos": [
{
"Memo": {
"MemoData": "414D4D2063726561746520696E69746961746564207669612058506D61726B65742E636F6D"
}
}
],
"Sequence": 94041760,
"SourceTag": 20221212,
"TradingFee": 1000,
"TransactionType": "AMMCreate",
}
```
{% tx-example txid="E4CC45E28421618FFEB1920B8FE152EAAB70489BD9AD52FEF24D58389C011C5E" /%}
{% raw-partial file="/docs/_snippets/tx-fields-intro.md" /%}
| Field | JSON Type | [Internal Type][] | Required? | Description |

View File

@@ -121,12 +121,12 @@ In this example, two users are atomically swapping their tokens: XRP for GKO.
| Field | JSON Type | [Internal Type][] | Required? | Description |
|:------------------|:----------|:------------------|:----------|:------------|
| `Flags` | Number | UInt32 | Yes | A bit-flag for this transaction. Exactly one must be specified to represent the batch mode of the transaction. See: [Batch Flags](#batch-flags). |
| `RawTransactions` | Array | Array | Yes | The list of transactions to apply. |
| `RawTransactions` | Array | Array | Yes | The list of transactions to apply. See [RawTransactions](#rawtransactions). |
| `BatchSigners` | Array | Array | No | The signatures authorizing a multi-account `Batch` transaction. |
### RawTransactions
`RawTransactions` contains the list of inner transactions to be applied. There can be up to 8 transactions included. These transactions can come from one account or multiple accounts.
`RawTransactions` contains the list of inner transactions to be applied. There must be a minimum of **2** transactions and a maximum of **8** transactions. These transactions can come from one account or multiple accounts.
Each inner transaction:
@@ -169,6 +169,7 @@ A transaction is considered successful if it receives a `tesSUCCESS` result.
| Error Code | Description |
|:--------------------------|:--------------------------------------------------|
| `temARRAY_EMPTY` | The batch transaction contains zero or one inner transaction. You must submit at least two inner transactions. |
| `temINVALID_INNER_BATCH` | An inner transaction is malformed. |
| `temSEQ_AND_TICKET` | The transaction contains both a `TicketSequence` field and a non-zero `Sequence` value. A transaction can't include both fields, but must have at least one. |

View File

@@ -40,14 +40,18 @@ Create an on-ledger [check](../../../../concepts/payment-types/checks.md), which
## Error Cases
- If the `Destination` account is blocking incoming Checks, the transaction fails with the result code `tecNO_PERMISSION`. {% amendment-disclaimer name="DisallowIncoming" /%}
- If the `Destination` is the sender of the transaction, the transaction fails with the result code `temREDUNDANT`.
- If the `Destination` [account](../../../../concepts/accounts/index.md) does not exist in the ledger, the transaction fails with the result code `tecNO_DST`.
- If the `Destination` account has the `RequireDest` flag enabled but the transaction does not include a `DestinationTag` field, the transaction fails with the result code `tecDST_TAG_NEEDED`.
- If `SendMax` specifies a token which is [frozen](../../../../concepts/tokens/fungible-tokens/freezes.md), the transaction fails with the result `tecFROZEN`.
- If the `Expiration` of the transaction is in the past, the transaction fails with the result `tecEXPIRED`.
- If the sender does not have enough XRP to meet the [owner reserve](../../../../concepts/accounts/reserves.md#owner-reserves) after adding the Check, the transaction fails with the result `tecINSUFFICIENT_RESERVE`.
- If either the sender or the destination of the Check cannot own more objects in the ledger, the transaction fails with the result `tecDIR_FULL`.
Besides errors that can occur for all transactions, {% $frontmatter.seo.title %} transactions can result in the following [transaction result codes](../transaction-results/index.md):
| Error Code | Description |
|:-----------|:------------|
| `tecNO_PERMISSION` | The `Destination` account is blocking incoming Checks. {% amendment-disclaimer name="DisallowIncoming" /%} |
| `temREDUNDANT` | The `Destination` is the sender of the transaction. |
| `tecNO_DST` | The `Destination` [account](../../../../concepts/accounts/index.md) does not exist in the ledger. |
| `tecDST_TAG_NEEDED` | The `Destination` account has the `RequireDest` flag enabled but the transaction does not include a `DestinationTag` field. |
| `tecFROZEN` | `SendMax` specifies a token which is [frozen](../../../../concepts/tokens/fungible-tokens/freezes.md). |
| `tecEXPIRED` | The `Expiration` of the transaction is in the past. |
| `tecINSUFFICIENT_RESERVE` | The sender does not have enough XRP to meet the [owner reserve](../../../../concepts/accounts/reserves.md#owner-reserves) after adding the Check. |
| `tecDIR_FULL` | Either the sender or the destination of the Check cannot own more objects in the ledger.<br>This error is effectively impossible to receive if {% amendment-disclaimer name="fixDirectoryLimit" compact=true /%} is enabled. |
## See Also

View File

@@ -65,7 +65,7 @@ Besides errors that can occur for all transactions, {% $frontmatter.seo.title %}
| Error Code | Description |
|:--------------------------|:------------|
| `tecDIR_FULL` | The sender owns too many items in the ledger already. |
| `tecDIR_FULL` | The sender owns too many items in the ledger already.<br>This error is effectively impossible to receive if {% amendment-disclaimer name="fixDirectoryLimit" compact=true /%} is enabled. |
| `tecINSUFFICIENT_RESERVE` | The sender does not have enough XRP to meet the [reserve requirement](/docs/concepts/accounts/reserves.md) of creating a new Delegate ledger entry. |
| `tecNO_PERMISSION` | At least one permission in the `Permissions` list is not delegatable. See [Permission Values](../../data-types/permission-values.md) for which permissions are not delegatable. |
| `tecNO_TARGET` | The account specified in the `Authorize` field does not exist in the ledger. |

View File

@@ -15,6 +15,23 @@ Control whether an account can hold a given [Multi-purpose Token (MPT)](../../..
{% amendment-disclaimer name="MPTokensV1" /%}
## Example MPTokenAuthorize JSON
This example assumes that the transaction is submitted by the holder of the token.
```json
{
"TransactionType": "MPTokenAuthorize",
"Account": "rsNw23ygZatXv7h8QVSgAE4jktY2uW1iZP",
"MPTokenIssuanceID": "05EECEBE97A7D635DE2393068691A015FED5A89AD203F5AA",
"Fee": "10",
"Flags": 0,
"Sequence": 99537811
}
```
{% tx-example txid="9C19FBB8C0C92C17B11DF626A94303776D44AC36D7A760863FF3585532C38230" /%}
{% raw-partial file="/docs/_snippets/tx-fields-intro.md" /%}
| Field | JSON Type | [Internal Type][] | Required? | Description |

View File

@@ -20,16 +20,19 @@ This example assumes that the issuer of the token is the signer of the transacti
```json
{
"TransactionType": "MPTokenIssuanceCreate",
"Account": "rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG",
"AssetScale": 2,
"TransferFee": 314,
"Account": "rNFta7UKwcoiCpxEYbhH2v92numE3cceB6",
"AssetScale": 4,
"TransferFee": 0,
"MaximumAmount": "50000000",
"Flags": 83659,
"MPTokenMetadata": "7B227469636B6572223A20225442494C4C222C20226E616D65223A2022542D42696C6C205969656C6420546F6B656E222C202264657363223A202241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C202269636F6E223A202268747470733A2F2F6578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C202261737365745F636C617373223A2022727761222C202261737365745F737562636C617373223A20227472656173757279222C20226973737565725F6E616D65223A20224578616D706C65205969656C6420436F2E222C202275726C73223A205B7B2275726C223A202268747470733A2F2F6578616D706C657969656C642E636F2F7462696C6C222C202274797065223A202277656273697465222C20227469746C65223A202250726F647563742050616765227D2C207B2275726C223A202268747470733A2F2F6578616D706C657969656C642E636F2F646F6373222C202274797065223A2022646F6373222C20227469746C65223A20225969656C6420546F6B656E20446F6373227D5D2C20226164646974696F6E616C5F696E666F223A207B22696E7465726573745F72617465223A2022352E303025222C2022696E7465726573745F74797065223A20227661726961626C65222C20227969656C645F736F75726365223A2022552E532E2054726561737572792042696C6C73222C20226D617475726974795F64617465223A2022323034352D30362D3330222C20226375736970223A2022393132373936525830227D7D",
"Fee": "10"
"MPTokenMetadata": "7B2274223A225442494C4C222C226E223A22542D42696C6C205969656C6420546F6B656E222C2264223A2241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C2269223A226578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C226163223A22727761222C226173223A227472656173757279222C22696E223A224578616D706C65205969656C6420436F2E222C227573223A5B7B2275223A226578616D706C657969656C642E636F2F7462696C6C222C2263223A2277656273697465222C2274223A2250726F647563742050616765227D2C7B2275223A226578616D706C657969656C642E636F2F646F6373222C2263223A22646F6373222C2274223A225969656C6420546F6B656E20446F6373227D5D2C226169223A7B22696E7465726573745F72617465223A22352E303025222C22696E7465726573745F74797065223A227661726961626C65222C227969656C645F736F75726365223A22552E532E2054726561737572792042696C6C73222C226D617475726974795F64617465223A22323034352D30362D3330222C226375736970223A22393132373936525830227D7D",
"Fee": "12",
"Flags": 122,
"Sequence": 99536574
}
```
{% tx-example txid="F4491A84EE3BC27A2F5B63FEBF0CB310368E27E9EF07E00A46F1DC2764852133" /%}
{% raw-partial file="/docs/_snippets/tx-fields-intro.md" /%}
| Field | JSON Type | [Internal Type][] | Required? | Description |

View File

@@ -13,14 +13,18 @@ Delete a [Multi-purpose Token (MPT)](../../../../concepts/tokens/fungible-tokens
## Example MPTokenIssuanceDestroy JSON
```json
```json
{
"TransactionType": "MPTokenIssuanceDestroy",
"Account": "rNFta7UKwcoiCpxEYbhH2v92numE3cceB6",
"MPTokenIssuanceID": "05EECEBC97A7D635DE2393068691A015FED5A89AD203F5AA",
"Fee": "10",
"MPTokenIssuanceID": "00070C4495F14B0E44F78A264E41713C64B5F89242540EE255534400000000000000"
"Flags": 0,
"Sequence": 99536573
}
```
{% tx-example txid="B270DEE7D229D626699935B7B3CC37A1BAD3E832044CE5129722C2965D3EB228" /%}
{% raw-partial file="/docs/_snippets/tx-fields-intro.md" /%}

View File

@@ -11,17 +11,23 @@ Update a mutable property of a [Multi-purpose Token (MPT)](../../../../concepts/
{% amendment-disclaimer name="MPTokensV1" /%}
## Example
## Example MPTokenIssuanceSet JSON
```json
This example locks the balances of all holders of the specified MPT issuance.
```json
{
"TransactionType": "MPTokenIssuanceSet",
"Account": "rNFta7UKwcoiCpxEYbhH2v92numE3cceB6",
"MPTokenIssuanceID": "05EECEBE97A7D635DE2393068691A015FED5A89AD203F5AA",
"Fee": "10",
"MPTokenIssuanceID": "00070C4495F14B0E44F78A264E41713C64B5F89242540EE255534400000000000000",
"Flags": 1
"Flags": 1,
"Sequence": 99536577
}
```
{% tx-example txid="5DB41F975E3AC04DD4AE9E93764AFBBABB0E4C7322B2D6F2E84B253FAA170BF3" /%}
{% raw-partial file="/docs/_snippets/tx-fields-intro.md" /%}
| Field | JSON Type | [Internal Type][] | Required? | Description |

View File

@@ -56,7 +56,7 @@ Besides errors that can occur for all transactions, {% $frontmatter.seo.title %}
| `temDISABLED` | The [NonFungibleTokensV1 amendment][] is not enabled. |
| `temBAD_AMOUNT` | The `Amount` field is not valid. For example, the amount was zero for a buy offer, or the amount is denominated in fungible tokens but the `NFToken` has the [`lsfOnlyXRP` flag](../../data-types/nftoken.md#nftoken-flags) enabled. |
| `temBAD_EXPIRATION` | The specified `Expiration` time is invalid (for example, `0`). |
| `tecDIR_FULL` | The sender already owns too many objects in the ledger, or there are already too many offers to buy or sell this token. |
| `tecDIR_FULL` | The sender already owns too many objects in the ledger, or there are already too many offers to buy or sell this token.<br>This error is effectively impossible to receive if {% amendment-disclaimer name="fixDirectoryLimit" compact=true /%} is enabled. |
| `tecEXPIRED` | The specified `Expiration` time has already passed. |
| `tecFROZEN` | The `Amount` is denominated in fungible tokens, but one of the trust lines that would receive tokens from this offer is [frozen](../../../../concepts/tokens/fungible-tokens/freezes.md). This could be the seller's trust line or the `NFToken`'s issuer's trust line (if the `NFToken` has a transfer fee). |
| `tecINSUFFICIENT_RESERVE` | The sender does not have enough XRP to meet the [reserve requirement](../../../../concepts/accounts/reserves.md) after placing this offer. |

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