Skip to content

fix(rippled): switch to xrpllabsofficial image + isolate from mainnet UNL#11

Merged
LeJamon merged 2 commits into
XRPL-Commons:mainfrom
RomThpt:fix/sync-rippled-image-clean
Jun 4, 2026
Merged

fix(rippled): switch to xrpllabsofficial image + isolate from mainnet UNL#11
LeJamon merged 2 commits into
XRPL-Commons:mainfrom
RomThpt:fix/sync-rippled-image-clean

Conversation

@RomThpt

@RomThpt RomThpt commented May 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Stacks on top of #10. Brings the canonical `rippled→rippled` sync sub-test to green and cleans up rippled's behaviour in a closed test network.

Why the previous rippled image was painful

`rippleci/rippled:develop` is a CI dev build that:

  • loads `vl.ripple.com` / `vl.xrplf.org` (the mainnet validator UNL) by default → hundreds of `is_trusted: 0` validation messages from real mainnet validators flood our 2-node test consensus log
  • carries the compiled-in PeerFinder bootcache so rippled aggressively tries real mainnet IPs (3.77.5.186, 35.158.172.184, …)
  • a tx submitted with `tesSUCCESS` ended up stranded in open ledger because the local consensus circle was never able to close cleanly under that noise

Changes

  1. Base image → `xrpllabsofficial/xrpld:latest` (3.1.2 stable). Debian based, runs as root, ships rippled release binaries. Smaller, faster to pull, predictable in a closed test net.
  2. Empty `[validator_list_sites]` and `[validator_list_keys]` sections in `rippled.cfg` so rippled trusts only what's in `validators.txt` — i.e. the keys hive uploaded.
  3. Retry `account_info` on the late joiner. rippled returns `noNetwork` while `server_state == connected` (validations seen but state not yet replayed). The previous code failed `account_info` immediately after `WaitForLedger` returned, racing rippled's catchup. Retry up to 120s; rxrpl answers on first call so the loop is a no-op for it.

Result on `--client rxrpl,rippled` (4 sub-tests)

Test Before After
`initial=rxrpl late=rxrpl`
`initial=rxrpl late=rippled` ❌ (separate issue: rippled catch-up from rxrpl UNL)
`initial=rippled late=rxrpl`
`initial=rippled late=rippled` ✅ — the canonical homogeneous case is now green, account state verified

3/4 sub-tests pass. The remaining failure is rippled-side catch-up from a non-rippled UNL — needs follow-up investigation, likely on the rippled side.

Test plan

  • `go build ./simulators/sync/` clean
  • `docker build clients/rippled/` builds successfully on arm64 (via Rosetta)
  • `./bin/xrpl-hive --sim sync --client rxrpl` (single impl) still PASS
  • `./bin/xrpl-hive --sim sync --client rxrpl,rippled` reports 4 sub-tests, 3 pass / 1 fail (the cross-impl rippled-catchup-from-rxrpl-UNL case)
  • verified rippled log shows only `is_trusted: 1` validations from the 2 configured validators (no more mainnet noise)

RomThpt and others added 2 commits May 6, 2026 16:47
The rippleci/rippled:develop image was a CI dev build that loads the
mainnet validator UNL (vl.ripple.com / vl.xrplf.org) by default. In a
private test network this surfaced as:
  - hundreds of `is_trusted: 0` validation messages from real mainnet
    validators flooding the consensus log
  - PeerFinder bootcache trying real mainnet IPs (3.77.5.186 etc.)
  - tx submitted with tesSUCCESS getting stranded in open ledger
    because the local consensus circle never closed cleanly

Three changes:

1. Base image -> `xrpllabsofficial/xrpld:latest` (3.1.2 stable). Debian
   based, runs as root, ships rippled release binaries. Smaller, faster
   to pull, and behaves predictably in a closed test net.

2. Empty `[validator_list_sites]` and `[validator_list_keys]` sections
   in rippled.cfg. Without these, rippled fetches the mainnet UNL on
   boot. With them empty, rippled trusts only what's in
   validators.txt — i.e. the keys hive uploaded.

3. Retry `account_info` on the late joiner. rippled returns
   `noNetwork` while `server_state == connected` (validations seen but
   state not yet replayed). The previous test failed `account_info`
   immediately after `WaitForLedger` returned, racing rippled's
   catchup. Retry up to 120s; rxrpl answers on first call so the loop
   is a no-op for it.

Result on `--client rxrpl,rippled` (4 sub-tests):
  initial=rxrpl   late=rxrpl     PASS
  initial=rxrpl   late=rippled   FAIL  (rippled catch-up from rxrpl
                                        UNL — separate issue)
  initial=rippled late=rxrpl     PASS  (cross-impl signal)
  initial=rippled late=rippled   PASS  (canonical homogeneous case
                                        now green)

3/4 sub-tests pass. The remaining failure is rippled-side catchup
from a non-rippled-validated UNL and needs follow-up investigation.
@LeJamon LeJamon merged commit b0fa3e1 into XRPL-Commons:main Jun 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants