diff --git a/README.md b/README.md index cdba61ea0..7f7fbcc16 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Zcash 5.4.0 +Zcash 5.4.1 =========== diff --git a/configure.ac b/configure.ac index c3591944b..8a043c318 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 5) define(_CLIENT_VERSION_MINOR, 4) -define(_CLIENT_VERSION_REVISION, 0) +define(_CLIENT_VERSION_REVISION, 1) define(_CLIENT_VERSION_BUILD, 50) define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50))) define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1))) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index ef30326cf..1e9390894 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,9 @@ +zcash (5.4.1) stable; urgency=medium + + * 5.4.1 release. + + -- Electric Coin Company Mon, 13 Feb 2023 18:10:07 +0000 + zcash (5.4.0) stable; urgency=medium * 5.4.0 release. diff --git a/contrib/gitian-descriptors/gitian-linux-parallel.yml b/contrib/gitian-descriptors/gitian-linux-parallel.yml index 23f383025..11eadc822 100644 --- a/contrib/gitian-descriptors/gitian-linux-parallel.yml +++ b/contrib/gitian-descriptors/gitian-linux-parallel.yml @@ -1,5 +1,5 @@ --- -name: "zcash-5.4.0" +name: "zcash-5.4.1" enable_cache: true distro: "debian" suites: diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index d614acf01..cd40a4148 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "zcash-5.4.0" +name: "zcash-5.4.1" enable_cache: true distro: "debian" suites: diff --git a/doc/authors.md b/doc/authors.md index 8d81748cb..78ffe3c31 100644 --- a/doc/authors.md +++ b/doc/authors.md @@ -1,7 +1,7 @@ Zcash Contributors ================== -Jack Grigg (1296) +Jack Grigg (1297) Kris Nuttycombe (618) Simon Liu (460) Sean Bowe (389) diff --git a/doc/man/zcash-cli.1 b/doc/man/zcash-cli.1 index f570e8897..f5a940622 100644 --- a/doc/man/zcash-cli.1 +++ b/doc/man/zcash-cli.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. -.TH ZCASH-CLI "1" "February 2023" "zcash-cli v5.4.0" "User Commands" +.TH ZCASH-CLI "1" "February 2023" "zcash-cli v5.4.1" "User Commands" .SH NAME -zcash-cli \- manual page for zcash-cli v5.4.0 +zcash-cli \- manual page for zcash-cli v5.4.1 .SH DESCRIPTION -Zcash RPC client version v5.4.0 +Zcash RPC client version v5.4.1 .PP In order to ensure you are adequately protecting your privacy when using Zcash, please see . diff --git a/doc/man/zcash-tx.1 b/doc/man/zcash-tx.1 index 2510a22df..2d1b03cba 100644 --- a/doc/man/zcash-tx.1 +++ b/doc/man/zcash-tx.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. -.TH ZCASH-TX "1" "February 2023" "zcash-tx v5.4.0" "User Commands" +.TH ZCASH-TX "1" "February 2023" "zcash-tx v5.4.1" "User Commands" .SH NAME -zcash-tx \- manual page for zcash-tx v5.4.0 +zcash-tx \- manual page for zcash-tx v5.4.1 .SH DESCRIPTION -Zcash zcash\-tx utility version v5.4.0 +Zcash zcash\-tx utility version v5.4.1 .SS "Usage:" .TP zcash\-tx [options] [commands] diff --git a/doc/man/zcashd-wallet-tool.1 b/doc/man/zcashd-wallet-tool.1 index 83713689b..43970617c 100644 --- a/doc/man/zcashd-wallet-tool.1 +++ b/doc/man/zcashd-wallet-tool.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. -.TH ZCASHD-WALLET-TOOL "1" "February 2023" "zcashd-wallet-tool v5.4.0" "User Commands" +.TH ZCASHD-WALLET-TOOL "1" "February 2023" "zcashd-wallet-tool v5.4.1" "User Commands" .SH NAME -zcashd-wallet-tool \- manual page for zcashd-wallet-tool v5.4.0 +zcashd-wallet-tool \- manual page for zcashd-wallet-tool v5.4.1 .SH SYNOPSIS .B zcashd-wallet-tool [\fI\,OPTIONS\/\fR] diff --git a/doc/man/zcashd.1 b/doc/man/zcashd.1 index ee273ce8f..4a9e7c8c5 100644 --- a/doc/man/zcashd.1 +++ b/doc/man/zcashd.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. -.TH ZCASHD "1" "February 2023" "zcashd v5.4.0" "User Commands" +.TH ZCASHD "1" "February 2023" "zcashd v5.4.1" "User Commands" .SH NAME -zcashd \- manual page for zcashd v5.4.0 +zcashd \- manual page for zcashd v5.4.1 .SH DESCRIPTION -Zcash Daemon version v5.4.0 +Zcash Daemon version v5.4.1 .PP In order to ensure you are adequately protecting your privacy when using Zcash, please see . diff --git a/doc/release-notes/release-notes-5.4.1.md b/doc/release-notes/release-notes-5.4.1.md new file mode 100644 index 000000000..d3f2c675c --- /dev/null +++ b/doc/release-notes/release-notes-5.4.1.md @@ -0,0 +1,46 @@ +Notable changes +=============== + +`allowdeprecated` in `zcash.conf` +--------------------------------- + +In v5.0.0 a [feature deprecation framework](https://zcash.github.io/zcash/user/deprecation.html) +was released, to enable `zcashd` features to be formally deprecated and removed: + +- In stage 1, a feature is marked as deprecated, but otherwise left as-is. It + remains in this stage for at least 18 weeks. +- In stage 2, the feature is default-disabled, but can be re-enabled with the + `-allowdeprecated` config option. It remains in this stage for at least 18 + weeks. +- Finally, the feature is removed - either entirely, or (e.g. in the case of RPC + methods that were inherited from Bitcoin Core) with a "tombstone" left to + inform users of the removal (and what to use instead if applicable). + +Config options can be specified either as a `zcashd` argument (`-option=value`) +or in `zcash.conf` (as a `option=value` line). However, due to a bug in the +implementation, `allowdeprecated=feature` lines in `zcash.conf` were ignored. +The bug went unnoticed until v5.4.0, in which the first group of features moved +from stage 1 to stage 2. This hotfix release fixes the bug. + +Fixed RPC blocking and wallet view lag on reindex +------------------------------------------------- + +The known issue reported in the v5.4.0 release notes has been fixed. + + +Changelog +========= + +Jack Grigg (8): + Sleep for 200us before each ActivateBestChainStep call + Load `-allowdeprecated` settings after reading the config file + qa: Refactor `wallet_deprecation` test to extract common logic + qa: Extend `wallet_deprecation` to test `allowdeprecated` in config file + Write release notes for v5.4.1 + Postpone dependency updates for v5.4.1 + make-release.py: Versioning changes for 5.4.1. + make-release.py: Updated manpages for 5.4.1. + +Jack Grigg (1): + Adjust documentation of 200µs sleep + diff --git a/qa/rpc-tests/wallet_deprecation.py b/qa/rpc-tests/wallet_deprecation.py index e735470d0..ddbfc8a55 100755 --- a/qa/rpc-tests/wallet_deprecation.py +++ b/qa/rpc-tests/wallet_deprecation.py @@ -12,22 +12,48 @@ from test_framework.util import ( ) from test_framework.authproxy import JSONRPCException +import os.path + +# Pick a subset of the deprecated RPC methods to test with. This test assumes that +# the deprecation feature name is the same as the RPC method name, and that the RPC +# method works without any arguments. +DEFAULT_ENABLED = [ + "z_gettotalbalance", +] +DEFAULT_DISABLED = [ + "getnewaddress", + "z_getnewaddress", +] + # Test wallet address behaviour across network upgrades class WalletDeprecationTest(BitcoinTestFramework): def __init__(self): super().__init__() self.num_nodes = 1 - def setup_network(self): - self.setup_network_internal([]) + def setup_chain(self): + super().setup_chain() + # Save a copy of node 0's zcash.conf + with open(os.path.join(self.options.tmpdir, "node0", "zcash.conf"), 'r', encoding='utf8') as f: + self.conf_lines = f.readlines() - def setup_network_internal(self, allowed_deprecated = []): + def setup_network(self): + self.setup_network_with_args([]) + + def setup_network_with_args(self, allowed_deprecated): dep_args = ["-allowdeprecated=" + v for v in allowed_deprecated] self.nodes = start_nodes( self.num_nodes, self.options.tmpdir, extra_args=[dep_args] * self.num_nodes) + def setup_network_with_config(self, allowed_deprecated): + conf_lines = self.conf_lines + ["allowdeprecated={}\n".format(v) for v in allowed_deprecated] + with open(os.path.join(self.options.tmpdir, "node0", "zcash.conf"), 'w', encoding='utf8') as f: + f.writelines(conf_lines) + + self.nodes = start_nodes(self.num_nodes, self.options.tmpdir) + def verify_enabled(self, function): try: getattr(self.nodes[0], function)() @@ -50,16 +76,17 @@ class WalletDeprecationTest(BitcoinTestFramework): "failed with '%s'" % errorString if len(errorString) > 0 else "succeeded", )) - def run_test(self): - # Pick a subset of the deprecated RPC methods to test with. This test assumes that - # the deprecation feature name is the same as the RPC method name. - DEFAULT_ENABLED = [ - ] - DEFAULT_DISABLED = [ - "getnewaddress", - "z_getnewaddress", - ] + def test_case(self, start_mode, features_to_allow, expected_state): + stop_nodes(self.nodes) + wait_bitcoinds() + start_mode(features_to_allow) + for function in DEFAULT_ENABLED: + expected_state(function) + for function in DEFAULT_DISABLED: + expected_state(function) + + def run_test(self): # RPC methods that are deprecated but enabled by default should succeed for function in DEFAULT_ENABLED: self.verify_enabled(function) @@ -68,25 +95,12 @@ class WalletDeprecationTest(BitcoinTestFramework): for function in DEFAULT_DISABLED: self.verify_disabled(function) - # restart with a specific selection of deprecated methods enabled - stop_nodes(self.nodes) - wait_bitcoinds() - self.setup_network_internal(DEFAULT_DISABLED) + for start_mode in (self.setup_network_with_args, self.setup_network_with_config): + # restart with a specific selection of deprecated methods enabled + self.test_case(start_mode, DEFAULT_DISABLED, self.verify_enabled) - for function in DEFAULT_ENABLED: - self.verify_enabled(function) - for function in DEFAULT_DISABLED: - self.verify_enabled(function) - - # restart with no deprecated methods enabled - stop_nodes(self.nodes) - wait_bitcoinds() - self.setup_network_internal(["none"]) - - for function in DEFAULT_ENABLED: - self.verify_disabled(function) - for function in DEFAULT_DISABLED: - self.verify_disabled(function) + # restart with no deprecated methods enabled + self.test_case(start_mode, ["none"], self.verify_disabled) if __name__ == '__main__': WalletDeprecationTest().main() diff --git a/qa/zcash/postponed-updates.txt b/qa/zcash/postponed-updates.txt index c83172961..0f30ac5e5 100644 --- a/qa/zcash/postponed-updates.txt +++ b/qa/zcash/postponed-updates.txt @@ -4,6 +4,8 @@ # bdb 18.1.40 2020-09-01 # +native_zstd 1.5.4 2023-03-01 + # cxx 1.0.84-1.0.87 didn't update third-party/Cargo.lock native_cxxbridge 1.0.84 2024-02-01 native_cxxbridge 1.0.85 2024-02-01 @@ -11,12 +13,14 @@ native_cxxbridge 1.0.86 2024-02-01 native_cxxbridge 1.0.87 2024-02-01 native_cxxbridge 1.0.88 2024-02-01 native_cxxbridge 1.0.89 2024-02-01 +native_cxxbridge 1.0.90 2024-02-01 rustcxx 1.0.84 2024-02-01 rustcxx 1.0.85 2024-02-01 rustcxx 1.0.86 2024-02-01 rustcxx 1.0.87 2024-02-01 rustcxx 1.0.88 2024-02-01 rustcxx 1.0.89 2024-02-01 +rustcxx 1.0.90 2024-02-01 # CCache 4.7 appears to drop support for Ubuntu 18.04 native_ccache 4.7 2023-03-01 @@ -46,6 +50,7 @@ native_rust 1.65.0 2023-03-01 native_rust 1.66.0 2023-03-01 native_rust 1.66.1 2023-03-01 native_rust 1.67.0 2023-03-01 +native_rust 1.67.1 2023-03-01 # We're never updating to this version bdb 18.1.40 2024-02-01 diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 2c9c0e14a..152044ac7 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -94,14 +94,6 @@ bool AppInit(int argc, char* argv[]) return true; } - // Handle setting of allowed-deprecated features as early as possible - // so that it's possible for other initialization steps to respect them. - auto deprecationError = SetAllowedDeprecatedFeaturesFromCLIArgs(); - if (deprecationError.has_value()) { - fprintf(stderr, "%s", deprecationError.value().c_str()); - return false; - } - try { if (!fs::is_directory(GetDataDir(false))) @@ -143,6 +135,14 @@ bool AppInit(int argc, char* argv[]) return false; } + // Handle setting of allowed-deprecated features as early as possible + // so that it's possible for other initialization steps to respect them. + auto deprecationError = LoadAllowedDeprecatedFeatures(); + if (deprecationError.has_value()) { + fprintf(stderr, "%s", deprecationError.value().c_str()); + return false; + } + // Command-line RPC bool fCommandLine = false; for (int i = 1; i < argc; i++) diff --git a/src/clientversion.h b/src/clientversion.h index 255dab614..69498dbee 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -17,7 +17,7 @@ //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 5 #define CLIENT_VERSION_MINOR 4 -#define CLIENT_VERSION_REVISION 0 +#define CLIENT_VERSION_REVISION 1 #define CLIENT_VERSION_BUILD 50 //! Set to true for release, false for prerelease or test build diff --git a/src/deprecation.cpp b/src/deprecation.cpp index 47569752c..cb9ad1e26 100644 --- a/src/deprecation.cpp +++ b/src/deprecation.cpp @@ -61,7 +61,7 @@ void EnforceNodeDeprecation(int nHeight, bool forceLogging, bool fThread) { } } -std::optional SetAllowedDeprecatedFeaturesFromCLIArgs() { +std::optional LoadAllowedDeprecatedFeatures() { auto args = GetMultiArg("-allowdeprecated"); std::set allowdeprecated(args.begin(), args.end()); diff --git a/src/deprecation.h b/src/deprecation.h index 565cca66c..fb81f695b 100644 --- a/src/deprecation.h +++ b/src/deprecation.h @@ -10,7 +10,7 @@ // Per https://zips.z.cash/zip-0200 // Shut down nodes running this version of code, 16 weeks' worth of blocks after the estimated // release block height. A warning is shown during the 14 days' worth of blocks prior to shut down. -static const int APPROX_RELEASE_HEIGHT = 1977500; +static const int APPROX_RELEASE_HEIGHT = 1983000; static const int RELEASE_TO_DEPRECATION_WEEKS = 16; static const int EXPECTED_BLOCKS_PER_HOUR = 3600 / Consensus::POST_BLOSSOM_POW_TARGET_SPACING; static_assert(EXPECTED_BLOCKS_PER_HOUR == 48, "The value of Consensus::POST_BLOSSOM_POW_TARGET_SPACING was chosen such that this assertion holds."); @@ -71,13 +71,13 @@ extern bool fEnableWalletTxVJoinSplit; void EnforceNodeDeprecation(int nHeight, bool forceLogging=false, bool fThread=true); /** - * Checks command-line arguments for enabling and/or disabling of deprecated + * Checks config options for enabling and/or disabling of deprecated * features and sets flags that enable deprecated features accordingly. * * @return std::nullopt if successful, or an error message indicating what * values are permitted for `-allowdeprecated`. */ -std::optional SetAllowedDeprecatedFeaturesFromCLIArgs(); +std::optional LoadAllowedDeprecatedFeatures(); /** * Returns a comma-separated list of the valid arguments to the -allowdeprecated