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 `` was not detected in restored chain state. Giving up; please restart with `-rescan`." 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](https://zips.z.cash/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 will need to restart your node with the `-reindex` option. 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). [Deprecations](https://zcash.github.io/zcash/user/deprecation.html) -------------- 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_getbalance` - `z_gettotalbalance` - `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. Changelog ========= Alex Morcos (3): Make accessing mempool parents and children public Expose FormatStateMessage Rewrite CreateNewBlock Alfredo Garcia (1): Add chain supply and transparent value to block index. Carl Dong (4): depends: More robust cmake invocation depends: Cleanup CMake invocation depends: Prepend CPPFLAGS to C{,XX}FLAGS for CMake depends: Specify LDFLAGS to cmake as well Daira Hopwood (6): Add tl::expected. refs #4816 The std::expected proposal has unnecessary instances of undefined behaviour for operator->, operator*, and error(). Make these into assertion failures (this still conforms to the proposal). Refactor HaveShieldedRequirements to use tl::expected (example with a void T) and rename it to CheckShieldedRequirements. tl::expected follow-up to address @str4d's comments. Cleanup after removing dumpwallet. Change the time that the wallet will wait for the block index to load from 5 minutes to 2 hours. Dimitris Apostolou (2): Fix typos Fix typos Greg Pfeil (22): Add PrivacyPolicyMeet Remove trailing whitespace in fetch-params.sh Migrate fetch-params.sh to bash Scope the fetch-params lock file to the user Update comments to match changed tests Put utf8.h in the correct place Don’t select transparent coinbase with ANY_TADDR Update failing tests after fixing ANY_TADDR behavior Apply suggestions from code review Apply suggestions from code review Appease ShellCheck Defer fixing docker/entrypoint.sh lint failure Apply suggestions from code review Fix a minor bug in docker/entrypoint.sh Improve PrivacyPolicy comments Apply suggestions from code review Add release notes Update src/wallet/asyncrpcoperation_sendmany.cpp Fix a missing newline in the RPC docs No longer test_received_sprout Use cached sprout addresses rather than funding Update overwinter test to not shield to Sprout Jack Grigg (45): test: Handle mining slow start inside `CreateNewBlock_validity` test: Improve CreateNewBlock_validity exception checks txdb: Remove const annotation from blockinfo iterator type Remove `dumpwallet` RPC method qa: Refactor `wallet_deprecation` test to simplify deprecation changes Remove `zcraw*` RPC methods txdb: Clean up for loop syntax in `WriteBatchSync` Disable previously-deprecated features by default Deprecate old hash fields of `getblocktemplate` qa: Change show_help RPC test to print out differences qa: Update mempool_packages RPC test after deprecation ratcheting qa: Import Rust crate audits from Firefox qa: Import Rust crate audits from the Bytecode Alliance qa: Import Rust crate audits from Embark Studios qa: Remove audit-as-crates-io for non-third-party crates cargo update zcash_primitives 0.9 clearscreen 2.0 depends: googletest 1.12.1 Remove CentOS 8 as a supported platform depends: native_zstd 1.5.2 depends: native_ccache 4.6.3 depends: Add package for native_cmake 3.25.1 depends: Force cmake to install libzstd in lib/ build-aux: Update Boost macros to latest serials build: Bump required Boost version depends: Force Boost library to be installed in lib/ depends: Add tl_expected to update checker depends: Boost 1.81.0 depends: utfcpp 3.2.3 qa: Postpone LLVM 15 and CCache 4.7 updates depends: Update cxx to 1.0.83 cargo update Document -clockoffset option qa: Update show_help RPC test doc: Fix arguments to make-release.py in hotfix process depends: CMake 3.25.2 make-release.py: Versioning changes for 5.4.0-rc1. make-release.py: Updated manpages for 5.4.0-rc1. make-release.py: Updated release notes and changelog for 5.4.0-rc1. depends: Update cxx to 1.0.87 metrics: Update `zcash.pool.value.zatoshis` gauge for transparent pool Update release notes with notable changes for v5.4.0 make-release.py: Versioning changes for 5.4.0-rc2. make-release.py: Updated manpages for 5.4.0-rc2. James O'Beirne (2): Clarify help messages for path args to mention datadir prefix Add AbsPathForConfigVal to consolidate datadir prefixing for path args Kris Nuttycombe (14): Add TransactionStrategy::IsCompatibleWith Modify TransactionBuilder to use the standard default fee. Factor out memo parsing from asyncrpcoperation_sendmany Remove mergetoaddress_sprout test as sending to Sprout is no longer supported. Remove wallet_shieldcoinbase_sprout test. Update `mergetoaddress_mixednotes.py` to no longer send to Sprout. Verify sum of pool balances against chain total supply. Apply suggestions from code review Add script for verifying block rewards and fees not claimed by miners. Apply suggestions from code review Remove unnecessary delta_count variable. Replace fix-copyright-headers.py with a script that creates a scripted-diff git commit. scripted-diff: Update Zcash copyrights to 2023 Apply suggestions from code review Marco Falke (4): [init] Add missing help for args [init] Help Msg: Use Params(CBaseChainParams::MAIN) Clarify mocktime help message init: Fix help message for checkblockindex Marius Kjærstad (5): Hardened checkpoint update at block 1860000 for mainnet Update src/chainparams.cpp Some more formatting changes to chainparams.cpp Forgot to add 0x Add some more historical checkpoints Mark Friedenbach (1): Prevent block.nTime from decreasing Marshall Gaucher (4): Update zcash-build-bench.yml Update README.md Update contrib/ci-builders/tekton/tekton-labs/tasks/zcash-build.yml Update contrib/ci-builders/tekton/tekton-labs/tasks/zcash-build-test.yml Michał Janiszewski (1): Update debian/compat to version 13 Russell Yanofsky (2): depends: Add CMake helper for building packages depends: Set CMAKE_INSTALL_RPATH for native packages Suhas Daftuar (3): Track transaction packages in CTxMemPoolEntry Add test showing bug in mempool packages Fix mempool package tracking edge case Wladimir J. van der Laan (1): rpc: Write authcookie atomically Marshall Gaucher (2): add basic tekton zcash env update memory targets with heaptrack