Version 3.3.0 of xrpld, the reference server implementation of the XRP Ledger protocol, is now available.
This release introduces several new amendments alongside bug fixes and build improvements. The new amendments are:
- BatchV1_1: Atomic batch transactions (XLS-56).
- ConfidentialTransfer: Privacy-preserving Multi-Purpose Token transfers (XLS-0096).
- DynamicMPT: Multi-Purpose Token properties that issuers can make permanently immutable (XLS-94).
- PermissionDelegationV1_1: Granular account permission delegation.
- Sponsor: Reserve and transaction sponsoring (XLS-68).
- fixCleanup3_3_0: A bundle of amendment-gated bug fixes.
It also retires the long-active Clawback, fixDisallowIncomingV1, fixInnerObjTemplate, fixNFTokenReserve, and fixUniversalNumber amendments, making them a permanent part of the protocol.
If you run an XRP Ledger server, upgrade to version 3.3.0 as soon as possible to ensure service continuity.
On supported platforms, see the instructions on installing or updating xrpld.
| Package | SHA-256 |
|---|---|
| RPM for Red Hat / CentOS (x86-64) | 41fbe458c5f9f5e7efabe57fd679a7992641ca3ccf27166daeda6c972963b477 |
| DEB for Ubuntu / Debian (x86-64) | d4e9a022741aed2eed1d70639310f90545b4592cc24b6c9aa6a37560d5efd2e0 |
For other platforms, please build from source. The most recent commit in the git log should be the change setting the version:
commit 00a178fb92ca49521b937ae1a99d863765ea8a90
Author: Ayaz Salikhov <[email protected]>
Date: Thu Aug 6 17:34:39 2026 +0100
chore: Bump version to 3.3.0- BatchV1_1: Adds the
Batchtransaction, which lets an account submit up to 8 inner transactions, enabling patterns such as atomic swaps. This amendment fixes and replaces the originalBatchamendment disabled in v3.1.1. (#6446) - ConfidentialTransfer: Adds private transfers for Multi-Purpose Tokens, using advanced cryptography (EC-ElGamal and ZKPs). Balances and transfer amounts remain verifiable on-ledger, while shielding the actual amounts from the public. (#5860)
- DynamicMPT: Extends Multi-Purpose Tokens by making specific properties mutable by default: the on-chain metadata, the transfer fee, and the ability to enable MPT issuance capability flags. (#7439)
- PermissionDelegationV1_1: Allows accounts to delegate some permissions to other accounts. This amendment replaces the original
PermissionDelegationamendment, fixing a critical bug discovered in the original implementation of the feature. (#6613) - Sponsor: Enables companies, token issuers, and other entities to subsidize transaction costs and reserve requirements for end users. Sponsors can co-sign transactions or pre-fund sponsorships, covering fees and reserves, while sponsees retain full control of their accounts and keys. (#5887)
- fixCleanup3_3_0: Bundles these fixes for the 3.3.0 release:
- Unifies freeze and deep freeze checks for transfers to and from pseudo-accounts in the
VaultDeposit,VaultWithdraw,AMMDeposit,AMMWithdraw,LoanBrokerCoverDeposit, andLoanBrokerCoverWithdrawtransactions. (#7382) - Changes
CheckCashandCheckCancelto reject an all-zeroCheckIDwithtemMALFORMEDduring preflight instead oftecNO_ENTRYduring processing. (#7685) - Fixes hybrid offers being removed from the open order book when the account that placed them loses access to the permissioned domain. (#6843)
- Fixes Automated Market Maker liquidity being included in quality estimates for permissioned DEX order books. (#6853)
- Changes
AMMWithdrawto returntecAMM_FAILEDinstead of dividing by zero for the oneEPricevalue at which the computation's denominator becomes zero. Without this amendment, the division throws and the transaction fails withtefEXCEPTION. (#6989) - Adds a precision loss check to
AMMDeposit,AMMWithdraw, andAMMClawbackwhen thefixAMMv1_3amendment is also enabled. - Changes the
ValidAMMinvariant to ensure an AMM can only be deleted by anAMMWithdraw,AMMClawback, orAMMDeletetransaction. (#7295) - Adds the
ObjectHasPseudoAccountinvariant, which checks that deleting a ledger entry backed by a pseudo-account also deletes that pseudo-account. (#7445) - Adds further precision and rounding fixes for Single Asset Vaults and the Lending Protocol.
- Changes transactions signed by a pseudo-account to fail with
tefBAD_AUTH. This check also takes effect if theLendingProtocolorBatchV1_1amendment is enabled. - Changes
CredentialCreateto reject a pseudo-account in theSubjectfield withtecPSEUDO_ACCOUNT. (d569f7d) - Changes
DepositPreauthto reject a pseudo-account in theAuthorizefield withtecPSEUDO_ACCOUNT. (a12ab04)
- Unifies freeze and deep freeze checks for transfers to and from pseudo-accounts in the
- The following amendments are retired:
- Added a
delegatefilter parameter to theaccount_txmethod. (#6126) - Packaged
validator-keysinside the server distribution. (3ad6ce2)
- Added a zero NFT offer ID check for
NFTokenCancelOffer. (#7391) - Disabled AMM creation using vault shares as a pool asset. (#7666)
- Rejected delegating permissions to pseudo-accounts. (#7597)
- Blocked delegated transactions from being queued. (#7640)
- Used trust line balance direction to validate IOU
PaymentMint/PaymentBurn. (#7584) - Strengthened
Clawbackinvariant checks for MPT balances. (#7285) - Moved
AMMInvariantweakInvariantChecklogic into the transaction. (#7032) - Added RPC validation checks on the
amm_infoaccountandamm_accountfields. (#7324) - Added an amendment sponsor for the
AccountRootsDeletedCleaninvariant. (#7801) - Documented and asserted that
afteris never null in invariants. (#7354) - Handled rounding just above
kMaxRepmore accurately. (#7389) - Improved
Numberaddition and subtraction rounding. (#7369) - Fixed the
Numbercomparison operator. (#7406) - Refactored
Batchtransaction IDs. (#7736) - Capped the number of untrusted validator manifests accepted per message and dropped oversized ones. This is the fix released in version 3.2.1. (#7925)
- Increased the validator manifest protocol message size cap and corrected manifest relay. (
54cfdda) - Bounded the untrusted validator manifest cache and reduced its cap. (
68a765d,c50edf5) - Rejected oversized validator manifests before decoding them. (
7877ee4) - Rejected oversized peer protocol ping messages. (
6c793ed) - Bounded and offloaded per-connection subscription cleanup. (
1dcaf4b) - Computed the validation suppression key over the canonical serialization. (
7d3611d) - Set request size limits and differential pricing for get-object-by-hash calls. (
e290005) - Charged the heavy-burden RPC fee in the
channel_verifymethod. (a5af6b4) - Corrected the transaction type check performed before reading
RawTransactions. (faca302) - Used a weighted median when aggregating close-time offsets. (
981c256) - Handled malformed ledger replay responses. (
4a9ee54) - Improved lookup performance when assembling ledger deltas. (
846369c) - Acquired a lock on
getClosedLedgerHash. (d60955e) - Re-stored nodes missing from both backends during
online_deleterotation. (#7763) - Allocated
TaggedCache::getKeys()memory outside of the lock. (#7567) - Fixed peer resource charges to always run on the peer's strand, so a
Dropdisposition now correctly disconnects the peer. (#7422) - Stopped creating a data directory for in-memory databases. (#7323)
- Disabled transaction invariants. (#7409)
- Added
[[maybe_unused]]tofix320Enabledforassert=OFFbuilds. (#7446) - Adjusted the
xrpldsystemd service to allow up to five minutes for graceful shutdown, restart only on failure, and reduced the auto-update randomized delay. (#7374) - Ensured
xrpldservice directories exist at startup. (#7565)
- Used
STLedgerEntrytype aliases instead ofstd::shared_ptr. (#7282) - Replaced
intr_ptr::SharedPtr<SHAMapTreeNode>withSHAMapTreeNodePtr. (#7396) - Used const function arguments where possible. (#7423)
- Used
std::moveandstd::string_viewwhere possible. (#7424) - Used
std::rangeswhere possible. (#7634) - Used
std::from_chars/std::to_charsfor JSON double parsing and formatting. (#7735) - Changed config section and key string literals into constants. (#7095)
- Introduced
XRPL_ASSERT_IFfor amendment-gated assertions. (#7378) - Cleaned up
tecobject deletion logic. (#6588) - Used dispatch instead of post. (#7438)
- Removed the
const_castinTaggedCache::canonicalize_replace_cache. (#5638) - Renamed keylet functions to more closely match the docs. (#7059)
- Unified the style for all Doxygen comments. (#7776)
- Removed redundant enable checks in confidential MPT transactions. (#7809)
- Moved the
jss.hinclude out ofIndexes.h. (#7799) - Deleted dead code. (#7718)
- Explicitly trimmed the heap after cache sweeps. (#6022)
- Cleaned up pong replies. (
5ab9574) - Dispatched
hasInvalidAmount()on type tag instead ofdynamic_cast. (#7402)
- Rewrote the build environment docs. (#7533)
- Fixed some comments to improve readability. (#7405)
- Added more information about pre-commit hooks and how to set them up. (#7802)
- Migrated resource and shamap Beast tests to GTest. (#7133)
- Migrated basics Beast tests to GTest. (#7136)
- Added a null-check unit test for
Oracle::aggregatePrice. (#7306) - Added a test for the permissioned domain sequence fix. (#7591)
- Added tests for
TMProofPathResponseandTMReplayDeltaResponseinvalid hash and key sizes. (#7593) - Added unit tests for IP address related functions. (#7744)
- Added JSON array size tests. (#7592)
- Added tests for the doxygen style check. (#7795)
- Published test changes held back from 3.1.3. (#7570)
- Suppressed invariant-failure logs in Vault and LoanBroker bug-regression tests. (#7379)
- Fixed
LCOV_EXCL_ENDtoLCOV_EXCL_STOP. (#7407)
- Adopted the C++23 standard. (#7431)
- Created a single test binary,
xrpl_tests. (#7327) - Added a
verify-headerstarget to clean up headers. (#7670) - Added a pragma-once checker. (#7580)
- Aligned
xrpldRPM packaging with the DEB package. (#7529) - Updated workflows and conan to use VS2026 and grpc 1.81.0. (#7550)
- Updated
mpt-cryptoto 1.0.2. (06a9b1b) - Uploaded codecov results for the whole XRPLF organization. (
bf65e5f) - Marked secp256k1 and mpt-crypto as transitive headers. (#7658)
- Switched to a new conan XRPLF remote. (#7622, #7638)
- Stopped reusing binaries between different C++ versions. (#7681)
- Fixed the unity build. (#7730)
- Disabled assertions on Release builds. (#7443)
- Ran sanitizers on release builds too. (#7527)
- Silenced UBSan diagnostics in the ubsan build config. (#7531)
- Made sanitizer flags a list in the profile instead of a string. (#7449)
- Redesigned the matrix configuration based on nix images. (#7385)
- Refactored build-related nix, docker, and workflow files. (#7408)
- Checked binaries separately from building them. (#7355)
- Patched binaries in nix-based images and tested in every distro. (#7376)
- Patched nix binaries in CMake. (#7539)
- Patched the conan recipe for nix so it can be used on macOS. (#7532)
- Removed the conan patch in nix. (#7534)
- Updated
flake.lockto allow conan with clang-22 support. (#7390) - Installed gcov, nettools, and cacert in nix images. (#7398)
- Fixed clang ASan include dirs in nix images and added curl and gnupg. (#7400)
- Improved sanitizer libs and added doxygen, dpkg, and rpm in nix. (#7403)
- Added
ghandfileto nix packages. (#7444) - Added ClangBuildAnalyzer to nix. (#7538)
- Added zip to nix images. (#7551)
- Added git-lfs to nix images. (#7561)
- Added graphviz to nix images. (#7566)
- Added protobuf dependencies to nix. (#7706)
- Added Rust to the nix docker image. (#7571)
- Added an
.envrcfor automatic devshell switching via direnv. (#7756) - Used the same compiler in the nix devshell as in CI. (#7751)
- Used new packaging images and stopped canceling develop builds. (#7417)
- Used the XRPLF/actions
build-multiarch-imageworkflow. (#7428) - Built and pushed docker images in forks too. (#7588)
- Launched
upload-conan-depson profile change. (#7442) - Made configurations launch on certain event types. (#7447)
- Ran the full matrix only on
Ready to mergeorFull CI buildlabeled PRs. (#7689) - Fixed workflow launch on matrix-unrelated labels. (#7812)
- Stopped running the conflict checker when a label is applied. (#7774)
- Checked that more tools are available. (#7600)
- Used macOS 26 Tahoe with apple-clang 21. (#7601)
- Updated clang-tidy to nix-based v22. (#7412)
- Used clang-tidy v22 new features. (#7427)
- Better determined when a full clang-tidy run is needed. (#7635)
- Made clang-tidy workflow adjustments to stay in sync with Clio. (#7563)
- Added a script to format clang-tidy output. (#7650)
- Ran
clang_tidy_checkwithpass_filenames: falsefrom pre-commit. (#7800) - Made clang-tidy happy on macOS. (#7701)
- Enabled groups of clang-tidy checks by default. (#7637)
- Enabled most bugprone clang-tidy checks. (#7643)
- Enabled most modernize clang-tidy checks. (#7664)
- Enabled most misc clang-tidy checks. (#7663)
- Enabled most cppcoreguidelines clang-tidy checks. (#7660)
- Enabled most performance clang-tidy checks. (#7727)
- Enabled most readability clang-tidy checks. (#7772)
- Enabled the
modernize-unary-static-assertclang-tidy check. (#7705) - Enabled the
modernize-use-autoclang-tidy check. (#7707) - Enabled the
modernize-avoid-bindclang-tidy check. (#7711) - Enabled the
modernize-use-constraintsclang-tidy check. (#7715) - Improved pre-commit hooks. (#7702)
- Added a pre-commit hook to check doxygen style. (#7794)
- Updated pre-commit hooks and actions. (#7686)
- Used multiple directories in the dependabot config. (#7413)
- Bumped
eps1lon/actions-label-merge-conflictfrom 3.0.3 to 3.1.0. (#7375) - Bumped
actions/checkoutfrom 6.0.2 to 6.0.3. (#7414) - Bumped
actions/checkoutfrom 6.0.3 to 7.0.0. (#7585) - Bumped
actions/setup-pythonfrom 6.2.0 to 6.3.0. (#7657) - Bumped
codecov/codecov-actionfrom 6.0.1 to 7.0.0. (#7426)
The following RippleX teams and GitHub users contributed to this release:
- RippleX Engineering
- RippleX Docs
- RippleX Product
- @Kassaking7
- @TimothyBanks
- @dangell7
- @marek-foss-neti
- @solunolab
We welcome reviews of the xrpld code and urge researchers to responsibly disclose any issues they may find.
For more information, see: