Notable changes
Fixes
This release fixes an issue that could potentially cause a node to crash with the log message "The wallet's best block hash <hash>
was not detected in restored chain state. Giving up; please restart with -rescan
."
Additionally, a bug that could cause an assertion failure during reindexing has been fixed. See #6387 for details.
Known issues
- When
zcashd
is started with -reindex
, until the node's chain tip catches back up to the main chain, RPC calls might block for long periods of time (or time out), and the wallet's view of the chain may lag significantly behind the node's chain tip. See #6406 for details and the fix (which will be included in the next release).
Transparent pool and chain supply tracking
Since v2.0.0, zcashd
has tracked the change in value within the Sprout and Sapling shielded pools for each block; v5.0.0 added the Orchard pool. This release completes the set, by tracking the change in value within the "transparent" pool (more precisely, the value stored in Bitcoin-style UTXOs).
zcashd
also now tracks the change in "chain supply" for each block, defined as the sum of coinbase output values, minus unclaimed fees. This is precisely equal to the sum of the value in the transparent and shielded pools, and equivalent to the sum of all unspent coins/notes on the chain. It is bounded above by the theoretical maximum supply, but in practice is lower due to, for example, miners not claiming transaction fees.
Bitcoin-style consensus rules implement fees as an imbalance between spent coins/notes and newly-created coins/notes. The consensus rules require that a coinbase transaction's outputs have a total value no greater than the sum of that block's subsidy and the fees made available by the transactions in the block. However, the consensus rules do not require that all of the available funds are claimed, and a miner can create coinbase transactions with lower value in the outputs (though in the case of Zcash, the consensus rules do require the transaction to include ZIP 1014 Funding Stream outputs).
After upgrading to v5.4.0, zcashd
will start tracking changes in transparent pool value and chain supply from the height at which it is restarted. Block heights prior to this will not have any information recorded. To track changes from genesis, and thus monitor the total transparent pool size and chain supply, you would need to restart your node with the -reindex
option.
Wallet Performance Fixes
The 100MiB memory limit for the batch scanner has been replaced by a 1000-block limit. This eliminates an expensive call to determine the current memory usage of the batch scanner.
The following associated metric has been removed from the set of metrics reported when -prometheusport
is set:
- (gauge)
zcashd.wallet.batchscanner.usage.bytes
RPC Changes
z_sendmany
will no longer select transparent coinbase when "ANY_TADDR" is used as the fromaddress
. It was already documented to do this, but the previous behavior didn’t match. When coinbase notes were selected in this case, they would (properly) require that the transaction didn’t have any change, but this could be confusing, as the documentation stated that these two conditions (using "ANY_TADDR" and disallowing change) wouldn’t coincide.
- A new value pool object with
"id": "transparent"
has been added to the valuePools
list in getblockchaininfo
and getblock
.
- A new
chainSupply
key has been added to getblockchaininfo
and getblock
to report the total chain supply as of that block height (if tracked), and the change in chain supply caused by the block (for getblock
, if measured).
Mining
- Changes to
getblocktemplate
have been backported from upstream Bitcoin Core, to significantly improve its performance by doing more work ahead of time in the mempool (and reusing the work across multiple getblocktemplate
calls).
The following features have been deprecated, but remain available by default. These features may be disabled by setting -allowdeprecated=none
. 18 weeks after this release, these features will be disabled by default and the following flags to -allowdeprecated
will be required to permit their continued use:
gbt_oldhashes
: the finalsaplingroothash
, lightclientroothash
, and blockcommitmentshash
fields in the output of getblocktemplate
have been replaced by the defaultroots
field.
The following previously-deprecated features have been disabled by default, and will be removed in 18 weeks:
legacy_privacy
getnewaddress
getrawchangeaddress
z_getnewaddress
z_listaddresses
addrtype
wallettxvjoinsplit
The following previously-deprecated features have been removed:
dumpwallet
zcrawreceive
zcrawjoinsplit
zcrawkeygen
Platform Support
- CentOS 8 has been removed from the list of supported platforms. It reached EoL on December 31st 2021, and does not satisfy our Tier 2 policy requirements.