diff --git a/@l10n/es-ES/docs/concepts/accounts/account-types.md b/@l10n/es-ES/docs/concepts/accounts/account-types.md
index b71b6a2ee5..bc0c34e6e4 100644
--- a/@l10n/es-ES/docs/concepts/accounts/account-types.md
+++ b/@l10n/es-ES/docs/concepts/accounts/account-types.md
@@ -74,8 +74,8 @@ Si una dirección de reserva se ve comprometida, las consecuencias son similares
- [Cuentas](index.md)
- [Claves criptográficas](cryptographic-keys.md)
- **Tutoriales:**
- - [Asignar par de claves regulares](../../tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md)
- - [Cambiar o eliminar par de claves regulares](../../tutorials/how-tos/manage-account-settings/change-or-remove-a-regular-key-pair.md)
+ - [Asignar par de claves regulares](/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md)
+ - [Cambiar o eliminar par de claves regulares](/docs/tutorials/best-practices/key-management/change-or-remove-a-regular-key-pair.md)
- **Referencias:**
- [metodo account_info][]
- [Transacción SetRegularKey][]
diff --git a/@l10n/es-ES/docs/concepts/accounts/cryptographic-keys.md b/@l10n/es-ES/docs/concepts/accounts/cryptographic-keys.md
index 1fff285868..dd267048b6 100644
--- a/@l10n/es-ES/docs/concepts/accounts/cryptographic-keys.md
+++ b/@l10n/es-ES/docs/concepts/accounts/cryptographic-keys.md
@@ -88,7 +88,7 @@ El [metodo wallet_propose][] es una forma de generar el par de claves maestras.
**Atención:** Si un actor malicioso conoce tu clave privada maestra (o semilla), tendrá control completo sobre tu cuenta, a no ser que tu par de claves maestras se inhabilite. Puedes tomar todo tu dinero de la cuenta posee y causar un daño irreparable. ¡Trata tus valores secretos con cuidado!
-Dado que cambiar el par de claves maestras es imposible, debes cuidarlo en proporción al valor de lo que posea. Una buena práctica es [guardar tu par de claves maestras offline](../../tutorials/how-tos/manage-account-settings/offline-account-setup.md) y configurar un par de claves normales para firmar transacciones en tu cuenta. Al mantener el par de claves maestras activadas pero offline, puedes estar razonablemente seguro de que nadie puede acceder a él a través de Internet, pero aun así deberías encontrarlo en caso de una emergencia.
+Dado que cambiar el par de claves maestras es imposible, debes cuidarlo en proporción al valor de lo que posea. Una buena práctica es [guardar tu par de claves maestras offline](/docs/tutorials/best-practices/key-management/offline-account-setup.md) y configurar un par de claves normales para firmar transacciones en tu cuenta. Al mantener el par de claves maestras activadas pero offline, puedes estar razonablemente seguro de que nadie puede acceder a él a través de Internet, pero aun así deberías encontrarlo en caso de una emergencia.
Mantener tu par de claves maestras offline significa no colocar tu información secreta (passphrase, semilla, or clave privada) en cualquier sitio en que los actores maliciosos puedan tener acceso a él. En general, esto quiere decir que no está al alcance de un programa inofrmático que interactúe con Internet. Por ejemplo, puedes guardarlo en un equipo que no se conecta nunca a Internet, en un trozo de papel guardado en una caja fuerte, o tenerla completamente memorizada. (Memorizarla tiene algunos puntos inconvenientes, incluido ser imposible pasar la clave una vez muerto.)
@@ -119,7 +119,7 @@ Una buena práctica de seguridad es guardar tu clave privada maestra en algun si
El par de claves normales tiene el mismo formato que el par de claves maestras. Las generas de la misma forma (por ejemplo, usando el [método wallet_propose][]). La única diferencia es que el par de claves normales es que el par no está intrínsicamente vinculado a la cuenta para la que firma transacciones. Es posible (pero no es buena idea) utilizar el par de claves maestras de una cuenta como lel par de claves normales para otra cuenta.
-La [transacción SetRegularKey][] asigna o cambia el par de claves normales de una cuenta. Para un tutorial de asignación o cambio de un par de claves normales, ver [Asignar par de claves normales](../../tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md).
+La [transacción SetRegularKey][] asigna o cambia el par de claves normales de una cuenta. Para un tutorial de asignación o cambio de un par de claves normales, ver [Asignar par de claves normales](/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md).
## Algorítmos de firma
@@ -248,8 +248,8 @@ Los pasos para derivar par de claves de cuenta XRP Ledger secp256k1 desde un val
- **Conceptos:**
- [Direcciones de emisión y operacionales](account-types.md)
- **Tutoriales:**
- - [Asignación de par de claves normales](../../tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md)
- - [Cambiar o eliminar par de claves normales](../../tutorials/how-tos/manage-account-settings/change-or-remove-a-regular-key-pair.md)
+ - [Asignación de par de claves normales](/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md)
+ - [Cambiar o eliminar par de claves normales](/docs/tutorials/best-practices/key-management/change-or-remove-a-regular-key-pair.md)
- **Referencias:**
- [Transacción SetRegularKey][]
- [Objeto de ledger AccountRoot](../../references/protocol/ledger-data/ledger-entry-types/accountroot.md)
diff --git a/@l10n/es-ES/docs/concepts/accounts/index.md b/@l10n/es-ES/docs/concepts/accounts/index.md
index 4bbf850e8e..56189742b9 100644
--- a/@l10n/es-ES/docs/concepts/accounts/index.md
+++ b/@l10n/es-ES/docs/concepts/accounts/index.md
@@ -63,7 +63,7 @@ La forma típica de obtener una cuenta en el XRP Ledger es la siguiente:
- [Transacción Payment][]
- [Objeto AccountRoot](../../references/protocol/ledger-data/ledger-entry-types/accountroot.md)
- **Tutoriales:**
- - [Administrar configuración de la cuenta (Categoría)](../../tutorials/how-tos/manage-account-settings/index.md)
- - [Monitorizar pagos entrantes con WebSocket](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
+ - [Administrar configuración de la cuenta (Categoría)](/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md)
+ - [Monitorizar pagos entrantes con WebSocket](/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/@l10n/es-ES/docs/concepts/accounts/multi-signing.md b/@l10n/es-ES/docs/concepts/accounts/multi-signing.md
index 3bee2e4d0d..457f003ebe 100644
--- a/@l10n/es-ES/docs/concepts/accounts/multi-signing.md
+++ b/@l10n/es-ES/docs/concepts/accounts/multi-signing.md
@@ -60,7 +60,7 @@ Podría darse el caso donde crees una lista de multi firma como "plan de respald
Para enviar transacciones multi-signed de forma satisfactoria, debes de hacer todo lo siguiente:
-* La dirección que envía la transacción (especificada en el campo `Account`) debe tener un [objeto `SignerList` en el ledger ](../../references/protocol/ledger-data/ledger-entry-types/signerlist.md). Para instrucciones de cómo hacer esto, ver [Set Up Multi-Signing](../../tutorials/how-tos/manage-account-settings/set-up-multi-signing.md).
+* La dirección que envía la transacción (especificada en el campo `Account`) debe tener un [objeto `SignerList` en el ledger ](../../references/protocol/ledger-data/ledger-entry-types/signerlist.md). Para instrucciones de cómo hacer esto, ver [Set Up Multi-Signing](/docs/tutorials/best-practices/key-management/set-up-multi-signing.md).
* La transacción debe incluir el campo `SigningPubKey` como un valor vacío.
* La transacción debe incluir el [campo `Signers`](../../references/protocol/transactions/common-fields.md#signers-field) conteniendo un array de firmas.
* Las firmas presentadas en el array `Signers` debe coincidir con los firmantes definidos en la `SignerList`.
@@ -72,8 +72,8 @@ Para enviar transacciones multi-signed de forma satisfactoria, debes de hacer to
## Ver también
- **Tutoriales:**
- - [Configurar Multi-Signing](../../tutorials/how-tos/manage-account-settings/set-up-multi-signing.md)
- - [Envíar una transacción Multi-Signed](../../tutorials/how-tos/manage-account-settings/send-a-multi-signed-transaction.md)
+ - [Configurar Multi-Signing](/docs/tutorials/best-practices/key-management/set-up-multi-signing.md)
+ - [Envíar una transacción Multi-Signed](/docs/tutorials/best-practices/key-management/send-a-multi-signed-transaction.md)
- **Conceptos:**
- [Claves criptográficas](cryptographic-keys.md)
- [Coste de transacción especial para transacciones Multi-signed](../transactions/transaction-cost.md#special-transaction-costs)
diff --git a/@l10n/es-ES/docs/concepts/accounts/reserves.md b/@l10n/es-ES/docs/concepts/accounts/reserves.md
index bc7ae9d7b5..1213a0014c 100644
--- a/@l10n/es-ES/docs/concepts/accounts/reserves.md
+++ b/@l10n/es-ES/docs/concepts/accounts/reserves.md
@@ -54,7 +54,7 @@ Las aplicaciones pueden buscar los valores de las reservas base e incremental ac
Para determinar las reservas de propietario de una cuenta, hay que multiplicar la reserva incremental por el número de objetos que la cuenta posee. Para mirar el número de objetos que una cuenta posee, llama al [método account_info][] y toma `account_data.OwnerCount`.
-Para calcular el requisito total de direcciones, multiplica `OwnerCount` por `reserve_inc_xrp`, y luego suma `reserve_base_xrp`. [Aquí tienes una demostración](../../tutorials/python/build-apps/build-a-desktop-wallet-in-python.md#codeblock-17) del cálculo en Python.
+Para calcular el requisito total de direcciones, multiplica `OwnerCount` por `reserve_inc_xrp`, y luego suma `reserve_base_xrp`. [Aquí tienes una demostración](/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md#codeblock-17) del cálculo en Python.
## Quedarse por debajo del requisito de reserva
@@ -76,6 +76,6 @@ El XRP Ledger tiene un mecanismo para ajustar los requisitos de reserva. Estos a
- [Objeto AccountRoot][]
- [Votación de Fee](../consensus-protocol/fee-voting.md)
- [Pseudo-transacción SetFee][]
-- [Tutorial: Calcular y mostrar los requisitos de reserva (Python)](../../tutorials/python/build-apps/build-a-desktop-wallet-in-python.md#3-display-an-account)
+- [Tutorial: Calcular y mostrar los requisitos de reserva (Python)](/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md#3-display-an-account)
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/@l10n/es-ES/docs/concepts/accounts/tickets.md b/@l10n/es-ES/docs/concepts/accounts/tickets.md
index 10f9fd6bf8..0b6e8397cc 100644
--- a/@l10n/es-ES/docs/concepts/accounts/tickets.md
+++ b/@l10n/es-ES/docs/concepts/accounts/tickets.md
@@ -63,7 +63,7 @@ Cualquier cuenta puede crear y utilizar Tickets en cualquier tipo de transaccion
- **Conceptos:**
- [Multi-Signing](multi-signing.md)
- **Tutoriales:**
- - [Usar Tickets](../../tutorials/how-tos/manage-account-settings/use-tickets.md)
+ - [Usar Tickets](/docs/tutorials/best-practices/transaction-sending/use-tickets.md)
- **Referencias:**
- [Transacción TicketCreate][]
- [Campos comunes de una transacción](../../references/protocol/transactions/common-fields.md)
diff --git a/@l10n/es-ES/docs/concepts/networks-and-servers/index.md b/@l10n/es-ES/docs/concepts/networks-and-servers/index.md
index d58c5b42f3..b2409842ee 100644
--- a/@l10n/es-ES/docs/concepts/networks-and-servers/index.md
+++ b/@l10n/es-ES/docs/concepts/networks-and-servers/index.md
@@ -27,7 +27,7 @@ Necesitas confiar en el servidor que utilizas. Si te conectas a un servidor mali
* Podría selectivamente mostrar u ocultar los caminos (o paths) de pago y las foertas de intercambio de divisas para garantizar su propio beneficio mientras no te ofrece la mejor oferta.
* Si le enviaste la clave secreta de tu dirección, esto podría generar transacciones arbitrarias en tu nombre e incluso transferir o destruir todo el dinero que la dirección posee.
-Adicionalmente, ejecutar tu propio servidor te da [acceso de administrador](../../tutorials/http-websocket-apis/build-apps/get-started.md#admin-access), lo que te permite ejecutar comandos exclusivos de administrador y de carga intensa. Si utilizas un servidor compartido, debes preocuparte por los otros usuarios del mismo servidor compitiendo contra ti por el poder de computación del servidor. Muchos de los comandos en el API WebSocket puede poner mucha presión sobre el servidor, por lo que el servidor tiene la opción de reducir sus respuestas cuando lo necesite. Si compartes un servidor con otros, puede que no siempre consigas los mejores resultados posibles.
+Adicionalmente, ejecutar tu propio servidor te da [acceso de administrador](/docs/tutorials/get-started/get-started-http-websocket-apis.md#admin-access), lo que te permite ejecutar comandos exclusivos de administrador y de carga intensa. Si utilizas un servidor compartido, debes preocuparte por los otros usuarios del mismo servidor compitiendo contra ti por el poder de computación del servidor. Muchos de los comandos en el API WebSocket puede poner mucha presión sobre el servidor, por lo que el servidor tiene la opción de reducir sus respuestas cuando lo necesite. Si compartes un servidor con otros, puede que no siempre consigas los mejores resultados posibles.
Finalmente, si ejecutas un servidor de validación, puedes utilizar un servidor común como proxy a la red pública mientras mantienes tu servidor de vaalidación en una red privada la cual es solo accesible desde el mundo exterior desde tu servidor común. Esto hace más difícil comprometer la integridad de tu servidor de validación.
diff --git a/@l10n/es-ES/docs/concepts/networks-and-servers/rippled-server-modes.md b/@l10n/es-ES/docs/concepts/networks-and-servers/rippled-server-modes.md
index 97756ac013..ead2624cb5 100644
--- a/@l10n/es-ES/docs/concepts/networks-and-servers/rippled-server-modes.md
+++ b/@l10n/es-ES/docs/concepts/networks-and-servers/rippled-server-modes.md
@@ -12,7 +12,7 @@ El software del servidor `rippled` puede ejecutarse en varios modos dependiendo
- [**Modo P2P**](#modo-p2p) - Este es el modo principal del servidor: sigue la red peer-to-peer, procesa transacciones, y mantiene cierta cantidad de [histórico del ledger](ledger-history.md). Este modo se puede configurar para alguno o todos los siguientes roles:
- [**Validador**](#validadores) - Ayuda a asegurar la red participando en el consenso.
- - [**Servidor API**](#servidores-api) - Proporciona [acceso API](../../tutorials/http-websocket-apis/build-apps/get-started.md) para leer datos del ledger compartido, enviar transacciones, y mirar la actividad en el ledger. Opcionalmente, puede ser un [**servidor full history**](#servidores-full-history), el cual guarda un registro completo de transacciones y el histórico del ledger.
+ - [**Servidor API**](#servidores-api) - Proporciona [acceso API](/docs/tutorials/get-started/get-started-http-websocket-apis.md) para leer datos del ledger compartido, enviar transacciones, y mirar la actividad en el ledger. Opcionalmente, puede ser un [**servidor full history**](#servidores-full-history), el cual guarda un registro completo de transacciones y el histórico del ledger.
- [**Servidor hub**](#hubs-públicos) - Transmite mensajes entre muchos otros miembros de la red peer-to-peer.
- [**Modo solitario**](#modo-solitario) - Un modo offline para pruebas. No se conecta a la red peer-to-peer ni usa consenso.
diff --git a/@l10n/es-ES/docs/concepts/payment-types/checks.md b/@l10n/es-ES/docs/concepts/payment-types/checks.md
index 3bb908f04b..be972f997c 100644
--- a/@l10n/es-ES/docs/concepts/payment-types/checks.md
+++ b/@l10n/es-ES/docs/concepts/payment-types/checks.md
@@ -50,11 +50,11 @@ Para más información sobre Cheques en el XRP Ledger, ver:
- [CheckCash][]
- [CheckCancel][]
- [Tutoriales de cheques](../../tutorials/how-tos/use-specialized-payment-types/use-checks/index.md)
- - [Enviar un cheque](../../tutorials/how-tos/use-specialized-payment-types/use-checks/send-a-check.md)
- - [Buscar cheques](../../tutorials/how-tos/use-specialized-payment-types/use-checks/look-up-checks.md)
- - [Canjear un cheque por la cantidad exacta](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md)
- - [Canjear un cheque por una cantidad flexible](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md)
- - [Cancelar un cheque](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cancel-a-check.md)
+ - [Enviar un cheque](/docs/tutorials/payments/send-a-check.md)
+ - [Buscar cheques](/docs/tutorials/ /how-tos/use-specialized-payment-types/use-checks/look-up-checks.md)
+ - [Canjear un cheque por la cantidad exacta](/docs/tutorials/payments/cash-a-check-for-an-exact-amount.md)
+ - [Canjear un cheque por una cantidad flexible](/docs/tutorials/payments/cash-a-check-for-a-flexible-amount.md)
+ - [Cancelar un cheque](/docs/tutorials/payments/cancel-a-check.md)
- [Enmienda Cheques][]
Para más información sobre funciones relacionadas, ver:
diff --git a/@l10n/es-ES/docs/concepts/payment-types/direct-xrp-payments.md b/@l10n/es-ES/docs/concepts/payment-types/direct-xrp-payments.md
index 8178e8b9e1..5ba9bdb82d 100644
--- a/@l10n/es-ES/docs/concepts/payment-types/direct-xrp-payments.md
+++ b/@l10n/es-ES/docs/concepts/payment-types/direct-xrp-payments.md
@@ -39,8 +39,8 @@ La base de cualquier sistema financiero es la transferencia de valor. El método
## Ver también
- **Tutoriales:**
- - [Enviar XRP (Tutorial interactivo)](../../tutorials/how-tos/send-xrp.md)
- - [Monitorizar pagos entrantes con WebSocket](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
+ - [Enviar XRP (Tutorial interactivo)](/docs/tutorials/payments/send-xrp.md)
+ - [Monitorizar pagos entrantes con WebSocket](/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
- **Referencias:**
- [Transacción Payment][]
- [Resultados de Transaction](../../references/protocol/transactions/transaction-results/index.md)
diff --git a/@l10n/es-ES/docs/concepts/payment-types/partial-payments.md b/@l10n/es-ES/docs/concepts/payment-types/partial-payments.md
index 27a76af4bf..ed97118399 100644
--- a/@l10n/es-ES/docs/concepts/payment-types/partial-payments.md
+++ b/@l10n/es-ES/docs/concepts/payment-types/partial-payments.md
@@ -128,7 +128,7 @@ Utilizar [el campo `delivered_amount`](#the-delivered_amount-field) al procesar
- [Transacciones](../transactions/index.md)
- **Tutoriales:**
- [Buscar resultados de transacciones](../transactions/finality-of-results/look-up-transaction-results.md)
- - [Monitorear pagos recibidos con WebSocket](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
+ - [Monitorear pagos recibidos con WebSocket](/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
- [Usar tipos de pagos especializados](../../tutorials/how-tos/use-specialized-payment-types/index.md)
- [Listar XRP en un Exchange](../../use-cases/defi/list-xrp-as-an-exchange.md)
- **Referencias:**
diff --git a/@l10n/ja/docs/_snippets/checkcash-prereqs.md b/@l10n/ja/docs/_snippets/checkcash-prereqs.md
index ea0b353adf..d657a3bbb9 100644
--- a/@l10n/ja/docs/_snippets/checkcash-prereqs.md
+++ b/@l10n/ja/docs/_snippets/checkcash-prereqs.md
@@ -6,4 +6,4 @@ Checkを換金するための前提条件は、正確な金額を換金する場
- 発行済み通貨用のCheckの場合は、ご自身(受取人)にイシュアーに対するトラストラインがある必要があります。このトラストライン上のご自身の限度額は、受け取る金額を追加するための残高より十分高くなければなりません。
- トラストラインと限度額について詳しくは、[トークン](../concepts/tokens/index.md)および[トラストラインと発行](../concepts/tokens/fungible-tokens/index.md)をご覧ください。
- [トランザクションに安全に署名できる手段](../concepts/transactions/secure-signing.md)。
-- XRP Ledgerに接続できる[クライアントライブラリ](../references/client-libraries.md)か、それとも[HTTPライブラリ、WebSocketライブラリなど](../tutorials/http-websocket-apis/build-apps/get-started.md)。
+- XRP Ledgerに接続できる[クライアントライブラリ](../references/client-libraries.md)か、それとも[HTTPライブラリ、WebSocketライブラリなど](../tutorials/http-websocket-apis/get-started.md)。
diff --git a/@l10n/ja/docs/_snippets/post-rippled-install.md b/@l10n/ja/docs/_snippets/post-rippled-install.md
index e6525ae1ea..9eb8b67780 100644
--- a/@l10n/ja/docs/_snippets/post-rippled-install.md
+++ b/@l10n/ja/docs/_snippets/post-rippled-install.md
@@ -2,7 +2,7 @@
`rippled`ログメッセージの詳細は、[ログメッセージについて](../infrastructure/troubleshooting/understanding-log-messages.md)をご覧ください。
-`rippled`が残りのネットワークと同期されたら、ストック`rippled`サーバが完全に機能するようになります。このサーバを、ローカル署名やXRP LedgerへのAPIアクセスに使用できます。`rippled`サーバがネットワークと同期されているかどうかを判別するには、[`rippled`サーバの状況](../references/http-websocket-apis/api-conventions/rippled-server-states.md)を使用します。[`rippled`のコマンドラインインターフェイス](../tutorials/http-websocket-apis/build-apps/get-started.md#コマンドライン)を使用すれば、これを迅速にテストできます。
+`rippled`が残りのネットワークと同期されたら、ストック`rippled`サーバが完全に機能するようになります。このサーバを、ローカル署名やXRP LedgerへのAPIアクセスに使用できます。`rippled`サーバがネットワークと同期されているかどうかを判別するには、[`rippled`サーバの状況](../references/http-websocket-apis/api-conventions/rippled-server-states.md)を使用します。[`rippled`のコマンドラインインターフェイス](../tutorials/http-websocket-apis/get-started.md#コマンドライン)を使用すれば、これを迅速にテストできます。
```sh
rippled server_info
diff --git a/@l10n/ja/docs/concepts/accounts/reserves.md b/@l10n/ja/docs/concepts/accounts/reserves.md
index d06cdec351..c1fbb0b8b7 100644
--- a/@l10n/ja/docs/concepts/accounts/reserves.md
+++ b/@l10n/ja/docs/concepts/accounts/reserves.md
@@ -54,7 +54,7 @@ XRP Ledgerでは、スパムや悪意のある使用によって、共有グロ
アカウントの所有者準備金を決定するには、増分準備金にアカウントが所有するオブジェクトの数を掛けます。アカウントが所有しているオブジェクトの数を調べるには、[account_infoメソッド][]を呼び出し、`account_data.OwnerCount`を取得します。
-アドレスの必要となる合計準備金を計算するには、`OwnerCount`に`reserve_inc_xrp`を掛け、次に`reserve_base_xrp`を加えます。[この計算をPythonで行うデモ](../../tutorials/python/build-apps/build-a-desktop-wallet-in-python.md#codeblock-17)があります。
+アドレスの必要となる合計準備金を計算するには、`OwnerCount`に`reserve_inc_xrp`を掛け、次に`reserve_base_xrp`を加えます。[この計算をPythonで行うデモ](/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md#codeblock-17)があります。
## 必要準備金を下回る
@@ -76,6 +76,6 @@ XRP Ledgerには、準備金要件を調整する仕組みがあります。こ
- [AccountRootオブジェクト][]
- [手数料の投票](../consensus-protocol/fee-voting.md)
- [SetFee疑似トランザクション][]疑似トランザクション
-- [チュートリアル: 必要準備金の計算と表示(Python)](../../tutorials/python/build-apps/build-a-desktop-wallet-in-python.md#3-display-an-account)
+- [チュートリアル: 必要準備金の計算と表示(Python)](/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md#3-display-an-account)
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}
diff --git a/@l10n/ja/docs/concepts/networks-and-servers/index.md b/@l10n/ja/docs/concepts/networks-and-servers/index.md
index 92ad6f7c4c..6a343f5dcd 100644
--- a/@l10n/ja/docs/concepts/networks-and-servers/index.md
+++ b/@l10n/ja/docs/concepts/networks-and-servers/index.md
@@ -27,7 +27,7 @@ XRP Ledgerを動かすサーバソフトウェアは、主に2種類あります
* 選択的に支払いパスや通貨交換のオファーを表示または非表示にすることができ、最良の取引を提供せず、彼ら自身の利益を確保する可能性があります。
* もし、アドレスの秘密鍵を送信してしまった場合、サーバの管理者はあなたに代わって任意のトランザクションを実行し、アドレスが保有するすべての資金を転送または破棄する可能性があります。
-さらに、独自のサーバを運営することで、[管理者アクセス権限](../../tutorials/http-websocket-apis/build-apps/get-started.md#管理者アクセス権限)が与えられ、重要な管理者専用コマンドや負荷の高いコマンドを実行することができます。共有サーバを使用する場合、同じサーバの他のユーザとサーバの計算能力を共有することを考慮しなければいけません。WebSocket APIのコマンドの多くはサーバに大きな負担をかけるので、サーバには必要なときにレスポンスを縮小するオプションがあります。サーバを他人と共有する場合、常に最良の結果を得られるとは限りません。
+さらに、独自のサーバを運営することで、[管理者アクセス権限](/docs/tutorials/get-started/get-started-http-websocket-apis.md#管理者アクセス権限)が与えられ、重要な管理者専用コマンドや負荷の高いコマンドを実行することができます。共有サーバを使用する場合、同じサーバの他のユーザとサーバの計算能力を共有することを考慮しなければいけません。WebSocket APIのコマンドの多くはサーバに大きな負担をかけるので、サーバには必要なときにレスポンスを縮小するオプションがあります。サーバを他人と共有する場合、常に最良の結果を得られるとは限りません。
最後に、バリデーションサーバを運用する場合、パブリックネットワークへのプロキシとしてストックサーバを使用し、バリデーションサーバをプライベートネットワークに置いて、ストックサーバを通してのみ外部にアクセスできるようにすることができます。これにより、バリデーションサーバに侵入することがより困難になります。
diff --git a/@l10n/ja/docs/concepts/networks-and-servers/rippled-server-modes.md b/@l10n/ja/docs/concepts/networks-and-servers/rippled-server-modes.md
index 612aae87b9..54b2192f86 100644
--- a/@l10n/ja/docs/concepts/networks-and-servers/rippled-server-modes.md
+++ b/@l10n/ja/docs/concepts/networks-and-servers/rippled-server-modes.md
@@ -12,7 +12,7 @@ labels:
- [**P2Pモード**](#p2pモード) - ピアツーピアネットワークをフォローし、トランザクションを処理し、ある程度の[レジャー履歴](ledger-history.md)を維持します。このモードは、以下の役割のいずれか、またはすべてを行うように設定することができます。
- [**バリデータ**](#バリデータ) - コンセンサスに参加することで、ネットワークの安全確保に貢献します。
- - [**APIサーバ**](#apiサーバ) - 共有レジャーからデータを読み込んだり、トランザクションを送信したり、レジャーのアクティビティを監視するための[APIアクセス](../../tutorials/http-websocket-apis/build-apps/get-started.md)を提供します。オプションとして、トランザクションやレジャーの履歴を完全に記録する [**全履歴サーバ**](#全履歴サーバ) とすることができます。
+ - [**APIサーバ**](#apiサーバ) - 共有レジャーからデータを読み込んだり、トランザクションを送信したり、レジャーのアクティビティを監視するための[APIアクセス](/docs/tutorials/get-started/get-started-http-websocket-apis.md)を提供します。オプションとして、トランザクションやレジャーの履歴を完全に記録する [**全履歴サーバ**](#全履歴サーバ) とすることができます。
- [**ハブサーバ**](#公開ハブ) - ピアツーピアネットワークの他の多くのメンバー間のメッセージを中継します。
- [**レポートモード**](#レポートモード) - リレーショナルデータベースからのAPIリクエストに対応するための専用モードです。ピアツーピアネットワークには参加しないため、P2Pモードサーバを実行し、信頼できるgRPC接続を使用してレポートモードサーバに接続する必要があります。 {% badge href="https://github.com/XRPLF/rippled/releases/tag/1.7.0" %}新規: rippled 1.7.0{% /badge %}
- [**スタンドアロンモード**](#スタンドアロンモード) - テスト用のオフラインモードです。ピアツーピアネットワークに接続せず、コンセンサスも使用しません。
diff --git a/@l10n/ja/docs/concepts/payment-types/checks.md b/@l10n/ja/docs/concepts/payment-types/checks.md
index f247e439b7..eaf668f8b3 100644
--- a/@l10n/ja/docs/concepts/payment-types/checks.md
+++ b/@l10n/ja/docs/concepts/payment-types/checks.md
@@ -97,12 +97,12 @@ XRP LedgerのChecksの詳細は、以下をご覧ください。
- [CheckCreate][]
- [CheckCash][]
- [CheckCancel][]
-- [Checksのチュートリアル](../../tutorials/how-tos/use-specialized-payment-types/use-checks/index.md)
- - [Checkの送信](../../tutorials/how-tos/use-specialized-payment-types/use-checks/send-a-check.md)
- - [Checksの検索](../../tutorials/how-tos/use-specialized-payment-types/use-checks/look-up-checks.md)
- - [Checkの指定された金額での換金](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md)
- - [Checkの変動金額での換金](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md)
- - [Checkの取消し](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cancel-a-check.md)
+- Checksのチュートリアル
+ - [Checkの送信](/docs/tutorials/payments/send-a-check.md)
+ - [Checksの検索](/docs/tutorials/payments/look-up-checks.md)
+ - [Checkの指定された金額での換金](/docs/tutorials/payments/cash-a-check-for-an-exact-amount.md)
+ - [Checkの変動金額での換金](/docs/tutorials/payments/cash-a-check-for-a-flexible-amount.md)
+ - [Checkの取消し](/docs/tutorials/payments/cancel-a-check.md)
- [Checks Amendment][]
関連機能の詳細については、以下をご覧ください。
diff --git a/@l10n/ja/docs/concepts/transactions/index.md b/@l10n/ja/docs/concepts/transactions/index.md
index 004b205a11..5b43c88a9e 100644
--- a/@l10n/ja/docs/concepts/transactions/index.md
+++ b/@l10n/ja/docs/concepts/transactions/index.md
@@ -207,7 +207,7 @@ XRP Ledgerは、トランザクションオブジェクトが送信元アドレ
- [安全な署名の設定](secure-signing.md)
- [XRPの送金](../../tutorials/how-tos/send-xrp.md)
- [トランザクションの結果の確認](finality-of-results/look-up-transaction-results.md)
- - [WebSocketを使用した着信ペイメントの監視](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
+ - [WebSocketを使用した着信ペイメントの監視](/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
- [トランザクションの取り消しまたはスキップ](finality-of-results/canceling-a-transaction.md)
- [信頼できるトランザクションの送信](reliable-transaction-submission.md)
- **リファレンス:**
diff --git a/@l10n/ja/docs/concepts/transactions/secure-signing.md b/@l10n/ja/docs/concepts/transactions/secure-signing.md
index a1e2ac5879..3d01fb9820 100644
--- a/@l10n/ja/docs/concepts/transactions/secure-signing.md
+++ b/@l10n/ja/docs/concepts/transactions/secure-signing.md
@@ -48,7 +48,7 @@ labels:
[構成ファイルの例](https://github.com/XRPLF/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/cfg/rippled-example.cfg#L1050-L1073)では、ローカルループバックネットワーク上(127.0.0.1)のポート5005でJSON-RPC(HTTP)、ポート6006でWebSocket(WS)の接続をリッスンし、接続されるすべてのクライアントを管理者として扱っています。
- {% admonition type="warning" name="注意" %}署名に[コマンドラインAPI](../../references/http-websocket-apis/api-conventions/request-formatting.md#コマンドライン形式)を使用する場合は、コマンドラインでないクライアントで[Websocket APIやJSON-RPC APIを使用](../../tutorials/http-websocket-apis/build-apps/get-started.md)する場合よりもセキュリティが弱くなります。コマンドライン構文を使用すると、秘密鍵がシステムのプロセスリストで他のユーザに見える可能性があり、シェル履歴にプレーンテキスト形式でキーが保存される可能性があります。{% /admonition %}
+ {% admonition type="warning" name="注意" %}署名に[コマンドラインAPI](../../references/http-websocket-apis/api-conventions/request-formatting.md#コマンドライン形式)を使用する場合は、コマンドラインでないクライアントで[Websocket APIやJSON-RPC APIを使用](/docs/tutorials/get-started/get-started-http-websocket-apis.md)する場合よりもセキュリティが弱くなります。コマンドライン構文を使用すると、秘密鍵がシステムのプロセスリストで他のユーザに見える可能性があり、シェル履歴にプレーンテキスト形式でキーが保存される可能性があります。{% /admonition %}
3. サーバの使用中は、稼働状態と最新状態を維持して、ネットワークと同期されるようにしておく必要があります。
diff --git a/@l10n/ja/docs/infrastructure/configuration/configure-amendment-voting.md b/@l10n/ja/docs/infrastructure/configuration/configure-amendment-voting.md
index 7ead0f0a09..9e369c227b 100644
--- a/@l10n/ja/docs/infrastructure/configuration/configure-amendment-voting.md
+++ b/@l10n/ja/docs/infrastructure/configuration/configure-amendment-voting.md
@@ -9,7 +9,7 @@ labels:
---
# Amendment投票機能の設定
-バリデータとして設定されたサーバは、[featureメソッド][]を使ってXRP Ledgerプロトコルの[Amendment](../../concepts/networks-and-servers/amendments.md)に投票することができます。(この方法には[管理者アクセス](../../tutorials/http-websocket-apis/build-apps/get-started.md#管理者アクセス権限)が必要です).
+バリデータとして設定されたサーバは、[featureメソッド][]を使ってXRP Ledgerプロトコルの[Amendment](../../concepts/networks-and-servers/amendments.md)に投票することができます。(この方法には[管理者アクセス](/docs/tutorials/get-started/get-started-http-websocket-apis.md#管理者アクセス権限)が必要です).
例えば、「SHAMapV2」Amendmentに反対票を投じるには、以下のコマンドを実行します。
diff --git a/@l10n/ja/docs/infrastructure/configuration/configure-grpc.md b/@l10n/ja/docs/infrastructure/configuration/configure-grpc.md
index fa399d4380..c9037fe074 100644
--- a/@l10n/ja/docs/infrastructure/configuration/configure-grpc.md
+++ b/@l10n/ja/docs/infrastructure/configuration/configure-grpc.md
@@ -49,7 +49,7 @@ gRPCを有効にするには、次の前提条件を満たす必要がありま
- [XRP Ledgerの概要](/about/)
- [`rippled`サーバのモード](../../concepts/networks-and-servers/rippled-server-modes.md)
- **チュートリアル:**
- - [HTTP / WebSocketAPIを使ってみる](../../tutorials/http-websocket-apis/build-apps/get-started.md)
+ - [HTTP / WebSocketAPIを使ってみる](/docs/tutorials/get-started/get-started-http-websocket-apis.md)
- [信頼できるトランザクションの送信](../../concepts/transactions/reliable-transaction-submission.md)
- [rippledサーバの管理](../installation/install-rippled-on-ubuntu.md)
- **リファレンス:**
diff --git a/@l10n/ja/docs/infrastructure/configuration/data-retention/configure-advisory-deletion.md b/@l10n/ja/docs/infrastructure/configuration/data-retention/configure-advisory-deletion.md
index 651ee65285..269ca88e99 100644
--- a/@l10n/ja/docs/infrastructure/configuration/data-retention/configure-advisory-deletion.md
+++ b/@l10n/ja/docs/infrastructure/configuration/data-retention/configure-advisory-deletion.md
@@ -57,7 +57,7 @@ labels:
2. サーバに対してオンライン削除を指示する[can_deleteメソッド][]の実行をテストします。
- このコマンドの実行には[`rippled`コマンドラインインターフェイス](../../../tutorials/http-websocket-apis/build-apps/get-started.md#コマンドライン)を使用できます。例:
+ このコマンドの実行には[`rippled`コマンドラインインターフェイス](/docs/tutorials/get-started/get-started-http-websocket-apis.md#コマンドライン)を使用できます。例:
```
$ rippled --conf=/etc/opt/ripple/rippled.cfg can_delete now
diff --git a/@l10n/ja/docs/infrastructure/configuration/enable-public-signing.md b/@l10n/ja/docs/infrastructure/configuration/enable-public-signing.md
index 3cd793f82d..0b0ca81c39 100644
--- a/@l10n/ja/docs/infrastructure/configuration/enable-public-signing.md
+++ b/@l10n/ja/docs/infrastructure/configuration/enable-public-signing.md
@@ -11,7 +11,7 @@ labels:
{% badge href="https://github.com/XRPLF/rippled/releases/tag/1.1.0" %}新規: rippled 1.1.0{% /badge %}デフォルトでは、`rippled`の署名メソッドは管理者接続に限定されています。v1.1.0以前のバージョンの`rippled`のように、署名メソッドをパブリックAPIメソッドとして使用できるようにするには、構成を変更することで、これを使用できるようにします。
-これにより、サーバが「パブリック」[JSON-RPC接続およびWebSocket接続](../../tutorials/http-websocket-apis/build-apps/get-started.md)を受け入れる場合は、これらのパブリック接続で以下のメソッドが使用できるようになります。
+これにより、サーバが「パブリック」[JSON-RPC接続およびWebSocket接続](/docs/tutorials/get-started/get-started-http-websocket-apis.md)を受け入れる場合は、これらのパブリック接続で以下のメソッドが使用できるようになります。
- [sign][signメソッド]
- [sign_for][sign_forメソッド]
diff --git a/@l10n/ja/docs/infrastructure/installation/install-rippled-on-rhel.md b/@l10n/ja/docs/infrastructure/installation/install-rippled-on-rhel.md
index a9c08bea98..8e313ac077 100644
--- a/@l10n/ja/docs/infrastructure/installation/install-rippled-on-rhel.md
+++ b/@l10n/ja/docs/infrastructure/installation/install-rippled-on-rhel.md
@@ -80,7 +80,7 @@ labels:
- **チュートリアル:**
- [rippledの構成](../configuration/index.md)
- [rippledのトラブルシューティング](../troubleshooting/index.md)
- - [rippled APIの使用開始](../../tutorials/http-websocket-apis/build-apps/get-started.md)
+ - [rippled APIの使用開始](/docs/tutorials/get-started/get-started-http-websocket-apis.md)
- **リファレンス:**
- [rippled APIリファレンス](../../references/http-websocket-apis/index.md)
- [`rippled`コマンドラインの使用](../commandline-usage.md)
diff --git a/@l10n/ja/docs/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md b/@l10n/ja/docs/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md
index cdbc735870..c43f51bd9d 100644
--- a/@l10n/ja/docs/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md
+++ b/@l10n/ja/docs/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue.md
@@ -182,7 +182,7 @@ Terminating thread doJob:AcquisitionDone: unhandled
11. `rippled`サービスが正常に起動したかどうかを確認します。
- [コマンドラインインターフェイス](../../tutorials/http-websocket-apis/build-apps/get-started.md#コマンドライン)を使用してサーバの状況を確認できます(サーバがJSON-RPCリクエストを受け入れないように設定している場合を除く)。次に例を示します。
+ [コマンドラインインターフェイス](/docs/tutorials/get-started/get-started-http-websocket-apis.md#コマンドライン)を使用してサーバの状況を確認できます(サーバがJSON-RPCリクエストを受け入れないように設定している場合を除く)。次に例を示します。
```
/opt/ripple/bin/rippled server_info
diff --git a/@l10n/ja/docs/references/client-libraries.md b/@l10n/ja/docs/references/client-libraries.md
index 1d6fed9867..1f1995b8a2 100644
--- a/@l10n/ja/docs/references/client-libraries.md
+++ b/@l10n/ja/docs/references/client-libraries.md
@@ -12,10 +12,10 @@ seo:
| 言語 | ライブラリ名 | Get Started | APIリファレンス | ソースコード |
|---------------------------------|------------------------|--------------|---------------|-------------|
-| **Python** | `xrpl-py` | [Pythonを使ってみよう](../tutorials/python/build-apps/get-started.md) | [API リファレンス](https://xrpl-py.readthedocs.io/) | [リポジトリ](https://github.com/XRPLF/xrpl-py) |
-| **JavaScript** / **TypeScript** | `xrpl.js` | [JavaScriptを使ってみよう](../tutorials/javascript/build-apps/get-started.md) | [API リファレンス](https://js.xrpl.org/) | [リポジトリ](https://github.com/XRPLF/xrpl.js) |
+| **Python** | `xrpl-py` | [Pythonを使ってみよう](/docs/tutorials/get-started/get-started-python.md) | [API リファレンス](https://xrpl-py.readthedocs.io/) | [リポジトリ](https://github.com/XRPLF/xrpl-py) |
+| **JavaScript** / **TypeScript** | `xrpl.js` | [JavaScriptを使ってみよう](/docs/tutorials/get-started/get-started-javascript.md) | [API リファレンス](https://js.xrpl.org/) | [リポジトリ](https://github.com/XRPLF/xrpl.js) |
| **JavaScript** / **TypeScript** | `xrpl-client` | [触ってみる](https://jsfiddle.net/WietseWind/35az6p1b/) | [NPM リファレンス](https://www.npmjs.com/package/xrpl-client) | [リポジトリ](https://github.com/XRPL-Labs/xrpl-client) |
| **JavaScript** / **TypeScript** | `xrpl-accountlib` | [触ってみる](https://jsfiddle.net/WietseWind/gkefpnu0/) | [NPM リファレンス](https://www.npmjs.com/package/xrpl-accountlib) | [リポジトリ](https://github.com/WietseWind/xrpl-accountlib) |
| **C++** | `rippled` 署名ライブラリ | [署名ライブラリを使ってみよう](https://github.com/XRPLF/rippled/tree/develop/Builds/linux#signing-library) | | ([`rippled`](https://github.com/XRPLF/rippled/))の一部 |
-| **Java** | `xrpl4j` | [Javaを使ってみよう](../tutorials/java/build-apps/get-started.md) | [API リファレンス](https://javadoc.io/doc/org.xrpl/) | [リポジトリ](https://github.com/XRPLF/xrpl4j) |
-| **PHP** | `XRPL_PHP` | [PHPを使ってみよう](../tutorials/php/build-apps/get-started.md) | [XRPL_PHP ドキュメント](https://alexanderbuzz.github.io/xrpl-php-docs/) | [リポジトリ](https://github.com/AlexanderBuzz/xrpl-php) |
+| **Java** | `xrpl4j` | [Javaを使ってみよう](/docs/tutorials/get-started/get-started-java.md) | [API リファレンス](https://javadoc.io/doc/org.xrpl/) | [リポジトリ](https://github.com/XRPLF/xrpl4j) |
+| **PHP** | `XRPL_PHP` | [PHPを使ってみよう](/docs/tutorials/get-started/get-started-php.md) | [XRPL_PHP ドキュメント](https://alexanderbuzz.github.io/xrpl-php-docs/) | [リポジトリ](https://github.com/AlexanderBuzz/xrpl-php) |
diff --git a/@l10n/ja/docs/references/data-api.md b/@l10n/ja/docs/references/data-api.md
index cf4a576fc6..087b38b798 100644
--- a/@l10n/ja/docs/references/data-api.md
+++ b/@l10n/ja/docs/references/data-api.md
@@ -14,6 +14,6 @@ nav_omit: true
## Alternatives
-アカウント残高や取引履歴のリクエストなど、ほとんどの一般的な操作では、[WebSocket接続](../tutorials/http-websocket-apis/get-started.md#websocket-api)または[JSON-RPC(HTTP POST)](../tutorials/http-websocket-apis/build-apps/get-started.md#json-rpc)を使用して、セルフホストまたは[公開XRP Ledgerサーバ](../tutorials/public-servers.md)にリクエストすることとができます。
+アカウント残高や取引履歴のリクエストなど、ほとんどの一般的な操作では、[WebSocket接続](/docs/tutorials/get-started/get-started-http-websocket-apis.md#websocket-api)または[JSON-RPC(HTTP POST)](/docs/tutorials/get-started/get-started-http-websocket-apis.md#json-rpc)を使用して、セルフホストまたは[公開XRP Ledgerサーバ](../tutorials/public-servers.md)にリクエストすることとができます。
-詳細については、[HTTP / WebSocket APIsの使用を開始する](../tutorials/http-websocket-apis/build-apps/get-started.md)ページをご覧ください。
+詳細については、[HTTP / WebSocket APIsの使用を開始する](/docs/tutorials/get-started/get-started-http-websocket-apis.md)ページをご覧ください。
diff --git a/@l10n/ja/docs/references/http-websocket-apis/admin-api-methods/index.md b/@l10n/ja/docs/references/http-websocket-apis/admin-api-methods/index.md
index 90721e7723..d4f0d7062a 100644
--- a/@l10n/ja/docs/references/http-websocket-apis/admin-api-methods/index.md
+++ b/@l10n/ja/docs/references/http-websocket-apis/admin-api-methods/index.md
@@ -10,7 +10,7 @@ labels:
`rippled`サーバと直接通信する際には管理APIメソッドを使用します。管理メソッドは、信頼できるサーバ運用担当者のみを対象としています。管理メソッドには、サーバの管理、監視、デバッグのためのコマンドが含まれています。
-管理コマンドを使用できるのは、管理者として、`rippled.cfg`ファイルに指定されているホストとポートで`rippled`サーバに接続している場合に限られます。デフォルトでは、コマンドラインクライアントが管理接続を使用します。`rippled`への接続についての詳細は、[rippled API入門](../../../tutorials/http-websocket-apis/build-apps/get-started.md)をご覧ください。
+管理コマンドを使用できるのは、管理者として、`rippled.cfg`ファイルに指定されているホストとポートで`rippled`サーバに接続している場合に限られます。デフォルトでは、コマンドラインクライアントが管理接続を使用します。`rippled`への接続についての詳細は、[rippled API入門](/docs/tutorials/get-started/get-started-http-websocket-apis.md)をご覧ください。
## [キー生成メソッド](key-generation-methods/index.md)
diff --git a/@l10n/ja/docs/references/http-websocket-apis/api-conventions/rate-limiting.md b/@l10n/ja/docs/references/http-websocket-apis/api-conventions/rate-limiting.md
index a0087bec39..da701eff71 100644
--- a/@l10n/ja/docs/references/http-websocket-apis/api-conventions/rate-limiting.md
+++ b/@l10n/ja/docs/references/http-websocket-apis/api-conventions/rate-limiting.md
@@ -10,7 +10,7 @@ labels:
`rippled`サーバはAPIクライアントが公開APIにリクエストできるレートを制限できます。レート制限はクライアントのIPアドレスに基づいて行われるため、[ネットワークアドレス変換](https://ja.wikipedia.org/wiki/ネットワークアドレス変換)の背後にいるクライアントは公開IPアドレスに基づく制限を共有します。
-{% admonition type="success" name="ヒント" %}レート制限は、クライアントが[管理者](../../../tutorials/http-websocket-apis/build-apps/get-started.md#管理者アクセス権限)として接続されているときには適用されません{% /admonition %}
+{% admonition type="success" name="ヒント" %}レート制限は、クライアントが[管理者](/docs/tutorials/get-started/get-started-http-websocket-apis.md#管理者アクセス権限)として接続されているときには適用されません{% /admonition %}
クライアントがレート制限に近づいている場合、サーバは[APIレスポンス](response-formatting.md)のトップレベルにフィールド`"warning": "load"`というフィールドを[APIレスポンス](response-formatting.md)のトップレベルに追加します。この警告はすべてのレスポンスに追加されるわけではありませんが、サーバはクライアントを切断する前に何度かこのような警告を送ることがあります。
@@ -58,7 +58,7 @@ Server is overloaded
- [`rippled`サーバ](../../../concepts/networks-and-servers/index.md)
- [ソフトウェアエコシステム](../../../introduction/software-ecosystem.md)
- **チュートリアル:**
- - [XRP Ledger APIの使用開始](../../../tutorials/http-websocket-apis/build-apps/get-started.md)
+ - [XRP Ledger APIの使用開始](/docs/tutorials/get-started/get-started-http-websocket-apis.md)
- [rippledのトラブルシューティング](../../../infrastructure/troubleshooting/index.md)
- **リファレンス:**
- [rippled APIリファレンス](../index.md)
diff --git a/@l10n/ja/docs/references/http-websocket-apis/api-conventions/response-formatting.md b/@l10n/ja/docs/references/http-websocket-apis/api-conventions/response-formatting.md
index de8b9e1e01..7b72d1bc6f 100644
--- a/@l10n/ja/docs/references/http-websocket-apis/api-conventions/response-formatting.md
+++ b/@l10n/ja/docs/references/http-websocket-apis/api-conventions/response-formatting.md
@@ -130,7 +130,7 @@ HTTP Status: 200 OK
この警告は、XRP Ledgerプロトコルの1つ以上の[Amendment](../../../concepts/networks-and-servers/amendments.md)が有効になる予定であるが、現在のサーバにはそれらのAmendmentの実装がないことを示しています。これらのAmendmentが有効になると、現在のサーバは[Amendmentブロック](../../../concepts/networks-and-servers/amendments.md#amendment-blocked-servers)されるため、できるだけ早く[最新の`rippled`バージョンにアップグレード](../../../infrastructure/installation/index.md)する必要があります。
-サーバは、この警告を送信するのは、クライアントが[管理者として接続している](../../../tutorials/http-websocket-apis/build-apps/get-started.md#admin-access)場合のみです。
+サーバは、この警告を送信するのは、クライアントが[管理者として接続している](/docs/tutorials/get-started/get-started-http-websocket-apis.md#admin-access)場合のみです。
この警告には、以下のフィールドを含む`details`フィールドが含まれます。
@@ -189,7 +189,7 @@ HTTP Status: 200 OK
- [Amendment](../../../concepts/networks-and-servers/amendments.md)
- [既知のAmendment](/resources/known-amendments.md)
- **チュートリアル:**
- - [XRP LedgerのAPIを触ってみよう](../../../tutorials/http-websocket-apis/build-apps/get-started.md)
+ - [XRP LedgerのAPIを触ってみよう](/docs/tutorials/get-started/get-started-http-websocket-apis.md)
- [`rippled`のインストールと更新](../../../infrastructure/installation/index.md)
- **リファレンス:**
- [featureメソッド][]
diff --git a/@l10n/ja/docs/tutorials/how-tos/manage-account-settings/use-tickets.md b/@l10n/ja/docs/tutorials/how-tos/manage-account-settings/use-tickets.md
index fa2f1370ce..b435381c45 100644
--- a/@l10n/ja/docs/tutorials/how-tos/manage-account-settings/use-tickets.md
+++ b/@l10n/ja/docs/tutorials/how-tos/manage-account-settings/use-tickets.md
@@ -20,7 +20,7 @@ steps: ['Generate', 'Connect', 'Check Sequence', 'Prepare & Sign', 'Submit', 'Wa
-このページでは、[xrpl.js](https://js.xrpl.org/)ライブラリを使用したJavaScriptのサンプルを提供しています。設定方法は、[JavaScriptを使ってみよう](../../javascript/build-apps/get-started.md)をご覧ください。
+このページでは、[xrpl.js](https://js.xrpl.org/)ライブラリを使用したJavaScriptのサンプルを提供しています。設定方法は、[JavaScriptを使ってみよう](/docs/tutorials/get-started/get-started-javascript.md)をご覧ください。
JavaScriptはWebブラウザ上で動作するため、セットアップなしで読み進められ、インタラクティブな手順を利用することができます。
diff --git a/@l10n/ja/docs/tutorials/how-tos/send-xrp.md b/@l10n/ja/docs/tutorials/how-tos/send-xrp.md
index 9757b40cc8..f0e0665ac7 100644
--- a/@l10n/ja/docs/tutorials/how-tos/send-xrp.md
+++ b/@l10n/ja/docs/tutorials/how-tos/send-xrp.md
@@ -23,7 +23,7 @@ steps: ['Generate', 'Connect', 'Prepare', 'Sign', 'Submit', 'Wait', 'Check']
-- このページでは、xrpl.jsライブラリーを使用するJavaScriptの例を紹介します。[xrpl.js入門ガイド](../javascript/build-apps/get-started.md)に、xrpl.jsを使用してJavaScriptからXRP Ledgerデータにアクセスする方法の説明があります。
+- このページでは、xrpl.jsライブラリーを使用するJavaScriptの例を紹介します。[xrpl.js入門ガイド](/docs/tutorials/get-started/get-started-javascript.md)に、xrpl.jsを使用してJavaScriptからXRP Ledgerデータにアクセスする方法の説明があります。
- XRP Ledgerでトランザクションを送信するには、まずアドレスと秘密鍵、そしていくらかのXRPが必要となります。次のインターフェイスを使用して、XRP Test NetにあるアドレスとTestnet XRPを入手できます。
diff --git a/@l10n/ja/docs/use-cases/defi/algorithmic-trading.md b/@l10n/ja/docs/use-cases/defi/algorithmic-trading.md
index 66381a582b..6b10711e8a 100644
--- a/@l10n/ja/docs/use-cases/defi/algorithmic-trading.md
+++ b/@l10n/ja/docs/use-cases/defi/algorithmic-trading.md
@@ -72,7 +72,7 @@ XRP Ledgerの分散型取引所(DEX)には、「アルゴリズムトレード
### トレードの発注
-XRP Ledgerの分散型取引所で _代替可能_ トークンとXRPを売買するには、通常[OfferCreateトランザクション](../../references/protocol/transactions/types/offercreate.md)を送信します。この方法でトレードを行うためのコードと技術的ステップの詳細なウォークスルーについては、[分散型取引所でのトレード](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md)をご覧ください。[Paymentトランザクション](../../references/protocol/transactions/types/payment.md)を使用して通貨を両替することも可能です。[クロスカレンシー支払い](../../concepts/payment-types/cross-currency-payments.md)を他のユーザに送ったり、長い[パス](../../concepts/tokens/fungible-tokens/paths.md)を使って裁定取引の機会を1つの操作にまとめることで、自分自身に送り返すこともできます。
+XRP Ledgerの分散型取引所で _代替可能_ トークンとXRPを売買するには、通常[OfferCreateトランザクション](../../references/protocol/transactions/types/offercreate.md)を送信します。この方法でトレードを行うためのコードと技術的ステップの詳細なウォークスルーについては、[分散型取引所でのトレード](../../tutorials/dex/trade-in-the-decentralized-exchange.md)をご覧ください。[Paymentトランザクション](../../references/protocol/transactions/types/payment.md)を使用して通貨を両替することも可能です。[クロスカレンシー支払い](../../concepts/payment-types/cross-currency-payments.md)を他のユーザに送ったり、長い[パス](../../concepts/tokens/fungible-tokens/paths.md)を使って裁定取引の機会を1つの操作にまとめることで、自分自身に送り返すこともできます。
NFTをトレードするためのコードと技術的な手順については、[JavaScriptを使用したNFTokenの送信](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
@@ -89,7 +89,7 @@ XRP Ledgerのトレード活動に関する情報源は数多くあります。
XRP Ledgerは既存の中央指値注文ベース(CLOB)の分散型取引所と連携するネイティブな自動マーケットメーカー(AMM)の機能をネイティブサポートしています。AMMはXRP Ledger上のトレードにおいて重要な要素となっています。詳しくは以下のリンクをご覧ください。
- [自動マーケットメーカー](../../concepts/tokens/decentralized-exchange/automated-market-makers.md)
-- [AMMのオークションスロットを利用して低い取引手数料でトレードする](../../tutorials/javascript/amm/add-assets-to-amm.md)
+- [AMMのオークションスロットを利用して低い取引手数料でトレードする](/docs/tutorials/dex/add-assets-to-amm-in-javascript.md)
- [XLS-30 標準規格](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0030-automated-market-maker#readme)
## さらに詳しく
diff --git a/@l10n/ja/docs/use-cases/tokenization/authorized-minter.md b/@l10n/ja/docs/use-cases/tokenization/authorized-minter.md
index c757cbe38a..406a505e73 100644
--- a/@l10n/ja/docs/use-cases/tokenization/authorized-minter.md
+++ b/@l10n/ja/docs/use-cases/tokenization/authorized-minter.md
@@ -67,7 +67,7 @@ NFTをオークション形式で販売することができます。[NFTオー
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
-他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
+他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](/docs/tutorials/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
## NFTのインデックス
diff --git a/@l10n/ja/docs/use-cases/tokenization/digital-artist.md b/@l10n/ja/docs/use-cases/tokenization/digital-artist.md
index fac32e19d6..34b38fffc1 100644
--- a/@l10n/ja/docs/use-cases/tokenization/digital-artist.md
+++ b/@l10n/ja/docs/use-cases/tokenization/digital-artist.md
@@ -64,7 +64,7 @@ NFTをオークション形式で販売することができます。[NFTオー
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/javascript/nfts/transfer-nfts.md))をご覧ください。
-他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
+他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](/docs/tutorials/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
## NFTのインデックス化
diff --git a/@l10n/ja/docs/use-cases/tokenization/nft-mkt-overview.md b/@l10n/ja/docs/use-cases/tokenization/nft-mkt-overview.md
index ccd228e5ee..c92c62b9ab 100644
--- a/@l10n/ja/docs/use-cases/tokenization/nft-mkt-overview.md
+++ b/@l10n/ja/docs/use-cases/tokenization/nft-mkt-overview.md
@@ -105,7 +105,7 @@ NFTをオークション形式で販売することができます。[NFTオー
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
-他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
+他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](/docs/tutorials/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
-The server only sends this warning if the client is [connected as an admin](../../../tutorials/http-websocket-apis/build-apps/get-started.md#admin-access).
+The server only sends this warning if the client is [connected as an admin](../../../tutorials/get-started/get-started-http-websocket-apis.md#admin-access).
This warning includes a `details` field with the following fields:
@@ -199,7 +199,7 @@ It is generally safe to ignore this warning.
- [Amendments](../../../concepts/networks-and-servers/amendments.md)
- [Known Amendments](/resources/known-amendments.md)
- **Tutorials:**
- - [Get Started with XRP Ledger APIs](../../../tutorials/http-websocket-apis/build-apps/get-started.md)
+ - [Get Started with XRP Ledger APIs](../../../tutorials/get-started/get-started-http-websocket-apis.md)
- [Install and Update `rippled`](../../../infrastructure/installation/index.md)
- **References:**
- [feature method][]
diff --git a/docs/references/http-websocket-apis/index.md b/docs/references/http-websocket-apis/index.md
index f96c04040d..f06e54ecd2 100644
--- a/docs/references/http-websocket-apis/index.md
+++ b/docs/references/http-websocket-apis/index.md
@@ -6,7 +6,7 @@ metadata:
---
# HTTP / WebSocket APIs
-You can communicate directly with the XRP Ledger through HTTP-based APIs provided by the core `rippled` server as well as the Clio server. Both types of server provide JSON-RPC and WebSocket APIs with mostly the same functionality. JSON-RPC uses a strict request-response paradigm similar to a REST API, but WebSocket uses a single persistent connection where the server can push messages to the client asynchronously. For more information, see [Get Started Using HTTP / WebSocket APIs](../../tutorials/http-websocket-apis/build-apps/get-started.md).
+You can communicate directly with the XRP Ledger through HTTP-based APIs provided by the core `rippled` server as well as the Clio server. Both types of server provide JSON-RPC and WebSocket APIs with mostly the same functionality. JSON-RPC uses a strict request-response paradigm similar to a REST API, but WebSocket uses a single persistent connection where the server can push messages to the client asynchronously. For more information, see [Get Started Using HTTP / WebSocket APIs](../../tutorials/get-started/get-started-http-websocket-apis.md).
[{% inline-svg file="/docs/img/api-functionality-venn-diagram.svg" /%}](/docs/img/api-functionality-venn-diagram.svg "Diagram: Most API methods are provided by both rippled and Clio servers. The rippled server provides admin methods, provides pending/unvalidated data including transaction queue, and has a live view of consensus and peer-to-peer network. The Clio server scales efficiently, provides additional methods nft_history, nft_info, nfts_by_issuer, and mpt_holders, and serves rippled-exclusive API requests by forwarding.")
diff --git a/docs/references/http-websocket-apis/public-api-methods/account-methods/account_info.md b/docs/references/http-websocket-apis/public-api-methods/account-methods/account_info.md
index 7d24e35ddc..bfa42e51fd 100644
--- a/docs/references/http-websocket-apis/public-api-methods/account-methods/account_info.md
+++ b/docs/references/http-websocket-apis/public-api-methods/account-methods/account_info.md
@@ -225,7 +225,7 @@ The `account_flags` field contains the following nested fields:
| `noFreeze` | Boolean | If `true`, the account has permanently given up the abilities to freeze individual trust lines or end a global freeze. See [No Freeze](../../../../concepts/tokens/fungible-tokens/freezes.md#no-freeze) for details. |
| `passwordSpent` | Boolean | If `false`, the account can send a special [key reset transaction](../../../../concepts/transactions/transaction-cost.md#key-reset-transaction) with a transaction cost of 0. The protocol turns this flag on and off automatically; it is not controlled by a user-facing setting. |
| `requireAuthorization` | Boolean | If `true`, the account is using [Authorized Trust Lines](../../../../concepts/tokens/fungible-tokens/authorized-trust-lines.md) to limit who can hold the tokens it issues. |
-| `requireDestinationTag` | Boolean | If `true`, the account [requires a destination tag](../../../../tutorials/how-tos/manage-account-settings/require-destination-tags.md) on all payments it receives. |
+| `requireDestinationTag` | Boolean | If `true`, the account [requires a destination tag](../../../../tutorials/compliance-features/require-destination-tags.md) on all payments it receives. |
The `queue_data` field, if present, contains the following nested fields:
diff --git a/docs/references/protocol/ledger-data/ledger-entry-types/check.md b/docs/references/protocol/ledger-data/ledger-entry-types/check.md
index 3c3b4b1ca0..509746d718 100644
--- a/docs/references/protocol/ledger-data/ledger-entry-types/check.md
+++ b/docs/references/protocol/ledger-data/ledger-entry-types/check.md
@@ -72,7 +72,7 @@ The ID of a `Check` entry is the [SHA-512Half][] of the following values, concat
* The `Sequence` number of the [CheckCreate transaction][] that created the `Check`.
If the CheckCreate transaction used a [Ticket](../../../../concepts/accounts/tickets.md), use the `TicketSequence` value instead.
-See the tutorial showing how to [Send a Check](../../../../tutorials/how-tos/use-specialized-payment-types/use-checks/send-a-check.md).
+See the tutorial showing how to [Send a Check](../../../../tutorials/payments/send-a-check.md).
## See Also
diff --git a/docs/references/protocol/ledger-data/ledger-entry-types/oracle.md b/docs/references/protocol/ledger-data/ledger-entry-types/oracle.md
index ce456700aa..800d0d7ae1 100644
--- a/docs/references/protocol/ledger-data/ledger-entry-types/oracle.md
+++ b/docs/references/protocol/ledger-data/ledger-entry-types/oracle.md
@@ -40,7 +40,7 @@ An `Oracle` ledger entry holds data associated with a single [price oracle](../.
| Field | JSON Type | Internal Type | Required? | Description |
|---------------------|-----------|---------------|-----------|-------------|
-| `Owner` | String | AccountID | Yes | The [account](../../../../concepts/accounts/index.md) with update and delete privileges for the oracle. It's recommended to set up [multi-signing](../../../../tutorials/how-tos/manage-account-settings/set-up-multi-signing.md) on this account. |
+| `Owner` | String | AccountID | Yes | The [account](../../../../concepts/accounts/index.md) with update and delete privileges for the oracle. It's recommended to set up [multi-signing](../../../../tutorials/best-practices/key-management/set-up-multi-signing.md) on this account. |
| `Provider` | String | Blob | Yes | An arbitrary value that identifies an oracle provider, such as Chainlink, Band, or DIA. This field is a string, up to 256 ASCII hex encoded characters (`0x20`-`0x7E`). |
| `PriceDataSeries` | Array | Array | Yes | An array of up to 10 `PriceData` objects, each representing the price information for an asset pair. More than five `PriceData` objects require two owner reserves. |
| `LastUpdateTime` | Number | UInt32 | Yes | The time the data was last updated, represented in Unix time. (**Note:** Unlike many other time values on the XRP Ledger, this value does not use the Ripple Epoch.) |
diff --git a/docs/references/protocol/transactions/types/setregularkey.md b/docs/references/protocol/transactions/types/setregularkey.md
index d1a5c43b6f..1be27e76a5 100644
--- a/docs/references/protocol/transactions/types/setregularkey.md
+++ b/docs/references/protocol/transactions/types/setregularkey.md
@@ -36,7 +36,7 @@ You can protect your account by assigning a regular key pair to it and using it
For more information about regular and master key pairs, see [Cryptographic Keys](../../../../concepts/accounts/cryptographic-keys.md).
-For a tutorial on assigning a regular key pair to an account, see [Working with a Regular Key Pair](../../../../tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md).
+For a tutorial on assigning a regular key pair to an account, see [Working with a Regular Key Pair](../../../../tutorials/best-practices/key-management/assign-a-regular-key-pair.md).
For even greater security, you can use [multi-signing](../../../../concepts/accounts/multi-signing.md), but multi-signing requires additional XRP for the [transaction cost][] and [reserve](../../../../concepts/accounts/reserves.md).
diff --git a/docs/tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md b/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md
similarity index 99%
rename from docs/tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md
rename to docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md
index 0e67198517..fd45b14e96 100644
--- a/docs/tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md
+++ b/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md
@@ -473,7 +473,7 @@ $("#tx_read").click((event) => {
## Next Steps
- [Look Up Transaction Results](../../../concepts/transactions/finality-of-results/look-up-transaction-results.md) to see exactly what a transaction did, and build your software to react appropriately.
-- Try [Sending XRP](../../how-tos/send-xrp.md) from your own address.
+- Try [Sending XRP](../../payments/send-xrp) from your own address.
- Try monitoring for transactions of advanced types like [Escrows](../../../concepts/payment-types/escrow.md), [Checks](../../../concepts/payment-types/checks.md), or [Payment Channels](../../../concepts/payment-types/payment-channels.md), and responding to incoming notifications.
diff --git a/docs/tutorials/how-tos/testing-devnet-features.md b/docs/tutorials/advanced-developer-topics/protocol-development/testing-devnet-features.md
similarity index 85%
rename from docs/tutorials/how-tos/testing-devnet-features.md
rename to docs/tutorials/advanced-developer-topics/protocol-development/testing-devnet-features.md
index df6b0359ff..4b0632b6b8 100644
--- a/docs/tutorials/how-tos/testing-devnet-features.md
+++ b/docs/tutorials/advanced-developer-topics/protocol-development/testing-devnet-features.md
@@ -10,13 +10,13 @@ labels:
---
# Test Pre-Release Transaction Types
-_(Requires cloning and modifying XRPL core repositories and understanding of XRPL [transaction serialization](../../references/protocol/binary-format.md))._
+_(Requires cloning and modifying XRPL core repositories and understanding of XRPL [transaction serialization](../../../references/protocol/binary-format.md))._
-Pre-release transactions are [amendments](../../concepts/networks-and-servers/amendments.md) that represent new features or other changes to transaction processing. Features are typically released to the [XRPL Devnet](../../concepts/networks-and-servers/parallel-networks.md) for early testing.
+Pre-release transactions are [amendments](../../../concepts/networks-and-servers/amendments.md) that represent new features or other changes to transaction processing. Features are typically released to the [XRPL Devnet](../../../concepts/networks-and-servers/parallel-networks.md) for early testing.
-This guide walks through the steps to test transaction types in development using either JavaScript with `xrpl.js` or Python with `xrpl-py`. This approach is typically only necessary for pre-release amendments that are available on the [XRPL Devnet](../../concepts/networks-and-servers/parallel-networks.md) for early testing.
+This guide walks through the steps to test transaction types in development using either JavaScript with `xrpl.js` or Python with `xrpl-py`. This approach is typically only necessary for pre-release amendments that are available on the [XRPL Devnet](../../../concepts/networks-and-servers/parallel-networks.md) for early testing.
-**Note**: The code samples below illustrate how to prepare your development environment and modify the XRPL to support custom transaction types, using the respective [client library](../../references/client-libraries.md).
+**Note**: The code samples below illustrate how to prepare your development environment and modify the XRPL to support custom transaction types, using the respective [client library](../../../references/client-libraries.md).
## Prerequisites
@@ -52,9 +52,9 @@ pip install xrpl-py
### 2. Generate Definitions File
-Utilize the [server_definitions](../../references/http-websocket-apis/public-api-methods/server-info-methods/server_definitions.md) command to retrieve the definitions.json content.
+Utilize the [server_definitions](../../../references/http-websocket-apis/public-api-methods/server-info-methods/server_definitions.md) command to retrieve the definitions.json content.
-{% admonition type="info" name="Note" %}Any [parallel test network](../../concepts/networks-and-servers/parallel-networks.md) may be used instead of Devnet.{% /admonition %}
+{% admonition type="info" name="Note" %}Any [parallel test network](../../../concepts/networks-and-servers/parallel-networks.md) may be used instead of Devnet.{% /admonition %}
{% tabs %}
@@ -196,6 +196,6 @@ send_reliable_submission(custom_tx, client, wallet)
- **Testing**: Utilize the XRPL Testnet or Devnet for testing new transaction types.
- **Updates**: Regularly update your `rippled` and XRPL library clones to include the latest features and fixes.
-- **Custom Types and Serialization**: If your transaction involves new data structures, ensure they are correctly defined and serialized according to [XRPL standards](../../references/protocol/transactions/index.md).
+- **Custom Types and Serialization**: If your transaction involves new data structures, ensure they are correctly defined and serialized according to [XRPL standards](../../../references/protocol/transactions/index.md).
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md b/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md
similarity index 100%
rename from docs/tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md
rename to docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md
diff --git a/docs/tutorials/how-tos/manage-account-settings/change-or-remove-a-regular-key-pair.md b/docs/tutorials/best-practices/key-management/change-or-remove-a-regular-key-pair.md
similarity index 100%
rename from docs/tutorials/how-tos/manage-account-settings/change-or-remove-a-regular-key-pair.md
rename to docs/tutorials/best-practices/key-management/change-or-remove-a-regular-key-pair.md
diff --git a/docs/tutorials/how-tos/manage-account-settings/disable-master-key-pair.md b/docs/tutorials/best-practices/key-management/disable-master-key-pair.md
similarity index 100%
rename from docs/tutorials/how-tos/manage-account-settings/disable-master-key-pair.md
rename to docs/tutorials/best-practices/key-management/disable-master-key-pair.md
diff --git a/docs/tutorials/how-tos/manage-account-settings/offline-account-setup.md b/docs/tutorials/best-practices/key-management/offline-account-setup.md
similarity index 98%
rename from docs/tutorials/how-tos/manage-account-settings/offline-account-setup.md
rename to docs/tutorials/best-practices/key-management/offline-account-setup.md
index 5482d5cbc5..fdd93ae86b 100644
--- a/docs/tutorials/how-tos/manage-account-settings/offline-account-setup.md
+++ b/docs/tutorials/best-practices/key-management/offline-account-setup.md
@@ -18,7 +18,7 @@ A highly secure [signing configuration](../../../concepts/transactions/secure-si
To use offline signing, you must meet the following prerequisites:
- You must have one computer to use as an offline machine. This machine must be set up with a [supported operating system](../../../infrastructure/installation/system-requirements.md). See your operating system's support for offline setup instructions. (For example, [Red Hat Enterprise Linux DVD ISO installation instructions](https://access.redhat.com/solutions/7227).) Be sure that the software and physical media you use are not infected with malware.
-- You must have a separate computer to use as an online machine. This machine does not need to run `rippled` but it must be able to connect to the XRP Ledger network and receive information about the state of the shared ledger. For example, you can use a [WebSocket connection to a public server](../../http-websocket-apis/build-apps/get-started.md).
+- You must have a separate computer to use as an online machine. This machine does not need to run `rippled` but it must be able to connect to the XRP Ledger network and receive information about the state of the shared ledger. For example, you can use a [WebSocket connection to a public server](../../get-started/get-started-http-websocket-apis.md).
- You must have a secure way to transfer signed transaction binary data from the offline machine to the online machine.
- One way to do this is with a QR code generator on the offline machine, and a QR code scanner on the online machine. (In this case, your "online machine" could be a handheld device such as a smartphone.)
- Another way is to copy files from the offline machine to an online machine using physical media. If you use this method, be sure not to use physical media that could infect your offline machine with malicious software. (For example, do not reuse the same USB drive on both online and offline machines.)
@@ -143,7 +143,7 @@ Optionally, save the current ledger index to the offline machine. You can use th
On the offline machine, prepare and sign transactions for configuring your account. The details depend on how you intend to use your account. Some examples of things you might want to do include:
- [Assign a regular key pair](assign-a-regular-key-pair.md) that you can rotate regularly.
-- [Require destination tags](require-destination-tags.md) so that users can't send you payments without tagging the reason they sent it or the customer it's intended for.
+- [Require destination tags](../../compliance-features/require-destination-tags.md) so that users can't send you payments without tagging the reason they sent it or the customer it's intended for.
- [Set Up Multi-Signing](set-up-multi-signing.md) for a higher bar of account security.
- [Enable DepositAuth](../../../concepts/accounts/depositauth.md) so you can only receive payments you've explicitly accepted or from parties you've pre-approved.
- [Require Auth](../../../concepts/tokens/fungible-tokens/authorized-trust-lines.md#enabling-require-auth) so that users can't open [trust lines](../../../concepts/tokens/fungible-tokens/index.md) to you without your permission. If you don't plan to use the XRP Ledger's decentralized exchange or [token](../../../concepts/tokens/index.md) features, you may want to do this as a precaution.
diff --git a/docs/tutorials/how-tos/manage-account-settings/send-a-multi-signed-transaction.md b/docs/tutorials/best-practices/key-management/send-a-multi-signed-transaction.md
similarity index 100%
rename from docs/tutorials/how-tos/manage-account-settings/send-a-multi-signed-transaction.md
rename to docs/tutorials/best-practices/key-management/send-a-multi-signed-transaction.md
diff --git a/docs/tutorials/how-tos/manage-account-settings/set-up-multi-signing.md b/docs/tutorials/best-practices/key-management/set-up-multi-signing.md
similarity index 100%
rename from docs/tutorials/how-tos/manage-account-settings/set-up-multi-signing.md
rename to docs/tutorials/best-practices/key-management/set-up-multi-signing.md
diff --git a/docs/tutorials/how-tos/use-batch-transactions/send-a-multi-account-batch-transaction.md b/docs/tutorials/best-practices/transaction-sending/send-a-multi-account-batch-transaction.md
similarity index 98%
rename from docs/tutorials/how-tos/use-batch-transactions/send-a-multi-account-batch-transaction.md
rename to docs/tutorials/best-practices/transaction-sending/send-a-multi-account-batch-transaction.md
index e0f1513e59..e04e0ba758 100644
--- a/docs/tutorials/how-tos/use-batch-transactions/send-a-multi-account-batch-transaction.md
+++ b/docs/tutorials/best-practices/transaction-sending/send-a-multi-account-batch-transaction.md
@@ -24,7 +24,7 @@ To complete this tutorial, you should:
- Have a basic understanding of the XRP Ledger.
- Have an XRP Ledger client library set up in your development environment. This page provides examples for the following:
- - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js). See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup steps.
+ - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js). See [Get Started Using JavaScript](../../get-started/get-started-javascript.md) for setup steps.
## Source Code
diff --git a/docs/tutorials/how-tos/use-batch-transactions/send-a-single-account-batch-transaction.md b/docs/tutorials/best-practices/transaction-sending/send-a-single-account-batch-transaction.md
similarity index 98%
rename from docs/tutorials/how-tos/use-batch-transactions/send-a-single-account-batch-transaction.md
rename to docs/tutorials/best-practices/transaction-sending/send-a-single-account-batch-transaction.md
index 69e0820857..e0c001385c 100644
--- a/docs/tutorials/how-tos/use-batch-transactions/send-a-single-account-batch-transaction.md
+++ b/docs/tutorials/best-practices/transaction-sending/send-a-single-account-batch-transaction.md
@@ -26,7 +26,7 @@ To complete this tutorial, you should:
- Have a basic understanding of the XRP Ledger.
- Have an XRP Ledger client library set up in your development environment. This page provides examples for the following:
- - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js). See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup steps.
+ - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js). See [Get Started Using JavaScript](../../get-started/get-started-javascript.md) for setup steps.
## Source Code
diff --git a/docs/tutorials/how-tos/manage-account-settings/use-tickets.md b/docs/tutorials/best-practices/transaction-sending/use-tickets.md
similarity index 96%
rename from docs/tutorials/how-tos/manage-account-settings/use-tickets.md
rename to docs/tutorials/best-practices/transaction-sending/use-tickets.md
index 8af8ade104..821f9efe37 100644
--- a/docs/tutorials/how-tos/manage-account-settings/use-tickets.md
+++ b/docs/tutorials/best-practices/transaction-sending/use-tickets.md
@@ -20,7 +20,7 @@ steps: ['Generate', 'Connect', 'Check Sequence', 'Prepare & Sign', 'Submit', 'Wa
-This page provides JavaScript examples that use the [xrpl.js](https://js.xrpl.org/) library. See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup instructions.
+This page provides JavaScript examples that use the [xrpl.js](https://js.xrpl.org/) library. See [Get Started Using JavaScript](../../get-started/get-started-javascript.md) for setup instructions.
Since JavaScript works in the web browser, you can read along and use the interactive steps without any setup.
@@ -251,7 +251,7 @@ Ticketed transactions go through the consensus process the same way that Sequenc
One of the main use cases for Tickets is to be able to collect signatures for several [multi-signed transactions](../../../concepts/accounts/multi-signing.md) in parallel. By using a Ticket, you can send a multi-signed transaction as soon as it is fully signed and ready to go, without worrying about which one will be ready first.
-In this scenario, [step 8, "Prepare Ticketed Transaction"](#8-prepare-ticketed-transaction) is slightly different. Instead of preparing and signing all at once, you would follow the steps for [sending any multi-signed transaction](send-a-multi-signed-transaction.md): first prepare the transaction, then circulate it among trusted signers to collect their signatures, and finally combine the signatures into the final multi-signed transaction.
+In this scenario, [step 8, "Prepare Ticketed Transaction"](#8-prepare-ticketed-transaction) is slightly different. Instead of preparing and signing all at once, you would follow the steps for [sending any multi-signed transaction](../../best-practices/key-management/send-a-multi-signed-transaction.md): first prepare the transaction, then circulate it among trusted signers to collect their signatures, and finally combine the signatures into the final multi-signed transaction.
You could do this in parallel for several different potential transactions as long as each one uses a different Ticket.
@@ -262,7 +262,7 @@ You could do this in parallel for several different potential transactions as lo
- [Tickets](../../../concepts/accounts/tickets.md)
- [Multi-Signing](../../../concepts/accounts/multi-signing.md)
- **Tutorials:**
- - [Set Up Multi-Signing](set-up-multi-signing.md)
+ - [Set Up Multi-Signing](../../best-practices/key-management/set-up-multi-signing.md)
- [Reliable Transaction Submission](../../../concepts/transactions/reliable-transaction-submission.md)
- **References:**
- [account_objects method][]
diff --git a/docs/tutorials/javascript/compliance/create-permissioned-domains.md b/docs/tutorials/compliance-features/create-permissioned-domains-in-javascript.md
similarity index 100%
rename from docs/tutorials/javascript/compliance/create-permissioned-domains.md
rename to docs/tutorials/compliance-features/create-permissioned-domains-in-javascript.md
diff --git a/docs/tutorials/how-tos/manage-account-settings/require-destination-tags.md b/docs/tutorials/compliance-features/require-destination-tags.md
similarity index 79%
rename from docs/tutorials/how-tos/manage-account-settings/require-destination-tags.md
rename to docs/tutorials/compliance-features/require-destination-tags.md
index aa674ab647..bb3bfb86dd 100644
--- a/docs/tutorials/how-tos/manage-account-settings/require-destination-tags.md
+++ b/docs/tutorials/compliance-features/require-destination-tags.md
@@ -12,7 +12,7 @@ steps: ['Generate', 'Connect', 'Send AccountSet', 'Wait', 'Confirm Settings', 'T
---
# Require Destination Tags
-The Require Destination Tag setting is designed for addresses that host balances for multiple people or purposes, to prevent people from sending money and forgetting to use a [destination tag](../../../concepts/transactions/source-and-destination-tags.md) to identify whom to credit. When this setting is enabled on your address, the XRP Ledger rejects [any payment](../../../concepts/payment-types/index.md) to your address if it does not specify a destination tag.
+The Require Destination Tag setting is designed for addresses that host balances for multiple people or purposes, to prevent people from sending money and forgetting to use a [destination tag](../../concepts/transactions/source-and-destination-tags.md) to identify whom to credit. When this setting is enabled on your address, the XRP Ledger rejects [any payment](../../concepts/payment-types/index.md) to your address if it does not specify a destination tag.
This tutorial demonstrates how to enable the Require Destination Tag flag on your account.
@@ -23,8 +23,8 @@ This tutorial demonstrates how to enable the Require Destination Tag flag on you
- You need a funded XRP Ledger account, with an address, secret key, and some XRP. For production, you can use the same address and secret consistently. For this tutorial, you can generate new test credentials as needed.
- You need a connection to the XRP Ledger network. As shown in this tutorial, you can use public servers for testing.
- You should be familiar with the Getting Started instructions for your preferred client library. This page provides examples for the following:
- - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup steps.
- - **Python** with the [`xrpl-py` library](https://xrpl-py.readthedocs.io/). See [Get Started using Python](../../python/build-apps/get-started.md) for setup steps.
+ - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../get-started/get-started-javascript.md) for setup steps.
+ - **Python** with the [`xrpl-py` library](https://xrpl-py.readthedocs.io/). See [Get Started using Python](../get-started/get-started-python.md) for setup steps.
- You can also read along and use the interactive steps in your browser without any setup.
@@ -45,11 +45,11 @@ To transact on the XRP Ledger, you need an address and secret key, and some XRP.
{% partial file="/docs/_snippets/interactive-tutorials/generate-step.md" /%}
-When you're building production-ready software, you should use an existing account, and manage your keys using a [secure signing configuration](../../../concepts/transactions/secure-signing.md).
+When you're building production-ready software, you should use an existing account, and manage your keys using a [secure signing configuration](../../concepts/transactions/secure-signing.md).
### 2. Connect to the Network
-You must be connected to the network to submit transactions to it. The following code shows how to connect to a public XRP Ledger Testnet server a supported [client library](../../../references/client-libraries.md):
+You must be connected to the network to submit transactions to it. The following code shows how to connect to a public XRP Ledger Testnet server a supported [client library](../../references/client-libraries.md):
{% tabs %}
@@ -69,7 +69,7 @@ For this tutorial, click the following button to connect:
### 3. Send AccountSet Transaction
-To enable the `RequireDest` flag, set the [`asfRequireDest` value (`1`)](../../../references/protocol/transactions/types/accountset.md#accountset-flags) in the `SetFlag` field of an [AccountSet transaction][]. To send the transaction, you first _prepare_ it to fill out all the necessary fields, then _sign_ it with your account's secret key, and finally _submit_ it to the network.
+To enable the `RequireDest` flag, set the [`asfRequireDest` value (`1`)](../../references/protocol/transactions/types/accountset.md#accountset-flags) in the `SetFlag` field of an [AccountSet transaction][]. To send the transaction, you first _prepare_ it to fill out all the necessary fields, then _sign_ it with your account's secret key, and finally _submit_ it to the network.
For example:
@@ -98,7 +98,7 @@ For example:
### 4. Wait for Validation
-Most transactions are accepted into the next ledger version after they're submitted, which means it may take 4-7 seconds for a transaction's outcome to be final. If the XRP Ledger is busy or poor network connectivity delays a transaction from being relayed throughout the network, a transaction may take longer to be confirmed. (For information on how to set an expiration for transactions, see [Reliable Transaction Submission](../../../concepts/transactions/reliable-transaction-submission.md).)
+Most transactions are accepted into the next ledger version after they're submitted, which means it may take 4-7 seconds for a transaction's outcome to be final. If the XRP Ledger is busy or poor network connectivity delays a transaction from being relayed throughout the network, a transaction may take longer to be confirmed. (For information on how to set an expiration for transactions, see [Reliable Transaction Submission](../../concepts/transactions/reliable-transaction-submission.md).)
{% partial file="/docs/_snippets/interactive-tutorials/wait-step.md" /%}
@@ -131,7 +131,7 @@ After the transaction is validated, you can check your account's settings to con
{% /interactive-block %}
-For further confirmation, you can send test transactions (from a different address) to confirm that the setting is working as you expect it to. If you a payment with a destination tag, it should succeed, and if you send one _without_ a destination tag, it should fail with the error code [`tecDST_TAG_NEEDED`](../../../references/protocol/transactions/transaction-results/tec-codes.md).
+For further confirmation, you can send test transactions (from a different address) to confirm that the setting is working as you expect it to. If you a payment with a destination tag, it should succeed, and if you send one _without_ a destination tag, it should fail with the error code [`tecDST_TAG_NEEDED`](../../references/protocol/transactions/transaction-results/tec-codes.md).
{% interactive-block label="Test Payments" steps=$frontmatter.steps %}
@@ -148,13 +148,13 @@ For further confirmation, you can send test transactions (from a different addre
## See Also
- **Concepts:**
- - [Accounts](../../../concepts/accounts/index.md)
- - [Source and Destination Tags](../../../concepts/transactions/source-and-destination-tags.md)
- - [Transaction Cost](../../../concepts/transactions/transaction-cost.md)
- - [Payment Types](../../../concepts/payment-types/index.md)
+ - [Accounts](../../concepts/accounts/index.md)
+ - [Source and Destination Tags](../../concepts/transactions/source-and-destination-tags.md)
+ - [Transaction Cost](../../concepts/transactions/transaction-cost.md)
+ - [Payment Types](../../concepts/payment-types/index.md)
- **References:**
- [account_info method][]
- [AccountSet transaction][]
- - [AccountRoot Flags](../../../references/protocol/ledger-data/ledger-entry-types/accountroot.md#accountroot-flags)
+ - [AccountRoot Flags](../../references/protocol/ledger-data/ledger-entry-types/accountroot.md#accountroot-flags)
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/python/compliance/verify-credential.md b/docs/tutorials/compliance-features/verify-credentials-in-python.md
similarity index 93%
rename from docs/tutorials/python/compliance/verify-credential.md
rename to docs/tutorials/compliance-features/verify-credentials-in-python.md
index 721492d6df..217c4fed1e 100644
--- a/docs/tutorials/python/compliance/verify-credential.md
+++ b/docs/tutorials/compliance-features/verify-credentials-in-python.md
@@ -6,10 +6,10 @@ labels:
---
# Verify Credentials in Python
-This tutorial describes how to verify that an account holds a valid [credential](/docs/concepts/decentralized-storage/credentials) on the XRP Ledger, which has different use cases depending on the type of credential and the meaning behind it. A few possible reasons to verify a credential include:
+This tutorial describes how to verify that an account holds a valid [credential](../../concepts/decentralized-storage/credentials.md) on the XRP Ledger, which has different use cases depending on the type of credential and the meaning behind it. A few possible reasons to verify a credential include:
- Confirming that a recipient has passed a background check before sending a payment.
-- Checking a person's professional certifications, after verifying their identity with a [DID](/docs/concepts/decentralized-storage/decentralized-identifiers).
+- Checking a person's professional certifications, after verifying their identity with a [DID](../../concepts/decentralized-storage/decentralized-identifiers.md).
- Displaying a player's achievements in a blockchain-connected game.
This tutorial uses sample code in Python using the [xrpl-py library](../index.md).
@@ -19,7 +19,7 @@ This tutorial uses sample code in Python using the [xrpl-py library](../index.md
- You must have Python installed and know how to run Python code from the command line. Python 3.8 or later is required for xrpl-py.
- You should have a basic understanding of the XRP Ledger.
- The credential you want to verify should exist in the ledger already, and you should know the addresses of both the issuer and the holder, as well as the official credential type you want to check.
- - For sample code showing how to create credentials, see [Build a Credential Issuing Service](../build-apps/credential-issuing-service.md).
+ - For sample code showing how to create credentials, see [Build a Credential Issuing Service](../sample-apps/credential-issuing-service-in-python.md).
## Setup
@@ -175,7 +175,7 @@ The first thing the function does is verify that the user provided a credential
{% code-snippet file="/_code-samples/verify-credential/py/verify_credential.py" language="py" from="# Handle function inputs" before="# Perform XRPL lookup" /%}
-Next, it calls the [ledger_entry method](/docs/references/http-websocket-apis/public-api-methods/ledger-methods/ledger_entry#get-credential-entry) to look up the requested Credential ledger entry:
+Next, it calls the [ledger_entry method](../../references/http-websocket-apis/public-api-methods/ledger-methods/ledger_entry.md#get-credential-entry) to look up the requested Credential ledger entry:
{% code-snippet file="/_code-samples/verify-credential/py/verify_credential.py" language="py" from="# Perform XRPL lookup" before="# Confirm that the credential has been accepted" /%}
@@ -183,7 +183,7 @@ If it succeeds in finding the credential, the function continues by checking tha
{% code-snippet file="/_code-samples/verify-credential/py/verify_credential.py" language="py" from="# Confirm that the credential has been accepted" before="# Confirm that the credential is not expired" /%}
-Then, if the credential has an expiration time, the function checks that the credential is not expired. If the credential has no expiration, this step can be skipped. A credential is officially considered expired if its expiration time is before the [official close time](/docs/concepts/ledgers/ledger-close-times) of the most recently validated ledger. This is more universal than comparing the expiration to your own local clock. Thus, the code uses the [ledger method][] to look up the most recently validated ledger:
+Then, if the credential has an expiration time, the function checks that the credential is not expired. If the credential has no expiration, this step can be skipped. A credential is officially considered expired if its expiration time is before the [official close time](../../concepts/ledgers/ledger-close-times.md) of the most recently validated ledger. This is more universal than comparing the expiration to your own local clock. Thus, the code uses the [ledger method][] to look up the most recently validated ledger:
{% code-snippet file="/_code-samples/verify-credential/py/verify_credential.py" language="py" from="# Confirm that the credential is not expired" before="# Credential has passed all checks" /%}
@@ -215,7 +215,7 @@ Otherwise, the code exits as normal, which returns a successful exit code of `0`
Now that you know how to use `xrpl-py` to verify credentials, you can try building this or related steps together into a bigger project. For example:
-- Incorporate credential verification into a [wallet application](../build-apps/build-a-desktop-wallet-in-python.md).
-- Issue your own credentials with a [credential issuing service](../build-apps/credential-issuing-service.md).
+- Incorporate credential verification into a [wallet application](../sample-apps/build-a-desktop-wallet-in-python.md).
+- Issue your own credentials with a [credential issuing service](../sample-apps/credential-issuing-service-in-python.md).
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/javascript/compliance/verify-credential.md b/docs/tutorials/compliance-features/verify-credentials-javascript.md
similarity index 88%
rename from docs/tutorials/javascript/compliance/verify-credential.md
rename to docs/tutorials/compliance-features/verify-credentials-javascript.md
index db7c7a54fc..3ec67e5482 100644
--- a/docs/tutorials/javascript/compliance/verify-credential.md
+++ b/docs/tutorials/compliance-features/verify-credentials-javascript.md
@@ -6,10 +6,10 @@ labels:
---
# Verify Credentials
-This tutorial describes how to verify that an account holds a valid [credential](/docs/concepts/decentralized-storage/credentials) on the XRP Ledger, which has different use cases depending on the type of credential and the meaning behind it. A few possible reasons to verify a credential include:
+This tutorial describes how to verify that an account holds a valid [credential](../../concepts/decentralized-storage/credentials.md) on the XRP Ledger, which has different use cases depending on the type of credential and the meaning behind it. A few possible reasons to verify a credential include:
- Confirming that a recipient has passed a background check before sending a payment.
-- Checking a person's professional certifications, after verifying their identity with a [DID](/docs/concepts/decentralized-storage/decentralized-identifiers).
+- Checking a person's professional certifications, after verifying their identity with a [DID](../../concepts/decentralized-storage/decentralized-identifiers.md).
- Displaying a player's achievements in a blockchain-connected game.
## Goals
@@ -26,7 +26,7 @@ To complete this tutorial, you should:
- Have a basic understanding of the XRP Ledger.
- Have an XRP Ledger client library, such as [xrpl.js](../build-apps/get-started.md), installed.
- Know the issuer, subject, and credential type of the credential you want to verify. For purposes of this tutorial, you can use sample values of data that exists in the public network.
- - For information on how to create your own credentials, see the [Build a Credential Issuing Service](../build-apps/credential-issuing-service.md) tutorial.
+ - For information on how to create your own credentials, see the [Build a Credential Issuing Service](../sample-apps/credential-issuing-service-in-javascript.md) tutorial.
## Source Code
@@ -121,12 +121,12 @@ If the credential has passed all checks to this point, it is valid. In summary,
Now that you know how to use `xrpl.js` to verify credentials, you can try building this or related steps together into a bigger project. For example:
-- Incorporate credential verification into a [wallet application](../build-apps/build-a-desktop-wallet-in-javascript.md).
-- Issue your own credentials with a [credential issuing service](../build-apps/credential-issuing-service.md).
+- Incorporate credential verification into a [wallet application](../sample-apps/build-a-desktop-wallet-in-javascript.md).
+- Issue your own credentials with a [credential issuing service](../sample-apps/credential-issuing-service-in-javascript.md).
## See Also
-- [Verify Credentials in Python](../../python/compliance/verify-credential.md)
+- [Verify Credentials in Python](./verify-credentials-in-python.md)
- **References:**
- API methods:
- [ledger_entry method][]
diff --git a/docs/tutorials/javascript/amm/add-assets-to-amm.md b/docs/tutorials/dex/add-assets-to-amm-in-javascript.md
similarity index 98%
rename from docs/tutorials/javascript/amm/add-assets-to-amm.md
rename to docs/tutorials/dex/add-assets-to-amm-in-javascript.md
index 54fda48b01..50cb900c1f 100644
--- a/docs/tutorials/javascript/amm/add-assets-to-amm.md
+++ b/docs/tutorials/dex/add-assets-to-amm-in-javascript.md
@@ -1,10 +1,10 @@
# Add Assets to an AMM
-Follow the steps from the [Create an AMM](/docs/tutorials/javascript/amm/create-an-amm/) tutorial before proceeding.
+Follow the steps from the [Create an AMM](./create-an-amm-in-javascript.md) tutorial before proceeding.
This example shows how to:
-1. Deposit assets to an existing [AMM](/docs/concepts/tokens/decentralized-exchange/automated-market-makers) and receive LP tokens.
+1. Deposit assets to an existing [AMM](../../concepts/tokens/decentralized-exchange/automated-market-makers.md) and receive LP tokens.
2. Vote on AMM trading fees.
3. Check the value of your LP tokens.
4. Redeem LP tokens for assets in the AMM pair.
@@ -37,7 +37,7 @@ Without the Quickstart Samples, you will not be able to try the examples that fo
### Get the AMM
-Use the information from either the XRP/Token or Token/Token AMM you created in [Create an AMM](/docs/tutorials/javascript/amm/create-an-amm/#create-an-xrp/token-amm).
+Use the information from either the XRP/Token or Token/Token AMM you created in [Create an AMM](./create-an-amm-in-javascript.md#create-an-xrp/token-amm).
1. Enter a [currency code](/docs/references/protocol/data-types/currency-formats.md#currency-codes) in the **Asset 1 Currency** field. For example, `XRP`.
2. Enter a second currency code in the **Asset 2 Currency** field. For example, `TST`.
diff --git a/docs/tutorials/javascript/amm/create-an-amm.md b/docs/tutorials/dex/create-an-amm-in-javascript.md
similarity index 99%
rename from docs/tutorials/javascript/amm/create-an-amm.md
rename to docs/tutorials/dex/create-an-amm-in-javascript.md
index 24688b8e30..312feb720d 100644
--- a/docs/tutorials/javascript/amm/create-an-amm.md
+++ b/docs/tutorials/dex/create-an-amm-in-javascript.md
@@ -63,7 +63,7 @@ Send issued tokens from the operational account to the standby account. In the o
1. Select **Allow Rippling** and click **Configure Account**.
{% admonition type="info" name="Note" %}
- This enables the `defaultRipple` flag on the issuing account, which is set to `false` by default. You need to enable this in order to trade tokens issued by the account. See [Configure Issuer Settings](../../how-tos/use-tokens/issue-a-fungible-token.md#3-configure-issuer-settings) to learn more.
+ This enables the `defaultRipple` flag on the issuing account, which is set to `false` by default. You need to enable this in order to trade tokens issued by the account. See [Configure Issuer Settings](../how-tos/use-tokens/issue-a-fungible-token.md#3-configure-issuer-settings) to learn more.
{% /admonition %}
2. Enter a value in the **Amount** field, up to the maximum transfer amount you set in the trustline.
3. Enter the standby account address in the **Destination** field.
diff --git a/docs/tutorials/how-tos/use-tokens/create-an-automated-market-maker.md b/docs/tutorials/dex/create-an-automated-market-maker.md
similarity index 87%
rename from docs/tutorials/how-tos/use-tokens/create-an-automated-market-maker.md
rename to docs/tutorials/dex/create-an-automated-market-maker.md
index f260fda3b9..4bc01f463f 100644
--- a/docs/tutorials/how-tos/use-tokens/create-an-automated-market-maker.md
+++ b/docs/tutorials/dex/create-an-automated-market-maker.md
@@ -12,7 +12,7 @@ steps: ['Connect', 'Generate', 'Acquire tokens', 'Check for AMM', 'Look up AMMCr
---
# Create an Automated Market Maker
-An [Automated Market Maker (AMM)](../../../concepts/tokens/decentralized-exchange/automated-market-makers.md) can be an efficient way to facilitate exchanges between two assets while earning its liquidity providers passive income. This tutorial shows how to create an AMM for a given asset pair.
+An [Automated Market Maker (AMM)](../../concepts/tokens/decentralized-exchange/automated-market-makers.md) can be an efficient way to facilitate exchanges between two assets while earning its liquidity providers passive income. This tutorial shows how to create an AMM for a given asset pair.
{% amendment-disclaimer name="AMM" /%}
@@ -24,10 +24,10 @@ An [Automated Market Maker (AMM)](../../../concepts/tokens/decentralized-exchang
- You must have an XRP Ledger address and some XRP. For development and testing purposes, you can get these from a [Faucet](/resources/dev-tools/xrp-faucets).
- You should be familiar with the Getting Started instructions for your preferred client library. This page provides examples for the following:
- - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/) **version 2.11.0 or later**. See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup steps.
+ - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/) **version 2.11.0 or later**. See [Get Started Using JavaScript](../get-started/get-started-javascript.md) for setup steps.
- You can also read along and use the interactive steps in your browser without any setup.
-- You should have a basic understanding of how [tokens](../../../concepts/tokens/index.md) work in the XRP Ledger.
-- You may want to read about [Automated Market Makers in the XRP Ledger](../../../concepts/tokens/decentralized-exchange/automated-market-makers.md) first.
+- You should have a basic understanding of how [tokens](../../concepts/tokens/index.md) work in the XRP Ledger.
+- You may want to read about [Automated Market Makers in the XRP Ledger](../../concepts/tokens/decentralized-exchange/automated-market-makers.md) first.
## Example Code
@@ -41,7 +41,7 @@ Complete sample code for all of the steps of these tutorials is available under
### 1. Connect to the network
-You must be connected to the network to query it and submit transactions. The following code shows how to connect to a public {{use_network}} server using a supported [client library](../../../references/client-libraries.md):
+You must be connected to the network to query it and submit transactions. The following code shows how to connect to a public {{use_network}} server using a supported [client library](../../references/client-libraries.md):
{% tabs %}
@@ -57,11 +57,11 @@ For this tutorial, click the following button to connect:
### 2. Get credentials
-To transact on the XRP Ledger, you need an address, a secret key, and some XRP. For development and testing purposes, you can get these on the [{{use_network}}](../../../concepts/networks-and-servers/parallel-networks.md) using the following interface:
+To transact on the XRP Ledger, you need an address, a secret key, and some XRP. For development and testing purposes, you can get these on the [{{use_network}}](../../concepts/networks-and-servers/parallel-networks.md) using the following interface:
{% partial file="/docs/_snippets/interactive-tutorials/generate-step.md" /%}
-When you're building production-ready software, you should use an existing account, and manage your keys using a [secure signing configuration](../../../concepts/transactions/secure-signing.md). The following code shows how to get a `Wallet` instance using either the faucet or a seed provided by environment variable:
+When you're building production-ready software, you should use an existing account, and manage your keys using a [secure signing configuration](../../concepts/transactions/secure-signing.md). The following code shows how to get a `Wallet` instance using either the faucet or a seed provided by environment variable:
{% tabs %}
@@ -76,7 +76,7 @@ When you're building production-ready software, you should use an existing accou
As the creator of an AMM, you are also the first liquidity provider and you have to supply it with a starting pool of assets. Other users of the XRP Ledger can also become liquidity providers by supplying assets after the AMM exists. It's crucial to choose assets carefully because, as a liquidity provider for an AMM, you are supplying some amounts of both for users to swap between. If one of the AMM's assets becomes worthless, other users can use the AMM to trade for the other asset, leaving the AMM (and thus, its liquidity providers including you) holding only the worthless one. Technically, the AMM always holds some positive amount of both assets, but the amounts can be very small.
-You can choose any pair of fungible assets in the XRP Ledger, including XRP or tokens, as long as they meet the [restrictions on AMM assets](../../../concepts/tokens/decentralized-exchange/automated-market-makers.md#restrictions-on-assets).
+You can choose any pair of fungible assets in the XRP Ledger, including XRP or tokens, as long as they meet the [restrictions on AMM assets](../../concepts/tokens/decentralized-exchange/automated-market-makers.md#restrictions-on-assets).
For each of the two assets, you need to know its currency code and issuer; as an exception, XRP has no issuer. For each of the assets, you must hold a balance of the asset (or _be_ the issuer). The following sample code acquires two assets, "TST" (which it buys using XRP) and "FOO" (which it receives from the issuer).
@@ -88,9 +88,9 @@ For each of the two assets, you need to know its currency code and issuer; as an
{% /tabs %}
-This tutorial includes some example code to issue FOO tokens from a second test address. This is not realistic for a production scenario, because tokens do not inherently have value, but it makes it possible to demonstrate creating a new AMM for a unique currency pair. In production, you would acquire a second token in some other way, such as making an off-ledger deposit with the [stablecoin issuer](../../../use-cases/tokenization/stablecoin-issuer.md), or buying it in the [decentralized exchange](../../../concepts/tokens/decentralized-exchange/index.md).
+This tutorial includes some example code to issue FOO tokens from a second test address. This is not realistic for a production scenario, because tokens do not inherently have value, but it makes it possible to demonstrate creating a new AMM for a unique currency pair. In production, you would acquire a second token in some other way, such as making an off-ledger deposit with the [stablecoin issuer](../../use-cases/tokenization/stablecoin-issuer.md), or buying it in the [decentralized exchange](../../concepts/tokens/decentralized-exchange/index.md).
-The helper function for issuing follows an abbreviated version of the steps in the [Issue a Fungible Token](issue-a-fungible-token.md) tutorial:
+The helper function for issuing follows an abbreviated version of the steps in the [Issue a Fungible Token](../how-tos/use-tokens/issue-a-fungible-token.md) tutorial:
{% tabs %}
@@ -137,7 +137,7 @@ If the AMM does already exist, you should double-check that you specified the ri
### 5. Look up the AMMCreate transaction cost
-Creating an AMM has a special [transaction cost][] to prevent spam: since it creates objects in the ledger that no one owns, you must burn at least one [owner reserve increment](../../../concepts/accounts/reserves.md) of XRP to send the AMMCreate transaction. The exact value can change due to [fee voting](https://xrpl.org/fee-voting.html), so you should look up the current incremental reserve value using the [server_state method][].
+Creating an AMM has a special [transaction cost][] to prevent spam: since it creates objects in the ledger that no one owns, you must burn at least one [owner reserve increment](../../concepts/accounts/reserves.md) of XRP to send the AMMCreate transaction. The exact value can change due to [fee voting](https://xrpl.org/fee-voting.html), so you should look up the current incremental reserve value using the [server_state method][].
It is also a good practice to display this value and give a human operator a chance to stop before you send the transaction. Burning an owner reserve is typically a much higher cost than sending a normal transaction, so you don't want it to be a surprise. (Currently, on both Mainnet and Devnet, the cost of sending a typical transaction is 0.000010 XRP but the cost of AMMCreate is {% $env.PUBLIC_OWNER_RESERVE %}.)
@@ -260,7 +260,7 @@ You can also use the [account_lines method][] to get an updated view of your tok
{% /tabs %}
-The `account_lines` response shows only the tokens held by the account you looked up (probably yours). If you have a lot of tokens, you may want to specify the AMM address as the `peer` in the request so you don't have to [paginate](../../../references/http-websocket-apis/api-conventions/markers-and-pagination.md) over multiple requests to find the AMM's LP Tokens. In this tutorial, your account probably only holds the three different tokens, so you can see all three in the same response.
+The `account_lines` response shows only the tokens held by the account you looked up (probably yours). If you have a lot of tokens, you may want to specify the AMM address as the `peer` in the request so you don't have to [paginate](../../references/http-websocket-apis/api-conventions/markers-and-pagination.md) over multiple requests to find the AMM's LP Tokens. In this tutorial, your account probably only holds the three different tokens, so you can see all three in the same response.
{% admonition type="success" name="Tip" %}If one of the assets in the AMM's pool is XRP, you need to call the [account_info method][] on your account to see the difference in your balance (the `Balance` field of the account object).{% /admonition %}
diff --git a/docs/tutorials/javascript/send-payments/create-offers.md b/docs/tutorials/dex/create-offers-in-javascript.md
similarity index 99%
rename from docs/tutorials/javascript/send-payments/create-offers.md
rename to docs/tutorials/dex/create-offers-in-javascript.md
index e6c97beb82..6c2fc016ab 100644
--- a/docs/tutorials/javascript/send-payments/create-offers.md
+++ b/docs/tutorials/dex/create-offers-in-javascript.md
@@ -19,7 +19,7 @@ This example shows how to:
[](/docs/img/mt-create-offers-1-empty-form-info.png)
-Download and expand the [Modular Tutorials](../../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
+Download and expand the [Modular Tutorials](../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
**Note:** Without the Modular Tutorial Samples, you will not be able to try the examples that follow.
diff --git a/docs/tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md b/docs/tutorials/dex/trade-in-the-decentralized-exchange.md
similarity index 90%
rename from docs/tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md
rename to docs/tutorials/dex/trade-in-the-decentralized-exchange.md
index c9f692cbf4..5664b66d6a 100644
--- a/docs/tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md
+++ b/docs/tutorials/dex/trade-in-the-decentralized-exchange.md
@@ -12,14 +12,14 @@ steps: ['Connect', 'Generate', 'Look Up Offers',' Send OfferCreate', 'Wait', 'Ch
---
# Trade in the Decentralized Exchange
-This tutorial demonstrates how you can buy and sell tokens in the [decentralized exchange](../../../concepts/tokens/decentralized-exchange/index.md) (DEX).
+This tutorial demonstrates how you can buy and sell tokens in the [decentralized exchange](../../concepts/tokens/decentralized-exchange/index.md) (DEX).
## Prerequisites
- You need a connection to the XRP Ledger network. As shown in this tutorial, you can use public servers for testing.
- You should be familiar with the Getting Started instructions for your preferred client library. This page provides examples for the following:
- - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup steps.
- - **Python** with the [`xrpl-py` library](https://xrpl-py.readthedocs.io/). See [Get Started using Python](../../python/build-apps/get-started.md) for setup steps.
+ - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../get-started/get-started-javascript.md) for setup steps.
+ - **Python** with the [`xrpl-py` library](https://xrpl-py.readthedocs.io/). See [Get Started using Python](../get-started/get-started-python.md) for setup steps.
- You can also read along and use the interactive steps in your browser without any setup.
@@ -45,7 +45,7 @@ This tutorial demonstrates how to buy a fungible token in the decentralized exch
### 1. Connect to Network
-You must be connected to the network to submit transactions to it. Additionally, some languages (including JavaScript) require a high-precision number library for performing calculations on currency amounts you may find in the ledger. The following code shows how to connect to a public XRP Ledger Testnet server a supported [client library](../../../references/client-libraries.md) with the appropriate dependencies.
+You must be connected to the network to submit transactions to it. Additionally, some languages (including JavaScript) require a high-precision number library for performing calculations on currency amounts you may find in the ledger. The following code shows how to connect to a public XRP Ledger Testnet server a supported [client library](../../references/client-libraries.md) with the appropriate dependencies.
{% tabs %}
@@ -67,11 +67,11 @@ For this tutorial, click the following button to connect:
### 2. Get Credentials
-To transact on the XRP Ledger, you need an address, a secret key, and some XRP. For development purposes, you can get these on the [Testnet](../../../concepts/networks-and-servers/parallel-networks.md) using the following interface:
+To transact on the XRP Ledger, you need an address, a secret key, and some XRP. For development purposes, you can get these on the [Testnet](../../concepts/networks-and-servers/parallel-networks.md) using the following interface:
{% partial file="/docs/_snippets/interactive-tutorials/generate-step.md" /%}
-When you're building production-ready software, you should use an existing account, and manage your keys using a [secure signing configuration](../../../concepts/transactions/secure-signing.md). The following code shows how to create a `Wallet` instance to use your keys:
+When you're building production-ready software, you should use an existing account, and manage your keys using a [secure signing configuration](../../concepts/transactions/secure-signing.md). The following code shows how to create a `Wallet` instance to use your keys:
{% tabs %}
@@ -105,7 +105,7 @@ The following code shows how to look up existing Offers and compare them to a pr
{% /tabs %}
-{% admonition type="info" name="Note" %}Other users of the XRP Ledger can also make trades at any time, so this is only an estimate of what would happen if nothing else changes. The outcome of a transaction is not guaranteed until it is [final](../../../concepts/transactions/finality-of-results/index.md).{% /admonition %}
+{% admonition type="info" name="Note" %}Other users of the XRP Ledger can also make trades at any time, so this is only an estimate of what would happen if nothing else changes. The outcome of a transaction is not guaranteed until it is [final](../../concepts/transactions/finality-of-results/index.md).{% /admonition %}
The following block demonstrates these calculations in action:
@@ -193,14 +193,14 @@ You can use this interface to send the transaction specified by the amounts in t
### 5. Wait for Validation
-Most transactions are accepted into the next ledger version after they're submitted, which means it may take 4-7 seconds for a transaction's outcome to be final. If the XRP Ledger is busy or poor network connectivity delays a transaction from being relayed throughout the network, a transaction may take longer to be confirmed. (For information on how to set an expiration for transactions, see [Reliable Transaction Submission](../../../concepts/transactions/reliable-transaction-submission.md).)
+Most transactions are accepted into the next ledger version after they're submitted, which means it may take 4-7 seconds for a transaction's outcome to be final. If the XRP Ledger is busy or poor network connectivity delays a transaction from being relayed throughout the network, a transaction may take longer to be confirmed. (For information on how to set an expiration for transactions, see [Reliable Transaction Submission](../../concepts/transactions/reliable-transaction-submission.md).)
{% partial file="/docs/_snippets/interactive-tutorials/wait-step.md" /%}
### 6. Check Metadata
-You can use the validated transaction's [metadata](../../../references/protocol/transactions/metadata.md) to determine exactly what it did. (Don't use metadata from tentative transaction results, because it may be different from the [final result](../../../concepts/transactions/finality-of-results/index.md), especially when using the decentralized exchange.) In case of an OfferCreate transaction, likely results include:
+You can use the validated transaction's [metadata](../../references/protocol/transactions/metadata.md) to determine exactly what it did. (Don't use metadata from tentative transaction results, because it may be different from the [final result](../../concepts/transactions/finality-of-results/index.md), especially when using the decentralized exchange.) In case of an OfferCreate transaction, likely results include:
- Some or all of the Offer may have been filled by matching with existing Offers in the ledger.
- The unmatched remainder, if any, has been placed into the ledger to await new matching Offers.
diff --git a/docs/tutorials/javascript/amm/trade-with-auction-slot.md b/docs/tutorials/dex/trade-with-auction-slot-in-javascript.md
similarity index 98%
rename from docs/tutorials/javascript/amm/trade-with-auction-slot.md
rename to docs/tutorials/dex/trade-with-auction-slot-in-javascript.md
index 8f2ef2c7c0..c765fa27cd 100644
--- a/docs/tutorials/javascript/amm/trade-with-auction-slot.md
+++ b/docs/tutorials/dex/trade-with-auction-slot-in-javascript.md
@@ -1,10 +1,10 @@
# Trade with an AMM Auction Slot
-Follow the steps from the [Create an AMM](/docs/tutorials/javascript/amm/create-an-amm/) tutorial before proceeding.
+Follow the steps from the [Create an AMM](./create-an-amm-in-javascript.md) tutorial before proceeding.
This example shows how to:
-1. Calculate the exact cost of swapping one token for another in an [AMM](/docs/concepts/tokens/decentralized-exchange/automated-market-makers) pool.
+1. Calculate the exact cost of swapping one token for another in an [AMM](../../concepts/tokens/decentralized-exchange/automated-market-makers) pool.
2. Check the difference in trading fees with and without an auction slot.
3. Bid on an auction slot with LP tokens.
4. Create an offer to swap tokens with the AMM.
@@ -37,9 +37,9 @@ Without the Quickstart Samples, you will not be able to try the examples that fo
### Get the AMM
-Use the information from either the XRP/Token or Token/Token AMM you created in [Create an AMM](/docs/tutorials/javascript/amm/create-an-amm/#create-an-xrp/token-amm).
+Use the information from either the XRP/Token or Token/Token AMM you created in [Create an AMM](create-an-amm-in-javascript.md#create-an-xrp/token-amm).
-1. Enter a [currency code](/docs/references/protocol/data-types/currency-formats.md#currency-codes) in the **Asset 1 Currency** field. For example, `XRP`.
+1. Enter a [currency code](../../references/protocol/data-types/currency-formats.md#currency-codes) in the **Asset 1 Currency** field. For example, `XRP`.
2. Enter a second currency code in the **Asset 2 Currency** field. For example, `TST`.
3. Enter the operational account address in the **Asset 2 Issuer** field.
4. Click **Check AMM**.
diff --git a/docs/tutorials/go/build-apps/get-started.md b/docs/tutorials/get-started/get-started-go.md
similarity index 71%
rename from docs/tutorials/go/build-apps/get-started.md
rename to docs/tutorials/get-started/get-started-go.md
index 6ba4f0d090..b3ab11834f 100644
--- a/docs/tutorials/go/build-apps/get-started.md
+++ b/docs/tutorials/get-started/get-started-go.md
@@ -41,7 +41,7 @@ go get -u github.com/Peersyst/xrpl-go
## Start Building
-When you're working with the XRP Ledger, there are a few things you'll need to manage, whether you're adding XRP to your [account](../../../concepts/accounts/index.md), integrating with the [decentralized exchange](../../../concepts/tokens/decentralized-exchange/index.md), or [issuing tokens](../../../concepts/tokens/index.md). This tutorial walks you through basic patterns common to getting started with all of these use cases and provides sample code for implementing them.
+When you're working with the XRP Ledger, there are a few things you'll need to manage, whether you're adding XRP to your [account](../../concepts/accounts/index.md), integrating with the [decentralized exchange](../../concepts/tokens/decentralized-exchange/index.md), or [issuing tokens](../../concepts/tokens/index.md). This tutorial walks you through basic patterns common to getting started with all of these use cases and provides sample code for implementing them.
Here are the basic steps you'll need to cover for almost any XRP Ledger project:
@@ -63,9 +63,9 @@ To make queries and submit transactions, you need to connect to the XRP Ledger.
#### Connect to the production XRP Ledger
-The sample code in the previous section shows you how to connect to the Testnet, which is a [parallel network](../../../concepts/networks-and-servers/parallel-networks.md) for testing where the money has no real value. When you're ready to integrate with the production XRP Ledger, you'll need to connect to the Mainnet. You can do that in two ways:
+The sample code in the previous section shows you how to connect to the Testnet, which is a [parallel network](../../concepts/networks-and-servers/parallel-networks.md) for testing where the money has no real value. When you're ready to integrate with the production XRP Ledger, you'll need to connect to the Mainnet. You can do that in two ways:
-- By [installing the core server](../../../infrastructure/installation/index.md) (`rippled`) and running a node yourself. The core server connects to the Mainnet by default, but you can [change the configuration to use Testnet or Devnet](../../../infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md). [There are good reasons to run your own core server](../../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server). If you run your own server, you can connect to it like so:
+- By [installing the core server](../../infrastructure/installation/index.md) (`rippled`) and running a node yourself. The core server connects to the Mainnet by default, but you can [change the configuration to use Testnet or Devnet](../../infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md). [There are good reasons to run your own core server](../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server). If you run your own server, you can connect to it like so:
```go
import "github.com/Peersyst/xrpl-go/xrpl/websocket"
@@ -132,9 +132,9 @@ If you already have a seed encoded in [base58][], you can make a `Wallet` instan
### 3. Query the XRP Ledger
-You can query the XRP Ledger to get information about [a specific account](../../../references/http-websocket-apis/public-api-methods/account-methods/index.md), [a specific transaction](../../../references/http-websocket-apis/public-api-methods/transaction-methods/tx.md), the state of a [current or a historical ledger](../../../references/http-websocket-apis/public-api-methods/ledger-methods/index.md), and [the XRP Ledger's decentralized exchange](../../../references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md). You need to make these queries, among other reasons, to look up account info to follow best practices for [reliable transaction submission](../../../concepts/transactions/reliable-transaction-submission.md).
+You can query the XRP Ledger to get information about [a specific account](../../references/http-websocket-apis/public-api-methods/account-methods/index.md), [a specific transaction](../../references/http-websocket-apis/public-api-methods/transaction-methods/tx.md), the state of a [current or a historical ledger](../../references/http-websocket-apis/public-api-methods/ledger-methods/index.md), and [the XRP Ledger's decentralized exchange](../../references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md). You need to make these queries, among other reasons, to look up account info to follow best practices for [reliable transaction submission](../../concepts/transactions/reliable-transaction-submission.md).
-Use the Client's `Request()` method to access the XRP Ledger's [WebSocket API](../../../references/http-websocket-apis/api-conventions/request-formatting.md). For example:
+Use the Client's `Request()` method to access the XRP Ledger's [WebSocket API](../../references/http-websocket-apis/api-conventions/request-formatting.md). For example:
{% code-snippet file="/_code-samples/get-tx/go/main.go" from="// Get the latest validated ledger" language="go" /%}
@@ -146,6 +146,6 @@ Or, use the getter methods from the [`websocket`](https://pkg.go.dev/github.com/
Now that you know how to use `xrpl-go` to connect to the XRP Ledger, get an account, and look up information about it, you can also:
-- [Send XRP](../../how-tos/send-xrp.md).
+- [Send XRP](../payments/send-xrp.md).
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/http-websocket-apis/build-apps/get-started.md b/docs/tutorials/get-started/get-started-http-websocket-apis.md
similarity index 58%
rename from docs/tutorials/http-websocket-apis/build-apps/get-started.md
rename to docs/tutorials/get-started/get-started-http-websocket-apis.md
index 82edbc65ef..c07b1c6476 100644
--- a/docs/tutorials/http-websocket-apis/build-apps/get-started.md
+++ b/docs/tutorials/get-started/get-started-http-websocket-apis.md
@@ -12,7 +12,7 @@ showcase_icon: assets/img/logos/globe.svg
---
# Get Started Using HTTP / WebSocket APIs
-If you don't have or don't want to use a [client library](../../../references/client-libraries.md) in your preferred programming language, you can access the XRP Ledger directly through the APIs of its core server software, [`rippled`](../../../concepts/networks-and-servers/index.md). The server provides APIs over JSON-RPC and WebSocket protocols. If you don't [run your own instance of `rippled`](../../../infrastructure/installation/index.md) you can still use a [public server][public servers].
+If you don't have or don't want to use a [client library](../../references/client-libraries.md) in your preferred programming language, you can access the XRP Ledger directly through the APIs of its core server software, [`rippled`](../../concepts/networks-and-servers/index.md). The server provides APIs over JSON-RPC and WebSocket protocols. If you don't [run your own instance of `rippled`](../../infrastructure/installation/index.md) you can still use a [public server][public servers].
{% admonition type="success" name="Tip" %}You can dive right into the API with the [**WebSocket API Tool**](/resources/dev-tools/websocket-api-tool), or use the [XRP Ledger Explorer](https://livenet.xrpl.org/) to watch the progress of the ledger live.{% /admonition %}
@@ -21,21 +21,21 @@ If you don't have or don't want to use a [client library](../../../references/cl
Both JSON-RPC and WebSocket are HTTP-based protocols, and for the most part the data provided over both protocols is the same. The major differences are as follows:
- JSON-RPC uses individual HTTP requests and responses for each call, similar to a RESTful API. You can use any common HTTP client such as [curl](https://curl.se/), [Postman](https://www.postman.com/downloads/), or [Requests](https://requests.readthedocs.io/) to access this API.
-- WebSocket uses a persistent connection that allows the server to push data to the client. Functions that require push messages, like [event subscriptions](../../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md), are only available using WebSocket.
+- WebSocket uses a persistent connection that allows the server to push data to the client. Functions that require push messages, like [event subscriptions](../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md), are only available using WebSocket.
Both APIs can be served unencrypted (`http://` and `ws://`) or encrypted using TLS (`https://` and `wss://`). Unencrypted connections should not be served over open networks, but can be used when the client is on the same machine as the server.
## Admin Access
-The API methods are divided into [Public Methods](../../../references/http-websocket-apis/public-api-methods/index.md) and [Admin Methods](../../../references/http-websocket-apis/admin-api-methods/index.md) so that organizations can offer public servers for the benefit of the community. To access admin methods, or admin functionality of public methods, you must connect to the API on a **port and IP address marked as admin** in the server's config file.
+The API methods are divided into [Public Methods](../../references/http-websocket-apis/public-api-methods/index.md) and [Admin Methods](../../references/http-websocket-apis/admin-api-methods/index.md) so that organizations can offer public servers for the benefit of the community. To access admin methods, or admin functionality of public methods, you must connect to the API on a **port and IP address marked as admin** in the server's config file.
The [example config file](https://github.com/XRPLF/rippled/blob/f00f263852c472938bf8e993e26c7f96f435935c/cfg/rippled-example.cfg#L1154-L1179) listens for connections on the local loopback network (127.0.0.1), with JSON-RPC (HTTP) on port 5005 and WebSocket (WS) on port 6006, and treats all connected clients as admin.
## WebSocket API
-If you are looking to try out some methods on the XRP Ledger, you can skip writing your own WebSocket code and go straight to using the API at the [WebSocket API Tool](/resources/dev-tools/websocket-api-tool). Later on, when you want to connect to your own `rippled` server, you can [build your own client](monitor-incoming-payments-with-websocket.md) or use a [client library](../../../references/client-libraries.md) with WebSocket support.
+If you are looking to try out some methods on the XRP Ledger, you can skip writing your own WebSocket code and go straight to using the API at the [WebSocket API Tool](/resources/dev-tools/websocket-api-tool). Later on, when you want to connect to your own `rippled` server, you can [build your own client](../advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md) or use a [client library](../../references/client-libraries.md) with WebSocket support.
Example WebSocket API request:
@@ -49,7 +49,7 @@ Example WebSocket API request:
The response shows you the current status of the server.
-Read more: [Request Formatting >](../../../references/http-websocket-apis/api-conventions/request-formatting.md) [Response Formatting >](../../../references/http-websocket-apis/api-conventions/response-formatting.md) [About the server_info method >][server_info method]
+Read more: [Request Formatting >](../../references/http-websocket-apis/api-conventions/request-formatting.md) [Response Formatting >](../../references/http-websocket-apis/api-conventions/response-formatting.md) [About the server_info method >][server_info method]
## JSON-RPC
@@ -73,7 +73,7 @@ Content-Type: application/json
The response shows you the current status of the server.
-Read more: [Request Formatting >](../../../references/http-websocket-apis/api-conventions/request-formatting.md#json-rpc-format) [Response Formatting >](../../../references/http-websocket-apis/api-conventions/response-formatting.md) [About the server_info method >][server_info method]
+Read more: [Request Formatting >](../../references/http-websocket-apis/api-conventions/request-formatting.md#json-rpc-format) [Response Formatting >](../../references/http-websocket-apis/api-conventions/response-formatting.md) [About the server_info method >][server_info method]
## Commandline
@@ -85,7 +85,7 @@ Example commandline request:
rippled --conf=/etc/opt/ripple/rippled.cfg server_info
```
-Read more: [Commandline Usage Reference >](../../../infrastructure/commandline-usage.md)
+Read more: [Commandline Usage Reference >](../../infrastructure/commandline-usage.md)
{% admonition type="warning" name="Caution" %}The commandline interface is intended for administrative purposes only and is _not a supported API_. New versions of `rippled` may introduce breaking changes to the commandline API without warning!{% /admonition %}
@@ -93,21 +93,21 @@ Read more: [Commandline Usage Reference >](../../../infrastructure/commandline-u
For a full list of API methods, see:
-- [Public `rippled` Methods](../../../references/http-websocket-apis/public-api-methods/index.md): Methods available on public servers, including looking up data from the ledger and submitting transactions.
-- [Admin `rippled` Methods](../../../references/http-websocket-apis/admin-api-methods/index.md): Methods for [managing](../../../infrastructure/installation/install-rippled-on-ubuntu.md) the `rippled` server.
+- [Public `rippled` Methods](../../references/http-websocket-apis/public-api-methods/index.md): Methods available on public servers, including looking up data from the ledger and submitting transactions.
+- [Admin `rippled` Methods](../../references/http-websocket-apis/admin-api-methods/index.md): Methods for [managing](../../infrastructure/installation/install-rippled-on-ubuntu.md) the `rippled` server.
## See Also
- **Concepts:**
- [XRP Ledger Overview](/about/)
- - [Client Libraries](../../../references/client-libraries.md)
- - [Parallel Networks](../../../concepts/networks-and-servers/parallel-networks.md)
+ - [Client Libraries](../../references/client-libraries.md)
+ - [Parallel Networks](../../concepts/networks-and-servers/parallel-networks.md)
- **Tutorials:**
- - [Get Started Using JavaScript](get-started.md)
- - [Reliable Transaction Submission](../../../concepts/transactions/reliable-transaction-submission.md)
- - [Manage the rippled Server](../../../infrastructure/installation/install-rippled-on-ubuntu.md)
+ - [Get Started Using JavaScript](./get-started-javascript.md)
+ - [Reliable Transaction Submission](../../concepts/transactions/reliable-transaction-submission.md)
+ - [Manage the rippled Server](../../infrastructure/installation/install-rippled-on-ubuntu.md)
- **References:**
- - [rippled API Reference](../../../references/http-websocket-apis/index.md)
+ - [rippled API Reference](../../references/http-websocket-apis/index.md)
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/java/build-apps/get-started.md b/docs/tutorials/get-started/get-started-java.md
similarity index 71%
rename from docs/tutorials/java/build-apps/get-started.md
rename to docs/tutorials/get-started/get-started-java.md
index 26237bbb2c..8e57c43f9a 100644
--- a/docs/tutorials/java/build-apps/get-started.md
+++ b/docs/tutorials/get-started/get-started-java.md
@@ -77,7 +77,7 @@ Check out the [xrpl4j sample project](https://github.com/XRPLF/xrpl4j-sample) fo
## Start Building
-When you're working with the XRP Ledger, there are a few things you'll need to manage, whether you're adding XRP to your [account](../../../concepts/accounts/index.md), integrating with the [decentralized exchange](../../../concepts/tokens/decentralized-exchange/index.md), or [issuing tokens](../../../concepts/tokens/index.md). This tutorial walks you through basic patterns common to getting started with all of these use cases and provides sample code for implementing them.
+When you're working with the XRP Ledger, there are a few things you'll need to manage, whether you're adding XRP to your [account](../../concepts/accounts/index.md), integrating with the [decentralized exchange](../../concepts/tokens/decentralized-exchange/index.md), or [issuing tokens](../../concepts/tokens/index.md). This tutorial walks you through basic patterns common to getting started with all of these use cases and provides sample code for implementing them.
Here are the basic steps you'll need to cover for almost any XRP Ledger project:
@@ -95,9 +95,9 @@ you can use an [`XrplClient`](https://javadoc.io/doc/org.xrpl/xrpl4j-client/3.0.
#### Connect to the production XRP Ledger
-The sample code in the previous section shows you how to connect to the Testnet, which is one of the available [parallel networks](../../../concepts/networks-and-servers/parallel-networks.md). When you're ready to integrate with the production XRP Ledger, you'll need to connect to the Mainnet. You can do that in two ways:
+The sample code in the previous section shows you how to connect to the Testnet, which is one of the available [parallel networks](../../concepts/networks-and-servers/parallel-networks.md). When you're ready to integrate with the production XRP Ledger, you'll need to connect to the Mainnet. You can do that in two ways:
-* By [installing the core server](../../../infrastructure/installation/index.md) (`rippled`) and running a node yourself. The core server connects to the Mainnet by default, but you can [change the configuration to use Testnet or Devnet](../../../infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md). [There are good reasons to run your own core server](../../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server). If you run your own server, you can connect to it like so:
+* By [installing the core server](../../infrastructure/installation/index.md) (`rippled`) and running a node yourself. The core server connects to the Mainnet by default, but you can [change the configuration to use Testnet or Devnet](../../infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md). [There are good reasons to run your own core server](../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server). If you run your own server, you can connect to it like so:
```
final HttpUrl rippledUrl = HttpUrl.get("http://localhost:5005/");
@@ -115,7 +115,7 @@ The sample code in the previous section shows you how to connect to the Testnet,
### 2. Get account
-To store value and execute transactions on the XRP Ledger, you need to get an account: a [set of keys](../../../concepts/accounts/cryptographic-keys.md#key-components) and an [address](../../../concepts/accounts/addresses.md) that's been [funded with enough XRP](../../../concepts/accounts/index.md#creating-accounts) to meet the [account reserve](../../../concepts/accounts/reserves.md). The address is the identifier of your account and you use the [private key](../../../concepts/accounts/cryptographic-keys.md#private-key) to sign transactions that you submit to the XRP Ledger. For production purposes, you should take care to store your keys and set up a [secure signing method](../../../concepts/transactions/secure-signing.md).
+To store value and execute transactions on the XRP Ledger, you need to get an account: a [set of keys](../../concepts/accounts/cryptographic-keys.md#key-components) and an [address](../../concepts/accounts/addresses.md) that's been [funded with enough XRP](../../concepts/accounts/index.md#creating-accounts) to meet the [account reserve](../../concepts/accounts/reserves.md). The address is the identifier of your account and you use the [private key](../../concepts/accounts/cryptographic-keys.md#private-key) to sign transactions that you submit to the XRP Ledger. For production purposes, you should take care to store your keys and set up a [secure signing method](../../concepts/transactions/secure-signing.md).
To generate a new account, `xrpl4j` provides the [`DefaultWalletFactory`](https://javadoc.io/doc/org.xrpl/xrpl4j-keypairs/latest/org/xrpl/xrpl4j/wallet/DefaultWalletFactory.html).
@@ -137,13 +137,13 @@ Wallet {
}
```
-For testing and development purposes, you can use a `FaucetClient` connected to the XRP Ledger [Testnet](../../../concepts/networks-and-servers/parallel-networks.md):
+For testing and development purposes, you can use a `FaucetClient` connected to the XRP Ledger [Testnet](../../concepts/networks-and-servers/parallel-networks.md):
{% code-snippet file="/_code-samples/get-started/java/GetAccountInfo.java" from="// Fund the account using the testnet Faucet" before="// Look up your Account Info" language="java" /%}
### 3. Query the XRP Ledger
-You can query the XRP Ledger to get information about [a specific account](../../../references/http-websocket-apis/public-api-methods/account-methods/index.md), [a specific transaction](../../../references/http-websocket-apis/public-api-methods/transaction-methods/tx.md), the state of a [current or a historical ledger](../../../references/http-websocket-apis/public-api-methods/ledger-methods/index.md), and [the XRP Ledger's decentralized exchange](../../../references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md). You need to make these queries, among other reasons, to look up account info to follow best practices for [reliable transaction submission](../../../concepts/transactions/reliable-transaction-submission.md).
+You can query the XRP Ledger to get information about [a specific account](../../references/http-websocket-apis/public-api-methods/account-methods/index.md), [a specific transaction](../../references/http-websocket-apis/public-api-methods/transaction-methods/tx.md), the state of a [current or a historical ledger](../../references/http-websocket-apis/public-api-methods/ledger-methods/index.md), and [the XRP Ledger's decentralized exchange](../../references/http-websocket-apis/public-api-methods/path-and-order-book-methods/index.md). You need to make these queries, among other reasons, to look up account info to follow best practices for [reliable transaction submission](../../concepts/transactions/reliable-transaction-submission.md).
Here, we'll use the [`XrplClient` we constructed](#1-connect-to-the-xrp-ledger) to look up information about the [account we got](#2-get-account) in the previous step.
@@ -211,18 +211,18 @@ The response fields contained in `AccountInfoResult` that you want to inspect in
* `accountData.sequence` — This is the sequence number of the next valid transaction for the account. You need to specify the sequence number when you prepare transactions.
-* `accountData.balance` — This is the account's balance of XRP, in drops. You can use this to confirm that you have enough XRP to send (if you're making a payment) and to meet the [current transaction cost](../../../concepts/transactions/transaction-cost.md#current-transaction-cost) for a given transaction.
+* `accountData.balance` — This is the account's balance of XRP, in drops. You can use this to confirm that you have enough XRP to send (if you're making a payment) and to meet the [current transaction cost](../../concepts/transactions/transaction-cost.md#current-transaction-cost) for a given transaction.
-* `validated` — Indicates whether the returned data is from a [validated ledger](../../../concepts/ledgers/open-closed-validated-ledgers.md). When inspecting transactions, it's important to confirm that [the results are final](../../../concepts/transactions/finality-of-results/index.md) before further processing the transaction. If `validated` is `true` then you know for sure the results won't change. For more information about best practices for transaction processing, see [Reliable Transaction Submission](../../../concepts/transactions/reliable-transaction-submission.md).
+* `validated` — Indicates whether the returned data is from a [validated ledger](../../concepts/ledgers/open-closed-validated-ledgers.md). When inspecting transactions, it's important to confirm that [the results are final](../../concepts/transactions/finality-of-results/index.md) before further processing the transaction. If `validated` is `true` then you know for sure the results won't change. For more information about best practices for transaction processing, see [Reliable Transaction Submission](../../concepts/transactions/reliable-transaction-submission.md).
-For a detailed description of every response field, see [account_info](../../../references/http-websocket-apis/public-api-methods/account-methods/account_info.md#response-format).
+For a detailed description of every response field, see [account_info](../../references/http-websocket-apis/public-api-methods/account-methods/account_info.md#response-format).
## Keep on building
Now that you know how to use `xrpl4j` to connect to the XRP Ledger, get an account, and look up information about it, you can also use `xrpl4j` to:
-* [Send XRP](../../how-tos/send-xrp.md).
-* [Set up secure signing](../../../concepts/transactions/secure-signing.md) for your account.
+* [Send XRP](../payments/send-xrp).
+* [Set up secure signing](../../concepts/transactions/secure-signing.md) for your account.
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/javascript/build-apps/get-started.md b/docs/tutorials/get-started/get-started-javascript.md
similarity index 85%
rename from docs/tutorials/javascript/build-apps/get-started.md
rename to docs/tutorials/get-started/get-started-javascript.md
index c211e6ad21..bbd6288164 100644
--- a/docs/tutorials/javascript/build-apps/get-started.md
+++ b/docs/tutorials/get-started/get-started-javascript.md
@@ -99,7 +99,7 @@ To make queries and submit transactions, you need to connect to the XRP Ledger.
{% admonition type="success" name="Tip" %}Many network functions in `xrpl.js` use [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) to return values asynchronously. The code samples here use the [`async/await` pattern](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await) to wait for the actual result of the Promises.{% /admonition %}
-The sample code shows you how to connect to the Testnet, which is one of the available [parallel networks](../../../concepts/networks-and-servers/parallel-networks.md).
+The sample code shows you how to connect to the Testnet, which is one of the available [parallel networks](../../concepts/networks-and-servers/parallel-networks.md).
{% /step %}
{% step id="connect-mainnet-tag"%}
@@ -107,7 +107,7 @@ The sample code shows you how to connect to the Testnet, which is one of the ava
When you're ready to move to production, you'll need to connect to the XRP Ledger Mainnet. You can do that in two ways:
-- By [installing the core server](../../../infrastructure/installation/index.md) (`rippled`) and running a node yourself. The core server connects to the Mainnet by default, but you can [change the configuration to use Testnet or Devnet](../../../infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md). [There are good reasons to run your own core server](../../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server). If you run your own server, you can connect to it like so:
+- By [installing the core server](../../infrastructure/installation/index.md) (`rippled`) and running a node yourself. The core server connects to the Mainnet by default, but you can [change the configuration to use Testnet or Devnet](../../infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md). [There are good reasons to run your own core server](../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server). If you run your own server, you can connect to it like so:
```javascript
const MY_SERVER = "ws://localhost:6006/"
@@ -149,13 +149,13 @@ To use an existing wallet seed encoded in [base58][], you can create a [`Wallet`
{% step id="query-xrpl-tag" %}
### 4. Query the XRP Ledger
-Use the Client's [`request()`](https://js.xrpl.org/classes/Client.html#request) method to access the XRP Ledger's [WebSocket API](../../../references/http-websocket-apis/api-conventions/request-formatting.md).
+Use the Client's [`request()`](https://js.xrpl.org/classes/Client.html#request) method to access the XRP Ledger's [WebSocket API](../../references/http-websocket-apis/api-conventions/request-formatting.md).
{% /step %}
{% step id="listen-for-events-tag" %}
### 5. Listen for Events
-You can set up handlers for various types of events in `xrpl.js`, such as whenever the XRP Ledger's [consensus process](../../../concepts/consensus-protocol/index.md) produces a new [ledger version](../../../concepts/ledgers/index.md). To do that, first call the [subscribe method][] to get the type of events you want, then attach an event handler using the [`on(eventType, callback)`](https://js.xrpl.org/classes/Client.html#on) method of the client.
+You can set up handlers for various types of events in `xrpl.js`, such as whenever the XRP Ledger's [consensus process](../../concepts/consensus-protocol/index.md) produces a new [ledger version](../../concepts/ledgers/index.md). To do that, first call the [subscribe method][] to get the type of events you want, then attach an event handler using the [`on(eventType, callback)`](https://js.xrpl.org/classes/Client.html#on) method of the client.
{% /step %}
{% step id="disconnect-node-tag" when={ "environment": "Node" } %}
@@ -305,17 +305,17 @@ Disconnected
- **Concepts:**
- [XRP Ledger Overview](/about/)
- - [Client Libraries](../../../references/client-libraries.md)
+ - [Client Libraries](../../references/client-libraries.md)
- **Tutorials:**
- - [Send XRP](../../how-tos/send-xrp.md)
- - [Issue a Fungible Token](../../how-tos/use-tokens/issue-a-fungible-token.md)
- - [Set up Secure Signing](../../../concepts/transactions/secure-signing.md)
+ - [Send XRP](../payments/send-xrp)
+ - [Issue a Fungible Token](../how-tos/use-tokens/issue-a-fungible-token.md)
+ - [Set up Secure Signing](../../concepts/transactions/secure-signing.md)
- **References:**
- [`xrpl.js` Reference](https://js.xrpl.org/)
- - [Public API Methods](../../../references/http-websocket-apis/public-api-methods/index.md)
- - [API Conventions](../../../references/http-websocket-apis/api-conventions/index.md)
- - [base58 Encodings](../../../references/protocol/data-types/base58-encodings.md)
- - [Transaction Formats](../../../references/protocol/transactions/index.md)
+ - [Public API Methods](../../references/http-websocket-apis/public-api-methods/index.md)
+ - [API Conventions](../../references/http-websocket-apis/api-conventions/index.md)
+ - [base58 Encodings](../../references/protocol/data-types/base58-encodings.md)
+ - [Transaction Formats](../../references/protocol/transactions/index.md)
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/php/build-apps/get-started.md b/docs/tutorials/get-started/get-started-php.md
similarity index 69%
rename from docs/tutorials/php/build-apps/get-started.md
rename to docs/tutorials/get-started/get-started-php.md
index 1ac84f9281..d5f7f0ad6a 100644
--- a/docs/tutorials/php/build-apps/get-started.md
+++ b/docs/tutorials/get-started/get-started-php.md
@@ -45,7 +45,7 @@ composer require hardcastle/xrpl_php
## Start Building
-When you're working with the XRP Ledger, there are a few things you'll need to manage, whether you're adding XRP to your [account](../../../concepts/accounts/index.md), integrating with the [decentralized exchange](../../../concepts/tokens/decentralized-exchange/index.md), or [issuing tokens](../../../concepts/tokens/index.md). This tutorial walks you through basic patterns common to getting started with all of these use cases and provides sample code for implementing them.
+When you're working with the XRP Ledger, there are a few things you'll need to manage, whether you're adding XRP to your [account](../../concepts/accounts/index.md), integrating with the [decentralized exchange](../../concepts/tokens/decentralized-exchange/index.md), or [issuing tokens](../../concepts/tokens/index.md). This tutorial walks you through basic patterns common to getting started with all of these use cases and provides sample code for implementing them.
Here are the basic steps you'll need to cover for almost any XRP Ledger project:
@@ -75,9 +75,9 @@ Note that PHP has no native support for WebSockets, so the Client does not estab
#### Connect to the production XRP Ledger
-The sample code in the previous section shows you how to connect to the Testnet, which is one of the available [parallel networks](../../../concepts/networks-and-servers/parallel-networks.md). When you're ready to integrate with the production XRP Ledger, you'll need to connect to the Mainnet. You can do that in two ways:
+The sample code in the previous section shows you how to connect to the Testnet, which is one of the available [parallel networks](../../concepts/networks-and-servers/parallel-networks.md). When you're ready to integrate with the production XRP Ledger, you'll need to connect to the Mainnet. You can do that in two ways:
-* By [installing the core server](../../../infrastructure/installation/index.md) (`rippled`) and running a node yourself. The core server connects to the Mainnet by default, but you can [change the configuration to use Testnet or Devnet](../../../infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md). [There are good reasons to run your own core server](../../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server). If you run your own server, you can connect to it like so:
+* By [installing the core server](../../infrastructure/installation/index.md) (`rippled`) and running a node yourself. The core server connects to the Mainnet by default, but you can [change the configuration to use Testnet or Devnet](../../infrastructure/configuration/connect-your-rippled-to-the-xrp-test-net.md). [There are good reasons to run your own core server](../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server). If you run your own server, you can connect to it like so:
```
use XRPL_PHP\Client\JsonRpcClient;
@@ -99,7 +99,7 @@ The sample code in the previous section shows you how to connect to the Testnet,
### 2. Get account
-To store value and execute transactions on the XRP Ledger, you need to get an account: a [set of keys](../../../concepts/accounts/cryptographic-keys.md#key-components) and an [address](../../../concepts/accounts/addresses.md) that's been [funded with enough XRP](../../../concepts/accounts/index.md#creating-accounts) to meet the [account reserve](../../../concepts/accounts/reserves.md). The address is the identifier of your account and you use the [private key](../../../concepts/accounts/cryptographic-keys.md#private-key) to sign transactions that you submit to the XRP Ledger. For production purposes, you should take care to store your keys and set up a [secure signing method](../../../concepts/transactions/secure-signing.md).
+To store value and execute transactions on the XRP Ledger, you need to get an account: a [set of keys](../../concepts/accounts/cryptographic-keys.md#key-components) and an [address](../../concepts/accounts/addresses.md) that's been [funded with enough XRP](../../concepts/accounts/index.md#creating-accounts) to meet the [account reserve](../../concepts/accounts/reserves.md). The address is the identifier of your account and you use the [private key](../../concepts/accounts/cryptographic-keys.md#private-key) to sign transactions that you submit to the XRP Ledger. For production purposes, you should take care to store your keys and set up a [secure signing method](../../concepts/transactions/secure-signing.md).
To generate a new account, `PHP_XRPL` provides the static `generate()` method in the `Wallet` class:
@@ -138,13 +138,13 @@ print_r([
```
-For testing and development purposes, you can use the `fundWallet()` helper function on the XRP Ledger [Testnet](../../../concepts/networks-and-servers/parallel-networks.md):
+For testing and development purposes, you can use the `fundWallet()` helper function on the XRP Ledger [Testnet](../../concepts/networks-and-servers/parallel-networks.md):
{% code-snippet file="/_code-samples/get-started/php/get-account-info.php" from="
diff --git a/docs/tutorials/how-tos/use-tokens/enact-global-freeze.md b/docs/tutorials/how-tos/use-tokens/enact-global-freeze.md
index bdfc455ec1..ebdc037c2b 100644
--- a/docs/tutorials/how-tos/use-tokens/enact-global-freeze.md
+++ b/docs/tutorials/how-tos/use-tokens/enact-global-freeze.md
@@ -21,7 +21,7 @@ If you [issue tokens](../../../concepts/tokens/index.md) in the XRP Ledger, can
- You need a connection to the XRP Ledger network. As shown in this tutorial, you can use public servers for testing.
- You should be familiar with the Getting Started instructions for your preferred client library. This page provides examples for the following:
- - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup steps.
+ - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../../get-started/get-started-javascript.md) for setup steps.
- You don't need to have [issued a token](issue-a-fungible-token.md) in the XRP Ledger to enact a Global Freeze, but the main reason you would do so is if you have already issued such a token.
@@ -276,7 +276,7 @@ After the transaction is validated, you can confirm the status of the Global Fre
- **Tutorials:**
- [Enable No Freeze](enable-no-freeze.md)
- [Freeze a Trust Line](freeze-a-trust-line.md)
- - [Change or Remove a Regular Key Pair](../manage-account-settings/change-or-remove-a-regular-key-pair.md)
+ - [Change or Remove a Regular Key Pair](../../best-practices/key-management/change-or-remove-a-regular-key-pair.md)
- **References:**
- [account_lines method][]
- [account_info method][]
diff --git a/docs/tutorials/how-tos/use-tokens/freeze-a-trust-line.md b/docs/tutorials/how-tos/use-tokens/freeze-a-trust-line.md
index e6961704c1..cc462c5918 100644
--- a/docs/tutorials/how-tos/use-tokens/freeze-a-trust-line.md
+++ b/docs/tutorials/how-tos/use-tokens/freeze-a-trust-line.md
@@ -22,7 +22,7 @@ This tutorial shows the steps to [freeze an individual trust line](../../../conc
- You need a connection to the XRP Ledger network. As shown in this tutorial, you can use public servers for testing.
- You should be familiar with the Getting Started instructions for your preferred client library. This page provides examples for the following:
- - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup steps.
+ - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../../get-started/get-started-javascript.md) for setup steps.
- This tutorial assumes **you have already [issued a token](issue-a-fungible-token.md)** in the XRP Ledger.
- You **cannot** have enabled the [No Freeze setting](../../../concepts/tokens/fungible-tokens/freezes.md#no-freeze), which gives up your ability to freeze individual trust lines.
@@ -347,7 +347,7 @@ As before, wait for the transaction to be validated by consensus.
- **Tutorials:**
- [Enable No Freeze](enable-no-freeze.md)
- [Enact Global Freeze](enact-global-freeze.md)
- - [Change or Remove a Regular Key Pair](../manage-account-settings/change-or-remove-a-regular-key-pair.md)
+ - [Change or Remove a Regular Key Pair](../../best-practices/key-management/change-or-remove-a-regular-key-pair.md)
- **References:**
- [account_lines method][]
- [account_info method][]
diff --git a/docs/tutorials/how-tos/use-tokens/issue-a-fungible-token.md b/docs/tutorials/how-tos/use-tokens/issue-a-fungible-token.md
index f2357a1453..4af97464f7 100644
--- a/docs/tutorials/how-tos/use-tokens/issue-a-fungible-token.md
+++ b/docs/tutorials/how-tos/use-tokens/issue-a-fungible-token.md
@@ -17,9 +17,9 @@ Anyone can issue various types of tokens in the XRP Ledger, ranging from informa
- Each address needs enough XRP to satisfy the [reserve requirement](../../../concepts/accounts/reserves.md) including the additional reserve for a trust line.
- You need a connection to the XRP Ledger network. As shown in this tutorial, you can use public servers for testing.
- You should be familiar with the Getting Started instructions for your preferred client library. This page provides examples for the following:
- - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../../javascript/build-apps/get-started.md) for setup steps.
- - **Python** with the [`xrpl-py` library](https://xrpl-py.readthedocs.io/). See [Get Started using Python](../../python/build-apps/get-started.md) for setup steps.
- - **Java** with the [xrpl4j library](https://github.com/XRPLF/xrpl4j). See [Get Started Using Java](../../java/build-apps/get-started.md) for setup steps.
+ - **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../../get-started/get-started-javascript.md) for setup steps.
+ - **Python** with the [`xrpl-py` library](https://xrpl-py.readthedocs.io/). See [Get Started using Python](../../get-started/get-started-python.md) for setup steps.
+ - **Java** with the [xrpl4j library](https://github.com/XRPLF/xrpl4j). See [Get Started Using Java](../../get-started/get-started-java.md) for setup steps.
- You can also read along and use the interactive steps in your browser without any setup.
@@ -108,7 +108,7 @@ Other settings you may want to, optionally, configure for your cold address (iss
| [Tick Size][] | 5 | Limit the number of decimal places in exchange rates for your token in the [decentralized exchange](../../../concepts/tokens/decentralized-exchange/index.md). A tick size of 5-6 reduces churn of almost-equivalent offers and speeds up price discovery compared to the default of 15. |
| [Domain][] | (Your domain name) | Set to a domain you own so can [verify ownership of the accounts](../../../references/xrp-ledger-toml.md#account-verification). This can help reduce confusion or impersonation attempts. |
-[Require Destination Tags]: ../manage-account-settings/require-destination-tags.md
+[Require Destination Tags]: ../../compliance-features/require-destination-tags.md
[Transfer Fee]: ../../../concepts/tokens/fungible-tokens/transfer-fees.md
[Tick Size]: ../../../concepts/tokens/decentralized-exchange/ticksize.md
[Domain]: ../../../references/protocol/transactions/types/accountset.md#domain
diff --git a/docs/tutorials/http-websocket-apis/build-apps/index.md b/docs/tutorials/http-websocket-apis/build-apps/index.md
deleted file mode 100644
index 76532518b8..0000000000
--- a/docs/tutorials/http-websocket-apis/build-apps/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-html: build-apps-with-http-websocket.html
-parent: javascript.html
-top_nav_grouping: Article Types
-metadata:
- indexPage: true
----
-# Build Applications with HTTP-Websocket Library
-
-Build applications in HTTP-Websocket.
-
-
-{% child-pages /%}
diff --git a/docs/tutorials/java/build-apps/index.md b/docs/tutorials/java/build-apps/index.md
deleted file mode 100644
index 7674e9fae5..0000000000
--- a/docs/tutorials/java/build-apps/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-html: build-apps-with-java.html
-parent: java.html
-top_nav_grouping: Article Types
-metadata:
- indexPage: true
----
-# Build Applications with Java Library
-
-Build full-featured applications in Java.
-
-
-{% child-pages /%}
diff --git a/docs/tutorials/javascript/amm/index.md b/docs/tutorials/javascript/amm/index.md
deleted file mode 100644
index 5880e4c0b0..0000000000
--- a/docs/tutorials/javascript/amm/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-parent: modular-tutorials-in-javascript.html
-top_nav_grouping: Article Types
-metadata:
- indexPage: true
----
-# AMMs Using JavaScript
-
-Create and interact with Automated Market Makers (AMMs) on the XRP Ledger using JavaScript.
-
-
-{% child-pages /%}
diff --git a/docs/tutorials/javascript/build-apps/index.md b/docs/tutorials/javascript/build-apps/index.md
deleted file mode 100644
index 5a333ced3f..0000000000
--- a/docs/tutorials/javascript/build-apps/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-html: build-apps-with-javascript.html
-parent: javascript.html
-top_nav_grouping: Article Types
-metadata:
- indexPage: true
----
-# Build Applications with JavaScript Library
-
-Build full-featured applications in JavaScript.
-
-
-{% child-pages /%}
diff --git a/docs/tutorials/javascript/compliance/index.md b/docs/tutorials/javascript/compliance/index.md
deleted file mode 100644
index 8a558e973b..0000000000
--- a/docs/tutorials/javascript/compliance/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-metadata:
- indexPage: true
-seo:
- description: Transact with confidence using the XRP Ledger's suite of compliance features for following government regulations and security practices.
----
-# Transact with Confidence Using Compliance Features
-
-The XRP Ledger has a rich suite of features designed to help financial institutions of all sizes engage with DeFi technology while complying with government regulations domestically and internationally.
-
-See the following tutorials for examples of how to put these features to work:
-
-{% child-pages /%}
diff --git a/docs/tutorials/javascript/send-payments/index.md b/docs/tutorials/javascript/send-payments/index.md
deleted file mode 100644
index 9d8a791ba7..0000000000
--- a/docs/tutorials/javascript/send-payments/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-top_nav_grouping: Article Types
-seo:
- description: Send XRP and Issued Currencies on the XRPL.
-labels:
- - Accounts
- - Transactions
- - XRP
- - Issued Currencies
-metadata:
- indexPage: true
----
-# Send Payments Using JavaScript
-
-Send XRP and issued currency on the XRP Ledger using JavaScript.
-
-Download and expand the [Payment Modular Tutorial Samples](/_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
-
-
-{% child-pages /%}
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cancel-a-check.md b/docs/tutorials/payments/cancel-a-check.md
similarity index 84%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cancel-a-check.md
rename to docs/tutorials/payments/cancel-a-check.md
index 1b7d0d4f2e..5bb84bd5d0 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cancel-a-check.md
+++ b/docs/tutorials/payments/cancel-a-check.md
@@ -6,13 +6,13 @@ labels:
---
# Cancel a Check
-This tutorial shows how to cancel a [Check](../../../../concepts/payment-types/checks.md), which removes the [Check entry](../../../../references/protocol/ledger-data/ledger-entry-types/check.md) from the ledger without sending money.
+This tutorial shows how to cancel a [Check](../../concepts/payment-types/checks.md), which removes the [Check entry](../../references/protocol/ledger-data/ledger-entry-types/check.md) from the ledger without sending money.
-You may want to cancel an incoming Check if you do not want it. You might cancel an outgoing Check if you made a mistake when sending it or if circumstances have changed. If a Check expires, it's also necessary to cancel it to remove it from the ledger so the sender gets their [owner reserve](../../../../concepts/accounts/reserves.md#owner-reserves) back.
+You may want to cancel an incoming Check if you do not want it. You might cancel an outgoing Check if you made a mistake when sending it or if circumstances have changed. If a Check expires, it's also necessary to cancel it to remove it from the ledger so the sender gets their [owner reserve](../../concepts/accounts/reserves.md#owner-reserves) back.
## Prerequisites
-- You should be familiar with the basics of using the [xrpl.js client library](../../../javascript/build-apps/get-started.md).
+- You should be familiar with the basics of using the [xrpl.js client library](../get-started/get-started-javascript.md).
- You need an XRP Ledger account including its secret key. (You can get one on Testnet for free.) See also: [XRP Faucets](/resources/dev-tools/xrp-faucets).
- You need the ID of a Check ledger entry that you are either the sender or recipient of. See also: [Send a Check](./send-a-check.md).
@@ -26,7 +26,7 @@ The complete source code for this tutorial is available in the source repository
### 1. Prepare the CheckCancel transaction
-Figure out the values of the [CheckCancel transaction][] fields. The following fields are the bare minimum; everything else is either optional or can be [auto-filled](../../../../references/protocol/transactions/common-fields.md#auto-fillable-fields) when signing:
+Figure out the values of the [CheckCancel transaction][] fields. The following fields are the bare minimum; everything else is either optional or can be [auto-filled](../../references/protocol/transactions/common-fields.md#auto-fillable-fields) when signing:
| Field | Value | Description |
|:------------------|:-----------------|:--------------------------------------|
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.md b/docs/tutorials/payments/cancel-an-expired-escrow.md
similarity index 95%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.md
rename to docs/tutorials/payments/cancel-an-expired-escrow.md
index 2f669464fe..ba90d51eb7 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/cancel-an-expired-escrow.md
+++ b/docs/tutorials/payments/cancel-an-expired-escrow.md
@@ -165,11 +165,11 @@ In xrpl-py, you can use the [`get_balance_changes(metadata)`](https://xrpl-py.re
## See Also
- **Concepts:**
- - [Escrow](../../../../concepts/payment-types/escrow.md)
+ - [Escrow](../../concepts/payment-types/escrow.md)
- **Tutorials:**
- - [Send XRP](../../send-xrp.md)
- - [Look Up Transaction Results](../../../../concepts/transactions/finality-of-results/look-up-transaction-results.md)
- - [Reliable Transaction Submission](../../../../concepts/transactions/reliable-transaction-submission.md)
+ - [Send XRP](send-xrp.md)
+ - [Look Up Transaction Results](../../concepts/transactions/finality-of-results/look-up-transaction-results.md)
+ - [Reliable Transaction Submission](../../concepts/transactions/reliable-transaction-submission.md)
- **References:**
- [EscrowCancel transaction][]
- [EscrowCreate transaction][]
@@ -177,6 +177,6 @@ In xrpl-py, you can use the [`get_balance_changes(metadata)`](https://xrpl-py.re
- [account_objects method][]
- [ledger method][]
- [tx method][]
- - [Escrow ledger entry](../../../../references/protocol/ledger-data/ledger-entry-types/escrow.md)
+ - [Escrow entry][]
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md b/docs/tutorials/payments/cash-a-check-for-a-flexible-amount.md
similarity index 92%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md
rename to docs/tutorials/payments/cash-a-check-for-a-flexible-amount.md
index 50e3b0b2a3..4134c15677 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md
+++ b/docs/tutorials/payments/cash-a-check-for-a-flexible-amount.md
@@ -13,7 +13,7 @@ You can also [cash a check for an exact amount](cash-a-check-for-a-flexible-amou
## Prerequisites
-- You should be familiar with the basics of using the [xrpl.js client library](../../../javascript/build-apps/get-started.md).
+- You should be familiar with the basics of using the [xrpl.js client library](../get-started/get-started-javascript.md).
- You need an XRP Ledger account including its secret key. (You can get one on Testnet for free.) See also: [XRP Faucets](/resources/dev-tools/xrp-faucets).
- You need the ID of a Check ledger entry that you are the recipient of. See also: [Send a Check](./send-a-check.md) and [Look Up Checks](./look-up-checks.md).
@@ -28,7 +28,7 @@ The complete source code for this tutorial is available in the source repository
## Steps
### 1. Prepare the CheckCash transaction
-Figure out the values of the [CheckCash transaction][] fields. To cash a check for a flexible amount, the following fields are the bare minimum; everything else is either optional or can be [auto-filled](../../../../references/protocol/transactions/common-fields.md#auto-fillable-fields) when signing:
+Figure out the values of the [CheckCash transaction][] fields. To cash a check for a flexible amount, the following fields are the bare minimum; everything else is either optional or can be [auto-filled](../../references/protocol/transactions/common-fields.md#auto-fillable-fields) when signing:
| Field | Value | Description |
|:------------------|:---------------------|:-----------------------------|
@@ -69,7 +69,7 @@ The metadata shows the net balance changes as the result of all of the transacti
If you are not using `getBalanceChanges()`, the following guidelines should help with parsing the metadata:
-- For XRP, the `AccountRoot` object of the Check's sender has its XRP `Balance` field debited. The `AccountRoot` object of the Check's recipient (the one who sent the CheckCash transaction) has its XRP `Balance` credited for at least the `DeliverMin` of the CheckCash transaction minus the [transaction cost](../../../../concepts/transactions/transaction-cost.md) of sending the transaction.
+- For XRP, the `AccountRoot` object of the Check's sender has its XRP `Balance` field debited. The `AccountRoot` object of the Check's recipient (the one who sent the CheckCash transaction) has its XRP `Balance` credited for at least the `DeliverMin` of the CheckCash transaction minus the [transaction cost](../../concepts/transactions/transaction-cost.md) of sending the transaction.
For example, the following `ModifiedNode` shows that the account `rGPnRH1EBpHeTF2QG8DCAgM7z5pb75LAis`, the Check's recipient and the sender of this CheckCash transaction, had its XRP balance change from `9999999970` drops to `10099999960` drops, meaning the recipient was credited a _net_ of 99.99999 XRP as a result of processing the transaction.
@@ -108,6 +108,6 @@ If you are not using `getBalanceChanges()`, the following guidelines should help
- For tokens with a third-party issuer, there are changes to two `RippleState` objects, representing the trust lines connecting the sender to the issuer, and the issuer to the recipient. The `RippleState` object representing the relationship between the Check's sender and the issuer has its `Balance` changed in favor of the issuer, and the `RippleState` object representing the relationship between the issuer and the recipient has its `Balance` changed in favor of the recipient.
- - If the token has a [transfer fee](../../../../concepts/tokens/fungible-tokens/transfer-fees.md), the Check's sender may be debited more than the recipient is credited. (The difference is the transfer fee, which is returned to the issuer as a decreased net obligation.)
+ - If the token has a [transfer fee](../../concepts/tokens/fungible-tokens/transfer-fees.md), the Check's sender may be debited more than the recipient is credited. (The difference is the transfer fee, which is returned to the issuer as a decreased net obligation.)
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md b/docs/tutorials/payments/cash-a-check-for-an-exact-amount.md
similarity index 96%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md
rename to docs/tutorials/payments/cash-a-check-for-an-exact-amount.md
index 92470b0c3d..b1528ef70c 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md
+++ b/docs/tutorials/payments/cash-a-check-for-an-exact-amount.md
@@ -12,7 +12,7 @@ You can also [cash a check for a flexible amount](./cash-a-check-for-a-flexible-
## Prerequisites
-- You should be familiar with the basics of using the [xrpl.js client library](../../../javascript/build-apps/get-started.md).
+- You should be familiar with the basics of using the [xrpl.js client library](../get-started/get-started-javascript.md).
- You need an XRP Ledger account including its secret key. (You can get one on Testnet for free.) See also: [XRP Faucets](/resources/dev-tools/xrp-faucets).
- You need the ID of a Check ledger entry that you are the recipient of. See also: [Send a Check](./send-a-check.md) and [Look Up Checks](./look-up-checks.md).
@@ -25,7 +25,7 @@ The complete source code for this tutorial is available in the source repository
## Steps
### 1. Prepare the CheckCash transaction
-Figure out the values of the [CheckCash transaction][] fields. You also need to create a `Wallet` instance for your account's key pair. To cash a check for an exact amount, the following fields are the bare minimum; everything else is either optional or can be [auto-filled](../../../../references/protocol/transactions/common-fields.md#auto-fillable-fields) when signing:
+Figure out the values of the [CheckCash transaction][] fields. You also need to create a `Wallet` instance for your account's key pair. To cash a check for an exact amount, the following fields are the bare minimum; everything else is either optional or can be [auto-filled](../../references/protocol/transactions/common-fields.md#auto-fillable-fields) when signing:
| Field | Value | Description |
|:------------------|:---------------------|:-----------------------------|
diff --git a/docs/tutorials/javascript/send-payments/create-accounts-send-xrp.md b/docs/tutorials/payments/create-accounts-send-xrp-in-javascript.md
similarity index 100%
rename from docs/tutorials/javascript/send-payments/create-accounts-send-xrp.md
rename to docs/tutorials/payments/create-accounts-send-xrp-in-javascript.md
diff --git a/docs/tutorials/python/send-payments/create-accounts-send-xrp.md b/docs/tutorials/payments/create-accounts-send-xrp-in-python.md
similarity index 100%
rename from docs/tutorials/python/send-payments/create-accounts-send-xrp.md
rename to docs/tutorials/payments/create-accounts-send-xrp-in-python.md
diff --git a/docs/tutorials/javascript/send-payments/create-conditional-escrows.md b/docs/tutorials/payments/create-conditional-escrows-in-javascript.md
similarity index 98%
rename from docs/tutorials/javascript/send-payments/create-conditional-escrows.md
rename to docs/tutorials/payments/create-conditional-escrows-in-javascript.md
index 310d3174c0..a4dbf8f16a 100644
--- a/docs/tutorials/javascript/send-payments/create-conditional-escrows.md
+++ b/docs/tutorials/payments/create-conditional-escrows-in-javascript.md
@@ -23,7 +23,7 @@ This example shows how to:
## Prerequisites
-Download and expand the [Modular Tutorials](../../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
+Download and expand the [Modular Tutorials](../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
## Usage
@@ -123,7 +123,7 @@ If you forget to save the sequence number, you can find it in the escrow transac
# Code Walkthrough
-Download the [Modular Tutorials](../../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
+Download the [Modular Tutorials](../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
## five-bells.cjs
diff --git a/docs/tutorials/python/send-payments/create-conditional-escrows.md b/docs/tutorials/payments/create-conditional-escrows-in-python.md
similarity index 100%
rename from docs/tutorials/python/send-payments/create-conditional-escrows.md
rename to docs/tutorials/payments/create-conditional-escrows-in-python.md
diff --git a/docs/tutorials/javascript/send-payments/create-time-based-escrows.md b/docs/tutorials/payments/create-time-based-escrows-in-javascript.md
similarity index 98%
rename from docs/tutorials/javascript/send-payments/create-time-based-escrows.md
rename to docs/tutorials/payments/create-time-based-escrows-in-javascript.md
index 1f0e9c132b..034737dd11 100644
--- a/docs/tutorials/javascript/send-payments/create-time-based-escrows.md
+++ b/docs/tutorials/payments/create-time-based-escrows-in-javascript.md
@@ -21,7 +21,7 @@ This example shows how to:
## Prerequisites
-Download and expand the [Modular Tutorials](../../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
+Download and expand the [Modular Tutorials](../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
## Usage
@@ -116,7 +116,7 @@ If you forget to save the sequence number, you can find it in the escrow transac
# Code Walkthrough
-Download and expand the [Modular Tutorials](../../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
+Download and expand the [Modular Tutorials](../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
## ripple8-escrow.js
diff --git a/docs/tutorials/python/send-payments/create-time-based-escrows.md b/docs/tutorials/payments/create-time-based-escrows-in-python.md
similarity index 100%
rename from docs/tutorials/python/send-payments/create-time-based-escrows.md
rename to docs/tutorials/payments/create-time-based-escrows-in-python.md
diff --git a/docs/tutorials/javascript/send-payments/create-trust-line-send-currency.md b/docs/tutorials/payments/create-trust-line-send-currency-in-javascript.md
similarity index 99%
rename from docs/tutorials/javascript/send-payments/create-trust-line-send-currency.md
rename to docs/tutorials/payments/create-trust-line-send-currency-in-javascript.md
index 9ebaa3f474..e506f28c20 100644
--- a/docs/tutorials/javascript/send-payments/create-trust-line-send-currency.md
+++ b/docs/tutorials/payments/create-trust-line-send-currency-in-javascript.md
@@ -39,7 +39,7 @@ Open the Send Currency test harness and get accounts:
[](/docs/img/mt-send-currency-2-distribute-accounts.png)
-If you want an account to be able to transfer issued currency to accounts other than the issuer, the issuer account must be configured to allow rippling. See _Issuer_ in the [Configuring Accounts](../../../concepts/accounts/configuring-accounts.md#issuer) topic.
+If you want an account to be able to transfer issued currency to accounts other than the issuer, the issuer account must be configured to allow rippling. See _Issuer_ in the [Configuring Accounts](../../concepts/accounts/configuring-accounts.md#issuer) topic.
Accounts can always transfer currency tokens back to the original issuer.
diff --git a/docs/tutorials/python/send-payments/create-trust-line-send-currency.md b/docs/tutorials/payments/create-trust-line-send-currency-in-python.md
similarity index 99%
rename from docs/tutorials/python/send-payments/create-trust-line-send-currency.md
rename to docs/tutorials/payments/create-trust-line-send-currency-in-python.md
index 82f1015cfe..cb6adbfe13 100644
--- a/docs/tutorials/python/send-payments/create-trust-line-send-currency.md
+++ b/docs/tutorials/payments/create-trust-line-send-currency-in-python.md
@@ -221,7 +221,7 @@ Return the result.
### configure_account
-This example shows how to set and clear configuration flags using the `AccountSet` method. The `ASF_DEFAULT_RIPPLE` flag is pertinent to experimentation with transfer of issued currencies to third-party accounts, so it is demonstrated here. You can set any of the configuration flags using the same structure, substituting the particular flags you want to set. See [AccountSet Flags](../../../references/protocol/transactions/types/accountset.md#accountset-flags).
+This example shows how to set and clear configuration flags using the `AccountSet` method. The `ASF_DEFAULT_RIPPLE` flag is pertinent to experimentation with transfer of issued currencies to third-party accounts, so it is demonstrated here. You can set any of the configuration flags using the same structure, substituting the particular flags you want to set. See [AccountSet Flags](../../references/protocol/transactions/types/accountset.md#accountset-flags).
Send the account seed and a Boolean value for whether to enable or disable rippling.
```python
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/look-up-checks.md b/docs/tutorials/payments/look-up-checks.md
similarity index 84%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-checks/look-up-checks.md
rename to docs/tutorials/payments/look-up-checks.md
index b00737f4ce..6327efc185 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/look-up-checks.md
+++ b/docs/tutorials/payments/look-up-checks.md
@@ -6,11 +6,11 @@ labels:
---
# Look Up Checks
-This tutorial shows how to look up [Checks](../../../../concepts/payment-types/checks.md) by their sender or recipient, in JavaScript.
+This tutorial shows how to look up [Checks](../../concepts/payment-types/checks.md) by their sender or recipient, in JavaScript.
## Prerequisites
-- You should be familiar with the basics of using the [xrpl.js client library](../../../javascript/build-apps/get-started.md).
+- You should be familiar with the basics of using the [xrpl.js client library](../get-started/get-started-javascript.md).
- To get any results, the addresses you're looking up must have at least one Check entry in the ledger. See also: [Send a Check](./send-a-check.md).
## Source Code
@@ -23,7 +23,7 @@ The complete source code for this tutorial is available in the source repository
### 1. Look up all Checks for the address
-To get a list of all incoming and outgoing Checks for an account, use the `account_objects` command and set the `type` field of the request to `checks`. You may need to make multiple requests if the result is [paginated](../../../../references/http-websocket-apis/api-conventions/markers-and-pagination.md).
+To get a list of all incoming and outgoing Checks for an account, use the `account_objects` command and set the `type` field of the request to `checks`. You may need to make multiple requests if the result is [paginated](../../references/http-websocket-apis/api-conventions/markers-and-pagination.md).
{% code-snippet file="/_code-samples/checks/js/get-checks.js" from="// Loop through account objects" before="// Filter results" /%}
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/look-up-escrows.md b/docs/tutorials/payments/look-up-escrows.md
similarity index 90%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/look-up-escrows.md
rename to docs/tutorials/payments/look-up-escrows.md
index 7d981236e9..2110d51816 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/look-up-escrows.md
+++ b/docs/tutorials/payments/look-up-escrows.md
@@ -7,7 +7,7 @@ labels:
---
# Look up Escrows
-This tutorial shows how to look up outstanding [escrows](../../../../concepts/payment-types/escrow.md) in the XRP Ledger by their sender or recipient's address.
+This tutorial shows how to look up outstanding [escrows](../../concepts/payment-types/escrow.md) in the XRP Ledger by their sender or recipient's address.
{% admonition type="info" name="Note" %}For escrows that were created _before_ the [fix1523 amendment][] was enabled on 2017-11-14, you can only look up those escrows by sender address, not by the recipient's address.{% /admonition %}
@@ -124,17 +124,17 @@ When done, disconnect the WebSocket client.
## See Also
- **Concepts:**
- - [Escrow](../../../../concepts/payment-types/escrow.md)
+ - [Escrow](../../concepts/payment-types/escrow.md)
- **Tutorials:**
- - [Send XRP](../../send-xrp.md)
- - [Look Up Transaction Results](../../../../concepts/transactions/finality-of-results/look-up-transaction-results.md)
- - [Reliable Transaction Submission](../../../../concepts/transactions/reliable-transaction-submission.md)
+ - [Send XRP](send-xrp.md)
+ - [Look Up Transaction Results](../../concepts/transactions/finality-of-results/look-up-transaction-results.md)
+ - [Reliable Transaction Submission](../../concepts/transactions/reliable-transaction-submission.md)
- **References:**
- [EscrowCancel transaction][]
- [EscrowCreate transaction][]
- [EscrowFinish transaction][]
- [account_objects method][]
- [tx method][]
- - [Escrow ledger entry](../../../../references/protocol/ledger-data/ledger-entry-types/escrow.md)
+ - [Escrow entry][]
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/send-a-check.md b/docs/tutorials/payments/send-a-check.md
similarity index 80%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-checks/send-a-check.md
rename to docs/tutorials/payments/send-a-check.md
index 17f9b375aa..05635640c6 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-checks/send-a-check.md
+++ b/docs/tutorials/payments/send-a-check.md
@@ -6,9 +6,9 @@ labels:
---
# Send a Check
-Sending a [Check](/docs/concepts/payment-types/checks.md) is like writing permission for an intended recipient to pull a payment from you. The outcome of this process is a [Check entry in the ledger](../../../../references/protocol/ledger-data/ledger-entry-types/check.md) which the recipient can cash later.
+Sending a [Check](/docs/concepts/payment-types/checks.md) is like writing permission for an intended recipient to pull a payment from you. The outcome of this process is a [Check entry in the ledger](../../references/protocol/ledger-data/ledger-entry-types/check.md) which the recipient can cash later.
-In many cases, you want to send a [Payment][] instead of a Check, since that delivers the money directly to the recipient in one step. However, if your intended recipient uses [DepositAuth](../../../../concepts/accounts/depositauth.md), you cannot send them Payments directly, so a Check is a good alternative.
+In many cases, you want to send a [Payment][] instead of a Check, since that delivers the money directly to the recipient in one step. However, if your intended recipient uses [DepositAuth](../../concepts/accounts/depositauth.md), you cannot send them Payments directly, so a Check is a good alternative.
## Prerequisites
@@ -17,7 +17,7 @@ To send a Check with this tutorial, you need the following:
- The **address** and **secret key** of a funded account to send the Check from.
- You can use the [XRP Ledger Test Net Faucet](/resources/dev-tools/xrp-faucets) to get a funded address and secret with 10,000 Test Net XRP.
- The **address** of a funded account to receive the Check.
-- You should be familiar with the basics of using [xrpl.js](../../../javascript/build-apps/get-started.md).
+- You should be familiar with the basics of using [xrpl.js](../get-started/get-started-javascript.md).
## Source Code
@@ -29,14 +29,14 @@ The complete source code for this tutorial is available in the source repository
### 1. Prepare the CheckCreate transaction
-Decide how much money the Check is for and who can cash it. Figure out the values of the [CheckCreate transaction][] fields. The following fields are the bare minimum; everything else is either optional or can be [auto-filled](../../../../references/protocol/transactions/common-fields.md#auto-fillable-fields) when signing:
+Decide how much money the Check is for and who can cash it. Figure out the values of the [CheckCreate transaction][] fields. The following fields are the bare minimum; everything else is either optional or can be [auto-filled](../../references/protocol/transactions/common-fields.md#auto-fillable-fields) when signing:
| Field | Value | Description |
|:------------------|:--------------------------|:-----------------------------|
| `TransactionType` | String | Use the string `CheckCreate` here. |
| `Account` | String (Address) | The address of the sender who is creating the Check. (In other words, your address.) |
| `Destination` | String (Address) | The address of the intended recipient who can cash the Check. |
-| `SendMax` | String or Object (Amount) | The maximum amount the sender can be debited when this Check gets cashed. For XRP, use a string representing drops of XRP. For tokens, use an object with `currency`, `issuer`, and `value` fields. See [Specifying Currency Amounts][] for details. If you want the recipient to be able to cash the Check for an exact amount of a non-XRP currency with a [transfer fee](../../../../concepts/tokens/fungible-tokens/transfer-fees.md), remember to include an extra percentage to pay for the transfer fee. (For example, for the recipient to cash a Check for 100 CAD from an issuer with a 2% transfer fee, you must set the `SendMax` to 102 CAD from that issuer.) |
+| `SendMax` | String or Object (Amount) | The maximum amount the sender can be debited when this Check gets cashed. For XRP, use a string representing drops of XRP. For tokens, use an object with `currency`, `issuer`, and `value` fields. See [Specifying Currency Amounts][] for details. If you want the recipient to be able to cash the Check for an exact amount of a non-XRP currency with a [transfer fee](../../concepts/tokens/fungible-tokens/transfer-fees.md), remember to include an extra percentage to pay for the transfer fee. (For example, for the recipient to cash a Check for 100 CAD from an issuer with a 2% transfer fee, you must set the `SendMax` to 102 CAD from that issuer.) |
For example, imagine you were asked to pay a company named Grand Payments for some consulting work. By email, Grand Payments informs you that the maximum charge is 120 XRP, their XRP Ledger address is `rGPnRH1EBpHeTF2QG8DCAgM7z5pb75LAis`, and this work has been billed with an invoice ID of `46060241FABCF692D4D934BA2A6C4427CD4279083E38C77CBE642243E43BE291` which they ask you to attach for their records. The following code shows how you could use a Check to send that payment:
@@ -58,7 +58,7 @@ If the transaction succeeded, it should have a `"TransactionResult": "tesSUCCESS
{% admonition type="success" name="Tip" %}The `submitAndWait()` method in xrpl.js only returns when the transaction's result is final, so you can assume that the transaction is validated if it returns a result code of `tesSUCCESS`.{% /admonition %}
-To cash or cancel the Check later, you'll need the Check ID. You can find this in the transaction's metadata by looking for a `CreatedNode` entry with a `LedgerEntryType` of `"Check"`. This indicates that the transaction created a [Check ledger entry](../../../../references/protocol/ledger-data/ledger-entry-types/check.md). The `LedgerIndex` of this object is the ID of the Check. This should be a [hash][] value such as `84C61BE9B39B2C4A2267F67504404F1EC76678806C1B901EA781D1E3B4CE0CD9`.
+To cash or cancel the Check later, you'll need the Check ID. You can find this in the transaction's metadata by looking for a `CreatedNode` entry with a `LedgerEntryType` of `"Check"`. This indicates that the transaction created a [Check ledger entry](../../references/protocol/ledger-data/ledger-entry-types/check.md). The `LedgerIndex` of this object is the ID of the Check. This should be a [hash][] value such as `84C61BE9B39B2C4A2267F67504404F1EC76678806C1B901EA781D1E3B4CE0CD9`.
At this point, it is up to the recipient to cash the Check.
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-conditional-escrow.md b/docs/tutorials/payments/send-a-conditional-escrow.md
similarity index 81%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-conditional-escrow.md
rename to docs/tutorials/payments/send-a-conditional-escrow.md
index 359c6665f2..667ca18243 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-conditional-escrow.md
+++ b/docs/tutorials/payments/send-a-conditional-escrow.md
@@ -6,7 +6,7 @@ labels:
---
# Send a Conditional Escrow
-This tutorial demonstrates how to send an [escrow](../../../../concepts/payment-types/escrow.md) that can be released when a specific crypto-condition is fulfilled. Essentially, a crypto-condition is like a random password that unlocks the escrow to be sent to its indicated destination. You can use this as part of an app that reveals the fulfillment only when specific actions take place.
+This tutorial demonstrates how to send an [escrow](../../concepts/payment-types/escrow.md) that can be released when a specific crypto-condition is fulfilled. Essentially, a crypto-condition is like a random password that unlocks the escrow to be sent to its indicated destination. You can use this as part of an app that reveals the fulfillment only when specific actions take place.
This tutorial shows how to escrow XRP. If the [TokenEscrow amendment][] is enabled, you can also escrow tokens.
@@ -23,7 +23,7 @@ By following this tutorial, you should learn how to:
To complete this tutorial, you should:
- Have a basic understanding of the XRP Ledger.
-- Have an [XRP Ledger client library](../../../../references/client-libraries.md), such as **xrpl.js**, installed.
+- Have an [XRP Ledger client library](../../references/client-libraries.md), such as **xrpl.js**, installed.
## Source Code
@@ -110,7 +110,7 @@ To send the escrow, construct an [EscrowCreate transaction][] and then submit it
Anyone with the correct fulfillment can immediately finish a conditional escrow (unless it's a timed conditinal escrow with a `FinishAfter` time). To do this, construct an [EscrowFinish transaction][], using the sequence number that you recorded when you created the escrow, and the matching condition and fulfillment for the escrow, then submit it to the network.
-{% admonition type="warning" name="Caution" %}A conditional EscrowFinish requires a [higher than normal transaction cost](../../../../concepts/transactions/transaction-cost.md#special-transaction-costs) based on the size of the fulfillment in bytes. Most libraries should specify an appropriate amount of XRP when autofilling, but you should be mindful of this when specifying the `Fee` field manually.{% /admonition %}
+{% admonition type="warning" name="Caution" %}A conditional EscrowFinish requires a [higher than normal transaction cost](../../concepts/transactions/transaction-cost.md#special-transaction-costs) based on the size of the fulfillment in bytes. Most libraries should specify an appropriate amount of XRP when autofilling, but you should be mindful of this when specifying the `Fee` field manually.{% /admonition %}
{% tabs %}
{% tab label="JavaScript" %}
@@ -127,15 +127,15 @@ Anyone with the correct fulfillment can immediately finish a conditional escrow
- [Crypto-Conditions Specification][]
- **Concepts:**
- - [Escrow](../../../../concepts/payment-types/escrow.md)
+ - [Escrow](../../concepts/payment-types/escrow.md)
+ - [Look Up Transaction Results](../../concepts/transactions/finality-of-results/look-up-transaction-results.md)
+ - [Reliable Transaction Submission](../../concepts/transactions/reliable-transaction-submission.md)
- **Tutorials:**
- - [Send XRP](../../send-xrp.md)
- - [Look Up Transaction Results](../../../../concepts/transactions/finality-of-results/look-up-transaction-results.md)
- - [Reliable Transaction Submission](../../../../concepts/transactions/reliable-transaction-submission.md)
+ - [Send XRP](send-xrp.md)
- **References:**
- [EscrowCancel transaction][]
- [EscrowCreate transaction][]
- [EscrowFinish transaction][]
- - [Escrow ledger object](../../../../references/protocol/ledger-data/ledger-entry-types/escrow.md)
+ - [Escrow entry][]
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-timed-escrow.md b/docs/tutorials/payments/send-a-timed-escrow.md
similarity index 89%
rename from docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-timed-escrow.md
rename to docs/tutorials/payments/send-a-timed-escrow.md
index 52fd52dbff..f7f4e07977 100644
--- a/docs/tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-timed-escrow.md
+++ b/docs/tutorials/payments/send-a-timed-escrow.md
@@ -6,7 +6,7 @@ labels:
---
# Send a Timed Escrow
-This tutorial shows how to send an [escrow](../../../../concepts/payment-types/escrow.md) whose only condition for release is that a specific time has passed. You can use this to set aside money for yourself or others so that it absolutely cannot be used until the specified time.
+This tutorial shows how to send an [escrow](../../concepts/payment-types/escrow.md) whose only condition for release is that a specific time has passed. You can use this to set aside money for yourself or others so that it absolutely cannot be used until the specified time.
This tutorial shows how to escrow XRP. If the [TokenEscrow amendment][] is enabled, you can also escrow tokens.
@@ -22,7 +22,7 @@ By following this tutorial, you should learn how to:
To complete this tutorial, you should:
- Have a basic understanding of the XRP Ledger.
-- Have an [XRP Ledger client library](../../../../references/client-libraries.md), such as **xrpl.js**, installed.
+- Have an [XRP Ledger client library](../../references/client-libraries.md), such as **xrpl.js**, installed.
## Source Code
@@ -130,7 +130,7 @@ JavaScript doesn't have a native `sleep(...)` function, but you can implement on
{% /tab %}
{% /tabs %}
-At this point, the escrow should be mature, but that depends on the official close time of the previous ledger. Ledger close times can vary based on the consensus process, and [are rounded](../../../../concepts/ledgers/ledger-close-times.md) by up to 10 seconds. To account for this variance, use an approach such as the following:
+At this point, the escrow should be mature, but that depends on the official close time of the previous ledger. Ledger close times can vary based on the consensus process, and [are rounded](../../concepts/ledgers/ledger-close-times.md) by up to 10 seconds. To account for this variance, use an approach such as the following:
1. Check the official close time of the most recent validated ledger.
2. Wait a number of seconds based on the difference between that close time and the maturity time of the escrow.
@@ -170,15 +170,16 @@ In xrpl-py, you can use the [`get_balance_changes(metadata)`](https://xrpl-py.re
## See Also
- **Concepts:**
- - [Escrow](../../../../concepts/payment-types/escrow.md)
+ - [Escrow](../../concepts/payment-types/escrow.md)
+ - [Ledger Close Times](../../concepts/ledgers/ledger-close-times.md)
+ - [Look Up Transaction Results](../../concepts/transactions/finality-of-results/look-up-transaction-results.md)
+ - [Reliable Transaction Submission](../../concepts/transactions/reliable-transaction-submission.md)
- **Tutorials:**
- - [Send XRP](../../send-xrp.md)
- - [Look Up Transaction Results](../../../../concepts/transactions/finality-of-results/look-up-transaction-results.md)
- - [Reliable Transaction Submission](../../../../concepts/transactions/reliable-transaction-submission.md)
+ - [Send XRP](send-xrp.md)
- **References:**
- [EscrowCancel transaction][]
- [EscrowCreate transaction][]
- [EscrowFinish transaction][]
- - [Escrow ledger object](../../../../references/protocol/ledger-data/ledger-entry-types/escrow.md)
+ - [Escrow entry][]
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/javascript/send-payments/send-and-cash-checks.md b/docs/tutorials/payments/send-and-cash-checks-in-javascript.md
similarity index 97%
rename from docs/tutorials/javascript/send-payments/send-and-cash-checks.md
rename to docs/tutorials/payments/send-and-cash-checks-in-javascript.md
index 803b66f0e5..de319cc5d7 100644
--- a/docs/tutorials/javascript/send-payments/send-and-cash-checks.md
+++ b/docs/tutorials/payments/send-and-cash-checks-in-javascript.md
@@ -17,7 +17,7 @@ This example shows how to:
Checks offer another option for transferring funds between accounts. Checks have two particular advantages.
-1. You can use a check to send [tokens](../../../concepts/tokens/index.md) to someone who has not already created a trust line. The trust line is created automatically when the receiver chooses to accept the funds.
+1. You can use a check to send [tokens](../../concepts/tokens/index.md) to someone who has not already created a trust line. The trust line is created automatically when the receiver chooses to accept the funds.
2. The receiver can choose to accept less than the full amount of the check. This allows you to authorize a maximum amount when the actual cost is not finalized.
@@ -25,7 +25,7 @@ Checks offer another option for transferring funds between accounts. Checks have
## Prerequisites
-Download and expand the [Modular Tutorials](../../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
+Download and expand the [Modular Tutorials](../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
{% admonition type="info" name="Note" %}
Without the Modular Tutorial Samples, you will not be able to try the examples that follow.
@@ -113,7 +113,7 @@ To cancel a check you have previously sent to another account.
# Code Walkthrough
-Download and expand the [Modular Tutorials](../../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
+Download and expand the [Modular Tutorials](../../../_code-samples/modular-tutorials/payment-modular-tutorials.zip) archive.
## send-checks.js
diff --git a/docs/tutorials/python/send-payments/send-and-cash-checks.md b/docs/tutorials/payments/send-and-cash-checks-in-python.md
similarity index 100%
rename from docs/tutorials/python/send-payments/send-and-cash-checks.md
rename to docs/tutorials/payments/send-and-cash-checks-in-python.md
diff --git a/docs/tutorials/how-tos/send-xrp.md b/docs/tutorials/payments/send-xrp.md
similarity index 98%
rename from docs/tutorials/how-tos/send-xrp.md
rename to docs/tutorials/payments/send-xrp.md
index e7242ea34d..62d07cf6d3 100644
--- a/docs/tutorials/how-tos/send-xrp.md
+++ b/docs/tutorials/payments/send-xrp.md
@@ -24,11 +24,11 @@ This tutorial explains how to send a direct XRP Payment using `xrpl.js` for Java
To interact with the XRP Ledger, you need to set up a dev environment with the necessary tools. This tutorial provides examples using the following options:
-- **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../javascript/build-apps/get-started.md) for setup steps.
-- **Python** with the [`xrpl-py` library](https://xrpl-py.readthedocs.io/). See [Get Started using Python](../python/build-apps/get-started.md) for setup steps.
-- **Java** with the [xrpl4j library](https://github.com/XRPLF/xrpl4j). See [Get Started Using Java](../java/build-apps/get-started.md) for setup steps.
-- **PHP** with the [XRPL_PHP library](https://github.com/AlexanderBuzz/xrpl-php). See [Get Started Using PHP](../php/build-apps/get-started.md) for setup steps.
-- **Go** with the [xrpl-go library](https://github.com/Peersyst/xrpl-go). See [Get Started Using Go](../go/build-apps/get-started.md) for setup steps.
+- **JavaScript** with the [xrpl.js library](https://github.com/XRPLF/xrpl.js/). See [Get Started Using JavaScript](../get-started/get-started-javascript.md) for setup steps.
+- **Python** with the [`xrpl-py` library](https://xrpl-py.readthedocs.io/). See [Get Started using Python](../get-started/get-started-python.md) for setup steps.
+- **Java** with the [xrpl4j library](https://github.com/XRPLF/xrpl4j). See [Get Started Using Java](../get-started/get-started-java.md) for setup steps.
+- **PHP** with the [XRPL_PHP library](https://github.com/AlexanderBuzz/xrpl-php). See [Get Started Using PHP](../get-started/get-started-php.md) for setup steps.
+- **Go** with the [xrpl-go library](https://github.com/Peersyst/xrpl-go). See [Get Started Using Go](../get-started/get-started-go.md) for setup steps.
## Send a Payment on the Test Net
@@ -551,7 +551,7 @@ if err := client.Connect(); err != nil {
After completing this tutorial, you may want to try the following:
- [Issue a token](../how-tos/use-tokens/issue-a-fungible-token.md) on the XRP Ledger Testnet.
-- [Trade in the Decentralized Exchange](../how-tos/use-tokens/trade-in-the-decentralized-exchange.md).
+- [Trade in the Decentralized Exchange](../dex/trade-in-the-decentralized-exchange.md).
- Build [Reliable transaction submission](../../concepts/transactions/reliable-transaction-submission.md) for production systems.
- Check your [client library](../../references/client-libraries.md)'s API reference for the full range of XRP Ledger functionality.
- Customize your [Account Settings](../how-tos/manage-account-settings/index.md).
diff --git a/docs/tutorials/php/build-apps/index.md b/docs/tutorials/php/build-apps/index.md
deleted file mode 100644
index 30683240c1..0000000000
--- a/docs/tutorials/php/build-apps/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-html: build-apps-with-php.html
-parent: php.html
-top_nav_grouping: Article Types
-metadata:
- indexPage: true
----
-# Build Applications in PHP
-
-Build applications in PHP.
-
-
-{% child-pages /%}
-
diff --git a/docs/tutorials/how-tos/use-xrpl-sidechains/set-up-iou-iou-bridge.md b/docs/tutorials/programmability/set-up-iou-iou-bridge.md
similarity index 98%
rename from docs/tutorials/how-tos/use-xrpl-sidechains/set-up-iou-iou-bridge.md
rename to docs/tutorials/programmability/set-up-iou-iou-bridge.md
index 78459c7eda..b4e591bac4 100644
--- a/docs/tutorials/how-tos/use-xrpl-sidechains/set-up-iou-iou-bridge.md
+++ b/docs/tutorials/programmability/set-up-iou-iou-bridge.md
@@ -16,7 +16,7 @@ Setting up an IOU-IOU bridge enables you to move tokens between chains.
- An XRP-XRP bridge must be set up between the locking and issuing chain.
- Ensure the witnesses' transaction submission accounts are funded on the locking and issuing chains.
-- Set up an issuer on the issuing chain to mint and burn a wrapped version of the token you want to bridge. See: [Issue a Fungible Token](../use-tokens/issue-a-fungible-token.md)
+- Set up an issuer on the issuing chain to mint and burn a wrapped version of the token you want to bridge. See: [Issue a Fungible Token](../how-tos/use-tokens/issue-a-fungible-token.md)
## Steps
diff --git a/docs/tutorials/how-tos/use-xrpl-sidechains/set-up-xrp-xrp-bridge.md b/docs/tutorials/programmability/set-up-xrp-xrp-bridge.md
similarity index 100%
rename from docs/tutorials/how-tos/use-xrpl-sidechains/set-up-xrp-xrp-bridge.md
rename to docs/tutorials/programmability/set-up-xrp-xrp-bridge.md
diff --git a/docs/tutorials/how-tos/use-xrpl-sidechains/submit-cross-chain-transaction.md b/docs/tutorials/programmability/submit-cross-chain-transaction.md
similarity index 95%
rename from docs/tutorials/how-tos/use-xrpl-sidechains/submit-cross-chain-transaction.md
rename to docs/tutorials/programmability/submit-cross-chain-transaction.md
index f4d59cfb87..535436eb2f 100644
--- a/docs/tutorials/how-tos/use-xrpl-sidechains/submit-cross-chain-transaction.md
+++ b/docs/tutorials/programmability/submit-cross-chain-transaction.md
@@ -6,7 +6,7 @@ labels:
---
# Submit Cross-chain Transactions
-This tutorial explains how to create a test account on a locking chain (_Devent_), and transfer XRP to an issuing chain (_Sidechain-Devnet_), using a supported [client library](../../../references/client-libraries.md) to query and submit transactions. Witness servers are already set up to monitor the XRP-XRP bridge and submit attestations.
+This tutorial explains how to create a test account on a locking chain (_Devent_), and transfer XRP to an issuing chain (_Sidechain-Devnet_), using a supported [client library](../../references/client-libraries.md) to query and submit transactions. Witness servers are already set up to monitor the XRP-XRP bridge and submit attestations.
{% amendment-disclaimer name="XChainBridge" /%}
diff --git a/docs/tutorials/python/build-apps/index.md b/docs/tutorials/python/build-apps/index.md
deleted file mode 100644
index dca92e1376..0000000000
--- a/docs/tutorials/python/build-apps/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-html: build-apps-in-python.html
-parent: python.html
-top_nav_grouping: Article Types
-metadata:
- indexPage: true
-seo:
- description: Build full-featured applications in Python.
----
-# Build Applications in Python
-
-Build full-featured applications in Python
-
-{% child-pages /%}
diff --git a/docs/tutorials/python/compliance/index.md b/docs/tutorials/python/compliance/index.md
deleted file mode 100644
index 8a558e973b..0000000000
--- a/docs/tutorials/python/compliance/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-metadata:
- indexPage: true
-seo:
- description: Transact with confidence using the XRP Ledger's suite of compliance features for following government regulations and security practices.
----
-# Transact with Confidence Using Compliance Features
-
-The XRP Ledger has a rich suite of features designed to help financial institutions of all sizes engage with DeFi technology while complying with government regulations domestically and internationally.
-
-See the following tutorials for examples of how to put these features to work:
-
-{% child-pages /%}
diff --git a/docs/tutorials/python/send-payments/index.md b/docs/tutorials/python/send-payments/index.md
deleted file mode 100644
index acdb314878..0000000000
--- a/docs/tutorials/python/send-payments/index.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-html: send-payments-using-python.html
-parent: modular-tutorials-in-python.html
-seo:
- description: Use a Python test harness to send XRP,trade currencies, and more.
-labels:
- - Accounts
- - Cross-Currency
- - Non-fungible Tokens, NFTs
- - Payments
- - Quickstart
- - Tokens
- - XRP
-metadata:
- indexPage: true
----
-# Send Payments Using Python
-
-Send XRP and issued currency on the XRP Ledger using Python.
-
-
-{% child-pages /%}
diff --git a/docs/tutorials/javascript/build-apps/build-a-browser-wallet-in-javascript.md b/docs/tutorials/sample-apps/build-a-browser-wallet-in-javascript.md
similarity index 81%
rename from docs/tutorials/javascript/build-apps/build-a-browser-wallet-in-javascript.md
rename to docs/tutorials/sample-apps/build-a-browser-wallet-in-javascript.md
index ce99697803..e37350552b 100644
--- a/docs/tutorials/javascript/build-apps/build-a-browser-wallet-in-javascript.md
+++ b/docs/tutorials/sample-apps/build-a-browser-wallet-in-javascript.md
@@ -18,7 +18,7 @@ To complete this tutorial, you should meet the following guidelines:
1. You have [Node.js](https://nodejs.org/en/download/) v14 or higher installed.
2. You have [Yarn](https://yarnpkg.com/en/docs/install) (v1.17.3 or higher) installed.
-3. You are somewhat familiar with coding with JavaScript and have completed the [Get Started Using JavaScript](./get-started.md) tutorial.
+3. You are somewhat familiar with coding with JavaScript and have completed the [Get Started Using JavaScript](../get-started/get-started-javascript.md) tutorial.
## Source Code
@@ -34,8 +34,8 @@ This application can:
- Show updates to the XRP Ledger in real-time.
- View any XRP Ledger account's activity, including showing how much XRP was delivered by each transaction.
-- Show how much XRP is set aside for the account's [reserve requirement](../../../concepts/accounts/reserves.md).
-- Send [direct XRP payments](../../../concepts/payment-types/direct-xrp-payments.md), and provide feedback about the intended destination address, including:
+- Show how much XRP is set aside for the account's [reserve requirement](../../concepts/accounts/reserves.md).
+- Send [direct XRP payments](../../concepts/payment-types/direct-xrp-payments.md), and provide feedback about the intended destination address, including:
- Displaying your account's available balance
- Verifying that the destination address is valid
- Validating the account has enough XRP to send
@@ -114,11 +114,11 @@ This basic setup creates a homepage and applies some visual styles. The goal is
To make that happen, we need to connect to the XRP Ledger and look up the account and the latest validated ledger.
-5. In the `src/` directory, make a new folder named `helpers`. Create a new file there named `get-wallet-details.js` and define a function named `getWalletDetails` there. This function uses the [account_info method](../../../references/http-websocket-apis/public-api-methods/account-methods/account_info.md) to fetch account details and the [server_info method](../../../references/http-websocket-apis/public-api-methods/server-info-methods/server_info.md) to calculate the current [reserves](../../../concepts/accounts/reserves.md). The code to do all this is as follows:
+5. In the `src/` directory, make a new folder named `helpers`. Create a new file there named `get-wallet-details.js` and define a function named `getWalletDetails` there. This function uses the [account_info method](../../references/http-websocket-apis/public-api-methods/account-methods/account_info.md) to fetch account details and the [server_info method](../../references/http-websocket-apis/public-api-methods/server-info-methods/server_info.md) to calculate the current [reserves](../../concepts/accounts/reserves.md). The code to do all this is as follows:
{% code-snippet file="/_code-samples/build-a-browser-wallet/js/src/helpers/get-wallet-details.js" language="js" /%}
-6. Now, let's add the code to `index.js` file to fetch the account and ledger details and display them on the home page. Copy the code written below to the `index.js` file. Here we render the wallet details using the function we defined in `get-wallet-details.js`. In order to make sure we have up to date ledger data, we are using the [ledger stream](../../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md#ledger-stream) to listen for ledger close events.
+6. Now, let's add the code to `index.js` file to fetch the account and ledger details and display them on the home page. Copy the code written below to the `index.js` file. Here we render the wallet details using the function we defined in `get-wallet-details.js`. In order to make sure we have up to date ledger data, we are using the [ledger stream](../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md#ledger-stream) to listen for ledger close events.
{% code-snippet file="/_code-samples/build-a-browser-wallet/js/index.js" language="js" /%}
@@ -150,7 +150,7 @@ Now that we've created the home page, we can move on to the "Send XRP" page. Thi
3. Copy the contents of the {% repo-link path="_code-samples/build-a-browser-wallet/js/src/send-xrp/send-xrp.html" %}send-xrp.html{% /repo-link %} file to your `send-xrp.html` file. The provided HTML code includes three input fields for the destination address, amount, and destination tag, each with their corresponding labels.
-4. Now that we have the HTML code, let's add the JavaScript code. In the `helpers` folder, create a new file named `submit-transaction.js` and copy the code written below to the file. In this file, we are using the [submit](../../../references/http-websocket-apis/public-api-methods/transaction-methods/submit.md) method to submit the transaction to the XRPL. Before submitting every transaction needs to be signed by a wallet, learn more about [signing](../../../references/http-websocket-apis/admin-api-methods/signing-methods/sign.md) a transaction.
+4. Now that we have the HTML code, let's add the JavaScript code. In the `helpers` folder, create a new file named `submit-transaction.js` and copy the code written below to the file. In this file, we are using the [submit](../../references/http-websocket-apis/public-api-methods/transaction-methods/submit.md) method to submit the transaction to the XRPL. Before submitting every transaction needs to be signed by a wallet, learn more about [signing](../../references/http-websocket-apis/admin-api-methods/signing-methods/sign.md) a transaction.
{% code-snippet file="/_code-samples/build-a-browser-wallet/js/src/helpers/submit-transaction.js" language="js" /%}
@@ -179,7 +179,7 @@ Now that we have created the home page and the send XRP page, let's create the t
- Delivered amount: The amount of XRP or tokens delivered by the transaction, if applicable.
- Link: A link to the transaction on the XRP Ledger Explorer.
-{% admonition type="warning" name="Caution" %}When displaying how much money a transaction delivered, always use the `delivered_amount` field from the metadata, not the `Amount` field from the transaction instructions. [Partial Payments](../../../concepts/payment-types/partial-payments.md) can deliver much less than the stated `Amount` and still be successful.{% /admonition %}
+{% admonition type="warning" name="Caution" %}When displaying how much money a transaction delivered, always use the `delivered_amount` field from the metadata, not the `Amount` field from the transaction instructions. [Partial Payments](../../concepts/payment-types/partial-payments.md) can deliver much less than the stated `Amount` and still be successful.{% /admonition %}

@@ -188,23 +188,23 @@ Now that we have created the home page and the send XRP page, let's create the t
{% code-snippet file="/_code-samples/build-a-browser-wallet/js/src/transaction-history/transaction-history.js" language="js" /%}
-This code uses [account_tx](../../../references/http-websocket-apis/public-api-methods/account-methods/account_tx.md) to fetch transactions we've sent to and from this account. In order to get all the results, we're using the `marker` parameter to paginate through the incomplete list of transactions until we reach the end.
+This code uses [account_tx](../../references/http-websocket-apis/public-api-methods/account-methods/account_tx.md) to fetch transactions we've sent to and from this account. In order to get all the results, we're using the `marker` parameter to paginate through the incomplete list of transactions until we reach the end.
3. Create a file named `transaction-history.html` and copy the code from {% repo-link path="_code-samples/build-a-browser-wallet/js/src/transaction-history/transaction-history.html" %}transaction-history.html{% /repo-link %} into it.
`transaction-history.html` defines a table which displays the fields mentioned above.
-You can use this code as a starting point for displaying your account's transaction history. If you want an additional challenge, try expanding it to support different transaction types (e.g. [TrustSet](../../../references/protocol/transactions/types/trustset.md)). If you want inspiration for how to handle this, you can check out the [XRP Ledger Explorer](https://livenet.xrpl.org/) to see how the transaction details are displayed.
+You can use this code as a starting point for displaying your account's transaction history. If you want an additional challenge, try expanding it to support different transaction types (e.g. [TrustSet](../../references/protocol/transactions/types/trustset.md)). If you want inspiration for how to handle this, you can check out the [XRP Ledger Explorer](https://livenet.xrpl.org/) to see how the transaction details are displayed.
## Next Steps
Now that you have a functional wallet, you can take it in several new directions. The following are a few ideas:
-- You could support more of the XRP Ledger's [transaction types](../../../references/protocol/transactions/types/index.md) including [tokens](../../../concepts/tokens/index.md) and [cross-currency payments](../../../concepts/payment-types/cross-currency-payments.md)
+- You could support more of the XRP Ledger's [transaction types](../../references/protocol/transactions/types/index.md) including [tokens](../../concepts/tokens/index.md) and [cross-currency payments](../../concepts/payment-types/cross-currency-payments.md)
- You could add support for displaying multiple tokens, beyond just XRP
-- You could support creating [offers](../../../concepts/tokens/decentralized-exchange/offers.md) in the [decentralized exchange](../../../concepts/tokens/decentralized-exchange/index.md)
+- You could support creating [offers](../../concepts/tokens/decentralized-exchange/offers.md) in the [decentralized exchange](../../concepts/tokens/decentralized-exchange/index.md)
- You could add new ways to request payments, such as with QR codes or URIs that open in your wallet.
-- You could support better account security including allowing users to set [regular key pairs](../../../concepts/accounts/cryptographic-keys.md#regular-key-pair) or handle [multi-signing](../../../concepts/accounts/multi-signing.md).
+- You could support better account security including allowing users to set [regular key pairs](../../concepts/accounts/cryptographic-keys.md#regular-key-pair) or handle [multi-signing](../../concepts/accounts/multi-signing.md).
- Or you could take your code to production by following the [Building for Production with Vite](https://vitejs.dev/guide/build.html#public-base-path) guide.
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/javascript/build-apps/build-a-desktop-wallet-in-javascript.md b/docs/tutorials/sample-apps/build-a-desktop-wallet-in-javascript.md
similarity index 97%
rename from docs/tutorials/javascript/build-apps/build-a-desktop-wallet-in-javascript.md
rename to docs/tutorials/sample-apps/build-a-desktop-wallet-in-javascript.md
index 8be7d40200..bc17c0783f 100644
--- a/docs/tutorials/javascript/build-apps/build-a-desktop-wallet-in-javascript.md
+++ b/docs/tutorials/sample-apps/build-a-desktop-wallet-in-javascript.md
@@ -11,7 +11,7 @@ This tutorial demonstrates how to build a desktop wallet for the XRP Ledger usin
To complete this tutorial, you should meet the following requirements:
- You have [Node.js](https://nodejs.org/) 14+ installed.
-- You are somewhat familiar with modern JavaScript programming and have completed the [Get Started Using JavaScript tutorial](./get-started.md).
+- You are somewhat familiar with modern JavaScript programming and have completed the [Get Started Using JavaScript tutorial](../get-started/get-started-javascript.md).
- You have some understanding of the XRP Ledger, its capabilities, and of cryptocurrency in general. Ideally you have completed the [Basic XRPL guide](https://learn.xrpl.org/).
### Source Code
@@ -36,12 +36,12 @@ The application we are going to build here will be capable of the following:
- Showing updates to the XRP Ledger in real-time.
- Viewing any XRP Ledger account's activity "read-only" including showing how much XRP was delivered by each transaction.
-- Sending [direct XRP payments](../../../concepts/payment-types/direct-xrp-payments.md), and providing feedback about the intended destination address, including:
+- Sending [direct XRP payments](../../concepts/payment-types/direct-xrp-payments.md), and providing feedback about the intended destination address, including:
- Whether the intended destination already exists in the XRP Ledger, or the payment would have to fund its creation.
- If the address doesn't want to receive XRP (**Disallow XRP** flag enabled).
- - If the address has a [verified domain name](../../../references/xrp-ledger-toml.md#account-verification) associated with it.
+ - If the address has a [verified domain name](../../references/xrp-ledger-toml.md#account-verification) associated with it.
-The application in this tutorial _doesn't_ have the ability to send or trade [tokens](../../../concepts/tokens/index.md) or use other [payment types](../../../concepts/payment-types/index.md) like [Escrow](../../../concepts/payment-types/escrow.md) or [Payment Channels](../../../concepts/payment-types/payment-channels.md). However, it provides a foundation that you can implement those and other features on top of.
+The application in this tutorial _doesn't_ have the ability to send or trade [tokens](../../concepts/tokens/index.md) or use other [payment types](../../concepts/payment-types/index.md) like [Escrow](../../concepts/payment-types/escrow.md) or [Payment Channels](../../concepts/payment-types/payment-channels.md). However, it provides a foundation that you can implement those and other features on top of.
In addition to the above features, you'll also learn a bit about Events, IPC (inter-process-communication) and asynchronous (async) code in JavaScript.
@@ -111,7 +111,7 @@ Our first step was to have a running "Hello World" application. Now we want to e
{% code-snippet file="/_code-samples/build-a-desktop-wallet/js/1-ledger-index/index.js" language="js" from="// Ledger index code additions - start" before="// Ledger index code additions - end" /%}
-This helper function does the following: It establishes a WebSocket connection to the XRP Ledger, calls the XRP Ledger API's [ledger method](../../../references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md) and returns the ledger index from the response. We will wire up this function at the end of this step.
+This helper function does the following: It establishes a WebSocket connection to the XRP Ledger, calls the XRP Ledger API's [ledger method](../../references/http-websocket-apis/public-api-methods/ledger-methods/ledger.md) and returns the ledger index from the response. We will wire up this function at the end of this step.
2. In order to attach a preloader script, modify the `createWindow` method in `index.js` by adding the following code:
@@ -1196,7 +1196,7 @@ One of the biggest shortcomings of the wallet app from the previous step is that
This step shows how to add some checks on destination addresses to warn the user before sending XRP.
-One type of check we could make is to verify the domain name associated with an XRP Ledger address; this is called [account domain verification](../../../references/xrp-ledger-toml.md#account-verification). When an account's domain is verified, we can could show it like this:
+One type of check we could make is to verify the domain name associated with an XRP Ledger address; this is called [account domain verification](../../references/xrp-ledger-toml.md#account-verification). When an account's domain is verified, we can could show it like this:

@@ -1204,9 +1204,9 @@ One type of check we could make is to verify the domain name associated with an
{% code-snippet file="/_code-samples/build-a-desktop-wallet/js/library/8_helpers.js" language="js" /%}
-The code in `8_helpers.js` looks up the account on the ledger by sending an [`account_info`](../../../references/http-websocket-apis/public-api-methods/account-methods/account_info.md) request.
+The code in `8_helpers.js` looks up the account on the ledger by sending an [`account_info`](../../references/http-websocket-apis/public-api-methods/account-methods/account_info.md) request.
-If the account does exist, the code checks for the [`lsfDisallowXRP` flag](../../../references/protocol/ledger-data/ledger-entry-types/accountroot.md#accountroot-flags).
+If the account does exist, the code checks for the [`lsfDisallowXRP` flag](../../references/protocol/ledger-data/ledger-entry-types/accountroot.md#accountroot-flags).
2. Import the new helper function in `index.js`:
diff --git a/docs/tutorials/python/build-apps/build-a-desktop-wallet-in-python.md b/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md
similarity index 88%
rename from docs/tutorials/python/build-apps/build-a-desktop-wallet-in-python.md
rename to docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md
index dc567d5b00..3f8925af7e 100644
--- a/docs/tutorials/python/build-apps/build-a-desktop-wallet-in-python.md
+++ b/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md
@@ -14,7 +14,7 @@ This tutorial demonstrates how to build a desktop wallet for the XRP Ledger usin
To complete this tutorial, you should meet the following guidelines:
- You have Python 3.7 or higher installed.
-- You are somewhat familiar with object-oriented programming in Python and have completed the [Get Started Using Python tutorial](./get-started.md).
+- You are somewhat familiar with object-oriented programming in Python and have completed the [Get Started Using Python tutorial](../get-started/get-started-python.md).
- You have some understanding of what the XRP Ledger can do and of cryptocurrency in general. You don't need to be an expert.
## Source Code
@@ -31,13 +31,13 @@ The exact look and feel of the user interface depend on your computer's operatin
- Shows updates to the XRP Ledger in real-time.
- Can view any XRP Ledger account's activity "read-only" including showing how much XRP was delivered by each transaction.
-- Shows how much XRP is set aside for the account's [reserve requirement](../../../concepts/accounts/reserves.md).
-- Can send [direct XRP payments](../../../concepts/payment-types/direct-xrp-payments.md), and provides feedback about the intended destination address, including:
+- Shows how much XRP is set aside for the account's [reserve requirement](../../concepts/accounts/reserves.md).
+- Can send [direct XRP payments](../../concepts/payment-types/direct-xrp-payments.md), and provides feedback about the intended destination address, including:
- Whether the intended destination already exists in the XRP Ledger, or the payment would have to fund its creation.
- If the address doesn't want to receive XRP (**Disallow XRP** flag enabled).
- - If the address has a [verified domain name](../../../references/xrp-ledger-toml.md#account-verification) associated with it.
+ - If the address has a [verified domain name](../../references/xrp-ledger-toml.md#account-verification) associated with it.
-The application in this tutorial _doesn't_ have the ability to send or trade [tokens](../../../concepts/tokens/index.md) or use other [payment types](../../../concepts/payment-types/index.md) like Escrow or Payment Channels. However, it provides a foundation that you can implement those and other features on top of.
+The application in this tutorial _doesn't_ have the ability to send or trade [tokens](../../concepts/tokens/index.md) or use other [payment types](../../concepts/payment-types/index.md) like Escrow or Payment Channels. However, it provides a foundation that you can implement those and other features on top of.
Other topics mentioned in this tutorial include graphical user interface (GUI) programming, threading, and asynchronous (async) code in Python.
@@ -136,7 +136,7 @@ The part that builds the GUI has been moved to a separate method, `build_ui(self
There's a new helper method, `run_bg_job()`, which runs an asynchronous function (defined with `async def`) in the worker thread. Use this method any time you want the worker thread to interact with the XRP Ledger network.
-Instead of a `get_validated_ledger()` method, the GUI class now has an `update_ledger()` method, which takes an object in the format of a [ledger stream message](../../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md#ledger-stream) and displays some of that information to the user. The worker thread calls this method using `wx.CallAfter()` whenever it gets a `ledgerClosed` event from the ledger.
+Instead of a `get_validated_ledger()` method, the GUI class now has an `update_ledger()` method, which takes an object in the format of a [ledger stream message](../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md#ledger-stream) and displays some of that information to the user. The worker thread calls this method using `wx.CallAfter()` whenever it gets a `ledgerClosed` event from the ledger.
Finally, change the code to start the app (at the end of the file) slightly:
@@ -144,7 +144,7 @@ Finally, change the code to start the app (at the end of the file) slightly:
Since the app uses a WebSocket client instead of the JSON-RPC client now, the code has to use a WebSocket URL to connect.
-{% admonition type="success" name="Tip" %}If you [run your own `rippled` server](../../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server) you can connect to it using `ws://localhost:6006` as the URL. You can also use the WebSocket URLs of [public servers](../../public-servers.md) to connect to the Mainnet or other test networks.{% /admonition %}
+{% admonition type="success" name="Tip" %}If you [run your own `rippled` server](../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server) you can connect to it using `ws://localhost:6006` as the URL. You can also use the WebSocket URLs of [public servers](../public-servers.md) to connect to the Mainnet or other test networks.{% /admonition %}
#### Troubleshooting SSL Certificate Errors
@@ -163,7 +163,7 @@ On Windows, open Edge or Chrome and browse to , then clos
**Full code for this step:** {% repo-link path="_code-samples/build-a-desktop-wallet/py/3_account.py" %}`3_account.py`{% /repo-link %}
-Now that you have a working, ongoing connection to the XRP Ledger, it's time to start adding some "wallet" functionality that lets you manage an individual account. For this step, you should prompt the user to input their address or master seed, then use that to display information about their account including how much XRP is set aside for the [reserve requirement](../../../concepts/accounts/reserves.md).
+Now that you have a working, ongoing connection to the XRP Ledger, it's time to start adding some "wallet" functionality that lets you manage an individual account. For this step, you should prompt the user to input their address or master seed, then use that to display information about their account including how much XRP is set aside for the [reserve requirement](../../concepts/accounts/reserves.md).
The prompt is in a pop-up dialog like this:
@@ -181,7 +181,7 @@ In the `XRPLMonitorThread` class, rename and update the `watch_xrpl()` method as
{% code-snippet file="/_code-samples/build-a-desktop-wallet/py/3_account.py" from="async def watch_xrpl" before="async def on_connected" language="py" /%}
-The newly renamed `watch_xrpl_account()` method now takes an address and optional wallet and saves them for later. (The GUI thread provides these based on user input.) This method also adds a new case for [transaction stream messages](../../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md#transaction-streams). When it sees a new transaction, the worker does not yet do anything with the transaction itself, but it uses that as a trigger to get the account's latest XRP balance and other info using the [account_info method][]. When _that_ response arrives, the worker passes the account data to the GUI for display.
+The newly renamed `watch_xrpl_account()` method now takes an address and optional wallet and saves them for later. (The GUI thread provides these based on user input.) This method also adds a new case for [transaction stream messages](../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md#transaction-streams). When it sees a new transaction, the worker does not yet do anything with the transaction itself, but it uses that as a trigger to get the account's latest XRP balance and other info using the [account_info method][]. When _that_ response arrives, the worker passes the account data to the GUI for display.
Still in the `XRPLMonitorThread` class, update the `on_connected()` method as follows:
@@ -203,7 +203,7 @@ Update the `build_ui()` method definition as follows:
{% code-snippet file="/_code-samples/build-a-desktop-wallet/py/3_account.py" from="def build_ui(self):" before="def run_bg_job(self, job):" language="py" /%}
-This adds a [`wx.StaticBox`](https://docs.wxpython.org/wx.StaticBox.html) with several new widgets, then uses the `AutoGridBagSizer` (defined above) to lay them out in 2×4 grid within the box. These new widgets are all static text to display [details of the account](../../../references/protocol/ledger-data/ledger-entry-types/accountroot.md), though some of them start with placeholder text. (Since they require data from the ledger, you have to wait for the worker thread to send that data back.)
+This adds a [`wx.StaticBox`](https://docs.wxpython.org/wx.StaticBox.html) with several new widgets, then uses the `AutoGridBagSizer` (defined above) to lay them out in 2×4 grid within the box. These new widgets are all static text to display [details of the account](../../references/protocol/ledger-data/ledger-entry-types/accountroot.md), though some of them start with placeholder text. (Since they require data from the ledger, you have to wait for the worker thread to send that data back.)
{% admonition type="warning" name="Caution" %}You may notice that even though the constructor for this class sees the `wallet` variable, it does not save it as a property of the object. This is because the wallet mostly needs to be managed by the worker thread, not the GUI thread, and updating it in both places might not be thread-safe.{% /admonition %}
@@ -211,7 +211,7 @@ Add a new `prompt_for_account()` method to the `TWaXLFrame` class:
{% code-snippet file="/_code-samples/build-a-desktop-wallet/py/3_account.py" from="def prompt_for_account" before="def update_ledger" language="py" /%}
-The constructor calls this method to prompt the user for their [address](../../../concepts/accounts/addresses.md) or [master seed](../../../concepts/accounts/cryptographic-keys.md#seed), then processes the user input to decode whatever value the user put in, and use it accordingly. With wxPython, you usually follow this pattern with dialog boxes:
+The constructor calls this method to prompt the user for their [address](../../concepts/accounts/addresses.md) or [master seed](../../concepts/accounts/cryptographic-keys.md#seed), then processes the user input to decode whatever value the user put in, and use it accordingly. With wxPython, you usually follow this pattern with dialog boxes:
1. Create a new instance of a dialog class, such as a [`wx.TextEntryDialog`](https://docs.wxpython.org/wx.TextEntryDialog.html).
2. Use `showModal()` to display it to the user and get a return code based on which button the user clicked.
@@ -285,7 +285,7 @@ Have the worker use the [account_tx method][] to look up the account's transacti
{% code-snippet file="/_code-samples/build-a-desktop-wallet/py/4_tx_history.py" from="# Get the first page of the account's transaction history" before="class AutoGridBagSizer" language="py" /%}
-{% admonition type="info" name="Note" %}You may have to [paginate](../../../references/http-websocket-apis/api-conventions/markers-and-pagination.md) across multiple [account_tx][account_tx method] requests and responses if you want the _complete_ list of transactions that affected an account since its creation. This example does not show pagination, so the app only displays the most recent transactions to affect the account.{% /admonition %}
+{% admonition type="info" name="Note" %}You may have to [paginate](../../references/http-websocket-apis/api-conventions/markers-and-pagination.md) across multiple [account_tx][account_tx method] requests and responses if you want the _complete_ list of transactions that affected an account since its creation. This example does not show pagination, so the app only displays the most recent transactions to affect the account.{% /admonition %}
Now, edit the `build_ui()` method of the `TWaXLFrame` class. **Update the beginning of the method** to add a new [`wx.Notebook`](https://docs.wxpython.org/wx.Notebook.html), which makes a "tabs" interface, and make the `main_panel` into the first tab, as follows:
@@ -301,7 +301,7 @@ Add the following helper method to the `TWaXLFrame` class:
{% code-snippet file="/_code-samples/build-a-desktop-wallet/py/4_tx_history.py" from="def displayable_amount" before="def add_tx_row" language="py" /%}
-This method takes a [currency amount](../../../references/protocol/data-types/basic-data-types.md#specifying-currency-amounts) and converts it into a string for display to a human. Since it's used with the [`delivered_amount` field](../../../references/protocol/transactions/metadata.md#delivered_amount) in particular, it also handles the special case for pre-2014 partial payments where the delivered amount is unavailable.
+This method takes a [currency amount](../../references/protocol/data-types/basic-data-types.md#specifying-currency-amounts) and converts it into a string for display to a human. Since it's used with the [`delivered_amount` field](../../references/protocol/transactions/metadata.md#delivered_amount) in particular, it also handles the special case for pre-2014 partial payments where the delivered amount is unavailable.
After that, add another helper method to the `TWaXLFrame` class:
@@ -324,7 +324,7 @@ As before, you can test your wallet app with your own test account if you use th
**Full code for this step:** {% repo-link path="_code-samples/build-a-desktop-wallet/py/5_send_xrp.py" %}`5_send_xrp.py`{% /repo-link %}
-Until now, you've made the app able to view data from the ledger, and it's capable of showing the transactions an account has received. Now it's finally time to make the app capable of _sending_ transactions. For now, you can stick to sending [direct XRP payments](../../../concepts/payment-types/direct-xrp-payments.md) because there are more complexities involved in sending [issued tokens](../../../concepts/tokens/index.md).
+Until now, you've made the app able to view data from the ledger, and it's capable of showing the transactions an account has received. Now it's finally time to make the app capable of _sending_ transactions. For now, you can stick to sending [direct XRP payments](../../concepts/payment-types/direct-xrp-payments.md) because there are more complexities involved in sending [issued tokens](../../concepts/tokens/index.md).
The main window gets a new "Send XRP" button:
@@ -346,13 +346,13 @@ Add a new method to the `XRPLMonitorThread` class to send an XRP payment based o
{% code-snippet file="/_code-samples/build-a-desktop-wallet/py/5_send_xrp.py" from="def send_xrp" before="class AutoGridBagSizer" language="py" /%}
-In this flow, the app sends the transaction without waiting for it to be confirmed by the consensus process. You should be careful to mark any results from the initial submission as "pending" or "tentative" since the actual result of the transaction [isn't final until it's confirmed](../../../concepts/transactions/finality-of-results/index.md). Since the app is also subscribed to the account's transactions, it automatically gets notified when the transaction is confirmed.
+In this flow, the app sends the transaction without waiting for it to be confirmed by the consensus process. You should be careful to mark any results from the initial submission as "pending" or "tentative" since the actual result of the transaction [isn't final until it's confirmed](../../concepts/transactions/finality-of-results/index.md). Since the app is also subscribed to the account's transactions, it automatically gets notified when the transaction is confirmed.
Now, create a custom dialog for the user to input the necessary details for the payment:
{% code-snippet file="/_code-samples/build-a-desktop-wallet/py/5_send_xrp.py" from="class SendXRPDialog" before="def on_to_edit" language="py" /%}
-This subclass of [`wx.Dialog`](https://docs.wxpython.org/wx.Dialog.html) has several custom widgets, which are laid out using the `GridBagSizer` defined earlier. Notably, it has text boxes for the "To" address, the amount of XRP, and the [destination tag](../../../concepts/transactions/source-and-destination-tags.md) to use, if any. (A destination tag is kind of like a phone extension for an XRP Ledger address: for addresses owned by individuals, you don't need it, but if the destination address has many users then you need to specify it so that the destination knows which recipient you intended. It's common to need a destination tag to deposit at a cryptocurrency exchange.) The dialog also has **OK** and **Cancel** buttons, which automatically function to cancel or complete the dialog, although the "OK" button is labeled "Send" instead to make it clearer what the app does when the user clicks it.
+This subclass of [`wx.Dialog`](https://docs.wxpython.org/wx.Dialog.html) has several custom widgets, which are laid out using the `GridBagSizer` defined earlier. Notably, it has text boxes for the "To" address, the amount of XRP, and the [destination tag](../../concepts/transactions/source-and-destination-tags.md) to use, if any. (A destination tag is kind of like a phone extension for an XRP Ledger address: for addresses owned by individuals, you don't need it, but if the destination address has many users then you need to specify it so that the destination knows which recipient you intended. It's common to need a destination tag to deposit at a cryptocurrency exchange.) The dialog also has **OK** and **Cancel** buttons, which automatically function to cancel or complete the dialog, although the "OK" button is labeled "Send" instead to make it clearer what the app does when the user clicks it.
The `SendXRPDialog` constructor also binds two event handlers for when the user inputs text in the "to" and "destination tag" fields, so you need the definitions for those handlers to the same class. First, add `on_to_edit()`:
@@ -430,7 +430,7 @@ You can now use your wallet to send XRP! You can even fund an entirely new accou
3. Open your wallet app and provide a **Secret** (seed) value from an already-funded address, such as one you got from the [Testnet Faucet](/resources/dev-tools/xrp-faucets).
-4. Send at least the [base reserve](../../../concepts/accounts/reserves.md) (currently {% $env.PUBLIC_BASE_RESERVE %}) to the brand-new classic address you generated in the Python interpreter.
+4. Send at least the [base reserve](../../concepts/accounts/reserves.md) (currently {% $env.PUBLIC_BASE_RESERVE %}) to the brand-new classic address you generated in the Python interpreter.
5. Wait for the transaction to be confirmed, then close your wallet app.
@@ -445,7 +445,7 @@ You can now use your wallet to send XRP! You can even fund an entirely new accou
One of the biggest shortcomings of the wallet app from the previous step is that it doesn't provide a lot of protections or feedback for users to save them from human error and [DeFi scams](https://learn.xrpl.org/safeguarding-your-crypto-wallet-your-essential-checklist-against-defi-scams/). These sorts of protections are extra important when dealing with the cryptocurrency space, because decentralized systems like the XRP Ledger don't have an admin or support team you can ask to cancel or refund a payment if you made a mistake such as sending it to the wrong address. This step shows how to add some checks on destination addresses to warn the user before sending.
-One type of check you can make is to verify the domain name associated with an XRP Ledger address; this is called [account domain verification](../../../references/xrp-ledger-toml.md#account-verification). When an account's domain is verified, you could show it like this:
+One type of check you can make is to verify the domain name associated with an XRP Ledger address; this is called [account domain verification](../../references/xrp-ledger-toml.md#account-verification). When an account's domain is verified, you could show it like this:

@@ -467,7 +467,7 @@ In the `XRPLMonitorThread` class, add a new `check_destination()` method to chec
This code uses [`xrpl.asyncio.account.get_account_info()`](https://xrpl-py.readthedocs.io/en/stable/source/xrpl.asyncio.account.html#xrpl.asyncio.account.get_account_info) to look up the account in the ledger; unlike using the client's `request()` method, `get_account_info()` raises an exception if the account is not found.
-If the account _does_ exist, the code checks for the [`lsfDisallowXRP` flag](../../../references/protocol/ledger-data/ledger-entry-types/accountroot.md#accountroot-flags). Note that this is an `lsf` (ledger state flag) value because this is an object from the ledger state data; these are different than the flag values the [AccountSet transaction][] uses to configure the same settings.
+If the account _does_ exist, the code checks for the [`lsfDisallowXRP` flag](../../references/protocol/ledger-data/ledger-entry-types/accountroot.md#accountroot-flags). Note that this is an `lsf` (ledger state flag) value because this is an object from the ledger state data; these are different than the flag values the [AccountSet transaction][] uses to configure the same settings.
Finally, the code decodes the account's `Domain` field, if present, and performs domain verification using the method imported above.
@@ -522,7 +522,7 @@ Finally, calculate the maximum amount the user can send and provide it to the Se
{% code-snippet file="/_code-samples/build-a-desktop-wallet/py/6_verification_and_polish.py" from="xrp_bal = Decimal" before="dlg.CenterOnScreen()" language="py" /%}
-The formula this code uses to calculate the maximum amount the user can send is the account's XRP balance, minus its [reserve](../../../concepts/accounts/reserves.md) and minus the [transaction cost](../../../concepts/transactions/transaction-cost.md). The calculation uses the `Decimal` class to avoid rounding errors, but ultimately it has to be converted down to a `float` because that's what wxPython's [`wx.SpinCtrlDouble`](https://docs.wxpython.org/wx.SpinCtrlDouble.html) accepts for minimum and maximum values. Still there is less opportunity for floating-point rounding errors to occur if the conversion happens _after_ the other calculations.
+The formula this code uses to calculate the maximum amount the user can send is the account's XRP balance, minus its [reserve](../../concepts/accounts/reserves.md) and minus the [transaction cost](../../concepts/transactions/transaction-cost.md). The calculation uses the `Decimal` class to avoid rounding errors, but ultimately it has to be converted down to a `float` because that's what wxPython's [`wx.SpinCtrlDouble`](https://docs.wxpython.org/wx.SpinCtrlDouble.html) accepts for minimum and maximum values. Still there is less opportunity for floating-point rounding errors to occur if the conversion happens _after_ the other calculations.
Test your wallet app the same way you did in the previous steps. To test domain verification, try entering the following addresses in the "To" box of the Send XRP dialog:
@@ -546,10 +546,10 @@ To test X-addresses, try the following addresses:
Now that you have a functional wallet, you can take it in several new directions. The following are a few ideas:
-- You could support more of the XRP Ledger's [transaction types](../../../references/protocol/transactions/types/index.md) including [tokens](../../../concepts/tokens/index.md) and [cross-currency payments](../../../concepts/payment-types/cross-currency-payments.md)
+- You could support more of the XRP Ledger's [transaction types](../../references/protocol/transactions/types/index.md) including [tokens](../../concepts/tokens/index.md) and [cross-currency payments](../../concepts/payment-types/cross-currency-payments.md)
- Example code for displaying token balances and other objects: {% repo-link path="_code-samples/build-a-desktop-wallet/py/7_owned_objects.py" %}`7_owned_objects.py`{% /repo-link %}
-- Allow the user to trade in the [decentralized exchange](../../../concepts/tokens/decentralized-exchange/index.md)
+- Allow the user to trade in the [decentralized exchange](../../concepts/tokens/decentralized-exchange/index.md)
- Add a way to request payments, such as with QR codes or URIs that open in your wallet.
-- Support better account security including [regular key pairs](../../../concepts/accounts/cryptographic-keys.md#regular-key-pair) or [multi-signing](../../../concepts/accounts/multi-signing.md).
+- Support better account security including [regular key pairs](../../concepts/accounts/cryptographic-keys.md#regular-key-pair) or [multi-signing](../../concepts/accounts/multi-signing.md).
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/javascript/build-apps/credential-issuing-service.md b/docs/tutorials/sample-apps/credential-issuing-service-in-javascript.md
similarity index 92%
rename from docs/tutorials/javascript/build-apps/credential-issuing-service.md
rename to docs/tutorials/sample-apps/credential-issuing-service-in-javascript.md
index 71bfdd6af1..5c2bb090b7 100644
--- a/docs/tutorials/javascript/build-apps/credential-issuing-service.md
+++ b/docs/tutorials/sample-apps/credential-issuing-service-in-javascript.md
@@ -7,7 +7,7 @@ seo:
_(Requires the Credentials amendment. {% not-enabled /%})_
-This tutorial demonstrates how to build and use a microservice that issues [Credentials](../../../concepts/decentralized-storage/credentials.md) on the XRP Ledger, in the form of a RESTlike API, using the [Express](https://expressjs.com/) framework for Node.js.
+This tutorial demonstrates how to build and use a microservice that issues [Credentials](../../concepts/decentralized-storage/credentials.md) on the XRP Ledger, in the form of a RESTlike API, using the [Express](https://expressjs.com/) framework for Node.js.
## Prerequisites
@@ -15,7 +15,7 @@ This tutorial demonstrates how to build and use a microservice that issues [Cred
To complete this tutorial, you should meet the following guidelines:
- You have [Node.js](https://nodejs.org/en/download/) v18 or higher installed.
-- You are somewhat familiar with modern JavaScript programming and have completed the [Get Started Using JavaScript tutorial](./get-started.md).
+- You are somewhat familiar with modern JavaScript programming and have completed the [Get Started Using JavaScript tutorial](../get-started/get-started-javascript.md).
- You have some understanding of the XRP Ledger, its capabilities, and of cryptocurrency in general. Ideally you have completed the [Basic XRPL guide](https://learn.xrpl.org/).
@@ -57,7 +57,7 @@ The other files contain helper code that is used by one or both tools.
### 1. Get Accounts
-To use the credential issuing service, you need two accounts on the Devnet, where the Credentials amendment is already enabled. Go to the [XRP Faucets page](../../../../resources/dev-tools/xrp-faucets.page.tsx) and select **Devnet**. Then, click the button to Generate credentials, saving the key pair (address and secret), twice. You will use one of these accounts as a **credential issuer** and the other account as the **credential subject** (holder), so make a note of which is which.
+To use the credential issuing service, you need two accounts on the Devnet, where the Credentials amendment is already enabled. Go to the [XRP Faucets page](../../../resources/dev-tools/xrp-faucets.page.tsx) and select **Devnet**. Then, click the button to Generate credentials, saving the key pair (address and secret), twice. You will use one of these accounts as a **credential issuer** and the other account as the **credential subject** (holder), so make a note of which is which.
### 2. Start Issuer Service
@@ -285,7 +285,7 @@ Next, it creates the Express app:
{% code-snippet file="/_code-samples/issue-credentials/js/issuer_service.js" language="js" from="// Define Express app" before="// POST /credential" /%}
-After that come the definitions for the three API methods, starting with `POST /credential`. Users call this method to request a credential from the service. This method parses the request body as JSON and validates it. If this succeeds, it uses the data to fill out a `CredentialCreate` transaction. Finally, it checks the transaction's [result](../../../references/protocol/transactions/transaction-results/index.md) to decide which HTTP response code to use:
+After that come the definitions for the three API methods, starting with `POST /credential`. Users call this method to request a credential from the service. This method parses the request body as JSON and validates it. If this succeeds, it uses the data to fill out a `CredentialCreate` transaction. Finally, it checks the transaction's [result](../../references/protocol/transactions/transaction-results/index.md) to decide which HTTP response code to use:
{% code-snippet file="/_code-samples/issue-credentials/js/issuer_service.js" language="js" from="// POST /credential" before="// GET /admin/credential" /%}
@@ -309,7 +309,7 @@ Finally, the code runs the `main()` function:
This file implements lookup of Credentials. Both the issuer code and the subject code use this function to look up their own credentials.
-This code performs [pagination using markers](../../../references/http-websocket-apis/api-conventions/markers-and-pagination.md) to get all the results from the ledger. It also filters results based on the issuer/subject account, so that lookup by issuer, for example, doesn't include credentials that someone else issued _to_ the issuer account. Finally, it can optionally check the accepted status of the Credentials and only include ones that are or aren't accepted.
+This code performs [pagination using markers](../../references/http-websocket-apis/api-conventions/markers-and-pagination.md) to get all the results from the ledger. It also filters results based on the issuer/subject account, so that lookup by issuer, for example, doesn't include credentials that someone else issued _to_ the issuer account. Finally, it can optionally check the accepted status of the Credentials and only include ones that are or aren't accepted.
{% code-snippet file="/_code-samples/issue-credentials/js/look_up_credentials.js" language="js" /%}
@@ -357,10 +357,10 @@ Using this service as a base, you can extend the service with more features, suc
Alternatively, you can use credentials to for various purposes, such as:
- Define a [Permissioned Domain](/docs/concepts/tokens/decentralized-exchange/permissioned-domains) that uses your credentials to grant access to features on the XRP Ledger.
-- [Verify credentials](../compliance/verify-credential.md) manually to grant access to services that exist off-ledger.
+- [Verify credentials](../compliance-features/verify-credentials-javascript.md) manually to grant access to services that exist off-ledger.
## See Also
-- [Python: Build a Credential Issuing Service](../../python/build-apps/credential-issuing-service.md)
+- [Python: Build a Credential Issuing Service](../sample-apps/credential-issuing-service-in-javascript.md)
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/python/build-apps/credential-issuing-service.md b/docs/tutorials/sample-apps/credential-issuing-service-in-python.md
similarity index 94%
rename from docs/tutorials/python/build-apps/credential-issuing-service.md
rename to docs/tutorials/sample-apps/credential-issuing-service-in-python.md
index 4dc00cc95e..12683a4a46 100644
--- a/docs/tutorials/python/build-apps/credential-issuing-service.md
+++ b/docs/tutorials/sample-apps/credential-issuing-service-in-python.md
@@ -5,7 +5,7 @@ seo:
# Build a Credential Issuing Service
_(Requires the Credentials amendment. {% not-enabled /%})_
-This tutorial demonstrates how to build and use a microservice that issues [Credentials](../../../concepts/decentralized-storage/credentials.md) on the XRP Ledger, in the form of a RESTlike API, using the [Flask](https://flask.palletsprojects.com/) framework for Python.
+This tutorial demonstrates how to build and use a microservice that issues [Credentials](../../concepts/decentralized-storage/credentials.md) on the XRP Ledger, in the form of a RESTlike API, using the [Flask](https://flask.palletsprojects.com/) framework for Python.
## Setup
@@ -47,7 +47,7 @@ The other files contain helper code that is used by one or both tools.
### 1. Get Accounts
-To use the credential issuing service, you need two accounts on the Devnet, where the Credentials amendment is already enabled. Go to the [XRP Faucets page](../../../../resources/dev-tools/xrp-faucets.page.tsx) and select **Devnet**. Then, click the button to Generate credentials, saving the key pair (address and secret), twice. You will use one of these accounts as a **credential issuer** and the other account as the **credential subject** (holder), so make a note of which is which.
+To use the credential issuing service, you need two accounts on the Devnet, where the Credentials amendment is already enabled. Go to the [XRP Faucets page](../../../resources/dev-tools/xrp-faucets.page.tsx) and select **Devnet**. Then, click the button to Generate credentials, saving the key pair (address and secret), twice. You will use one of these accounts as a **credential issuer** and the other account as the **credential subject** (holder), so make a note of which is which.
### 2. Start Issuer Service
@@ -268,7 +268,7 @@ Next, it creates the Flask app:
{% code-snippet file="/_code-samples/issue-credentials/py/issuer_service.py" language="py" from="# Define Flask app" before="# Method for users" /%}
-After that come the definitions for the three API methods, starting with `POST /credential`. Users call this method to request a credential from the service. This method parses the request body as JSON and instantiates a `CredentialRequest` object—one of the data models defined in `credential_model.py`. If this succeeds, it uses the data to fill out a CredentialCreate transaction. Finally, it checks the transaction's [result code](../../../references/protocol/transactions/transaction-results/index.md) to decide which HTTP response code to use:
+After that come the definitions for the three API methods, starting with `POST /credential`. Users call this method to request a credential from the service. This method parses the request body as JSON and instantiates a `CredentialRequest` object—one of the data models defined in `credential_model.py`. If this succeeds, it uses the data to fill out a CredentialCreate transaction. Finally, it checks the transaction's [result code](../../references/protocol/transactions/transaction-results/index.md) to decide which HTTP response code to use:
{% code-snippet file="/_code-samples/issue-credentials/py/issuer_service.py" language="py" from="# Method for users to request a credential from the service" before="# Method for admins to look up all credentials issued" /%}
@@ -288,7 +288,7 @@ Finally, the file ends by adding error handlers for a variety of errors that can
This file implements lookup of Credentials. Both the issuer code and the subject code use this function to look up their own credentials.
-This code performs [pagination using markers](../../../references/http-websocket-apis/api-conventions/markers-and-pagination.md) to get all the results from the ledger. It also filters results based on the issuer/subject account, so that lookup by issuer, for example, doesn't include credentials that someone else issued _to_ the issuer account. Finally, it can optionally check the accepted status of the Credentials and only include ones that are or aren't accepted.
+This code performs [pagination using markers](../../references/http-websocket-apis/api-conventions/markers-and-pagination.md) to get all the results from the ledger. It also filters results based on the issuer/subject account, so that lookup by issuer, for example, doesn't include credentials that someone else issued _to_ the issuer account. Finally, it can optionally check the accepted status of the Credentials and only include ones that are or aren't accepted.
{% code-snippet file="/_code-samples/issue-credentials/py/look_up_credentials.py" language="py" /%}
@@ -352,6 +352,6 @@ Using this service as a base, you can extend the service with more features, suc
Alternatively, you can use credentials to for various purposes, such as:
- Define a [Permissioned Domain](/docs/concepts/tokens/decentralized-exchange/permissioned-domains) that uses your credentials to grant access to features on the XRP Ledger.
-- [Verify credentials](../compliance/verify-credential.md) manually to grant access to services that exist off-ledger.
+- [Verify credentials](../compliance-features/verify-credentials-in-python.md) manually to grant access to services that exist off-ledger.
{% raw-partial file="/docs/_snippets/common-links.md" /%}
diff --git a/docs/tutorials/javascript/send-payments/sending-mpts.md b/docs/tutorials/tokens/sending-mpts-in-javascript.md
similarity index 96%
rename from docs/tutorials/javascript/send-payments/sending-mpts.md
rename to docs/tutorials/tokens/sending-mpts-in-javascript.md
index 8f8cc549e6..f0ac934fab 100644
--- a/docs/tutorials/javascript/send-payments/sending-mpts.md
+++ b/docs/tutorials/tokens/sending-mpts-in-javascript.md
@@ -15,15 +15,15 @@ Once an account receives an MPT, it can send the MPT to another account, provide
## Send MPT Utility
-The Send MPT utility lets you create an account, authorize it to receive a specific MPT issuance, then send it the authorized MPT from an issuer or holder account. (You can issue an MPT using the [MPT Generator](../../../use-cases/tokenization/creating-an-asset-backed-multi-purpose-token.md) utility.)
+The Send MPT utility lets you create an account, authorize it to receive a specific MPT issuance, then send it the authorized MPT from an issuer or holder account. (You can issue an MPT using the [MPT Generator](../../use-cases/tokenization/creating-an-asset-backed-multi-purpose-token.md) utility.)
-[](../../../img/mt-send-mpt-0-empty-form.png)
+[](../../img/mt-send-mpt-0-empty-form.png)
-You can download a [standalone version of the MPT Sender](../../../../_code-samples/mpt-sender/send-mpt.zip) as sample code.
+You can download a [standalone version of the MPT Sender](../../../_code-samples/mpt-sender/send-mpt.zip) as sample code.
## Get Accounts
-To send an MPT, you need the **Seed** value for the MPT issuer to retrieve its account, then you need either a new account or an account seed for the target account. You can use the [MPT Generator](../../../use-cases/tokenization/creating-an-asset-backed-multi-purpose-token.md) to create a new MPT for transfer.
+To send an MPT, you need the **Seed** value for the MPT issuer to retrieve its account, then you need either a new account or an account seed for the target account. You can use the [MPT Generator](../../use-cases/tokenization/creating-an-asset-backed-multi-purpose-token.md) to create a new MPT for transfer.
To get the accounts:
@@ -31,13 +31,13 @@ To get the accounts:
2. Choose your ledger instance (**Devnet** or **Testnet**).
3. If you used the MPT Generator:
1. Paste the gathered info in the **Result** field.
- [](../../../img/mt-send-mpt-1-gathered-info.png)
+ [](../../img/mt-send-mpt-1-gathered-info.png)
2. Cut and paste the MPT Issuance ID to the **MPT Issuance ID** field.
3. Click **Distribute Account Info** to populate the **Account 1** fields.
If you did not use the MPT Generator, enter the **Account 1 Name**, **Account 1 Address**, **Account 1 Seed**, and **MPT Issuance ID** in the corresponding fields.)
4. Click **Get New Account 2**, or use a seed to **Get Account 2 from Seed**.
5. Optionally, add the **Account 2 Name**, an arbitrary human-readable name that helps to differentiate the accounts.
-[](../../../img/mt-send-mpt-2-account-2.png)
+[](../../img/mt-send-mpt-2-account-2.png)
## Authorize MPT
@@ -48,7 +48,7 @@ To authorize Account 2 to accept MPTs:
1. Click the **Account 2** radio button.
2. Enter an **Amount**, the maximum number of MPTs the account will accept.
2. Click **Authorize MPTs**.
-[](../../../img/mt-send-mpt-2-authorize-mpt.png)
+[](../../img/mt-send-mpt-2-authorize-mpt.png)
## Send MPT
@@ -59,7 +59,7 @@ To send an MPT:
2. Enter an **Amount** of MPTs to send.
3. Enter the **Destination** (likely the value in the **Account 2 Address** field, but it can be any account on the same ledger instance).
4. Click **Send MPT**.
-[](../../../img/mt-send-mpt-3-send-mpt.png)
+[](../../img/mt-send-mpt-3-send-mpt.png)
## Get MPTs
@@ -67,11 +67,11 @@ To verify receipt of the MPTs:
1. Click the **Account 2** radio button.
2. Click **Get MPTs**.
-[](../../../img/mt-send-mpt-4-get-mpts.png)
+[](../../img/mt-send-mpt-4-get-mpts.png)
# Code Walkthrough
-You can download a [standalone version of the MPT Sender](../../../../_code-samples/mpt-sender/send-mpt.zip) as sample code.
+You can download a [standalone version of the MPT Sender](../../../_code-samples/mpt-sender/send-mpt.zip) as sample code.
## send-mpt.js
diff --git a/docs/use-cases/defi/algorithmic-trading.md b/docs/use-cases/defi/algorithmic-trading.md
index bb9387a8b7..1800682664 100644
--- a/docs/use-cases/defi/algorithmic-trading.md
+++ b/docs/use-cases/defi/algorithmic-trading.md
@@ -72,7 +72,7 @@ The legal requirements for trading on a blockchain vary by jurisdiction. In many
### Placing Trades
-Buying and selling _fungible_ tokens and XRP within the XRP Ledger's decentralized exchange typically involves sending [OfferCreate transactions](../../references/protocol/transactions/types/offercreate.md). For a detailed walkthrough of the code and technical steps to place a trade this way, see [Trade in the Decentralized Exchange](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md). It is also possible to exchange currencies using the [Payment transaction type](../../references/protocol/transactions/types/payment.md). You could send a [cross-currency payment](../../concepts/payment-types/cross-currency-payments.md) to another user or even send it back to yourself, using a long [path](../../concepts/tokens/fungible-tokens/paths.md) to link arbitrage opportunities together into a single operation.
+Buying and selling _fungible_ tokens and XRP within the XRP Ledger's decentralized exchange typically involves sending [OfferCreate transactions](../../references/protocol/transactions/types/offercreate.md). For a detailed walkthrough of the code and technical steps to place a trade this way, see [Trade in the Decentralized Exchange](../../tutorials/dex/trade-in-the-decentralized-exchange.md). It is also possible to exchange currencies using the [Payment transaction type](../../references/protocol/transactions/types/payment.md). You could send a [cross-currency payment](../../concepts/payment-types/cross-currency-payments.md) to another user or even send it back to yourself, using a long [path](../../concepts/tokens/fungible-tokens/paths.md) to link arbitrage opportunities together into a single operation.
Non-fungible tokens work differently; for the code and technical steps to trade NFTs, see [Transfer NFTokens Using JavaScript](../../tutorials/javascript/nfts/transfer-nfts.md).
@@ -89,7 +89,7 @@ To give yourself as much time as possible to react to profit-taking opportunitie
The XRP Ledger natively supports Automated Market Makers (AMMs) that work alongside the existing central limit order based (CLOB) decentralized exchange. AMMs are an important factor in trading on the XRP Ledger. You can read more at the following links:
- [Automated Market Makers](../../concepts/tokens/decentralized-exchange/automated-market-makers.md)
-- [Use the AMM Auction Slot for Lower Fees](/docs/tutorials/javascript/amm/trade-with-auction-slot.md)
+- [Use the AMM Auction Slot for Lower Fees](/docs/tutorials/dex/trade-with-auction-slot-in-javascript.md)
- [XLS-30 Specification](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0030-automated-market-maker#readme)
## Further Reading
diff --git a/docs/use-cases/defi/enable-compliance-focused-cross-currency-payments-using-a-permissioned-dex.md b/docs/use-cases/defi/enable-compliance-focused-cross-currency-payments-using-a-permissioned-dex.md
index 0190a831d8..753226b881 100644
--- a/docs/use-cases/defi/enable-compliance-focused-cross-currency-payments-using-a-permissioned-dex.md
+++ b/docs/use-cases/defi/enable-compliance-focused-cross-currency-payments-using-a-permissioned-dex.md
@@ -65,7 +65,7 @@ The credential issuer performs identity verification or compliance checks, and i
For more information, see:
- [Credentials](../../concepts/decentralized-storage/credentials.md)
-- [Become a Credential Issuing Service](../../tutorials/python/build-apps/credential-issuing-service.md)
+- Become a Credential Issuing Service in [JavaScript](../../tutorials/sample-apps/credential-issuing-service-in-javascript.md) and [Python](../../tutorials/sample-apps/credential-issuing-service-in-python.md)
{% admonition type="success" name="Tip" %}
If you run a credential issuing service, don't forget to issue yourself a credential too, so that you can access the permissioned DEX.
@@ -76,7 +76,7 @@ If you run a credential issuing service, don't forget to issue yourself a creden
A permissioned domain uses credentials to control who can access a permissioned DEX. As the owner of the permissioned domain, you control which credentials it accepts. A domain can accept one or several credentials, so that anyone who holds any of the specified credentials gains access. For more information, see:
- [Permissioned Domains](../../concepts/tokens/decentralized-exchange/permissioned-domains.md)
-- [Create Permissioned Domains](../../tutorials/javascript/compliance/create-permissioned-domains.md)
+- [Create Permissioned Domains](../../tutorials/compliance-features/create-permissioned-domains-in-javascript.md)
### Use the permissioned DEX to facilitate payments and offers
@@ -90,4 +90,4 @@ For more information, see:
- [Permissioned DEXes](../../concepts/tokens/decentralized-exchange/permissioned-dexes.md)
- [Cross-Currency Payments](../../concepts/payment-types/cross-currency-payments.md)
- [Offers](../../concepts/tokens/decentralized-exchange/offers.md)
-- [Trade in the Decentralized Exchange](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md)
+- [Trade in the Decentralized Exchange](../../tutorials/dex/trade-in-the-decentralized-exchange.md)
diff --git a/docs/use-cases/defi/list-xrp-as-an-exchange.md b/docs/use-cases/defi/list-xrp-as-an-exchange.md
index cde50cdc74..0ac43a63c0 100644
--- a/docs/use-cases/defi/list-xrp-as-an-exchange.md
+++ b/docs/use-cases/defi/list-xrp-as-an-exchange.md
@@ -614,9 +614,9 @@ Off-Ledger Balances
- [Source and Destination Tags](../../concepts/transactions/source-and-destination-tags.md)
- **Tutorials:**
- [Install `rippled`](../../infrastructure/installation/index.md)
- - [Send XRP](../../tutorials/how-tos/send-xrp.md)
+ - [Send XRP](../../tutorials/payments/send-xrp.md)
- [Set Up Secure Signing](../../concepts/transactions/secure-signing.md)
- - [Monitor Incoming Payments with WebSocket](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
+ - [Monitor Incoming Payments with WebSocket](../../tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
- **References:**
- [Payment transaction][]
- [account_info method][]
diff --git a/docs/use-cases/payments/smart-contracts-uc.md b/docs/use-cases/payments/smart-contracts-uc.md
index 60f34949e0..d3e0942530 100644
--- a/docs/use-cases/payments/smart-contracts-uc.md
+++ b/docs/use-cases/payments/smart-contracts-uc.md
@@ -43,7 +43,7 @@ The oracle gives the condition hex value to the escrow creator, enabling them to
After the oracle's programming detects the conditions are met, it gives the fulfillment hex value to the escrow recipient. It does nothing else after this point, such as finishing the escrow. The recipient of the escrow would most likely finish the escrow.
-See: [Send a conditional escrow](../../tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-conditional-escrow.md).
+See: [Send a conditional escrow](../../tutorials/payments/send-a-conditional-escrow.md).
## Examples
diff --git a/docs/use-cases/tokenization/authorized-minter.md b/docs/use-cases/tokenization/authorized-minter.md
index 7e94e180bd..5853dea020 100644
--- a/docs/use-cases/tokenization/authorized-minter.md
+++ b/docs/use-cases/tokenization/authorized-minter.md
@@ -75,7 +75,7 @@ The most straightforward payment for XRPL NFTs is XRP. For examples of selling a

-For trade in other currencies, you can leverage the DEX to accept and convert issued currencies of all kinds. See [Trade in the Decentralized Exchange](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange).
+For trade in other currencies, you can leverage the DEX to accept and convert issued currencies of all kinds. See [Trade in the Decentralized Exchange](../../tutorials/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange).
## Indexing NFTs
diff --git a/docs/use-cases/tokenization/creating-an-asset-backed-multi-purpose-token.md b/docs/use-cases/tokenization/creating-an-asset-backed-multi-purpose-token.md
index 6451e3df5a..38f2e5cf00 100644
--- a/docs/use-cases/tokenization/creating-an-asset-backed-multi-purpose-token.md
+++ b/docs/use-cases/tokenization/creating-an-asset-backed-multi-purpose-token.md
@@ -477,7 +477,7 @@ Follow the link and scroll down to find the `MPTokenIssuanceCreate` transaction

-Click **Gather MPT Information** to copy the account information and MPT Issuance ID to the result field. Copy the information and save it to send the MPT to another account as shown in [Sending MPTs](../../tutorials/javascript/send-payments/sending-mpts.md).
+Click **Gather MPT Information** to copy the account information and MPT Issuance ID to the result field. Copy the information and save it to send the MPT to another account as shown in [Sending MPTs](../../tutorials/tokens/sending-mpts-in-javascript.md).

diff --git a/docs/use-cases/tokenization/digital-artist.md b/docs/use-cases/tokenization/digital-artist.md
index b69fe0b785..448369d6e3 100644
--- a/docs/use-cases/tokenization/digital-artist.md
+++ b/docs/use-cases/tokenization/digital-artist.md
@@ -69,7 +69,7 @@ The most straightforward payment for XRPL NFTs is XRP. For examples of selling a

-For trade in other currencies, you can leverage the DEX to accept and convert issued currencies of all kinds. See [Trade in the Decentralized Exchange](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange).
+For trade in other currencies, you can leverage the DEX to accept and convert issued currencies of all kinds. See [Trade in the Decentralized Exchange](../../tutorials/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange).
## Indexing NFTs
diff --git a/docs/use-cases/tokenization/nft-mkt-overview.md b/docs/use-cases/tokenization/nft-mkt-overview.md
index 7165dc82fe..f0fae679a7 100644
--- a/docs/use-cases/tokenization/nft-mkt-overview.md
+++ b/docs/use-cases/tokenization/nft-mkt-overview.md
@@ -111,7 +111,7 @@ The most straightforward payment for XRPL NFTs is XRP. For examples of selling a

-For trade in other currencies, you can leverage the DEX to accept and convert issued currencies of all kinds. See [Trade in the Decentralized Exchange](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange).
+For trade in other currencies, you can leverage the DEX to accept and convert issued currencies of all kinds. See [Trade in the Decentralized Exchange](../../tutorials/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange).