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