Releases: XRPLF/rippled
rippled (XRP Ledger server) Version 1.10.0
Version 1.10.0 of rippled
, the reference server implementation of the XRP Ledger protocol, is now available. This release introduces six new amendments, detailed below, and cleans up code to improve performance.
Sign Up for Future Release Announcements
Action Required
Six new amendments are now open for voting according to the XRP Ledger's amendment process, which enables protocol changes following two weeks of >80% support from trusted validators.
If you operate an XRP Ledger server, upgrade to version 1.10.0 by March 21 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
Install / Upgrade
On supported platforms, see the instructions on installing or updating rippled
.
New Amendments
-
featureImmediateOfferKilled
: Changes the response code of anOfferCreate
transaction with thetfImmediateOrCancel
flag to returntecKILLED
when no funds are moved. The previous return code oftecSUCCESS
was unintuitive. #4157 -
featureDisallowIncoming
: Enables an account to block incoming checks, payment channels, NFToken offers, and trust lines. #4336 -
featureXRPFees
: Simplifies transaction cost calculations to use XRP directly, rather than calculating indirectly in "fee units" and translating the results to XRP. Updates all instances of "fee units" in the protocol and ledger data to be drops of XRP instead. #4247- BREAKING CHANGE: If this amendment is enabled, the
fee_ref
field will be removed from the Ledger subscription stream, as it will no longer be relevant.
- BREAKING CHANGE: If this amendment is enabled, the
-
fixUniversalNumber
: Simplifies and unifies the code for decimal floating point math. In some cases, this provides slightly better accuracy than the previous code, resulting in calculations whose least significant digits are different than when calculated with the previous code. The different results may cause other edge case differences where precise calculations are used, such as ranking of offers or processing of payments that use several different paths. #4192 -
fixNonFungibleTokensV1_2
: This amendment is a combination of NFToken fixes. #4417 -
fixTrustLinesToSelf
: Trust lines must be between two different accounts, but two exceptions exist because of a bug that briefly existed. This amendment removes those trust lines. 69bb2be
Changelog
New Features and Improvements
-
Improve Handshake in the peer protocol: Switched to using a cryptographically secure PRNG for the Instance Cookie.
rippled
now uses hex encoding for theClosed-Ledger
andPrevious-Ledger
fields in the Handshake. Also added--newnodeid
and--nodeid
command line options. 5a15229 -
RPC tooBusy response now has 503 HTTP status code: Added ripplerpc 3.0, enabling RPC tooBusy responses to return relevant HTTP status codes. This is a non-breaking change that only applies to JSON-RPC when you include
"ripplerpc": "3.0"
in the request. #4143 -
Use the Conan package manager: Added a
conanfile.py
and Conan recipe for Snappy. Removed the RocksDB recipe from the repo; you can now get it from Conan Center. #4367, c2b03fe -
Update Build Instructions: Updated the build instructions to build with the Conan package manager and restructured info for easier comprehension. #4376, #4383
-
Revise CONTRIBUTING: Updated code contribution guidelines.
rippled
is an open source project and contributions are very welcome. #4382 -
Update documented pathfinding configuration defaults:
417cfc2
changed the default Path Finding configuration values, but missed updating the values documented in rippled-example.cfg. Updated those defaults and added recommended values for nodes that want to support advanced pathfinding. #4409 -
Remove gRPC code previously used for the Xpring SDK: Removed gRPC code used for the Xpring SDK. The gRPC API is also enabled locally by default in
rippled-example.cfg
. This API is used for Reporting Mode and Clio. 28f4cc7 -
Switch from C++17 to C++20: Updated
rippled
to use C++20. 92d35e5 -
Support for Boost 1.80.0:: 04ef885
-
Reduce default reserves to 10/2: Updated the hard-coded default reserves to match the current settings on Mainnet. #4329
-
Improve self-signed certificate generation: Improved speed and security of TLS certificate generation on fresh startup. 0ecfc7c
Bug Fixes
-
Update command-line usage help message: Added
manifest
andvalidator_info
to therippled
CLI usage statement. b88ed5a -
Work around gdb bug by changing a template parameter: Added a workaround for a bug in gdb, where unsigned template parameters caused issues with RTTI. #4332
-
Fix clang 15 warnings: #4325
-
Catch transaction deserialization error in doLedgerGrpc: Fixed an issue in the gRPC API, so
Clio
can extract ledger headers and state objects from specific transactions that can't be deserialized byrippled
code. #4323 -
Update dependency: gRPC: New Conan recipes broke the old version of gRPC, so the dependency was updated. #4407
-
Fix Doxygen workflow: Added options to build documentation that don't depend on the library dependencies of
rippled
. #4372 -
Don't try to read SLE with key 0 from the ledger: Fixed the
preclaim
function to check for 0 inNFTokenSellOffer
andNFTokenBuyOffer
before callingLedger::read
. This issue only affected debug builds. #4351 -
Update broken link to hosted Doxygen content: 5e1cb09
Code Cleanup
-
Prevent unnecessary
shared_ptr
copies by accepting a value inSHAMapInnerNode::setChild
: #4266 -
Release TaggedCache object memory outside the lock: 3726f8b
-
Rename SHAMapStoreImp::stopping() to healthWait(): 7e9e910
-
Improve wrapper around OpenSSL RAND: 7b3507b
-
Improve AccountID string conversion caching: Improved memory cache usage. e2eed96
-
Build the command map at compile time: 9aaa0df
-
Avoid unnecessary copying and dynamic memory allocations: d318ab6
-
Use constexpr to check memo validity: e67f905
-
Remove charUnHex: 83ac141
-
Remove deprecated AccountTxOld.cpp: ce64f7a
-
Remove const_cast usage: 23ce431
-
Remove inaccessible code paths and outdated data format wchar_t: 95fabd5
-
Improve move semantics in Expected: #4326
GitHub
The public source code repository for...
rippled (XRP Ledger server) Version 1.10.0-rc4
Version 1.10.0-rc4 (release candidate) of rippled
, the reference implementation of the XRP Ledger protocol is now available. The 1.10.0 release line introduces six new amendments:
fixTrustLinesToSelf
featureImmediateOfferKilled
featureDisallowIncoming
featureXRPFees
fixUniversalNumber
fixNonFungibleTokensV1_2
Information about these amendments can be found on Known Amendments.
rippled (XRP Ledger server) Version 1.9.4
Version 1.9.4 of rippled
, the reference implementation of the XRP Ledger protocol is now available. This release introduces an amendment that removes the ability for an NFT issuer to indicate that trust lines should be automatically created for royalty payments from secondary sales of NFTs, in response to a bug report that indicated how this functionality could be abused to mount a denial of service attack against the issuer.
Action Required
This release introduces a new amendment to the XRP Ledger protocol, fixRemoveNFTokenAutoTrustLine
to mitigate a potential denial-of-service attack against NFT issuers that minted NFTs and allowed secondary trading of those NFTs to create trust lines for any asset.
This amendment is open for voting according to the XRP Ledger's amendment process, which enables protocol changes following two weeks of >80% support from trusted validators.
If you operate an XRP Ledger server, then you should upgrade to version 1.9.4 within two weeks, to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
For more information about NFTs on the XRP Ledger, see NFT Conceptual Overview.
Install / Upgrade
On supported platforms, see the instructions on installing or updating rippled
.
Changelog
Contributions
The primary change in this release is the following bug fix:
- Introduce fixRemoveNFTokenAutoTrustLine amendment: Introduces the
fixRemoveNFTokenAutoTrustLine
amendment, which disables thetfTrustLine
flag, which a malicious attacker could exploit to mount denial-of-service attacks against NFT issuers that specified the flag on their NFTs. (#4301)
GitHub
The public source code repository for rippled
is hosted on GitHub at https://github.com/XRPLF/rippled.
We welcome all contributions and invite everyone to join the community of XRP Ledger developers and help us build the Internet of Value.
Credits
The following people contributed directly to this release:
- Scott Schurr [email protected]
- Howard Hinnant [email protected]
- Scott Determan [email protected]
- Ikko Ashimine [email protected]
rippled (XRP Ledger server) Version 1.9.3
Version 1.9.3 of rippled
, the reference server implementation of the XRP Ledger protocol is now available. This release corrects minor technical flaws with the code that loads configured amendment votes after a startup and the copy constructor of PublicKey
.
Install / Upgrade
On supported platforms, see the instructions on installing or updating rippled
.
Changelog
Contributions
This releases contains the following bug fixes:
- Change by-value to by-reference to persist vote: A minor technical flaw, caused by use of a copy instead of a reference, resulted in operator-configured "yes" votes to not be properly loaded after a restart. (#4256)
- Properly handle self-assignment of PublicKey: The
PublicKey
copy assignment operator mishandled the case where aPublicKey
would be assigned to itself, and could result in undefined behavior.
GitHub
The public source code repository for rippled
is hosted on GitHub at https://github.com/XRPLF/rippled.
We welcome contributions, big and small, and invite everyone to join the community of XRP Ledger developers and help us build the Internet of Value.
Credits
The following people contributed directly to this release:
- Howard Hinnant [email protected]
- Crypto Brad Garlinghouse [email protected]
- Wo Jake [email protected]
rippled (XRP Ledger server) Version 1.9.2
Version 1.9.2 of rippled
, the reference server implementation of the XRP Ledger protocol, is now available. This release includes several fixes and improvements, including a second new fix amendment to correct a bug in Non-Fungible Tokens (NFTs) code, a new API method for order book changes, less noisy logging, and other small fixes.
Action Required
This release introduces a two new amendments to the XRP Ledger protocol. The first, fixNFTokenNegOffer, fixes a bug in code associated with the NonFungibleTokensV1 amendment, originally introduced in version 1.9.0. The second, NonFungibleTokensV1_1, is a "roll-up" amendment that enables the NonFungibleTokensV1 feature plus the two fix amendments associated with it, fixNFTokenDirV1 and fixNFTokenNegOffer.
If you want to enable NFT code on the XRP Ledger Mainnet, you can vote in favor of only the NonFungibleTokensV1_1 amendment to support enabling the feature and fixes together, without risk that the unfixed NFT code may become enabled first.
These amendments are now open for voting according to the XRP Ledger's amendment process, which enables protocol changes following two weeks of >80% support from trusted validators.
If you operate an XRP Ledger server, then you should upgrade to version 1.9.2 within two weeks, to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
For more information about NFTs on the XRP Ledger, see NFT Conceptual Overview.
Install / Upgrade
On supported platforms, see the instructions on installing or updating rippled
.
Changelog
This release contains the following features and improvements.
- Introduce fixNFTokenNegOffer amendment. This amendment fixes a bug in the Non-Fungible Tokens (NFTs) functionality provided by the NonFungibleTokensV1 amendment (not currently enabled on Mainnet). The bug allowed users to place offers to buy tokens for negative amounts of money when using Brokered Mode. Anyone who accepted such an offer would transfer the token and pay money. This amendment explicitly disallows offers to buy or sell NFTs for negative amounts of money, and returns an appropriate error code. This also corrects the error code returned when placing offers to buy or sell NFTs for negative amounts in Direct Mode. (8266d9d)
- Introduce
NonFungibleTokensV1_1
amendment. This amendment encompasses three NFT-related amendments: the original NonFungibleTokensV1 amendment (from version 1.9.0), the fixNFTokenDirV1 amendment (from version 1.9.1), and the new fixNFTokenNegOffer amendment from this release. This amendment contains no changes other than enabling those three amendments together; this allows validators to vote in favor of only enabling the feature and fixes at the same time. (59326bb) - Handle invalid port numbers. If the user specifies a URL with an invalid port number, the server would silently attempt to use port 0 instead. Now it raises an error instead. This affects admin API methods and config file parameters for downloading history shards and specifying validator list sites. (#4213)
- Reduce log noisiness. Decreased the severity of benign log messages in several places: "addPathsForType" messages during regular operation, expected errors during unit tests, and missing optional documentation components when compiling from source. (#4178, #4166, #4180)
- Fix race condition in history shard implementation and support clang's ThreadSafetyAnalysis tool. Added build settings so that developers can use this feature of the clang compiler to analyze the code for correctness, and fix an error found by this tool, which was the source of rare crashes in unit tests. (#4188)
- Prevent crash when rotating a database with missing data. When rotating databases, a missing entry could cause the server to crash. While there should never be a missing database entry, this change keeps the server running by aborting database rotation. (#4182)
- Fix bitwise comparison in OfferCreate. Fixed an expression that incorrectly used a bitwise comparison for two boolean values rather than a true boolean comparison. The outcome of the two comparisons is equivalent, so this is not a transaction processing change, but the bitwise comparison relied on compilers to implicitly fix the expression. (#4183)
- Disable cluster timer when not in a cluster. Disabled a timer that was unused on servers not running in clustered mode. The functionality of clustered servers is unchanged. (#4173)
- Limit how often to process peer discovery messages. In the peer-to-peer network, servers periodically share IP addresses of their peers with each other to facilitate peer discovery. It is not necessary to process these types of messages too often; previously, the code tracked whether it needed to process new messages of this type but always processed them anyway. With this change, the server no longer processes peer discovery messages if it has done so recently. (#4202)
- Improve STVector256 deserialization. Optimized the processing of this data type in protocol messages. This data type is used in several types of ledger entry that are important for bookkeeping, including directory pages that track other ledger types, amendments tracking, and the ledger hashes history. (#4204)
- Fix and refactor spinlock code. The spinlock code, which protects the
SHAMapInnerNode
child lists, had a mistake that allowed the same child to be repeatedly locked under some circumstances. Fixed this bug and improved the spinlock code to make it easier to use correctly and easier to verify that the code works correctly. (#4201) - Improve comments and contributor documentation. Various minor documentation changes including some to reflect the fact that the source code repository is now owned by the XRP Ledger Foundation. (#4214, #4179, #4222)
- Introduces a new API book_changes to provide information in a format that is useful for building charts that highlight DEX activity at a per-ledger level. (#4212)
Contributions
GitHub
The public source code repository for rippled
is hosted on GitHub at https://github.com/ripple/rippled.
We welcome contributions, big and small, and invite everyone to join the community of XRP Ledger developers and help us build the Internet of Value.
Credits
The following people contributed directly to this release:
- Chenna Keshava B S [email protected]
- Ed Hennis [email protected]
- Ikko Ashimine [email protected]
- Nik Bougalis [email protected]
- Richard Holland [email protected]
- Scott Schurr [email protected]
- Scott Determan [email protected]
For a real-time view of all lifetime contributors, including links to the commits made by each, please visit the "Contributors" section of the GitHub repository: https://github.com/ripple/rippled/graphs/contributors.
rippled (XRP Ledger server) Version 1.9.1
Version 1.9.1 of rippled
, the reference server implementation of the XRP Ledger protocol, is now available. This release includes several important fixes, including a fix for a syncing issue from 1.9.0, a new fix amendment to correct a bug in the new Non-Fungible Tokens (NFTs) code, and a new amendment to allow multi-signing by up to 32 signers.
Action Required
This release introduces two new amendments to the XRP Ledger protocol. These amendments are now open for voting according to the XRP Ledger's amendment process, which enables protocol changes following two weeks of >80% support from trusted validators.
If you operate an XRP Ledger server, then you should upgrade to version 1.9.1 within two weeks, to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
The fixNFTokenDirV1 amendment fixes a bug in code associated with the NonFungibleTokensV1 amendment, so the fixNFTokenDirV1 amendment should be enabled first. All validator operators are encouraged to configure amendment voting to oppose the NonFungibleTokensV1 amendment until after the fixNFTokenDirV1 amendment has become enabled. For more information about NFTs on the XRP Ledger, see NFT Conceptual Overview.
The ExpandedSignerList amendment extends the ledger's built-in multi-signing functionality so that each list can contain up to 32 entries instead of the current limit of 8. Additionally, this amendment allows each signer to have an arbitrary 256-bit data field associated with it. This data can be used to identify the signer or provide other metadata that is useful for organizations, smart contracts, or other purposes.
Install / Upgrade
On supported platforms, see the instructions on installing or updating rippled
.
Changelog
This release contains the following features and improvements.
New Features and Amendments
-
Introduce fixNFTokenDirV1 Amendment - This amendment fixes an off-by-one error that occurred in some corner cases when determining which
NFTokenPage
anNFToken
object belongs on. It also adjusts the constraints ofNFTokenPage
invariant checks, so that certain error cases fail with a suitable error code such astecNO_SUITABLE_TOKEN_PAGE
instead of failing with atecINVARIANT_FAILED
error code. (#4155) -
Introduce ExpandedSignerList Amendment - This amendment expands the maximum signer list size to 32 entries and allows each signer to have an optional 256-bit
WalletLocator
field containing arbitrary data. (#4097) -
Pause online deletion rather than canceling it if the server fails health check - The server stops performing online deletion of old ledger history if the server fails its internal health check during this time. Online deletion can now resume after the server recovers, rather than having to start over. (#4139)
Bug Fixes and Performance Improvements
-
Fix performance issues introduced in 1.9.0 - Readjusts some parameters of the ledger acquisition engine to revert some changes introduced in 1.9.0 that had adverse effects on some systems, including causing some systems to fail to sync to the network. (#4152)
-
Improve Memory Efficiency of Path Finding - Finding paths for cross-currency payments is a resource-intensive operation. While that remains true, this fix improves memory usage of pathfinding by discarding trust line results that cannot be used before those results are fully loaded or cached. (#4111)
-
Fix incorrect CMake behavior on Windows when platform is unspecified or x64 - Fixes handling of platform selection when using the cmake-gui tool to build on Windows. The generator expects
Win64
but the GUI only providesx64
as an option, which raises an error. This fix only raises an error if the platform isWin32
instead, allowing the generation of solution files to succeed. (#4150) -
Fix test failures with newer MSVC compilers on Windows - Fixes some cases where the API handler code used string pointer comparisons, which may not work correctly with some versions of the MSVC compiler. (#4149)
-
Update minimum Boost version to 1.71.0 - This release is compatible with Boost library versions 1.71.0 through 1.77.0. The build configuration and documentation have been updated to reflect this. (#4134)
-
Fix unit test failures for DatabaseDownloader - Increases a timeout in the
DatabaseDownloader
code and adjusts unit tests so that the code does not return spurious failures, and more data is logged if it does fail. (#4021) -
Refactor relational database interface - Improves code comments, naming, and organization of the module that interfaces with relational databases (such as the SQLite database used for tracking transaction history). (#3965)
Contributions
GitHub
The public source code repository for rippled
is hosted on GitHub at https://github.com/ripple/rippled.
We welcome contributions, big and small, and invite everyone to join the community of XRP Ledger developers and help us build the Internet of Value.
Credits
The following people contributed directly to this release:
- Devon White [email protected]
- Ed Hennis [email protected]
- Gregory Popovitch [email protected]
- Mark Travis [email protected]
- Manoj Doshi [email protected]
- Nik Bougalis [email protected]
- Richard Holland [email protected]
- Scott Schurr [email protected]
For a real-time view of all lifetime contributors, including links to the commits made by each, please visit the "Contributors" section of the GitHub repository: https://github.com/ripple/rippled/graphs/contributors.
We welcome external contributions and are excited to see the broader XRP Ledger community continue to grow and thrive.
rippled (XRP Ledger server) Version 1.9.0
Version 1.9.0
This is the 1.9.0 release of rippled
, the reference implementation of the XRP Ledger protocol. This release brings several features and improvements.
New and Improved Features
-
Introduce NFT support (XLS-20): This release introduces support for non-fungible tokens, currently available to the developer community for broader review and testing. Developers can create applications that allow users to mint, transfer, and ultimately burn (if desired) NFTs on the XRP Ledger. You can try out the new NFT transactions using the nft-devnet. Note that some fields and error codes from earlier releases of the supporting code have been refactored for this release, shown in the Code Refactoring section, below. (70779f)
-
Simplify the Job Queue: This is a refactor aimed at cleaning up and simplifying the existing job queue. Currently, all jobs are canceled at the same time and in the same way, so this commit removes the unnecessary per-job cancellation token. (#3656)
-
Optimize trust line caching: The existing trust line caching code was suboptimal in that it stored redundant information, pinned SLEs into memory, and required multiple memory allocations per cached object. This commit eliminates redundant data, reduces the size of cached objects and unpinning SLEs from memory, and uses value types to avoid the need for
std::shared_ptr
. As a result of these changes, the effective size of a cached object includes the overhead of the memory allocator, and thestd::shared_ptr
should be reduced by at least 64 bytes. This is significant, as there can easily be tens of millions of these objects. (4d5459) -
Incremental improvements to pathfinding memory usage: This commit aborts background pathfinding when closed or disconnected, exits the pathfinding job thread if there are no requests left, does not create the path find a job if there are no requests, and refactors to remove the circular dependency between InfoSub and PathRequest. (#4111)
-
Improve deterministic transaction sorting in TxQ: This commit ensures that transactions with the same fee level are sorted by TxID XORed with the parent ledger hash, the TxQ is re-sorted after every ledger, and attempts to future-proof the TxQ tie-breaking test. (#4077)
-
Improve stop signaling for Application: (34ca45)
-
Eliminate SHAMapInnerNode lock contention: The
SHAMapInnerNode
class had a global mutex to protect the array of node children. Profiling suggested that around 4% of all attempts to lock the global would block. This commit removes that global mutex, and replaces it with a new per-node 16-way spinlock (implemented so as not to affect the size of an inner node object), effectively eliminating the lock contention. (1b9387) -
Improve ledger-fetching logic: When fetching ledgers, the existing code would isolate the peer that sent the most useful responses, and issue follow-up queries only to that peer. This commit increases the query aggressiveness, and changes the mechanism used to select which peers to issue follow-up queries to so as to more evenly spread the load among those peers that provided useful responses. (48803a)
-
Simplify and improve order book tracking: The order book tracking code would use
std::shared_ptr
to track the lifetime of objects. This commit changes the logic to eliminate the overhead ofstd::shared_ptr
by using value types, resulting in significant memory savings. (b9903b) -
Negative cache support for node store: This commit allows the cache to service requests for nodes that were previously looked up but not found, reducing the need to perform I/O in several common scenarios. (3eb8aa)
-
Improve asynchronous database handlers: This commit optimizes the way asynchronous node store operations are processed, both by reducing the number of times locks are held and by minimizing the number of memory allocations and data copying. (6faaa9)
-
Cleanup AcceptedLedger and AcceptedLedgerTx: This commit modernizes the
AcceptedLedger
andAcceptedLedgerTx
classes, reduces their memory footprint, and reduces unnecessary dynamic memory allocations. (8f5868)
Code Refactoring
This release includes name changes in the NFToken API for SFields, RPC return labels, and error codes for clarity and consistency. To refactor your code, migrate the names of these items to the new names as listed below.
SField
name changes:
TokenTaxon -> NFTokenTaxon
MintedTokens -> MintedNFTokens
BurnedTokens -> BurnedNFTokens
TokenID -> NFTokenID
TokenOffers -> NFTokenOffers
BrokerFee -> NFTokenBrokerFee
Minter -> NFTokenMinter
NonFungibleToken -> NFToken
NonFungibleTokens -> NFTokens
BuyOffer -> NFTokenBuyOffer
SellOffer -> NFTokenSellOffer
OfferNode -> NFTokenOfferNode
RPC return labels
tokenid -> nft_id
index -> nft_offer_index
Error codes
temBAD_TRANSFER_FEE -> temBAD_NFTOKEN_TRANSFER_FEE
tefTOKEN_IS_NOT_TRANSFERABLE -> tefNFTOKEN_IS_NOT_TRANSFERABLE
tecNO_SUITABLE_PAGE -> tecNO_SUITABLE_NFTOKEN_PAGE
tecBUY_SELL_MISMATCH -> tecNFTOKEN_BUY_SELL_MISMATCH
tecOFFER_TYPE_MISMATCH -> tecNFTOKEN_OFFER_TYPE_MISMATCH
tecCANT_ACCEPT_OWN_OFFER -> tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
Bug Fixes
- Fix deletion of orphan node store directories: Orphaned node store directories should only be deleted if the proper node store directories are confirmed to exist. 06e87e
rippled (XRP Ledger server) Version 1.8.5
Version 1.8.5
This is the 1.8.5 release of rippled
, the reference implementation of the XRP Ledger protocol. This release includes fixes and updates for stability and security, and improvements to build scripts. There are no user-facing API or protocol changes in this release.
Bug Fixes
This release contains the following bug fixes and under-the-hood improvements:
-
Correct TaggedPointer move constructor: Fixes a bug in unused code for the TaggedPointer class. The old code would fail if a caller explicitly tried to remove a child that is not actually part of the node. (61389a8)
-
Ensure protocol buffer prerequisites are present: The build scripts and packages now properly handle Protobuf packages and various packages. Prior to this change, building on Ubuntu 21.10 Impish Indri would fail unless the
libprotoc-dev
package was installed. (b7e0306) -
Improve handling of endpoints during peer discovery. This hardens and improves handling of incoming messages on the peer protocol. (289bc0a)
-
Run tests on updated linux distros: Test builds now run on Rocky Linux 8, Fedora 34 and 35, Ubuntu 18, 20, and 22, and Debian 9, 10, and 11. (a9ee802)
-
Avoid dereferencing empty optional in ReportingETL: Fixes a bug in Reporting Mode that could dereference an empty optional value when throwing an error. (5b085a7)
-
Correctly add GIT_COMMIT_HASH into version string: When building the server from a non-tagged release, the build files now add the commit ID in a way that follows the semantic-versioning standard, and correctly handle the case where the commit hash ID cannot be retrieved. (d23d37f)
-
Update RocksDB to version 6.27.3: Updates the version of RocksDB included in the server from 6.7.3 (which was released on 2020-03-18) to 6.27.3 (released 2021-12-10). (c5dc00a)
rippled (XRP Ledger server) Version 1.8.4
Version 1.8.4
This is the 1.8.4 release of rippled
, the reference implementation of the XRP Ledger protocol.
This release corrects a technical flaw introduced with 1.8.3 that may result in failures if the newly-introduced 'fast loading' is enabled. The release also adjusts default parameters used to configure the pathfinding engine to reduce resource usage.
Bug Fixes
-
Adjust mutex scope in
walkMapParallel
: This commit corrects a technical flaw introduced with commit 7c12f01 that would result in undefined behavior if the server operator configured their server to use the 'fast loading' mechanism introduced with 1.8.3. -
Adjust pathfinding configuration defaults: This commit adjusts the default configuration of the pathfinding engine, to account for the size of the XRP Ledger mainnet. Unless explicitly overriden, the changes mean that pathfinding operations will return fewer, shallower paths than previous releases.
Version 1.8.3
This is the 1.8.3 release of rippled
, the reference implementation of the XRP Ledger protocol.
This release implements changes that improve the syncing performance of peers on the network, adds countermeasures to several routines involving LZ4 to defend against CVE-2021-3520, corrects a minor technical flaw that would result in the server not using a cache for nodestore operations, and adjusts tunable values to optimize disk I/O.
Summary of Issues
Recently, servers in the XRP Ledger network have been taking an increasingly long time to sync back to the network after restartiningg. This is one of several releases which will be made to improve on this issue.
Bug Fixes
-
Parallel ledger loader & I/O performance improvements: This commit makes several changes that, together, should decrease the time needed for a server to sync to the network. To make full use of this change,
rippled
needs to be using storage with high IOPS and operators need to explicitly enable this behavior by adding the following to their config file, under the[node_db]
stanza:[node_db]
...
fast_load=1
Note that when 'fast loading' is enabled the server will not open RPC and WebSocket interfaces until after the initial load is completed. Because of this, it may appear unresponsive or down.
-
Detect CVE-2021-3520 when decompressing using LZ4: This commit adds code to detect LZ4 payloads that may result in out-of-bounds memory accesses.
-
Provide sensible default values for nodestore cache:: The nodestore includes a built-in cache to reduce the disk I/O load but, by default, this cache was not initialized unless it was explicitly configured by the server operator. This commit introduces sensible defaults based on the server's configured node size.
-
Adjust the number of concurrent ledger data jobs: Processing a large amount of data at once can effectively bottleneck a server's I/O subsystem. This commits helps optimize I/O performance by controlling how many jobs can concurrently process ledger data.
-
Two small SHAMapSync improvements: This commit makes minor changes to optimize the way memory is used and control the amount of background I/O performed when attempting to fetch missing
SHAMap
nodes.
rippled (XRP Ledger server) Version 1.8.2
Version 1.8.2
Ripple has released version 1.8.2 of rippled, the reference server implementation of the XRP Ledger protocol. This release addresses the full transaction queues and elevated transaction fees issue observed on the XRP ledger, and also provides some optimizations and small fixes to improve the server's performance overall.
Summary of Issues
Recently, servers in the XRP Ledger network have had full transaction queues and transactions paying low fees have mostly not been able to be confirmed through the queue. After investigation, it was discovered that a large influx of transactions to the network caused it to raise the transaction costs to be proposed in the next ledger block, and defer transactions paying lower costs to later ledgers. The first part worked as designed, but deferred transactions were not being confirmed as the ledger had capacity to process them.
The root cause was that there were very many low-cost transactions that different servers in the network received in a different order due to incidental differences in timing or network topology, which caused validators to propose different sets of low-cost transactions from the queue. Since none of these transactions had support from a majority of validators, they were removed from the proposed transaction set. Normally, any transactions removed from a proposed transaction set are supposed to be retried in the next ledger, but servers attempted to put these deferred transactions into their transaction queues first, which had filled up. As a result, the deferred transactions were discarded, and the network was only able to confirm transactions that paid high costs.
Bug Fixes
-
Address elevated transaction fees: This change addresses the full queue problems in two ways. First, it puts deferred transactions directly into the open ledger, rather than transaction queue. This reverts a subset of the changes from ximinez@62127d7. A transaction that is in the open ledger but doesn't get validated should stay in the open ledger so that it can be proposed again right away. Second, it changes the order in which transactions are pulled from the transaction queue to increase the overlap in servers' initial transaction consensus proposals. Like the old rules, transactions paying higher fee levels are selected first. Unlike the old rules, transactions paying the same fee level are ordered by transaction ID / hash ascending. (Previously, transactions paying the same fee level were unsorted, resulting in each server having a different order.)
-
Add ignore_default option to account_lines API: This flag, if present, suppresses the output of incoming trust lines in the default state. This is primarily motivated by observing that users often have many unwanted incoming trust lines in a default state, which are not useful in the vast majority of cases. Being able to suppress those when doing
account_lines
saves bandwidth and resources. (#3980) -
Make I/O and prefetch worker threads configurable: This commit adds the ability to specify io_workers and prefetch_workers in the config file which can be used to specify the number of threads for processing raw inbound and outbound IO and configure the number of threads for performing node store prefetching. (#3994)
-
Enforce account RPC limits by objects traversed: This changes the way the account_objects API method counts and limits the number of objects it returns. Instead of limiting results by the number of objects found, it counts by the number of objects traversed. Additionally, the default and maximum limits for non-admin connections have been decreased. This reduces the amount of work that one API call can do so that public API servers can share load more effectively. (#4032)
-
Fix a crash on shutdown: The NuDB backend class could throw an error in its destructor, resulting in a crash while the server was shutting down gracefully. This crash was harmless but resulted in false alarms and noise when tracking down other possible crashes. (#4017)
-
Improve reporting of job queue in admin server_info: The server_info command, when run with admin permissions, provides information about jobs in the server's job queue. This commit provides more descriptive names and more granular categories for many jobs that were previously all identified as "clientCommand". (#4031)
-
Improve full & compressed inner node deserialization: Remove a redundant copy operation from low-level SHAMap deserialization. (#4004)
-
Reporting mode: only forward to P2P nodes that are synced: Previously, reporting mode servers forwarded to any of their configured P2P nodes at random. This commit improves the selection so that it only chooses from P2P nodes that are fully synced with the network. (#4028)
-
Improve handling of HTTP X-Forwarded-For and Forwarded headers: Fixes the way the server handles IPv6 addresses in these HTTP headers. (#4009, #4030)
-
Other minor improvements to logging and Reporting Mode.