rippled

Decentralized cryptocurrency blockchain daemon implementing the XRP Ledger protocol in C++

ISC License

Stars
4.5K
Committers
119
rippled - rippled (XRP Ledger server) Version 2.0.0-rc5 (release candidate)

Published by intelliot 11 months ago

This is a release candidate.

  • Includes api_version 2 general availability.
    • The "DeliverMax" field reflects the maximum amount that the payment may deliver. To get the amount of a payment, use the "delivered_amount" field. "DeliverMax" is now provided for all Payment transactions, and successful transactions include "delivered_amount".
    • In api_version: 2, the "Amount" field is removed. In most cases, the field you actually want is "delivered_amount". But if you really want the field formerly known as "Amount", then you can use "DeliverMax".
    • In api_version: 2, "ledger_index" is always returned as an integer (not a string).
  • Notable performance improvements in TPS (transactions per second).
  • XLS-38 sidechains support.
    • This is a large change and adds significant new functionality to the protocol.
  • XLS-40 decentralized identity (DID) support.
  • New server_definitions method.
  • Many aspects of the code have been refactored and changed since the previous major version.

Amendments

rippled 2.0.0 is expected to include the following new amendments:

  • XChainBridge: side chains (XLS-38) by @seelabs in #4292
  • fixDisallowIncomingV1 by @dangell7 in #4721
  • DID: Decentralized identifiers (DIDs) (XLS-40) by @mvadari in #4636
  • fixFillOrKill: fix offer crossing with tfFillOrKill #4694 (not in 2.0.0-b4)

Testing Credits

  • Thanks to @sgramkumar and others for continued testing.

What's Changed

New Contributors

Full Changelog: https://github.com/XRPLF/rippled/compare/2.0.0-rc4...2.0.0-rc5

rippled - rippled (XRP Ledger server) Version 2.0.0-rc4 (release candidate)

Published by intelliot 11 months ago

This is a release candidate.

  • Includes api_version 2 general availability.
    • The "DeliverMax" field reflects the maximum amount that the payment may deliver. To get the amount of a payment, use the "delivered_amount" field. "DeliverMax" is now provided for all Payment transactions, and successful transactions include "delivered_amount".
    • In api_version: 2, the "Amount" field is removed. In most cases, the field you actually want is "delivered_amount". But if you really want the field formerly known as "Amount", then you can use "DeliverMax".
    • In api_version: 2, "ledger_index" is always returned as an integer (not a string).
  • Notable performance improvements in TPS (transactions per second): up to 4,300 TPS.
  • XLS-38 sidechains support.
    • This is a large change and adds significant new functionality to the protocol.
  • XLS-40 decentralized identity (DID) support.
  • New server_definitions method.
  • Many aspects of the code have been refactored and changed since the previous major version.

Amendments

rippled 2.0.0 is expected to include the following new amendments:

  • XChainBridge: side chains (XLS-38) by @seelabs in #4292
  • fixDisallowIncomingV1 by @dangell7 in #4721
  • DID: Decentralized identifiers (DIDs) (XLS-40) by @mvadari in #4636
  • fixFillOrKill: fix offer crossing with tfFillOrKill #4694 (not in 2.0.0-b4)

Testing Credits

  • Thanks to @sgramkumar and others for continued testing.

What's Changed

Full Changelog: https://github.com/XRPLF/rippled/compare/2.0.0-rc3...2.0.0-rc4

rippled - rippled (XRP Ledger server) Version 2.0.0-rc3 (release candidate)

Published by intelliot 11 months ago

This is a release candidate.

  • Includes api_version 2 general availability.
    • The "DeliverMax" field name clarifies that the field is the maximum amount that the payment may deliver. To get the amount of a payment, use the "delivered_amount" field. "DeliverMax" is provided for all Payment transactions regardless of api_version.
    • In api_version: 2, the "Amount" field is removed. In most cases, the field you want is "delivered_amount". But if you really, really want the field formerly known as "Amount", then look for "DeliverMax".
  • Notable performance improvements in TPS (transactions per second): up to 4,300 TPS.
  • XLS-38 sidechains support
    • This is a large change and adds significant new functionality to the protocol.
  • XLS-40 decentralized identity (DID) support
  • New server_definitions method
  • Lastly, many aspects of the code have been refactored and changed since the previous major version.

Amendments

rippled 2.0.0 is expected to include the following new amendments:

  • XChainBridge: side chains (XLS-38) by @seelabs in #4292
  • fixDisallowIncomingV1 by @dangell7 in #4721
  • DID: Decentralized identifiers (DIDs) (XLS-40) by @mvadari in #4636
  • fixFillOrKill: fix offer crossing with tfFillOrKill #4694 (not in 2.0.0-b4)

What's Changed

New Contributors

Testing Credits

  • Thanks to @sgramkumar and others for testing this release.

Full Changelog: https://github.com/XRPLF/rippled/compare/2.0.0-b4...2.0.0-rc3

rippled - rippled (XRP Ledger server) Version 2.0.0-b4 (beta)

Published by intelliot almost 1 year ago

This is a beta for the next release.

When finalized, the next stable release of rippled is expected to be the last release for 2023 (given the holidays in Nov/Dec). The major version is bumped because:

  • api_version 2 general availability is expected.
    • The "DeliverMax" field name clarifies that the field is the maximum amount that the payment may deliver. To get the amount of a payment, use the "delivered_amount" field.
  • Notable performance improvements in TPS (transactions per second): up to 3,900 TPS.
  • XLS-38 sidechains support
    • This is a large change and adds significant new functionality to the protocol.
  • XLS-40 decentralized identity (DID) support
  • New server_definitions method
  • Lastly, many aspects of the code have been refactored and changed since the previous major version bump.

What's Changed

New Contributors

Full Changelog: https://github.com/XRPLF/rippled/compare/2.0.0-b3...2.0.0-b4

rippled - rippled (XRP Ledger server) Version 2.0.0-b3 (beta)

Published by intelliot about 1 year ago

This is a beta for the next release.

When finalized, the next stable release of rippled is expected to be the last release for 2023 (given the holidays in Nov/Dec). The major version is bumped because:

  • api_version 2 general availability is expected.
  • Notable performance improvements in TPS (transactions per second): up to 3,900 TPS.
  • XLS-38 sidechains support
    • This is a large change and adds significant new functionality to the protocol.
  • XLS-40 decentralized identity (DID) support
  • New server_definitions method
  • Lastly, many aspects of the code have been refactored and changed since the previous major version bump.

What's Changed

New Contributors

Full Changelog: https://github.com/XRPLF/rippled/compare/2.0.0-b2...2.0.0-b3

rippled - rippled (XRP Ledger server) Version 2.0.0-b2 (beta)

Published by intelliot about 1 year ago

This is a beta for the next release.

Highlights:

When finalized, the next stable release of rippled is expected to be the last release for 2023 (given the holidays in Nov/Dec). The major version is bumped because:

  • api_version 2 general availability is expected.
    • This api_version is not available yet (except in beta, requiring a configuration change), but it will be in the next release.
  • Notable performance improvements in TPS (transactions per second).
  • XLS-38 sidechains support
    • This is a large change and adds significant new functionality to the protocol.
  • Lastly, many aspects of the code have been refactored and changed since the previous major version bump.

What's Changed

New Contributors

Full Changelog: https://github.com/XRPLF/rippled/compare/2.0.0-b1...2.0.0-b2

rippled - rippled (XRP Ledger server) Version 2.0.0-b1 (beta)

Published by intelliot about 1 year ago

This is a beta for the next release.

Highlights:

When finalized, the next stable release of rippled is expected to be the last release for 2023 (given the holidays in Nov/Dec). The major version is bumped for the following reasons:

  • api_version 2 general availability
    • This api_version is not available yet (except in beta, requiring a configuration change), but it will be in the next release.
  • Notable performance improvements in TPS (transactions per second).
  • XLS-38 sidechains support
    • This is a large change and adds significant new functionality to the protocol.
  • Lastly, many aspects of the code have been refactored and changed since the previous major version bump.

(Note that the replacement for getting and setting thread name (#4312) was reverted, so it is not in this release.)

What's Changed

New Contributors

Full Changelog: https://github.com/XRPLF/rippled/compare/1.12.0...2.0.0-b1

rippled - rippled (XRP Ledger server) Version 1.12.0

Published by manojsdoshi about 1 year ago

Version 1.12.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:

  • AMM
  • Clawback
  • fixReducedOffersV1

Sign Up for Future Release Announcements

Action Required

Three 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.12.0 by September 20, 2023 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.

The XRPL Foundation publishes portable binaries, which are drop-in replacements for the rippled daemon. See information and downloads for the portable binaries. This will work on most distributions, including Ubuntu 16.04, 18.04, 20.04, and 22.04; CentOS; and others. Please test and open issues on GitHub if there are problems.

Changelog

Amendments, New Features, and Changes

(These are changes which may impact or be useful to end users. For example, you may be able to update your code/workflow to take advantage of these changes.)

  • AMM: Introduces an automated market maker (AMM) protocol to the XRP Ledger's decentralized exchange, enabling you to trade assets without a counterparty. For more information about AMMs, see: Automated Market Maker. #4294

  • Clawback: Adds a setting, Allow Clawback, which lets an issuer recover, or claw back, tokens that they previously issued. Issuers cannot enable this setting if they have issued tokens already. For additional documentation on this feature, see: #4553.

  • fixReducedOffersV1: Reduces the occurrence of order books that are blocked by reduced offers. #4512

  • Added WebSocket and RPC port info to server_info responses. #4427

  • Removed the deprecated accepted, seqNum, hash, and totalCoins fields from the ledger method. #4244

Bug Fixes and Performance Improvements

(These are behind-the-scenes improvements, such as internal changes to the code, which are not expected to impact end users.)

  • Added a pre-commit hook that runs the clang-format linter locally before committing changes. To install this feature, see: CONTRIBUTING. #4599

  • In order to make it more straightforward to catch and handle overflows: changed the output type of the mulDiv() function from std::pair<bool, uint64_t> to std::optional. #4243

  • Updated Handler::Condition enum values to make the code less brittle. #4239

  • Renamed ServerHandlerImp to ServerHandler. #4516, #4592

  • Replaced hand-rolled code with std::from_chars for better maintainability. #4473

  • Removed an unused TypedField move constructor. #4567

Docs and Build System

  • Updated checkout versions to resolve warnings during GitHub jobs. #4598

  • Fixed an issue with the Debian package build. #4591

  • Updated build instructions with additional steps to take after updating dependencies. #4623

  • Updated contributing doc to clarify that beta releases should also be pushed to the release branch. #4589

  • Enabled the BETA_RPC_API flag in the default unit tests config, making the API v2 (beta) available to unit tests. #4573

  • Conan dependency management.

    • Fixed package definitions for Conan. #4485
    • Updated build dependencies to the most recent versions in Conan Center. #4595
    • Updated Conan recipe for NuDB. #4615
  • Added binary hardening and linker flags to enhance security during the build process. #4603

  • Added an Artifactory to the nix workflow to improve build times. #4556

  • Added quality-of-life improvements to workflows, using new concurrency control features. #4597

Full Commit Log

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 to help build the Internet of Value.

Credits

The following people contributed directly to this release:

Bug Bounties and Responsible Disclosures:

We welcome reviews of the rippled code and urge researchers to responsibly disclose any issues they may find.

To report a bug, please send a detailed report to: [email protected]

rippled - rippled (XRP Ledger server) Version 1.12.0-b2 (beta)

Published by intelliot about 1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/XRPLF/rippled/compare/1.12.0-b1...1.12.0-b2

PR: https://github.com/XRPLF/rippled/pull/4627

rippled - rippled (XRP Ledger server) Version 1.12.0-b1 (beta)

Published by intelliot about 1 year ago

What's Changed

Full Changelog: https://github.com/XRPLF/rippled/compare/1.11.0...1.12.0-b1

PR: https://github.com/XRPLF/rippled/pull/4586

rippled - rippled (XRP Ledger server) Version 1.11.0

Published by intelliot over 1 year ago

Version 1.11.0 of rippled, the reference server implementation of the XRP Ledger protocol, is now available.

This release reduces memory usage, introduces the fixNFTokenRemint amendment, and adds new features and bug fixes. For example, the new NetworkID field in transactions helps to prevent replay attacks with side-chains.

Sign Up for Future Release Announcements

Action Required

The fixNFTokenRemint amendment is 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.11.0 by July 5 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.

What's Changed

New Features and Improvements

Bug Fixes

Code Cleanup and Testing

Docs

New Contributors

Full Changelog: https://github.com/XRPLF/rippled/compare/1.10.1...1.11.0

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 to help build the Internet of Value.

Credits

The following people contributed directly to this release:

Bug Bounties and Responsible Disclosures:
We welcome reviews of the rippled code and urge researchers to
responsibly disclose any issues they may find.

To report a bug, please send a detailed report to:

[email protected]
rippled - rippled (XRP Ledger server) Version 1.10.1

Published by intelliot over 1 year ago

Version 1.10.1 of rippled, the reference server implementation of the XRP Ledger protocol, is now available. This release restores packages for Ubuntu 18.04.

Compared to version 1.10.0, the only C++ code change fixes an edge case in Reporting Mode.

If you are already running version 1.10.0, then upgrading to version 1.10.1 is generally not required.

Sign Up for Future Release Announcements

Install / Upgrade

On supported platforms, see the instructions on installing or updating rippled.

Changelog

  • da18c86cbf Build packages with Ubuntu 18.04
  • f7b3ddd87b Reporting Mode: Do not attempt to acquire missing data from peer network (#4458)

Full Changelog: https://github.com/XRPLF/rippled/compare/1.10.0...1.10.1

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 to help build the Internet of Value.

Credits

The following people contributed directly to this release:

Bug Bounties and Responsible Disclosures:
We welcome reviews of the rippled code and urge researchers to
responsibly disclose any issues they may find.

To report a bug, please send a detailed report to:

[email protected]
rippled - rippled (XRP Ledger server) Version 1.10.0

Published by intelliot over 1 year ago

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 an OfferCreate transaction with the tfImmediateOrCancel flag to return tecKILLED when no funds are moved. The previous return code of tecSUCCESS 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

  • 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

    • Fixes unburnable NFTokens when it has over 500 offers. #4346
    • Fixes 3 NFToken offer acceptance issues. #4380
    • Prevents brokered sales of NFTokens to owners. #4403
    • Only allows the destination to settle NFToken offers through brokerage. #4399
  • 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 the Closed-Ledger and Previous-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 and validator_info to the rippled 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 by rippled 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 in NFTokenSellOffer and NFTokenBuyOffer before calling Ledger::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 in SHAMapInnerNode::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 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 to help build the Internet of Value.

Credits

The following people contributed directly to this release:

Security Bug Bounty Acknowledgements:

  • Aaron Hook
  • Levin Winter

Bug Bounties and Responsible Disclosures:
We welcome reviews of the rippled code and urge researchers to
responsibly disclose any issues they may find.

To report a bug, please send a detailed report to:

[email protected]
rippled - rippled (XRP Ledger server) Version 1.10.0-rc4

Published by intelliot over 1 year ago

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 - rippled (XRP Ledger server) Version 1.9.4

Published by manojsdoshi about 2 years ago

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 the tfTrustLine 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:

rippled - rippled (XRP Ledger server) Version 1.9.3

Published by manojsdoshi about 2 years ago

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 a PublicKey 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:

rippled - rippled (XRP Ledger server) Version 1.9.2

Published by manojsdoshi about 2 years ago

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:

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 - rippled (XRP Ledger server) Version 1.9.1

Published by manojsdoshi over 2 years ago

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 an NFToken object belongs on. It also adjusts the constraints of NFTokenPage invariant checks, so that certain error cases fail with a suitable error code such as tecNO_SUITABLE_TOKEN_PAGE instead of failing with a tecINVARIANT_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 provides x64 as an option, which raises an error. This fix only raises an error if the platform is Win32 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:

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 - rippled (XRP Ledger server) Version 1.9.0

Published by manojsdoshi over 2 years ago

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 the std::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 of std::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 and AcceptedLedgerTx 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 - rippled (XRP Ledger server) Version 1.8.5

Published by manojsdoshi over 2 years ago

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)