Notable changes =============== RPC Changes ----------- - `getdeprecationinfo` has several changes: - It now returns additional information about currently deprecated and disabled features. - A new `end_of_service` object that contains both the block height for end-of-service and the estimated time that the end-of-service halt is expected to occur. Note that this height is just an approximation and will change over time as the end-of-service block height approaches, due to the variability in block times. The `end_of_service` object is intended to replace the `deprecationheight` field; see the [Deprecations](#deprecations) section for additional detail. - This RPC method was previously only available for mainnet nodes; it is now also available for testnet and regtest nodes, in which case it does not return end-of-service halt information (as testnet and regtest nodes do not have an end-of-service halt feature.) - Several `z_sendmany`, `z_shieldcoinbase` and `z_mergetoaddress` failures have moved from synchronous to asynchronous, so while you should already be checking the async operation status, there are now more cases that may trigger failure at that stage. - The `AllowRevealedRecipients` privacy policy is now required in order to choose a transparent change address for a transaction. This will only occur when the wallet is unable to construct the transaction without selecting funds from the transparent pool, so the impact of this change is that for such transactions, the user must specify `AllowFullyTransparent`. - The `z_shieldcoinbase` and `z_mergetoaddress` RPC methods now support an optional privacy policy. - The `estimatepriority` RPC call has been removed. - The `priority_delta` argument to the `prioritisetransaction` RPC call now has no effect and must be set to a dummy value (0 or null). Changes to Transaction Fee Selection ------------------------------------ - The `-mintxfee` and `-sendfreetransactions` options have been removed. These options used to instruct the wallet's legacy transaction creation APIs (`sendtoaddress`, `sendmany`, and `fundrawtransaction`) to increase fees to this limit and to use a zero fee for "small" transactions that spend "old" inputs, respectively. They will now cause a warning on node startup if used. Changes to Block Template Construction -------------------------------------- We now use a new block template construction algorithm documented in [ZIP 317](https://zips.z.cash/zip-0317#recommended-algorithm-for-block-template-construction). - This algorithm no longer favours transactions that were previously considered "high priority" because they spent older inputs. The `-blockprioritysize` config option, which configured the portion of the block reserved for these transactions, has been removed and will now cause a warning if used. - The `-blockminsize` option, which configured the size of a portion of the block to be filled regardless of transaction fees or priority, has also been removed and will cause a warning if used. - A `-blockunpaidactionlimit` option has been added to control the limit on "unpaid actions" that will be accepted in a block for transactions paying less than the ZIP 317 fee. This defaults to 50. Removal of Priority Estimation ------------------------------ - Estimation of "priority" needed for a transaction to be included within a target number of blocks, and the associated `estimatepriority` RPC call, have been removed. The format for `fee_estimates.dat` has also changed to no longer save these priority estimates. It will automatically be converted to the new format which is not readable by prior versions of the software. The `-txconfirmtarget` config option is now obsolete and has also been removed. It will cause a warning if used. [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: - `deprecationinfo_deprecationheight`: The `deprecationheight` field of `getdeprecationinfo` has been deprecated and replaced by the `end_of_service` object. Changelog ========= ANISH M (3): use SOURCES_PATH instead of local git DEPENDS_SOURCES_DIR report the git-derived version in metrics screen Update src/metrics.cpp by removing v prefix. Alex Morcos (14): Refactor CreateNewBlock to be a method of the BlockAssembler class FIX: Account for txs already added to block in addPriorityTxs FIX: correctly measure size of priority block [rpc] Remove estimatepriority. [mining] Remove -blockprioritysize. [debug] Change -printpriority option [cleanup] Remove estimatePriority [rpc] sendrawtransaction no longer bypasses minRelayTxFee [test] Remove priority from tests [rpc] Remove priority information from mempool RPC calls [rpc] Remove priorityDelta from prioritisetransaction [cleanup] Remove coin age priority completely. Allow setting minrelaytxfee to 0 Update example zcash.conf Daira Emma Hopwood (34): Remove unnecessary #include. Adjust indentation to be consistent without changing existing code. Repair show_help RPC test. Fix bit-rotted code in miner tests. Implement ZIP 317 computations. `cargo update` Add audits for updates to futures-* 0.3.28 and redjubjub 0.7.0. Add `examine`, a wrapper around `std::visit` that reverses the arguments. Use the new `examine` macro to replace all instances of `std::visit(match {...}, specimen)`, improving code readability. Refactoring to avoid duplicated code. Refactoring to avoid an unnecessary temporary. Refactor that avoids using exceptions for local flow control and is simpler. Correct the documentation of `-rpcconnect` in the example `zcash.conf`. `-rpcconnect` is only used by `zcash-cli`. Change ZIP 401 mempool limiting to use conventional fee. Change ZIP 401 mempool limiting to use constants decided in zcash/zips#565. Warn on node startup if the removed `-blockprioritysize` option is set to a non-zero value. Log (at the mempool DEBUG level) when a transaction cannot be accepted to the mempool because its modified fee is below the minimum relay fee. Fix the dust threshold rate to three times 100 zats/1000 bytes. (We express it that way rather than 300 zats/1000 bytes, because the threshold is always rounded to an integer and then multiplied by 3.) Fix some messages, comments, and documentation that: * used "fee" to mean "fee rate", "kB" to mean 1000 bytes, "satoshis" to mean zatoshis, or that incorrectly used "BTC" in place of "ZEC"; * used obsolete concepts such as "zero fee" or "free transaction"; or * did not accurately document their applicability. Fix tests that failed due to the minimum relay fee being enforced. Fix miner_tests btest. Fix mempool_packages and prioritisetransaction RPC tests. Implement `GetUnpaidActionCount` and `GetWeightRatio` for ZIP 317. ZIP 317 block construction algorithm. This breaks tests which are repaired in subsequent commits. Add assertions that `GetRandInt*` functions are called with `nMax >= 0`. All existing uses have been checked to ensure they are consistent with this assertion. Repair `miner_tests.py` btest. Repair some RPC tests. mergetoaddress_helper.py: Use `generate_and_check` helper to mine a block and make sure that it contains the expected number of transactions. mergetoaddress_helper.py: use Decimal for amounts and integers otherwise. Remove the implementation of score-based block template construction and the `-blockminsize` option. Add a `-blockunpaidactionlimit` config option to configure the per-block limit on unpaid actions for ZIP 317 block template construction. miner_tests.cpp improvements. random.h documentation improvements. Fix/suppress clippy warnings. Daira Hopwood (9): Use a more recent URL format for GitHub release archives. Clarify that patches to a dependency are under the same license as that dependency. Update copyright date and email for tl_expected. Use the same convention for the tl_expected download files as for native_cctools Refactoring to split the weighted tx tree out of mempool_limit.{cpp,h} and make it more reusable. Minor optimization to weighted_map::remove This PR doesn't bring in any ZIP 317 changes yet Another minor optimization Change spelling of prioritisation in an error message DeckerSU (1): InsertBlockIndex: pass const reference on hash, instead of hash Dimitris Apostolou (3): Fix typo Update documentation link Fix typos Evan Klitzke (1): Fix automake warnings when running autogen.sh Greg Pfeil (81): Show in-progress tests when rpc-tests is interrupted Make extra newline more explicit Apply suggestions from code review Make pool selection order more flexible Simplify diversifier_index_t handling Update tests for async z_sendmany Limit UTXOs Some orchard fixes for wallet_tx_builder Return anchorHeight from ResolveInputsAndPayments Refactoring InsufficientFundsError Ensure we don’t make Orchard change pre-NU5 Test updates for z_sendmany WalletTxBuilder changes Fix weakened privacy policy for transparent change Fix some overly-strict privacy policies in btest Apply suggestions from code review Unify requireTransparentCoinbase handling Rename `Get*Balance` to `Get*Total` Remove changes that aren’t needed by z_sendmany Improve GetRequiredPrivacyPolicy Add release notes for (a)sync z_sendmany changes Assert that we get a change addr for any selector Don’t pass PrivacyPolicy to selector constructor Address comments on WalletTxBuilder introduction Make RPC test output more deterministic Update WalletTxBuilder based on review Clarify `AddressResolutionError` Don’t permit user-provided “internal” payments Address WalletTxBuilder PR feedback Ensure that a WalletTxBuilder tx balances Additional z_sendmany test cases Address WalletTxBuilder review feedback Apply suggestions for WalletTxBuilder from code review Simplify SelectOVKs Have GetRecipientPools return a copy Remove CWallet member from WalletTxBuilder Improve taddr no-memo check Update src/wallet/rpcwallet.cpp Lock notes (except Orchard) in wallet_tx_builder Improve Doxygen for note locking Require `AllowRevealedRecipients` for t-change Update release-notes for transparent change restriction Correct EditorConfig for Makefiles Split C++ generated from Rust into own lib Simplify canResolveOrchard logic Support ZIP 317 fees in the zcashd wallet Correct change handling for ZIP 317 fees Address review feedback re: ZIP 317 in wallet Revert "Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`" Eliminate LegacyCompat–ZTXOSelector cycle Simplify client.cpp Enrich zcash-cli arg conversion Better messages on client-side zcash-cli errors Fix accidental reversion of #6409 Remove unnecessary explicit privacy policy Use examine instead of std::visit Simplify some vector initialization Fix edge case revealed by #6409 Rename Arg* to Param Adjust wallet absurd fee check for ZIP 317 Address review feedback for ZIP 317 fees in wallet Address more ZIP 317 fee feedback Fix zcash-cli crash when printing help message Use null as the ZIP 317 fee sentinel instead of -1 Add z_sendmany RPC examples with fee field Have z_shieldcoinbase use WalletTxBuilder Address review feedback on z_shieldcoinbase Fix an incorrect error message in a test Minor improvements to z_shieldcoinbase Support ZIP 317 fees for legacy wallet operations Remove `-mintxfee` config option Address review comments re: legacy wallet ZIP 317 Remove `-txconfirmtarget` config option Restore previous `-maxtxfee` bound Correct -maxtxfee lower bound diagnostic messages WalletTxBuilder support for net payments fixup! WalletTxBuilder support for net payments Don’t test “Insufficient funds” for `z_shieldcoinbase` Update z_mergetoaddress to use WalletTxBuilder Many z_mergetoaddress updates Avoid extra copy in ResolveInputsAndPayments Address z_mergetoaddress review feedback Jack Grigg (77): rust: Add `cxx` version of `RustStream` rust: Migrate `OrchardMerkleFrontier` to `cxx` CreateNewBlock: Leave more space for Orchard shielded coinbase Retroactively enable ZIP 216 before NU5 activation rust: Compile with ThinLTO depends: Update Rust to 1.67.1 depends: Update Clang / libcxx to LLVM 15.0.6 Fix 1.67.1 clippy lints depends: Evaluate `native_packages` before `packages` qa: Fix year in postponement lines qa: Fix `google/leveldb` tag parsing in `updatecheck.py` qa: Handle commit IDs correctly to `updatecheck.py` depends: `cxx 1.0.91` depends: `native_zstd 1.5.4` `cargo vet regenerate imports` qa: Import Rust crate audits from ISRG `cargo update` qa: Postpone LevelDB 1.23 book: Add page with release support details and EoS halt heights Update release support book page in release process depends: Update Rust to 1.68.0 qa: Replace Firefox audits with aggregated Mozilla audits in registry qa: Import Rust crate audits from ChromeOS Move `fEnableAddrTypeField` outside `ENABLE_WALLET` `s/string/std::string` in `init.cpp` CI: Check that the PR branch has a sufficiently recent base for Tekton CI: Fix permissions for Checks workflow Add `CChainParams::RustNetwork` wallet: Consolidate `CWalletTx` Sapling output decryption methods wallet: Use `zcash_note_encryption` in `CWalletTx::DecryptSaplingNote` wallet: Use `CWalletTx::DecryptSaplingNote` in more places wallet: Use `zcash_note_encryption` in `CWallet::FindMySaplingNotes` wallet: Use `zcash_note_encryption` in `CWalletTx::RecoverSaplingNote` wallet: Remove recipient-side `SaplingNotePlaintext::decrypt` CI: Fetch all history for "recent base" check CI: Include explicit `failure()` condition in "recent base" check CI: Use `github.head_ref` instead of `HEAD` for "recent base" check book: Add End-of-Support heights for v5.3.3 and v5.4.2 CI: Remove most usages of `actions-rs` actions CI: Migrate to `cargo-vet 0.5` cargo vet prune CI: Provide `write` permission for `pull-requests` CI: Check out both the base and PR branches for "recent base" check Migrate to `zcash_primitives 0.10` depends: `cxx 1.0.92` depends: CMake 3.26.0 depends: Postpone CCache updates again cargo update Use `RandomInvalidOutputDescription()` everywhere it makes sense Merge most `cxx::bridge` definitions into a single bridge Expand `CppStream` to cover all `Stream`-like C++ types Migrate `OrchardMerkleFrontier` to use new `CppStream` APIs build: Tolerate split LLVM versions Use `cxx` bridge for all Orchard bundle inspection and validation gtest: Minor improvements to `CoinsTests` rust: Migrate Ed25519 FFI to `cxx` Tell `cargo-vet` to ignore patched dependencies cargo-vet: Regenerate imports cargo-vet: Switch to Google's aggregated audits More crate audits Migrate to published `orchard 0.4` qa: Fix update checker to handle `native_clang` version format depends: CMake 3.26.3 depends: Rust 1.68.2 depends: `native_zstd 1.5.5` depends: `cxx 1.0.94` qa: Postpone dependencies we aren't updating cargo update Use published `zcash_primitives 0.11` and `zcash_proofs 0.11` test: Avoid generating a chain fork in `mempool_packages` RPC test test: Sync blocks before invalidating them in `mempool_packages` RPC test depends: Boost 1.82.0 qa: Postpone Clang 16.0.2 cargo update depends: Rust 1.69.0 make-release.py: Versioning changes for 5.5.0-rc1. make-release.py: Updated manpages for 5.5.0-rc1. Kris Nuttycombe (26): Fix potential path or symlink traversal Add a docker-compose.yml for prometheus/grafana metrics collection. Apply suggestions from code review Make all CCoinsView methods pure-virtual. Remove `FakeCoinsViewDB` as it is identical to `CCoinsViewDummy` Postpone dependency updates. make-release.py: Versioning changes for 5.3.3. make-release.py: Updated manpages for 5.3.3. make-release.py: Updated release notes and changelog for 5.3.3. Set urgency to `high` in Debian changelog. Add information about deprecated features to `deprecationinfo` results. Apply suggestions from code review Add a wallet-aware transaction builder. Use WalletTxBuilder for z_sendmany Allow selectors to require transparent coinbase Fix a longstanding zcashd build warning Fix `make distclean` to recursively remove `rust/gen` Improve const-ness of CChainParams retrieval by network ID Explicitly provide CChainParams to `EnforceNodeDeprecation` revert broken "safe extract" functionality in golden tests. Refactor RPC privacyPolicy handling Update to use the `ff 0.13` dependency stack. Add `AllowRevealedSenders` to fix `mempool_nu_activation.py` Calculate convential fee in `CreateTransaction` before stripping sigs. Fix formating of money strings. Use the conventional fee for prioritisation in prioritisetransactions.py Luke Dashjr (1): RPC/Mining: Restore API compatibility for prioritisetransaction Marco Falke (1): wallet: Remove sendfree Marius Kjærstad (2): New checkpoint at block 2000000 for mainnet Update estimated number of transactions due to Blossom NU Miodrag Popović (2): Fix for broken cross-build to Windows target on Ubuntu 22.04 and Debian 11 Update depends/hosts/mingw32.mk to use posix variant library path Sean Bowe (1): Add additional audits. Suhas Daftuar (4): Add tags to mempool's mapTx indices Fix mempool limiting for PrioritiseTransaction Use fee deltas for determining mempool acceptance Remove GetMinRelayFee TrellixVulnTeam (1): Adding tarfile member sanitization to extractall() Wladimir J. van der Laan (1): Merge #7730: Remove priority estimation Yasser Isa (1): DOWNLOAD_URL dynamic in fetch-params.sh cronicc (1): Fix Horizen Security contact email instagibbs (2): Gave miner test values constants for less error-prone values. Corrected values sasha (6): Partially revert PR #6384, but only for URLs using a git commit hash Download `native_cctools` and its `libtapi` to meaningful filenames Better error messages if proof parameters aren't loaded Enable the (existing) custom error message for the invalid checksum case Re-download parameters if they already exist but don't have correct sums Alias Sasha->sasha in release-notes.py to avoid authors.md split Jack Grigg (2): Improvements to code comments Adjust documentation