diff --git a/BUILD.md b/BUILD.md index 60ee31d42d1..590a7129863 100644 --- a/BUILD.md +++ b/BUILD.md @@ -36,9 +36,15 @@ See [System Requirements](https://xrpl.org/system-requirements.html). Building rippled generally requires git, Python, Conan, CMake, and a C++ compiler. Some guidance on setting up such a [C++ development environment can be found here](./docs/build/environment.md). - [Python 3.7](https://www.python.org/downloads/) -- [Conan 1.55](https://conan.io/downloads.html) +- [Conan 1.60](https://conan.io/downloads.html)[^1] - [CMake 3.16](https://cmake.org/download/) +[^1]: It is possible to build with Conan 2.x, +but the instructions are significantly different, +which is why we are not recommending it yet. +Notably, the `conan profile update` command is removed in 2.x. +Profiles must be edited by hand. + `rippled` is written in the C++20 dialect and includes the `` header. The [minimum compiler versions][2] required are: @@ -67,9 +73,6 @@ Here are [sample instructions for setting up a C++ development environment on ma Windows is not recommended for production use at this time. - Additionally, 32-bit Windows development is not supported. -- Visual Studio 2022 is not yet supported. - - rippled generally requires [Boost][] 1.77, which Conan cannot build with VS 2022. - - Until rippled is updated for compatibility with later versions of Boost, Windows developers may need to use Visual Studio 2019. [Boost]: https://www.boost.org/ @@ -144,21 +147,30 @@ It does not explicitly link the C++ standard library, which allows you to statically link it with GCC, if you want. ``` + # Conan 1.x conan export external/snappy snappy/1.1.10@ + # Conan 2.x + conan export --version 1.1.10 external/snappy ``` Export our [Conan recipe for RocksDB](./external/rocksdb). It does not override paths to dependencies when building with Visual Studio. ``` + # Conan 1.x conan export external/rocksdb rocksdb/6.29.5@ + # Conan 2.x + conan export --version 6.29.5 external/rocksdb ``` Export our [Conan recipe for SOCI](./external/soci). It patches their CMake to correctly import its dependencies. ``` + # Conan 1.x conan export external/soci soci/4.0.3@ + # Conan 2.x + conan export --version 4.0.3 external/soci ``` ### Build and Test @@ -196,13 +208,13 @@ It patches their CMake to correctly import its dependencies. generated by the first. You can pass the build type on the command line with `--settings build_type=$BUILD_TYPE` or in the profile itself, under the section `[settings]` with the key `build_type`. - + If you are using a Microsoft Visual C++ compiler, then you will need to ensure consistency between the `build_type` setting and the `compiler.runtime` setting. - + When `build_type` is `Release`, `compiler.runtime` should be `MT`. - + When `build_type` is `Debug`, `compiler.runtime` should be `MTd`. ``` diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7c924209ef3..cfc0e618cfe 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -6,6 +6,95 @@ This document contains the release notes for `rippled`, the reference server imp Have new ideas? Need help with setting up your node? [Please open an issue here](https://github.com/xrplf/rippled/issues/new/choose). +# Version 2.2.0 + +Version 2.2.0 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release adds performance optimizations, several bug fixes, and introduces the `featurePriceOracle`, `fixEmptyDID`, `fixXChainRewardRounding`, `fixPreviousTxnID`, and `fixAMMv1_1` amendments. + +[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server) + + + +## Action Required + +Five new amendments are now open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators. + +If you operate an XRP Ledger server, upgrade to version 2.2.0 by June 17, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network. + +If you operate a Clio server, Clio needs to be updated to 2.1.2 before updating to rippled 2.2.0. Clio will be blocked if it is not updated. + +## Changelog + +### Amendments and New Features +(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.) + +- **featurePriceOracle** amendment: Implements a price oracle as defined in the [XLS-47](https://github.com/XRPLF/XRPL-Standards/blob/master/XLS-47d-PriceOracles/README.md) spec. A Price Oracle is used to bring real-world data, such as market prices, onto the blockchain, enabling dApps to access and utilize information that resides outside the blockchain. [#4789](https://github.com/XRPLF/rippled/pull/4789) + +- **fixEmptyDID** amendment: Modifies the behavior of the DID amendment: adds an additional check to ensure that DIDs are non-empty when created, and returns a `tecEMPTY_DID` error if the DID would be empty. [#4950](https://github.com/XRPLF/rippled/pull/4950) + +- **fixXChainRewardRounding** amendment: Modifies the behavior of the XChainBridge amendment: fixes rounding so reward shares are always rounded down, even when the `fixUniversalNumber` amendment is active. [#4933](https://github.com/XRPLF/rippled/pull/4933) + +- **fixPreviousTxnID** amendment: Adds `PreviousTxnID` and `PreviousTxnLgrSequence` as fields to all ledger entries that did not already have them included (`DirectoryNode`, `Amendments`, `FeeSettings`, `NegativeUNL`, and `AMM`). Existing ledger entries will gain the fields whenever transactions modify those entries. [#4751](https://github.com/XRPLF/rippled/pull/4751). + +- **fixAMMv1_1** amendment: Fixes AMM offer rounding and low quality order book offers from blocking the AMM. [#4983](https://github.com/XRPLF/rippled/pull/4983) + +- Add a non-admin version of `feature` API method. [#4781](https://github.com/XRPLF/rippled/pull/4781) + +### 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.) + +- Optimize the base58 encoder and decoder. The algorithm is now about 10 times faster for encoding and 15 times faster for decoding. [#4327](https://github.com/XRPLF/rippled/pull/4327) + +- Optimize the `account_tx` SQL query. [#4955](https://github.com/XRPLF/rippled/pull/4955) + +- Don't reach consensus as quickly if no other proposals are seen. [#4763](https://github.com/XRPLF/rippled/pull/4763) + +- Fix a potential deadlock in the database module. [#4989](https://github.com/XRPLF/rippled/pull/4989) + +- Enforce no duplicate slots from incoming connections. [#4944](https://github.com/XRPLF/rippled/pull/4944) + +- Fix an order book update variable swap. [#4890](https://github.com/XRPLF/rippled/pull/4890) + +### Docs and Build System + +- Add unit test to raise the test coverage of the AMM. [#4971](https://github.com/XRPLF/rippled/pull/4971) + +- Improve test coverage reporting. [#4977](https://github.com/XRPLF/rippled/pull/4977) + +### GitHub + +The public source code repository for `rippled` is hosted on GitHub at . + +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: + +Alex Kremer +Alloy Networks <45832257+alloynetworks@users.noreply.github.com> +Bronek Kozicki +Chenna Keshava +Denis Angell +Ed Hennis +Gregory Tsipenyuk +Howard Hinnant +John Freeman +Mark Travis +Mayukha Vadari +Michael Legleux +Nik Bougalis +Olek <115580134+oleks-rip@users.noreply.github.com> +Scott Determan +Snoppy + +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: + + ## Version 2.1.1 The `rippled` 2.1.1 release fixes a critical bug in the integration of AMMs with the payment engine. diff --git a/conanfile.py b/conanfile.py index 10eeb6e3ca7..8c4068ecf69 100644 --- a/conanfile.py +++ b/conanfile.py @@ -24,17 +24,13 @@ class Xrpl(ConanFile): } requires = [ - 'boost/1.82.0', 'date/3.0.1', 'grpc/1.50.1', 'libarchive/3.6.2', - 'lz4/1.9.3', 'nudb/2.0.8', 'openssl/1.1.1u', - 'protobuf/3.21.9', 'snappy/1.1.10', 'soci/4.0.3', - 'sqlite3/3.42.0', 'zlib/1.2.13', 'xxhash/0.8.2', ] @@ -55,43 +51,43 @@ class Xrpl(ConanFile): 'tests': True, 'unity': False, - 'cassandra-cpp-driver:shared': False, - 'cassandra-cpp-driver:use_atomic': None, - 'date:header_only': True, - 'grpc:shared': False, - 'grpc:secure': True, - 'libarchive:shared': False, - 'libarchive:with_acl': False, - 'libarchive:with_bzip2': False, - 'libarchive:with_cng': False, - 'libarchive:with_expat': False, - 'libarchive:with_iconv': False, - 'libarchive:with_libxml2': False, - 'libarchive:with_lz4': True, - 'libarchive:with_lzma': False, - 'libarchive:with_lzo': False, - 'libarchive:with_nettle': False, - 'libarchive:with_openssl': False, - 'libarchive:with_pcreposix': False, - 'libarchive:with_xattr': False, - 'libarchive:with_zlib': False, - 'libpq:shared': False, - 'lz4:shared': False, - 'openssl:shared': False, - 'protobuf:shared': False, - 'protobuf:with_zlib': True, - 'rocksdb:enable_sse': False, - 'rocksdb:lite': False, - 'rocksdb:shared': False, - 'rocksdb:use_rtti': True, - 'rocksdb:with_jemalloc': False, - 'rocksdb:with_lz4': True, - 'rocksdb:with_snappy': True, - 'snappy:shared': False, - 'soci:shared': False, - 'soci:with_sqlite3': True, - 'soci:with_boost': True, - 'xxhash:shared': False, + 'cassandra-cpp-driver/*:shared': False, + 'cassandra-cpp-driver/*:use_atomic': None, + 'date/*:header_only': True, + 'grpc/*:shared': False, + 'grpc/*:secure': True, + 'libarchive/*:shared': False, + 'libarchive/*:with_acl': False, + 'libarchive/*:with_bzip2': False, + 'libarchive/*:with_cng': False, + 'libarchive/*:with_expat': False, + 'libarchive/*:with_iconv': False, + 'libarchive/*:with_libxml2': False, + 'libarchive/*:with_lz4': True, + 'libarchive/*:with_lzma': False, + 'libarchive/*:with_lzo': False, + 'libarchive/*:with_nettle': False, + 'libarchive/*:with_openssl': False, + 'libarchive/*:with_pcreposix': False, + 'libarchive/*:with_xattr': False, + 'libarchive/*:with_zlib': False, + 'libpq/*:shared': False, + 'lz4/*:shared': False, + 'openssl/*:shared': False, + 'protobuf/*:shared': False, + 'protobuf/*:with_zlib': True, + 'rocksdb/*:enable_sse': False, + 'rocksdb/*:lite': False, + 'rocksdb/*:shared': False, + 'rocksdb/*:use_rtti': True, + 'rocksdb/*:with_jemalloc': False, + 'rocksdb/*:with_lz4': True, + 'rocksdb/*:with_snappy': True, + 'snappy/*:shared': False, + 'soci/*:shared': False, + 'soci/*:with_sqlite3': True, + 'soci/*:with_boost': True, + 'xxhash/*:shared': False, } def set_version(self): @@ -107,6 +103,10 @@ def configure(self): self.options['boost'].visibility = 'global' def requirements(self): + self.requires('boost/1.82.0', force=True) + self.requires('lz4/1.9.3', force=True) + self.requires('protobuf/3.21.9', force=True) + self.requires('sqlite3/3.42.0', force=True) if self.options.jemalloc: self.requires('jemalloc/5.3.0') if self.options.reporting: @@ -116,7 +116,12 @@ def requirements(self): self.requires('rocksdb/6.29.5') exports_sources = ( - 'CMakeLists.txt', 'Builds/*', 'bin/getRippledInfo', 'src/*', 'cfg/*', 'external/*' + 'CMakeLists.txt', + 'Builds/*', + 'bin/getRippledInfo', + 'cfg/*' + 'external/*', + 'src/*', ) def layout(self): @@ -163,8 +168,18 @@ def package_info(self): libxrpl.includedirs = ['include', 'include/ripple/proto'] libxrpl.requires = [ 'boost::boost', - 'openssl::crypto', 'date::date', 'grpc::grpc++', + 'libarchive::libarchive', + 'lz4::lz4', + 'nudb::nudb', + 'openssl::crypto', + 'protobuf::libprotobuf', + 'snappy::snappy', + 'soci::soci', + 'sqlite3::sqlite', 'xxhash::xxhash', + 'zlib::zlib', ] + if self.options.rocksdb: + libxrpl.requires.append('rocksdb::librocksdb') diff --git a/src/ripple/protocol/impl/BuildInfo.cpp b/src/ripple/protocol/impl/BuildInfo.cpp index 4d1285b33b5..8a83011e906 100644 --- a/src/ripple/protocol/impl/BuildInfo.cpp +++ b/src/ripple/protocol/impl/BuildInfo.cpp @@ -33,7 +33,7 @@ namespace BuildInfo { // and follow the format described at http://semver.org/ //------------------------------------------------------------------------------ // clang-format off -char const* const versionString = "2.2.0-rc3" +char const* const versionString = "2.2.0" // clang-format on #if defined(DEBUG) || defined(SANITIZER)