Introducing XRP Ledger version 1.6.0
XRP Ledger (rippled server) version 1.6.0 has been released. This release introduces several new features including changes to the XRP Ledger's consensus mechanism to make it even more robust in adverse conditions, as well as numerous bug fixes and optimizations. (This post has been updated with recommendations for upgrading.)
Action Required
This release introduces three new amendments to the XRP Ledger protocol: fixAmendmentMajorityCalc, HardenedValidations, and fix1781. 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.6.0 by 2020-09-02, to ensure service continuity. The exact time that protocol changes take effect could be on that date or later, depending on the voting decisions of the decentralized network.
If you operate an XRP Ledger validator, please learn more about these amendments so you can make informed decisions about if and when your validator should support them. If you take no action, your validator begins voting in favor of the new amendments as soon as it has been upgraded.
Upgrading
For instructions on updating XRP Ledger on supported platforms, see here:
The SHA-256 hashes for the official packages are as follows:
| Package | SHA-256 |
|---|---|
| RPM for Red Hat / CentOS (x86-64) | 894d1a7a4713bfbf16264dbef9e0958a25572e0f1fce588d5a8c00452fb68115 |
| DEB for Ubuntu / Debian (x86-64) | 1d29124623bd81ba6eaf8a74bf7e14a18c511312d29213bfa6dc3351d30eedba |
For other platforms, please compile version 1.6.0 from source.
The first log entry should be the change setting the version:
commit 01bd5a2646cda78ee09d2067c287c8f89872736d
Author: manojsdoshi <[email protected]>
Date: Tue Aug 18 15:32:50 2020 -0700
Set version to 1.6.0Change Summary
New and Improved Features
Initial implementation of Negative UNL functionality: This change can improve the liveness of the network during periods of network instability, by allowing servers to track which validators are temporarily offline and to adjust quorum calculations to match. This change requires an amendment, but the amendment is not in the 1.6.0 release. Ripple expects to run extensive public testing for Negative UNL functionality on the Devnet in the coming weeks. If public testing satisfies all requirements across security, reliability, stability, and performance, then the amendment could be included in a version 2.0 release. [#3380]
Validation Hardening: This change allows servers to detect accidental misconfiguration of validators, as well as potentially Byzantine behavior by malicious validators. Servers can now log a message to notify operators if they detect a single validator issuing validations for multiple, incompatible ledger versions, or validations from multiple servers sharing a key. As part of this update, validators report the version of
rippledthey are using, as well as the hash of the last ledger they consider to be fully validated, in validation messages. [#3291]Software Upgrade Monitoring & Notification: After the
HardenedValidationsamendment is enabled and the validators begin reporting the versions ofrippledthey are running, a server can check how many of the validators on its UNL run a newer version of the software than itself. If more than 60% of a server's validators are running a newer version, the server writes a message to notify the operator to consider upgrading their software. [#3447]Link Compression: Beginning with 1.6.0, server operators can enable support for compressing peer-to-peer messages. This can save bandwidth at a cost of higher CPU usage, which should prove useful for servers with a large number of peers. This support is disabled by default and can be enabled in your server's config file. [#3287]
Unconditionalize Amendments that were enabled in 2017: This change removes legacy code which the network has not used since 2017. This change limits the ability to replay ledgers that rely on the pre-2017 behavior. [#3292]
New Health Check Method: Perform a simple HTTP request to get a summary of the health of the server: Healthy, Warning, or Critical. [#3365]
Start work on API version 2. Version 2 of the API will be part of a future release. The first breaking change will be to consolidate several closely related error messages that can occur when the server is not synced into a single "notSynced" error message. [#3269]
Improved shard concurrency: Improvements to the shard engine have helped reduce the lock scope on all public functions, increasing the concurrency of the code. [#3251]
Default Port: In the config file, the
[ips_fixed]and[ips]stanzas now use the IANA-assigned port for the XRP Ledger protocol (2459) when no port is specified. TheconnectAPI method also uses the same port by default. [#2861].Improve proposal and validation relaying. The peer-to-peer protocol always relays trusted proposals and validations (as part of the consensus process), but only relays untrusted proposals and validations in certain circumstances. This update adds configuration options so server operators can fine-tune how their server handles untrusted proposals and validations, and changes the default behavior to prioritize untrusted validations higher than untrusted proposals. [#3391]
Various Build and CI Improvements including updates to RocksDB 6.7.3 [#3356], NuDB 2.0.3 [#3437], adjusting CMake settings so that rippled can be built as a submodule [#3449], and adding Travis CI settings for Ubuntu Bionic Beaver [#3319].
Better documentation in the config file for online deletion and database tuning. [#3429]
Bug Fixes
- Fix the 14 day timer to enable amendment to start at the correct quorum size [#3396]
- Improve online delete backend lock which addresses a possibility in the online delete process where one or more backend shared pointer references may become invalid during rotation. [#3342]
- Address an issue that can occur during the loading of validator tokens, where a deliberately malformed token could cause the server to crash during startup. [#3326]
- Add delivered amount to GetAccountTransactionHistory. The delivered_amount field was not being populated when calling GetAccountTransactionHistory. In contrast, the delivered_amount field was being populated when calling GetTransaction. This change populates delivered_amount in the response to GetAccountTransactionHistory, and adds a unit test to make sure the results delivered by GetTransaction and GetAccountTransactionHistory match each other. [#3370]
- Fix build issues for GCC 10 [#3393]
- Fix historical ledger acquisition - this fixes an issue where historical ledgers were acquired only since the last online deletion interval instead of the configured value to allow deletion.[#3369]
- Fix build issue with Docker #3416]
- Add Shard family. The App Family utilizes a single shared Tree Node and Full Below cache for all history shards. This can create a problem when acquiring a shard that shares an account state node that was recently cached from another shard operation. The new Shard Family class solves this issue by managing separate Tree Node and Full Below caches for each shard. #3448]
- Amendment table clean up which fixes a calculation issue with majority. #3428]
- Add the
ledger_cleanercommand to rippled command line help [#3305] - Various typo and comments fixes.
New Commits in This Release
2b4486837Set version to 1.6.0-rc3f79a4a8cdRevert "Remove CryptoConditionsSuite stub amendment:"7bb6b75f3Use the correct root hash for the tx treee5d17a945Set version to 1.6.0-rc2dbd5f0073Revert support for deterministic shards:12c0e8148Improve naming of fields associated with the NegativeUNL72a9a2bdbReorder the Travis build:80860fa8fAdd preliminary support for Boost 1.748cf542abbFix memory management issues with checkpointers:a931b020bSwitch to updated date library exception handling:d317060aeFix a race condition with TrustedPublisherServer:eee07a4f9Add missing cstdint include7b048b423Set version to 1.6.0-rc1a45920684Set version to 1.6.0-b93a3b0b4c1Modify health check APIde0c52738Set version to 1.6.0-b8b54453d1aFix a build issue caused by pip3 being unavailable706ca874bImplement negative UNL functionality:51bd4626bImplement version upgrade warning:cf6f40ea8Deprecate unused/obsolete error codes:d3798f629Remove CryptoConditionsSuite stub amendment:4e33a1abfcrawl_shards comment fix86e8f2e23Add Shard Family91e857874Improve LedgerMaster shard acquisition8f50fd051Use NuDB version 2.0.394e8e9475Add support for deterministic database shards (#2688):54ece72b6Update cmake so that rippled can build as a submodule4702c8b59Improve online_delete configuration and DB tuning:00702f28cImprove reporting of ledger age in server_infodf29e98eaImprove amendment processing and activation logic:fe9922d65Improve compression support:362a017eeCleanup SHAMap and simplify interfaces:e8f352522Improve Slice:1067086f7Consolidate "Not Synced" error messages:0214d83aaImprove handling of empty buffer in varint parsing (RIPD-1683)d69a90287Add comments to protobuf filesf43aeda49Set version to 1.6.0-b727484f78aUse libarchive version 3.4.393bf77bdeUnit tests for database shards728651b5dUse LZ4_decompress_safefb74eefa9Update LZ4 library to 1.9.2853c96419Fix a build issue caused by the latest Docker version: * The latest docker version is not supported by artifactory causing the package build to fail. Setting the docker version to 19.03.8 to fix the build.645c06764Update the default port for [ips] and [ips_fixed]:2d23e7bd1Use std::size in place of std::extent0290d0b82Create health_check rpc3d86b49daSet version to 1.6.0-b60b9e93580Find date::date in CMake package configuration file17412d17eFix historical ledger acquisition when using online deletion:99f519369Disable formatting operator&:328e42ad4Minor cleanups:6d28f2a8dCleanup code using move semantics421417ab0Fixes for gcc 1068494a308AmendmentTable improvements16f79d160Add delivered amount to GetAccountTransactionHistory responses8f984042fTry to fix usage of pkg-config for static linkingeb1a699c5Fix typo in error messageac766ec0eIntroduce ShardArchiveHandler improvements:21340a1c1Validate LastLedgerHash for downloaded shards:c594f3b0cReduce visibility of retired amendment identifiers:268e28a27Tune relaying of untrusted proposals & validations:ca664b17dImprove handling of sfLedgerSequence field:3936110c8Use boost::circular_buffer:9f91870b1Adjust frequency of mtENDPOINTS messages97712107bSet version to 1.6.0-b5d9fa14868Revert "Add PR automation for project boards"d88a7c73bImprove online delete backend locking894d3463cExtend unit testing of account_tx with deleted account:5b5226d51Cleanup the 'PeerSet' hierarchy:d025f3fb2Add descriptive comments to 'getRippledInfo.sh':11be30dd4Correct typo in comment4fad421c8Correct typos in SECURITY.md57b3543e7Support boost 1.73a00543b6bFix docs about misconfigured neighbor portdbd25f0e3Remove excessive redirect call on PeerManager62a3f33d7Remove the built-in "sustain" watchdog:74f9edef0Prefer keylets instead of naked hashes:dbee3f01bClean up and modernize code:6c72d5cf7Improve loading of validator tokens (RIPD-1687):2827de4d6Report the server version in published validations:381606abaHarden validations:567e42e07Deprecate 'Time to Live' fields2bf3b194fSet version to 1.6.0-b4444ea5618Adding support to build rippled packages for ubuntu 20.04d79758916Add README for gRPC protobuf folder1577c775bClose download socket before result is passed to the callback:3bf0b724aAdjust timeouts in Validator Site tests:bd8dbb87bUpdate to RocksBD 6.7.3cd78ce311Add PR automation for project boards023f5704dSet version to 1.6.0-b3123e94c60Fix a build issue involving Ubuntu Docker containers:156dc2ec4Add GitHub Action for checking w/ clang-format-10b7b7e098bAdd .git-blame-ignore-revs (requires Git >= 2.24)50760c693Format first-party source according to .clang-format65dfc5d19Prepare code for formatting020b28580Set version to 1.6.0-b2bdd22e4d5Improve reporting of missing node exceptionsb7631d2a2Correct a typo that could result in a nullptr dereference284ed3847Reduce calls to std::random_device:b96ef6adbAdd SECURITY.md to the repositoryce6b42720Fix a build issue involving Ubuntu Docker containers:858e93c7fImprove the Doxygen Workflow6477bdf3eFix division by zero with shards file statsce5f24055Fix invalid shard removal1c3c69f8bUpdate Travis to bionicbe2652544Add ledger_cleaner command to rippled cmd line helpf155eaff4Unit test for memo67981f002Reduce strand re-execute log message severity to warning:0d8322344Remove conditionals for fix1201 enabled 14Nov20179f8d64851Remove conditionals for fix1512 enabled 14Nov20173d3b6d85cRemove conditionals for fix1523 enabled 14Nov20178cf7c9548Remove conditionals for fix1528 enabled 14Nov2017323dbc796Remove conditionals for featureSortedDirectories enabled 14Nov201746a76fb31Remove conditionals for featureEnforceInvariants enabled 07Jul2017a6246b0baRemove conditionals for fix1373 enabled 07Jul2017c8282795eRemove conditionals for featureEscrow enabled 31Mar2017e93a44fe9Remove conditionals for fix1368 enabled 31Mar20173e870866eRemove conditionals for featurePayChan enabled 31Mar201778d771af3Remove conditionals for featureTickSize enabled 21Feb20176bb9dd22eRemove conditionals for featureCryptoConditions enabled 03Jan20171661c84afRemove unused featureCompareFlowV1V24f422f6f3Setting version to 1.6.0-b1393ca8757Change the location for the project signer public keys:f4c56cbd5Update SHAMap Documentation9470558ecRemove all uses of the name scoped_lockf22fcb3b2Rename canonicalize into two functions:e257a226fMaintain history back to the earliest persisted ledger:a4e987879Document the 'devnet' network identifier setting:25b13978eFix unity build3e9cff928Fix Doxygen build758a3792eAdd protocol message compression support:ade5eb71cFix unneeded copies in range some range for loops:d097819c5Check XRP endpoints for circular paths (RIPD-1781):905a97e0aMake ShardArchiveHandler downloads more resilient:cc452dfa9Improve shard concurrency:
Contributions
GitHub
The public git repository for rippled is hosted on GitHub:
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:
- Alloy Networks [email protected]
- Carl Hua [email protected]
- CJ Cobb [email protected]
- Devon White [email protected]
- Edward Hennis [email protected]
- Elliot Lee [email protected]
- Gábor Lipták [email protected]
- Gregory Tsipenyuk [email protected]
- Howard Hinnant [email protected]
- John Freeman [email protected]
- Kirill Fomichev [email protected]
- Manoj Doshi [email protected]
- Mark Travis [email protected]
- Markus Alvila
- Miguel Portilla [email protected]
- Mo Morsi [email protected]
- Nik Bougalis [email protected]
- p2peer [email protected]
- Peng Wang [email protected]
- rabbit (Rabbit Kick Club)
- Rome Reginelli [email protected]
- Scott Schurr [email protected]
- Scott Determan [email protected]
- Yusuf Sahin HAMZA [email protected]
Lifetime Contributors
The following is the list of people who made code contributions, large and small, to XRP Ledger prior to the release of 1.6.0:
Aishraj Dahal, Alex Chung, Alex Dupre, Alloy Networks, Andrey Fedorov, Arthur Britto, Bharath Chari, Bob Way, Brad Chase, Brandon Wilson, Bryce Lynch, Carl Hua, Casey Bodley, Christian Ramseier, CJ Cobb, crazyquark, Crypto Brad Garlinghouse, David Grogan, David 'JoelKatz' Schwartz, Devon White, Donovan Hide, Edward Hennis, Elliot Lee, Eric Lombrozo, Ethan MacBrough, Evan Hubinger, Frank Cash, Gábor Lipták, Gregory Tsipenyuk, Howard Hinnant, Ian Roskam, invalidator, Jack Bond-Preston, James Fryman, jatchili, Jcar, Jed McCaleb, Jeff Trull, Jeroen Meulemeester, Jesper Wallin, Joe Loser, Johanna Griffin, John Freeman, John Northrup, Joseph Busch, Josh Juran, Justin Lynn, Keaton Okkonen, Kirill Fomichev, Lazaridis, Lieefu Way, Luke Cyca, Manoj Doshi, Mark Travis, Markus Alvila, Markus Teufelberger, Mayur Bhandary, Miguel Portilla, Mike Ellery, MJK, Mo Morsi, Nicholas Dudfield, Nikolaos D. Bougalis, Niraj Pant, p2peer, Patrick Dehne, Peng Wang, Roberto Catini, Rome Reginelli, Scott Determan, Scott Schurr, S. Matthew English, Stefan Thomas, ShangyanLi, The Gitter Badger, Ties Jan Hefting, Tim Lewkow, Tom 'Swirly' Ritchford, Torrie Fischer, Vahe Hovhannisyan, Vinnie Falco, Vishwas Patil, Warren Paul Anderson, Will, wltsmrz, Wolfgang Spraul, Yana Novikova and Yusuf Sahin HAMZA.
For a real-time view of all 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.
As XRP Ledger continues to move through the 1.0 series, we look forward to more external contributions and are excited to see the broader XRP Ledger community grow and thrive.