Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
6f8f0dc
feat: add Hash192 type to binary codec
e-desouza Feb 20, 2026
7d8b3a1
feat: add MPT transaction type enum variants
e-desouza Feb 20, 2026
b0fa264
feat: add MPTokenIssuanceCreate transaction model
e-desouza Feb 20, 2026
a47f631
feat: add MPTokenIssuanceDestroy transaction model
e-desouza Feb 20, 2026
ddb118c
feat: add MPTokenIssuanceSet transaction model
e-desouza Feb 20, 2026
a4d7a63
feat: add MPTokenAuthorize transaction model
e-desouza Feb 20, 2026
bbf00aa
feat: add MPToken and MPTokenIssuance ledger objects
e-desouza Feb 20, 2026
777cf98
feat: add binary codec encode/decode tests for MPT transactions
e-desouza Feb 20, 2026
e1fe796
style: fix module declaration order in transactions/mod.rs
e-desouza Mar 26, 2026
194dfb1
fix(binarycodec): correct test module paths and remove unresolved fix…
e-desouza Mar 28, 2026
866ce44
fix(binarycodec): gate tests on std and fix unused import in no_std b…
e-desouza Mar 28, 2026
ed35cce
fix: add asset_scale range validation to MPTokenIssuanceCreate
e-desouza Apr 3, 2026
d1d57da
fix: align MPToken/MPTokenIssuance field docs with xrpl.org, add inte…
e-desouza Apr 10, 2026
44cc257
fix: use FlagCollection::from in integration test to respect pub(crat…
e-desouza Apr 16, 2026
e1ccb15
ci: pin rippled Docker image and harden health check wait
e-desouza Apr 17, 2026
067db6f
test(mpt): let autofill compute fee and set required issuance flags
e-desouza Apr 20, 2026
0fa81dd
fix(mpt): address PR review findings on XLS-33 models
e-desouza Apr 20, 2026
498217b
test(ci): apply ci/pin-rippled-image xrpld changes on MPT feature branch
e-desouza Apr 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .ci-config/rippled.cfg → .ci-config/xrpld.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ small

[node_db]
type=NuDB
path=/var/lib/rippled/db/nudb
path=/var/lib/xrpld/db/nudb
advisory_delete=0

# How many ledgers do we want to keep (history)?
Expand All @@ -58,10 +58,10 @@ online_delete=256
256

[database_path]
/var/lib/rippled/db
/var/lib/xrpld/db

[debug_logfile]
/var/log/rippled/debug.log
/var/log/xrpld/debug.log

[network_id]
0
Expand Down
54 changes: 33 additions & 21 deletions .github/workflows/integration_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ on:
name: Integration Test

env:
RIPPLED_DOCKER_IMAGE: rippleci/rippled:develop
# rippled binary was renamed to xrpld; use the new image name.
# Tracks xrpl.js PR #3270 (https://github.com/XRPLF/xrpl.js/pull/3270).
XRPLD_DOCKER_IMAGE: rippleci/xrpld:develop

jobs:
integration_test:
Expand All @@ -22,29 +24,37 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Start rippled standalone
- name: Run xrpld in standalone mode
run: |
docker run --detach --rm \
-p 5005:5005 \
-p 6006:6006 \
--volume "${{ github.workspace }}/.ci-config/":"/etc/opt/ripple/" \
--name rippled-service \
--health-cmd="rippled server_info || exit 1" \
--health-interval=5s \
--health-retries=10 \
--health-timeout=2s \
--env GITHUB_ACTIONS=true \
--env CI=true \
--entrypoint bash \
${{ env.RIPPLED_DOCKER_IMAGE }} \
-c "mkdir -p /var/lib/rippled/db/ && rippled -a"
docker run \
--detach \
--rm \
--publish 5005:5005 \
--publish 6006:6006 \
--volume "${{ github.workspace }}/.ci-config/":"/etc/opt/xrpld/" \
--name xrpld-service \
${{ env.XRPLD_DOCKER_IMAGE }} --standalone

- name: Wait for rippled to be healthy
- name: Wait for xrpld to accept RPC
run: |
until docker inspect --format='{{.State.Health.Status}}' rippled-service | grep -q healthy; do
echo "Waiting for rippled to be ready..."
for i in $(seq 1 30); do
if ! docker ps -q -f name=xrpld-service | grep -q .; then
echo "Container exited unexpectedly"
docker logs xrpld-service 2>&1 || true
exit 1
fi
if curl -fsS -o /dev/null -X POST http://localhost:5005/ \
-H 'Content-Type: application/json' \
-d '{"method":"server_info","params":[{}]}'; then
echo "xrpld RPC ready (attempt $i)"
exit 0
fi
echo "Attempt $i/30: RPC not ready yet"
sleep 2
done
echo "Timed out waiting for xrpld RPC"
docker logs xrpld-service 2>&1 || true
exit 1

- uses: dtolnay/rust-toolchain@stable

Expand All @@ -64,6 +74,8 @@ jobs:
env:
RUST_BACKTRACE: 1

- name: Stop rippled
- name: Dump xrpld logs and stop container
if: always()
run: docker stop rippled-service
run: |
docker logs xrpld-service || true
docker stop xrpld-service || true
19 changes: 9 additions & 10 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ cargo clippy

### Running Tests

For integration tests, we use a `rippled` node in standalone mode to test xrpl-rust code against. To set this up, you can either configure and run `rippled` locally, or set up the Docker container `rippleci/rippled` by [following these instructions](#integration-tests). The latter will require you to [install Docker](https://docs.docker.com/get-docker/).
For integration tests, we use an `xrpld` node in standalone mode to test xrpl-rust code against. To set this up, you can either configure and run `xrpld` locally, or set up the Docker container `rippleci/xrpld` by [following these instructions](#integration-tests). The latter will require you to [install Docker](https://docs.docker.com/get-docker/).

#### Unit Tests

Expand All @@ -72,10 +72,10 @@ cargo test --release --no-default-features --features embassy-rt,core,utils,wall
From the `xrpl-rust` folder, run the following commands:

```bash
# Sets up the rippled standalone Docker container — skip if you already have it running
docker run -p 5005:5005 -p 6006:6006 --rm -it --name rippled_standalone \
--entrypoint bash rippleci/rippled:develop \
-c 'mkdir -p /var/lib/rippled/db/ && rippled -a'
# Sets up the xrpld standalone Docker container — skip if you already have it running
docker run -p 5005:5005 -p 6006:6006 --rm -it --name xrpld_standalone \
--volume "$PWD/.ci-config/:/etc/opt/xrpld/" \
rippleci/xrpld:develop --standalone
cargo test --release --features integration,std,json-rpc,helpers
```

Expand All @@ -90,11 +90,10 @@ Breaking down the `docker run` command:
- `-p 5005:5005 -p 6006:6006` exposes the HTTP JSON-RPC and WebSocket admin ports.
- `--rm` closes the container automatically when it exits.
- `-it` keeps stdin open so you can stop the node with Ctrl-C.
- `--name rippled_standalone` is an instance name for clarity.
- `--volume $PWD/.ci-config:/etc/opt/ripple/` mounts `rippled.cfg` so the node binds on `0.0.0.0` and is reachable from the host. It must be an absolute path, so we use `$PWD` instead of `./`.
- `rippleci/rippled` is an image that is regularly updated with the latest `rippled` releases.
- `--entrypoint bash rippleci/rippled:develop` manually overrides the entrypoint (for the latest version of rippled on the `develop` branch).
- `-c 'mkdir -p /var/lib/rippled/db/ && rippled -a'` starts `rippled` in standalone mode, where ledgers only close on demand.
- `--name xrpld_standalone` is an instance name for clarity.
- `--volume $PWD/.ci-config/:/etc/opt/xrpld/` mounts `xrpld.cfg` so the node binds on `0.0.0.0` and is reachable from the host. It must be an absolute path, so we use `$PWD` instead of `./`.
- `rippleci/xrpld` is an image that is regularly updated with the latest `xrpld` releases (the binary formerly known as `rippled`; see xrpl.js PR #3270).
- `--standalone` starts `xrpld` in standalone mode, where ledgers only close on demand.

**Notes**

Expand Down
15 changes: 9 additions & 6 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
version: "3"

services:
rippled:
image: rippleci/rippled:develop
xrpld:
image: rippleci/xrpld:develop
volumes:
- ./.ci-config:/etc/opt/ripple
- ./.ci-config:/etc/opt/xrpld
ports:
- "5005:5005"
- "6006:6006"
entrypoint: bash
command: -c "mkdir -p /var/lib/rippled/db/ && rippled -a"
command: ["--standalone"]
healthcheck:
test: ["CMD", "rippled", "server_info"]
test:
- CMD-SHELL
- >-
wget --quiet --tries=1 --post-data='{"method":"server_info","params":[{}]}'
--header="Content-Type: application/json" -O /dev/null http://localhost:5005/ || exit 1
interval: 5s
timeout: 2s
retries: 10
2 changes: 1 addition & 1 deletion src/asynch/clients/exceptions.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#[cfg(not(feature = "std"))]
#[cfg(all(not(feature = "std"), feature = "websocket"))]
use alloc::boxed::Box;
use thiserror_no_std::Error;

Expand Down
Loading
Loading