Skip to content

Commit 1bd8c9b

Browse files
authored
Merge pull request #3008 from XRPLF/rippled-2.4.0
2.4.0 Release Notes and Doc Updates
2 parents 057436e + c3deed4 commit 1bd8c9b

File tree

38 files changed

+1176
-33
lines changed

38 files changed

+1176
-33
lines changed

blog/2025/rippled-2.4.0.md

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
---
2+
category: 2025
3+
date: 2025-03-06
4+
seo:
5+
title: Introducing XRP Ledger version 2.4.0
6+
description: rippled version 2.4.0 is now available. This version introduces new features and stability fixes.
7+
labels:
8+
- rippled Release Notes
9+
markdown:
10+
editPage:
11+
hide: true
12+
---
13+
# Introducing XRP Ledger version 2.4.0
14+
15+
Version 2.4.0 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release adds new features and bug fixes, and introduces these amendments:
16+
17+
- `PermissionedDomains`
18+
- `DeepFreeze`
19+
- `DynamicNFT`
20+
- `fixFrozenLPTokenTransfer`
21+
- `fixInvalidTxFlags`
22+
23+
24+
## Notable Updates: New Public Key Provided by the new XRPL Foundation
25+
26+
Following the recent announcement regarding the [move to the new XRPL Foundation](./move-to-the-new-xrpl-foundation-commences.md), the XRPL Foundation members have been working diligently to facilitate a smooth transition of the Unique Node List (UNL) from the old XRPL Foundation to the new XRPL Foundation.
27+
28+
There are two key goals driving this transition:
29+
- Ensure continued network participation and avoid potential downtime.
30+
- Allow for a staged migration with minimal impact on validators and node operators.
31+
32+
Keeping these goals in mind, a new subdomain, **unl.xrplf.org**, has been introduced alongside the existing list at **vl.xrplf.org**. This approach allows for a staged migration without modifying the key for the current UNL list. Eventually, vl.xrplf.org will be fully deprecated and replaced by unl.xrplf.org.
33+
34+
In `rippled` release 2.4.0, the `validators-example.txt` file has been updated to include the new public key published by the new XRPL Foundation.
35+
36+
Further information on the transition will be shared by the XRPL Foundation in the near future.
37+
38+
39+
## Action Required
40+
41+
If you run an XRP Ledger server, upgrade to version 2.4.0 as soon as possible to ensure service continuity.
42+
43+
Additionally, new amendments are now open for voting according to the XRP Ledger's [amendment process](../../docs/concepts/networks-and-servers/amendments.md), which enables protocol changes following two weeks of >80% support from trusted validators. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
44+
45+
46+
## Install / Upgrade
47+
48+
On supported platforms, see the [instructions on installing or updating `rippled`](../../docs/infrastructure/installation/index.md).
49+
50+
| Package | SHA-256 |
51+
|:--------|:--------|
52+
| [RPM for Red Hat / CentOS (x86-64)](https://repos.ripple.com/repos/rippled-rpm/stable/rippled-2.4.0-1.el7.x86_64.rpm) | `f87f44005b84b35606413313f7414bfdf2bf09f01ce88bfe9fafc3ff75fd5199` |
53+
| [DEB for Ubuntu / Debian (x86-64)](https://repos.ripple.com/repos/rippled-deb/pool/stable/rippled_2.4.0-1_amd64.deb) | `a3df84ba3d21f7182a57c8ca11fb2fbd1707e5cf53112822e60aa89886d943ad` |
54+
| [Portable Builds (Linux x86-64)](https://github.com/XRPLF/rippled-portable-builds) | (Use signature verification) |
55+
56+
For other platforms, please [build from source](https://github.com/XRPLF/rippled/blob/master/BUILD.md). The most recent commit in the git log should be the change setting the version:
57+
58+
```text
59+
commit 2216e5a13f306d01baf34ef3a48966ecaf908ad6
60+
Author: Michael Legleux <mlegleux@ripple.com>
61+
Date: Wed Mar 5 11:48:16 2025 -0800
62+
63+
Set version to 2.4.0
64+
```
65+
66+
67+
## Full Changelog
68+
69+
### Amendments
70+
71+
The following amendments are open for voting with this release:
72+
73+
- **DynamicNFT (XLS-46)** - Adds the ability to mint mutable `NFToken` objects whose URI can be changed. ([#5048](https://github.com/XRPLF/rippled/pull/5048))
74+
- **PermissionedDomains (XLS-80)** - Adds Permissioned Domains, which act as part of broader systems on the XRP Ledger to restrict access to satisfy compliance rules. ([#5161](https://github.com/XRPLF/rippled/pull/5161))
75+
- **DeepFreeze (XLS-77)** - Adds the ability to deep freeze trust lines, enabling token issuers to block the transfer of assets for holders who have been deep frozen. ([#5187](https://github.com/XRPLF/rippled/pull/5187))
76+
- **fixFrozenLPTokenTransfer** - Prohibits the transfer of LP tokens when the associated liquidity pool contains at least one frozen asset. ([#5227](https://github.com/XRPLF/rippled/pull/5227))
77+
- **fixInvalidTxFlags** - Adds transaction flag checking for `CredentialCreate`, `CredentialAccept`, and `CredentialDelete` transactions. ([#5250](https://github.com/XRPLF/rippled/pull/5250))
78+
79+
80+
### New Features
81+
82+
- Added a new `simulate` API method to execute dry runs of transactions and see the simulated metadata. ([#5069](https://github.com/XRPLF/rippled/pull/5069), [#5265](https://github.com/XRPLF/rippled/pull/5265))
83+
- Added the ability to specify MPTs when defining assets in transactions. ([#5200](https://github.com/XRPLF/rippled/pull/5200))
84+
- Added a `state` alias for `ripple_state` in the `ledger_entry` API method. Also refactored `LedgerEntry.cpp` to make it easier to read. ([#5199](https://github.com/XRPLF/rippled/pull/5199))
85+
- Improved UNL security by enabling validators to set a minimum number of UNL publishers to agree on validators. ([#5112](https://github.com/XRPLF/rippled/pull/5112))
86+
- Updated the XRPL Foundation UNL keys. ([#5289](https://github.com/XRPLF/rippled/pull/5289))
87+
- Added a new XRPL Foundation subdomain to enable a staged migration without modifying the key for the current UNL list. ([#5326](https://github.com/XRPLF/rippled/pull/5326))
88+
- Added support to filter ledger entry types by their canonical names in the `ledger`, `ledger_data`, and `account_objects` API methods. ([#5271](https://github.com/XRPLF/rippled/pull/5271))
89+
- Added detailed logging for each validation and proposal received from the network. ([#5291](https://github.com/XRPLF/rippled/pull/5291))
90+
- Improved git commit hash lookups when checking the version of a `rippled` debug build. Also added git commit hash info when using the `server_info` API method on an admin connection. ([#5225](https://github.com/XRPLF/rippled/pull/5225))
91+
92+
93+
### Bug fixes
94+
95+
- Fixed an issue with overlapping data types in the `Expected` class. ([#5218](https://github.com/XRPLF/rippled/pull/5218))
96+
- Fixed an issue that prevented `rippled` from building on Windows with VS2022. ([#5197](https://github.com/XRPLF/rippled/pull/5197))
97+
- Fixed `server_definitions` prefixes. ([#5231](https://github.com/XRPLF/rippled/pull/5231))
98+
- Added missing dependency installations for generic MasOS runners. ([#5233](https://github.com/XRPLF/rippled/pull/5233))
99+
- Updated deprecated Github actions. ([#5241](https://github.com/XRPLF/rippled/pull/5241))
100+
- Fixed a failing assert scenario when submitting the `connect` admin RPC. ([#5235](https://github.com/XRPLF/rippled/pull/5235))
101+
- Fixed the levelization script to ignore single-line comments during dependency analysis. ([#5194](https://github.com/XRPLF/rippled/pull/5194))
102+
- Fixed the assert name used in `PermissionedDomainDelete`. ([#5245](https://github.com/XRPLF/rippled/pull/5245))
103+
- Fixed MacOS unit tests. ([#5196](https://github.com/XRPLF/rippled/pull/5196))
104+
- Fixed an issue with validators not accurately reflecting amendment votes. Also added debug logging of amendment votes. ([#5173](https://github.com/XRPLF/rippled/pull/5173), [#5312](https://github.com/XRPLF/rippled/pull/5312))
105+
- Fixed a potential issue with double-charging fees. ([#5269](https://github.com/XRPLF/rippled/pull/5269))
106+
- Removed the `new parent hash` assert and replaced it with a log message. ([#5313](https://github.com/XRPLF/rippled/pull/5313))
107+
- Fixed an issue that prevented previously-failed inbound ledgers to not be acquired if a new trusted proposal arrived. ([#5318](https://github.com/XRPLF/rippled/pull/5318))
108+
109+
110+
### Other Improvements
111+
112+
- Added unit tests for `AccountID` handling. ([#5174](https://github.com/XRPLF/rippled/pull/5174))
113+
- Added enforced levelization in `libxrpl` with CMake. ([#5199](https://github.com/XRPLF/rippled/pull/5111))
114+
- Updated `libxrpl` and all submodules to use the same compiler options. ([#5228](https://github.com/XRPLF/rippled/pull/5228))
115+
- Added Antithesis instrumentation. ([#5042](https://github.com/XRPLF/rippled/pull/5042), [#5213](https://github.com/XRPLF/rippled/pull/5213))
116+
- Added `rpcName` to the `LEDGER_ENTRY` macro to help prevent future bugs. ([#5202](https://github.com/XRPLF/rippled/pull/5202))
117+
- Updated the contribution guidelines to introduce a new workflow that avoids code freezes. Also added scripts that can be used by maintainers in branch management, and a CI job to check that code is consistent across the three main branches: `master`, `release`, and `develop`. ([#5215](https://github.com/XRPLF/rippled/pull/5215))
118+
- Added unit tests to check for caching issues fixed in `rippled 2.3.0`. ([#5242](https://github.com/XRPLF/rippled/pull/5242))
119+
- Cleaned up the API changelog. ([#5207](https://github.com/XRPLF/rippled/pull/5207))
120+
- Improved logs readability. ([#5251](https://github.com/XRPLF/rippled/pull/5251))
121+
- Updated Visual Studio CI to VS 2022, and added VS Debug builds. ([#5240](https://github.com/XRPLF/rippled/pull/5240))
122+
- Updated the `secp256k1` library to version 0.6.0. ([#5254](https://github.com/XRPLF/rippled/pull/5254))
123+
- Changed the `[port_peer]` parameter in `rippled` example config back to `51235`; also added the recommendation to use the default port of `2459` for new deployments. ([#5290](https://github.com/XRPLF/rippled/pull/5290), [#5299](https://github.com/XRPLF/rippled/pull/5299))
124+
- Improved CI management. ([#5268](https://github.com/XRPLF/rippled/pull/5268))
125+
- Updated the git commit message rules for contributors. ([#5283](https://github.com/XRPLF/rippled/pull/5283))
126+
- Fixed unnecessary `setCurrentThreadName` calls. ([#5280](https://github.com/XRPLF/rippled/pull/5280))
127+
- Added a check to prevent permissioned domains from being created in the event the Permissioned Domains amendement is enabled before the Credentials amendement. ([#5275](https://github.com/XRPLF/rippled/pull/5275))
128+
- Updated Conan dependencies. ([#5256](https://github.com/XRPLF/rippled/pull/5256))
129+
- Fixed minor typos in code comments. ([#5279](https://github.com/XRPLF/rippled/pull/5279))
130+
- Fixed incorrect build instructions. ([#5274](https://github.com/XRPLF/rippled/pull/5274))
131+
- Refactored `rotateWithLock()` to not hold a lock during callbacks. ([#5276](https://github.com/XRPLF/rippled/pull/5276))
132+
- Cleaned up debug logging by combining multiple data points into a single message. ([#5302](https://github.com/XRPLF/rippled/pull/5302))
133+
- Updated build flags to fix performance regressions. ([#5325](https://github.com/XRPLF/rippled/pull/5325))
134+
135+
136+
## Credits
137+
138+
The following people contributed directly to this release:
139+
140+
- Aanchal Malhotra <amalhotra@ripple.com>
141+
- Bart Thomee <11445373+bthomee@users.noreply.github.com>
142+
- Bronek Kozicki <brok@incorrekt.com>
143+
- code0xff <ian.jungyong.um@gmail.com>
144+
- Darius Tumas <tokeiito@tokeiito.eu>
145+
- David Fuelling <fuelling@ripple.com>
146+
- Donovan Hide <donovanhide@gmail.com>
147+
- Ed Hennis <ed@ripple.com>
148+
- Elliot Lee <github.public@intelliot.com>
149+
- Javier Romero <jromero@ripple.com>
150+
- Kenny Lei <klei@ripple.com>
151+
- Mark Travis <7728157+mtrippled@users.noreply.github.com>
152+
- Mayukha Vadari <mvadari@gmail.com>
153+
- Michael Legleux <mlegleux@ripple.com>
154+
- Oleksandr <115580134+oleks-rip@users.noreply.github.com>
155+
- Qi Zhao <qzhao@ripple.com>
156+
- Ramkumar Srirengaram Gunasegharan <rgunasegharan@ripple.com>
157+
- Shae Wang <swang@ripple.com>
158+
- Shawn Xie <shawnxie920@gmail.com>
159+
- Sophia Xie <sxie@ripple.com>
160+
- Vijay Khanna Raviraj <vraviraj@ripple.com>
161+
- Vladislav Vysokikh <vvysokikh@gmail.com>
162+
- Xun Zhao <xzhao@ripple.com>
163+
164+
165+
## Bug Bounties and Responsible Disclosures
166+
167+
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
168+
169+
To report a bug, please send a detailed report to: <bugs@xrpl.org>

blog/sidebars.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- group: '2025'
77
expanded: false
88
items:
9+
- page: 2025/rippled-2.4.0.md
910
- page: 2025/move-to-the-new-xrpl-foundation-commences.md
1011
- page: 2025/rippled-2.3.1.md
1112
- page: 2025/devnet-reset.md

docs/_snippets/common-links.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
[Clawback transaction]: /docs/references/protocol/transactions/types/clawback.md
7272
[Clawback transactions]: /docs/references/protocol/transactions/types/clawback.md
7373
[Clawbackトランザクション]: /docs/references/protocol/transactions/types/clawback.md
74+
[credentials]: /docs/concepts/decentralized-storage/credentials.md
7475
[Credentials amendment]: /resources/known-amendments.md#credentials
7576
[CredentialCreate transaction]: /docs/references/protocol/transactions/types/credentialcreate.md
7677
[CredentialCreate transactions]: /docs/references/protocol/transactions/types/credentialcreate.md
@@ -95,6 +96,7 @@
9596
[DID entry]: /docs/references/protocol/ledger-data/ledger-entry-types/did.md
9697
[DIDエントリ]: /docs/references/protocol/ledger-data/ledger-entry-types/did.md
9798
[DeletableAccounts amendment]: /resources/known-amendments.md#deletableaccounts
99+
[DeepFreeze amendment]: /resources/known-amendments.md#deepfreeze
98100
[DepositAuth amendment]: /resources/known-amendments.md#depositauth
99101
[DepositPreauth amendment]: /resources/known-amendments.md#depositpreauth
100102
[DepositPreauth entry]: /docs/references/protocol/transactions/types/depositpreauth.md
@@ -114,6 +116,7 @@
114116
[DirectoryNodeエントリ]: /docs/references/protocol/ledger-data/ledger-entry-types/directorynode.md
115117
[DirectoryNodeオブジェクト]: /docs/references/protocol/ledger-data/ledger-entry-types/directorynode.md
116118
[DisallowIncoming amendment]: /resources/known-amendments.md#disallowincoming
119+
[DynamicNFT amendment]: /resources/known-amendments.md#dynamicnft
117120
[EnableAmendment pseudo-transaction]: /docs/references/protocol/transactions/pseudo-transaction-types/enableamendment.md
118121
[EnableAmendment pseudo-transactions]: /docs/references/protocol/transactions/pseudo-transaction-types/enableamendment.md
119122
[EnableAmendment]: /docs/references/protocol/transactions/pseudo-transaction-types/enableamendment.md
@@ -240,6 +243,8 @@
240243
[PaymentChannelFundトランザクション]: /docs/references/protocol/transactions/types/paymentchannelfund.md
241244
[Payment]: /docs/references/protocol/transactions/types/payment.md
242245
[Paymentトランザクション]: /docs/references/protocol/transactions/types/payment.md
246+
[PermissionedDomains amendment]: /resources/known-amendments.md#permissioneddomains
247+
[permissioned domain]: /docs/concepts/tokens/decentralized-exchange/permissioned-domains.md
243248
[PriceOracle amendment]: /resources/known-amendments.md#priceoracle
244249
[RFC-1751]: https://tools.ietf.org/html/rfc1751
245250
[Reporting Mode]: /docs/concepts/networks-and-servers/rippled-server-modes.md#reporting-mode
@@ -273,6 +278,7 @@
273278
[Specifying Currency Amounts]: /docs/references/protocol/data-types/basic-data-types.md#specifying-currency-amounts
274279
[Specifying Ledgers]: /docs/references/protocol/data-types/basic-data-types.md#specifying-ledgers
275280
[Specifying Time]: /docs/references/protocol/data-types/basic-data-types.md#specifying-time
281+
[Specifying Without Amounts]: /docs/references/protocol/data-types/currency-formats.md#specifying-without-amounts
276282
[SusPay amendment]: /resources/known-amendments.md#suspay
277283
[TickSize amendment]: /resources/known-amendments.md#ticksize
278284
[Ticket entry]: /docs/references/protocol/ledger-data/ledger-entry-types/ticket.md
@@ -401,6 +407,8 @@
401407
[fixCheckThreading amendment]: /resources/known-amendments.md#fixcheckthreading
402408
[fixDisallowIncomingV1 amendment]: /resources/known-amendments.md#fixdisallowincomingv1
403409
[fixFillOrKill amendment]: /resources/known-amendments.md#fixfillorkill
410+
[fixFrozenLPTokenTransfer]: /resources/known-amendments.md#fixfrozenlptokentransfer
411+
[fixInvalidTxFlags amendment]: /resources/known-amendments.md#fixinvalidtxflags
404412
[fixMasterKeyAsRegularKey amendment]: /resources/known-amendments.md#fixmasterkeyasregularkey
405413
[fixNFTokenDirV1 amendment]: /resources/known-amendments.md#fixnftokendirv1
406414
[fixNFTokenPageLinks amendment]: /resources/known-amendments.md#fixnftokenpagelinks

docs/concepts/tokens/decentralized-exchange/automated-market-makers.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,35 @@ The AMM is designed so that an AMM's asset pool is empty if and only if the AMM
113113

114114
LP tokens use a special type of currency code in the 160-bit hexadecimal ["non-standard" format](../../../references/protocol/data-types/currency-formats.md#nonstandard-currency-codes). These codes have the first 8 bits `0x03`. The remainder of the code is a SHA-512 hash, truncated to the first 152 bits, of the two assets' currency codes and their issuers. (The assets are placed in a "canonical order" with the numerically lower currency+issuer pair first.) As a result, the LP tokens for a given asset pair's AMM have a predictable, consistent currency code.
115115

116+
### LP Token Freeze
117+
118+
If an LP token is associated with a liquidity pool that contains at least one frozen asset, the LP token is also frozen. This means:
119+
120+
1. The holder can't send the frozen LP token to other accounts.
121+
2. The holder can receive frozen LP tokens, but can't send them out (similar to frozen trust lines).
122+
123+
Frozen LP tokens affect the following transactions:
124+
125+
**Payment**
126+
127+
- An account can no longer send frozen LP tokens through direct payment.
128+
129+
**OfferCreate**
130+
131+
- Accounts are prohibited from creating offers that would sell frozen LP tokens.
132+
- Offers that contain frozen LP tokens cannot be consumed on the DEX.
133+
134+
**CheckCash**
135+
136+
- Cashing a check fails if it attempts to cash a frozen LP token from the sender.
137+
138+
**NFTokenCreateOffer**
139+
140+
- Buyers are prohibited from creating buy offers that use frozen LP tokens.
141+
142+
**NFTokenAcceptOffer**
143+
144+
- Buyers can't accept a sell offer if the offer requires the use of frozen LP tokens as payment.
116145

117146
## AMM and Trading Fees
118147

0 commit comments

Comments
 (0)