Posted 2020-08-19 to

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 <mdoshi@ripple.com>
Date:   Tue Aug 18 15:32:50 2020 -0700

    Set version to 1.6.0

Change 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 rippled they are using, as well as the hash of the last ledger they consider to be fully validated, in validation messages. [#3291] Amendment: Required

  • Software Upgrade Monitoring & Notification: After the HardenedValidations amendment is enabled and the validators begin reporting the versions of rippled they 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. The connect API 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_cleaner command to rippled command line help [#3305]
  • Various typo and comments fixes.

New Commits in This Release

  • 2b4486837 Set version to 1.6.0-rc3
  • f79a4a8cd Revert "Remove CryptoConditionsSuite stub amendment:"
  • 7bb6b75f3 Use the correct root hash for the tx tree
  • e5d17a945 Set version to 1.6.0-rc2
  • dbd5f0073 Revert support for deterministic shards:
  • 12c0e8148 Improve naming of fields associated with the NegativeUNL
  • 72a9a2bdb Reorder the Travis build:
  • 80860fa8f Add preliminary support for Boost 1.74
  • 8cf542abb Fix memory management issues with checkpointers:
  • a931b020b Switch to updated date library exception handling:
  • d317060ae Fix a race condition with TrustedPublisherServer:
  • eee07a4f9 Add missing cstdint include
  • 7b048b423 Set version to 1.6.0-rc1
  • a45920684 Set version to 1.6.0-b9
  • 3a3b0b4c1 Modify health check API
  • de0c52738 Set version to 1.6.0-b8
  • b54453d1a Fix a build issue caused by pip3 being unavailable
  • 706ca874b Implement negative UNL functionality:
  • 51bd4626b Implement version upgrade warning:
  • cf6f40ea8 Deprecate unused/obsolete error codes:
  • d3798f629 Remove CryptoConditionsSuite stub amendment:
  • 4e33a1abf crawl_shards comment fix
  • 86e8f2e23 Add Shard Family
  • 91e857874 Improve LedgerMaster shard acquisition
  • 8f50fd051 Use NuDB version 2.0.3
  • 94e8e9475 Add support for deterministic database shards (#2688):
  • 54ece72b6 Update cmake so that rippled can build as a submodule
  • 4702c8b59 Improve online_delete configuration and DB tuning:
  • 00702f28c Improve reporting of ledger age in server_info
  • df29e98ea Improve amendment processing and activation logic:
  • fe9922d65 Improve compression support:
  • 362a017ee Cleanup SHAMap and simplify interfaces:
  • e8f352522 Improve Slice:
  • 1067086f7 Consolidate "Not Synced" error messages:
  • 0214d83aa Improve handling of empty buffer in varint parsing (RIPD-1683)
  • d69a90287 Add comments to protobuf files
  • f43aeda49 Set version to 1.6.0-b7
  • 27484f78a Use libarchive version 3.4.3
  • 93bf77bde Unit tests for database shards
  • 728651b5d Use LZ4_decompress_safe
  • fb74eefa9 Update LZ4 library to 1.9.2
  • 853c96419 Fix 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.
  • 645c06764 Update the default port for [ips] and [ips_fixed]:
  • 2d23e7bd1 Use std::size in place of std::extent
  • 0290d0b82 Create health_check rpc
  • 3d86b49da Set version to 1.6.0-b6
  • 0b9e93580 Find date::date in CMake package configuration file
  • 17412d17e Fix historical ledger acquisition when using online deletion:
  • 99f519369 Disable formatting operator&:
  • 328e42ad4 Minor cleanups:
  • 6d28f2a8d Cleanup code using move semantics
  • 421417ab0 Fixes for gcc 10
  • 68494a308 AmendmentTable improvements
  • 16f79d160 Add delivered amount to GetAccountTransactionHistory responses
  • 8f984042f Try to fix usage of pkg-config for static linking
  • eb1a699c5 Fix typo in error message
  • ac766ec0e Introduce ShardArchiveHandler improvements:
  • 21340a1c1 Validate LastLedgerHash for downloaded shards:
  • c594f3b0c Reduce visibility of retired amendment identifiers:
  • 268e28a27 Tune relaying of untrusted proposals & validations:
  • ca664b17d Improve handling of sfLedgerSequence field:
  • 3936110c8 Use boost::circular_buffer:
  • 9f91870b1 Adjust frequency of mtENDPOINTS messages
  • 97712107b Set version to 1.6.0-b5
  • d9fa14868 Revert "Add PR automation for project boards"
  • d88a7c73b Improve online delete backend locking
  • 894d3463c Extend unit testing of account_tx with deleted account:
  • 5b5226d51 Cleanup the 'PeerSet' hierarchy:
  • d025f3fb2 Add descriptive comments to 'getRippledInfo.sh':
  • 11be30dd4 Correct typo in comment
  • 4fad421c8 Correct typos in SECURITY.md
  • 57b3543e7 Support boost 1.73
  • a00543b6b Fix docs about misconfigured neighbor port
  • dbd25f0e3 Remove excessive redirect call on PeerManager
  • 62a3f33d7 Remove the built-in "sustain" watchdog:
  • 74f9edef0 Prefer keylets instead of naked hashes:
  • dbee3f01b Clean up and modernize code:
  • 6c72d5cf7 Improve loading of validator tokens (RIPD-1687):
  • 2827de4d6 Report the server version in published validations:
  • 381606aba Harden validations:
  • 567e42e07 Deprecate 'Time to Live' fields
  • 2bf3b194f Set version to 1.6.0-b4
  • 444ea5618 Adding support to build rippled packages for ubuntu 20.04
  • d79758916 Add README for gRPC protobuf folder
  • 1577c775b Close download socket before result is passed to the callback:
  • 3bf0b724a Adjust timeouts in Validator Site tests:
  • bd8dbb87b Update to RocksBD 6.7.3
  • cd78ce311 Add PR automation for project boards
  • 023f5704d Set version to 1.6.0-b3
  • 123e94c60 Fix a build issue involving Ubuntu Docker containers:
  • 156dc2ec4 Add GitHub Action for checking w/ clang-format-10
  • b7b7e098b Add .git-blame-ignore-revs (requires Git >= 2.24)
  • 50760c693 Format first-party source according to .clang-format
  • 65dfc5d19 Prepare code for formatting
  • 020b28580 Set version to 1.6.0-b2
  • bdd22e4d5 Improve reporting of missing node exceptions
  • b7631d2a2 Correct a typo that could result in a nullptr dereference
  • 284ed3847 Reduce calls to std::random_device:
  • b96ef6adb Add SECURITY.md to the repository
  • ce6b42720 Fix a build issue involving Ubuntu Docker containers:
  • 858e93c7f Improve the Doxygen Workflow
  • 6477bdf3e Fix division by zero with shards file stats
  • ce5f24055 Fix invalid shard removal
  • 1c3c69f8b Update Travis to bionic
  • be2652544 Add ledger_cleaner command to rippled cmd line help
  • f155eaff4 Unit test for memo
  • 67981f002 Reduce strand re-execute log message severity to warning:
  • 0d8322344 Remove conditionals for fix1201 enabled 14Nov2017
  • 9f8d64851 Remove conditionals for fix1512 enabled 14Nov2017
  • 3d3b6d85c Remove conditionals for fix1523 enabled 14Nov2017
  • 8cf7c9548 Remove conditionals for fix1528 enabled 14Nov2017
  • 323dbc796 Remove conditionals for featureSortedDirectories enabled 14Nov2017
  • 46a76fb31 Remove conditionals for featureEnforceInvariants enabled 07Jul2017
  • a6246b0ba Remove conditionals for fix1373 enabled 07Jul2017
  • c8282795e Remove conditionals for featureEscrow enabled 31Mar2017
  • e93a44fe9 Remove conditionals for fix1368 enabled 31Mar2017
  • 3e870866e Remove conditionals for featurePayChan enabled 31Mar2017
  • 78d771af3 Remove conditionals for featureTickSize enabled 21Feb2017
  • 6bb9dd22e Remove conditionals for featureCryptoConditions enabled 03Jan2017
  • 1661c84af Remove unused featureCompareFlowV1V2
  • 4f422f6f3 Setting version to 1.6.0-b1
  • 393ca8757 Change the location for the project signer public keys:
  • f4c56cbd5 Update SHAMap Documentation
  • 9470558ec Remove all uses of the name scoped_lock
  • f22fcb3b2 Rename canonicalize into two functions:
  • e257a226f Maintain history back to the earliest persisted ledger:
  • a4e987879 Document the 'devnet' network identifier setting:
  • 25b13978e Fix unity build
  • 3e9cff928 Fix Doxygen build
  • 758a3792e Add protocol message compression support:
  • ade5eb71c Fix unneeded copies in range some range for loops:
  • d097819c5 Check XRP endpoints for circular paths (RIPD-1781):
  • 905a97e0a Make ShardArchiveHandler downloads more resilient:
  • cc452dfa9 Improve shard concurrency:

Contributions

GitHub

GitHub: Stars GitHub: Watchers

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:

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.