Merge pull request #6064 from zcash/version-5.1.0

Merge 5.1.0 stablilization branch back into the main branch
This commit is contained in:
Kris Nuttycombe 2022-07-08 08:14:59 -06:00 committed by GitHub
commit ee3055f596
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 370 additions and 122 deletions

View File

@ -1,4 +1,4 @@
Zcash 5.1.0-rc1
Zcash 5.1.0
<img align="right" width="120" height="80" src="doc/imgs/logo.png">
===========

View File

@ -3,7 +3,7 @@ AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 5)
define(_CLIENT_VERSION_MINOR, 1)
define(_CLIENT_VERSION_REVISION, 0)
define(_CLIENT_VERSION_BUILD, 25)
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)))
define(_CLIENT_VERSION_IS_RELEASE, true)

View File

@ -1,3 +1,9 @@
zcash (5.1.0) stable; urgency=medium
* 5.1.0 release.
-- Electric Coin Company <team@electriccoin.co> Fri, 08 Jul 2022 03:01:54 +0000
zcash (5.1.0~rc1) stable; urgency=medium
* 5.1.0-rc1 release.

View File

@ -1,5 +1,5 @@
---
name: "zcash-5.1.0-rc1"
name: "zcash-5.1.0"
enable_cache: true
distro: "debian"
suites:

View File

@ -1,34 +1,34 @@
Zcash Contributors
==================
Jack Grigg (1142)
Kris Nuttycombe (524)
Jack Grigg (1188)
Kris Nuttycombe (552)
Simon Liu (460)
Sean Bowe (379)
Daira Hopwood (325)
Sean Bowe (387)
Daira Hopwood (329)
Eirik Ogilvie-Wigley (216)
Wladimir J. van der Laan (150)
Alfredo Garcia (119)
Taylor Hornby (118)
Marshall Gaucher (112)
Pieter Wuille (106)
Marshall Gaucher (114)
Pieter Wuille (108)
Ying Tong Lai (90)
Jonas Schnelli (90)
Jay Graber (89)
Larry Ruane (88)
Ying Tong Lai (87)
Marco Falke (82)
Cory Fields (75)
Marco Falke (85)
Cory Fields (76)
Matt Corallo (60)
Nathan Wilcox (56)
Matt Corallo (52)
sasha (51)
practicalswift (38)
sasha (54)
practicalswift (41)
Kevin Gallagher (38)
Dimitris Apostolou (38)
fanquake (36)
Carl Dong (26)
John Newbery (23)
Gregory Maxwell (23)
Jorge Timón (22)
John Newbery (22)
Luke Dashjr (21)
Jonathan "Duke" Leto (18)
syd (16)
@ -45,25 +45,26 @@ Ariel Gabizon (12)
Suhas Daftuar (11)
Paige Peterson (11)
Kaz Wesley (11)
João Barbosa (11)
Alex Morcos (11)
Philip Kaufmann (10)
Peter Todd (10)
Marius Kjærstad (10)
João Barbosa (10)
ying tong (9)
teor (9)
nomnombtc (9)
Russell Yanofsky (9)
kozyilmaz (8)
Zancas Wilcox (8)
Jeremy Rubin (8)
Jeff Garzik (8)
Ben Wilson (8)
Karl-Johan Alm (7)
Chun Kuan Lee (7)
James O'Beirne (6)
David Mercer (6)
Daniel Kraft (6)
Daniel Cousens (6)
Chun Kuan Lee (6)
Casey Rodarmor (6)
jnewbery (5)
ca333 (5)
@ -78,12 +79,12 @@ sandakersmann (4)
gladcow (4)
WO (4)
Sjors Provoost (4)
Russell Yanofsky (4)
Nate Wilcox (4)
mruddy (3)
lpescher (3)
isle2983 (3)
elbandi (3)
Thomas Snider (3)
NikVolf (3)
Martin Ankerl (3)
Julian Fleischer (3)
@ -107,7 +108,6 @@ aniemerg (2)
Yuri Zhykin (2)
UdjinM6 (2)
Tim Ruffing (2)
Thomas Snider (2)
Solar Designer (2)
Sebastian Falbesoner (2)
Scott (2)
@ -121,12 +121,14 @@ Matthew King (2)
Mary Moore-Simmons (2)
Marek (2)
Joe Turgeon (2)
Jesse Cohen (2)
Jeffrey Czyz (2)
Jack Gavigan (2)
ITH4Coinomia (2)
Dagur Valberg Johannsson (2)
Conrado Gouvea (2)
Bryant Eisenbach (2)
Brian Stafford (2)
Brad Miller (2)
Bjorn Hjortsberg (2)
Ben Woosley (2)
@ -206,7 +208,6 @@ Karel Bilek (1)
Josh Lehan (1)
Josh Ellithorpe (1)
Jonas Nick (1)
Jesse Cohen (1)
Jeffrey Walton (1)
Janito Vaqueiro Ferreira Filho (1)
Jainan-Tandel (1)

View File

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.1.
.TH ZCASH-CLI "1" "July 2022" "zcash-cli v5.1.0-rc1" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH ZCASH-CLI "1" "July 2022" "zcash-cli v5.1.0" "User Commands"
.SH NAME
zcash-cli \- manual page for zcash-cli v5.1.0-rc1
zcash-cli \- manual page for zcash-cli v5.1.0
.SH DESCRIPTION
Zcash RPC client version v5.1.0\-rc1
Zcash RPC client version v5.1.0
.PP
In order to ensure you are adequately protecting your privacy when using Zcash,
please see <https://z.cash/support/security/>.

View File

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.1.
.TH ZCASH-TX "1" "July 2022" "zcash-tx v5.1.0-rc1" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH ZCASH-TX "1" "July 2022" "zcash-tx v5.1.0" "User Commands"
.SH NAME
zcash-tx \- manual page for zcash-tx v5.1.0-rc1
zcash-tx \- manual page for zcash-tx v5.1.0
.SH DESCRIPTION
Zcash zcash\-tx utility version v5.1.0\-rc1
Zcash zcash\-tx utility version v5.1.0
.SS "Usage:"
.TP
zcash\-tx [options] <hex\-tx> [commands]

View File

@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.1.
.TH ZCASHD-WALLET-TOOL "1" "July 2022" "zcashd-wallet-tool v5.1.0-rc1" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH ZCASHD-WALLET-TOOL "1" "July 2022" "zcashd-wallet-tool v5.1.0" "User Commands"
.SH NAME
zcashd-wallet-tool \- manual page for zcashd-wallet-tool v5.1.0-rc1
zcashd-wallet-tool \- manual page for zcashd-wallet-tool v5.1.0
.SH SYNOPSIS
.B zcashd-wallet-tool
[\fI\,OPTIONS\/\fR]

View File

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.1.
.TH ZCASHD "1" "July 2022" "zcashd v5.1.0-rc1" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH ZCASHD "1" "July 2022" "zcashd v5.1.0" "User Commands"
.SH NAME
zcashd \- manual page for zcashd v5.1.0-rc1
zcashd \- manual page for zcashd v5.1.0
.SH DESCRIPTION
Zcash Daemon version v5.1.0\-rc1
Zcash Daemon version v5.1.0
.PP
In order to ensure you are adequately protecting your privacy when using Zcash,
please see <https://z.cash/support/security/>.
@ -94,7 +94,7 @@ Keep at most <n> unconnectable transactions in memory (default: 100)
.HP
\fB\-par=\fR<n>
.IP
Set the number of script verification threads (\fB\-8\fR to 16, 0 = auto, <0 =
Set the number of script verification threads (\fB\-16\fR to 16, 0 = auto, <0 =
leave that many cores free, default: 0)
.HP
\fB\-pid=\fR<file>

View File

@ -4,66 +4,3 @@ release-notes at release time)
Notable changes
===============
Faster block validation for Sapling and Orchard transactions
------------------------------------------------------------
Block validation in `zcashd` is a mostly single-threaded process, due to how the
chain update logic inherited from Bitcoin Core is written. However, certain more
computationally intensive checks are performed more efficiently than checking
everything individually:
- ECDSA signatures on transparent inputs are checked via multithreading.
- RedPallas signatures on Orchard actions are checked via batch validation.
As of this release, `zcashd` applies these techniques to more Sapling and
Orchard components:
- RedJubjub signatures on Sapling Spends are checked via batch validation.
- Groth16 proofs for Sapling Spends and Outputs are checked via batch validation
and multithreading.
- Halo 2 proofs for Orchard Actions are checked via batch validation and
multithreading.
This reduces worst-case block validation times for observed historic blocks by
around 80% on a Ryzen 9 5950X CPU.
The number of threads used for checking Groth16 and Halo 2 proofs (as well as
for creating them when spending funds) can be set via the `RAYON_NUM_THREADS`
environment variable.
Option handling
---------------
- A new `-preferredtxversion` argument allows the node to preferentially create
transactions of a specified version, if a transaction does not contain
components that necessitate creation with a specific version. For example,
setting `-preferredtxversion=4` will cause the node to create V4 transactions
whenever the transaction does not contain Orchard components. This can be
helpful if recipients of transactions are likely to be using legacy wallets
that have not yet been upgraded to support parsing V5 transactions.
RPC interface
-------------
- The `getrawtransaction` RPC method now includes details about Orchard actions
within transactions.
Deprecated
----------
As of this release, the following previously deprecated features are disabled
by default, but may be be reenabled using `-allowdeprecated=<feature>`.
- The `dumpwallet` RPC method is disabled. It may be reenabled with
`allowdeprecated=dumpwallet`. `dumpwallet` should not be used; it is
unsafe for backup purposes as it does not return any key information
for keys used to derive shielded addresses. Use `z_exportwallet` instead.
As of this release, the following features are deprecated, but remain available
by default. These features may be disabled by setting `-allowdeprecated=none`.
After at least 3 minor-version releases, these features will be disabled by
default and the following flags to `-allowdeprecated` will be required to
permit their continued use:
- `wallettxvjoinsplit` - controls availability of the deprecated `vjoinsplit`
attribute returned by the `gettransaction` RPC method.

View File

@ -0,0 +1,254 @@
Notable changes
===============
Faster block validation for Sapling and Orchard transactions
------------------------------------------------------------
Block validation in `zcashd` is a mostly single-threaded process, due to how the
chain update logic inherited from Bitcoin Core is written. However, certain more
computationally intensive checks are performed more efficiently than checking
everything individually:
- ECDSA signatures on transparent inputs are checked via multithreading.
- RedPallas signatures on Orchard actions are checked via batch validation.
As of this release, `zcashd` applies these techniques to more Sapling and
Orchard components:
- RedJubjub signatures on Sapling Spends are checked via batch validation.
- Groth16 proofs for Sapling Spends and Outputs are checked via batch validation
and multithreading.
- Halo 2 proofs for Orchard Actions are checked via batch validation and
multithreading.
This reduces worst-case block validation times for observed historic blocks by
around 80% on a Ryzen 9 5950X CPU.
The number of threads used for checking Groth16 and Halo 2 proofs (as well as
for creating them when spending funds) can be set via the `RAYON_NUM_THREADS`
environment variable.
Option handling
---------------
- A new `-preferredtxversion` argument allows the node to preferentially create
transactions of a specified version, if a transaction does not contain
components that necessitate creation with a specific version. For example,
setting `-preferredtxversion=4` will cause the node to create V4 transactions
whenever the transaction does not contain Orchard components. This can be
helpful if recipients of transactions are likely to be using legacy wallets
that have not yet been upgraded to support parsing V5 transactions.
RPC interface
-------------
- The `getblocktemplate` RPC method now skips proof and signature checks on
templates it creates, as these templates only include transactions that have
previously been checked when being added to the mempool.
- The `getrawtransaction` and `decoderawtransaction` RPC methods now include
details about Orchard actions within transactions.
Wallet
------
- Rescan performance of post-NU5 blocks has been slightly improved (overall
rescan time for a single-account wallet decreases by around 6% on a Ryzen 9
5950X). Further improvements will be implemented in future releases to help
mitigate the effect of blocks full of shielded outputs.
- The `CWallet::UpdatedTransaction` signal is no longer called while holding the
`cs_main` lock. This fixes an issue where RPCs could block for long periods of
time on `zcashd` nodes with large wallets. Downstream code forks that have
reconnected the `NotifyTransactionChanged` wallet signal should take note of
this change, and not rely there on access to globals protected by `cs_main`.
- Some `zcashd 5.0.0` nodes would shut down some time after start with the error
`ThreadNotifyWallets: Failed to read block X while notifying wallets of block disconnects`.
`zcashd` now attempts to rectify the situation, and otherwise will inform the
user before shutting down that a reindex is required.
Deprecated
----------
As of this release, the following previously deprecated features are disabled
by default, but may be be reenabled using `-allowdeprecated=<feature>`.
- The `dumpwallet` RPC method is disabled. It may be reenabled with
`allowdeprecated=dumpwallet`. `dumpwallet` should not be used; it is
unsafe for backup purposes as it does not return any key information
for keys used to derive shielded addresses. Use `z_exportwallet` instead.
As of this release, the following features are deprecated, but remain available
by default. These features may be disabled by setting `-allowdeprecated=none`.
After at least 3 minor-version releases, these features will be disabled by
default and the following flags to `-allowdeprecated` will be required to
permit their continued use:
- `wallettxvjoinsplit` - controls availability of the deprecated `vjoinsplit`
attribute returned by the `gettransaction` RPC method.
Changelog
=========
Brian Stafford (2):
rpc: Add missing fields to getrawtransaction help text
rpc: add valueBalanceOrchard to getrawtransaction output
Chun Kuan Lee (1):
break circular dependency: random/sync -> util -> random/sync
Cory Fields (1):
threads: add a thread_local autoconf check
Daira Hopwood (4):
halo2 is now under MIT/Apache-2.0, so does not need a declaration in `contrib/debian/copyright`. fixes #5203
COPYING: Address feedback about the use of "permissive". Also refer to zcashd instead of "Zcash".
Upgrade to metrics 0.19.x and metrics-exporter-prometheus 0.10.x.
Apply cosmetic suggestions
Jack Grigg (46):
book: Add platform support information and tier policy
lint: Fix cargo patches linter when no patches are present
Shorten thread name prefix
Name currently-unnamed threads that we can rename
book: Capitalize key words in platform tier policy
book: Add FreeBSD to tier 3 platforms list
depends: Add cxx crate to dependencies
depends: Add cxxbridge command to dependencies
build: Pass `CC` etc. flags through to `cargo build`
build: Add non-verbose output for `cargo build`
depends: Add `rust/cxx.h` header as a dependency
Migrate Equihash Rust FFI to `cxx`
Migrate BLAKE2b Rust FFI to `cxx`
depends: Vendor dependencies of native_cxxbuild
Revert "Switched sync.{cpp,h} to std threading primitives."
qa: Fix sprout_sapling_migration RPC test to handle wallet RPC change
wallet: Clear witness caches on load if reindexing
Document that `-reindex` and `-salvagewallet` both imply `-rescan`
Update orchard license with current exception text
Note dependence on BOSL in COPYING
qa: `cargo vet init`
qa: Add `crypto-reviewed` and `license-reviewed` criteria for `cargo vet`
CI: Add workflow that runs `cargo vet --locked`
qa: Add audits for the crates directly maintained by the ECC core team
book: Add section about auditing Rust dependencies
qa: Fix `qa/zcash/create_benchmark_archive.py` script
qa: Generalise `extract_benchmark_data` in `performance-measurements.sh`
bench: Support multiple trees in FakeCoinsViewDB
bench: Add `ConnectBlock` benchmark using block 1708048
cargo vet fmt
Upgrade to `orchard 0.2.0`
Batch-validate Orchard proofs as well as Orchard signatures
test: Load the proof verification keys in Boost tests
bench: Add `ConnectBlock` benchmark using block 1723244
Use batch validation for Sapling proofs and signatures
qa: Reformat for latest cargo-vet
qa: Postpone dependency updates
Update release notes
qa: Add native_cxxbridge and rustcxx to update checker
Move "previous coinbase" UI monitoring into ThreadNotifyWallets
miner: Disable proof and signature checks in CreateNewBlock
wallet: Comment out slow assertion
Add missing release note entries for 5.1.0
qa: Postpone latest `cxx` update
make-release.py: Versioning changes for 5.1.0.
make-release.py: Updated manpages for 5.1.0.
Jesse Cohen (1):
Annotate AssertLockHeld() with ASSERT_CAPABILITY() for thread safety analysis
John Newbery (1):
[logging] Comment all continuing logs.
João Barbosa (1):
Remove unused fTry from push_lock
Kris Nuttycombe (28):
Fix incorrect links in 5.0.0 release notes.
Fix inconsistent caplitalization in copyright notices.
scripted-diff: Update Zcash copyrights to 2022
scripted-diff: Add 2016-2022 copyright headers for files added/modified in 2016
scripted-diff: Add 2017-2022 copyright headers for files added/modified in 2017
scripted-diff: Add 2018-2022 copyright headers for files added/modified in 2018
scripted-diff: Add 2019-2022 copyright headers for files added/modified in 2019
scripted-diff: Add 2020-2022 copyright headers for files added/modified in 2020
scripted-diff: Add 2021-2022 copyright headers for files added/modified in 2021
Ensure that anchor depth is > 0 when selecting an Orchard anchor.
Add configure~ to .gitignore
Return an error if attempting to use z_shieldcoinbase for Orchard shielding.
Only return active protocol components from z_gettreestate.
Revert "Only return active protocol components from z_gettreestate."
Only return `skipHash` for Orchard & Sapling roots at heights >= activation.
Add a CLI flag to preferentially send V4 tx.
Revert "Make `-reindex` and `-reindex-chainstate` imply `-rescan`"
Do not attempt to begin a rescan if reindexing.
Disable wallet commands that are unavailable in safe mode during -reindex
Guard map accesses.
Mark the `dumpwallet` RPC method as disabled.
Add a clock for testing with an offset from the system clock.
Apply suggestions from code review
Note that `gettransaction` doesn't provide shielded info in RPC help.
Deprecate the `vjoinsplit` field of `gettransaction` results.
Revert "Merge pull request #6037 from nuttycom/feature/clock_capability"
Replace "Disabled" Orchard AuthValidator with std::nullopt
Ensure that the node has position information before attempting to read block data.
Marco Falke (3):
qa: Initialize lockstack to prevent null pointer deref
sync: Add RecursiveMutex type alias
doc: Add comment to cs_main and mempool::cs
Matt Corallo (8):
Split CNode::cs_vSend: message processing and message sending
Make the cs_sendProcessing a LOCK instead of a TRY_LOCK
Lock cs_vSend and cs_inventory in a consistent order even in TRY
Always enforce lock strict lock ordering (try or not)
Fixup style a bit by moving { to the same line as if statements
Further-enforce lockordering by enforcing directly after TRY_LOCKs
Fix -Wthread-safety-analysis warnings. Change the sync.h primitives to std from boost.
Fix fast-shutdown hang on ThreadImport+GenesisWait
Pieter Wuille (2):
Use a signal to continue init after genesis activation
Do diskspace check before import thread is started
Russell Yanofsky (5):
Add unit test for DEBUG_LOCKORDER code
MOVEONLY Move AnnotatedMixin declaration
Make LOCK, LOCK2, TRY_LOCK work with CWaitableCriticalSection
Use LOCK macros for non-recursive locks
scripted-diff: Small locking rename
Sean Bowe (8):
Fix "transparent" example that should be "p2pkh"
Make shielded requirements error "debug" level rather than an error.
Introduce new Sapling verification API via cxx and switch consensus rules to use the new API.
Enable ZIP 216 for blocks prior to NU5 activation
Remove the old Sapling verification FFI APIs.
cargo fmt
Address clippy lints.
Update minimum chain work and set NU5 activation block hash for mainnet
Thomas Snider (1):
Switched sync.{cpp,h} to std threading primitives.
Marshall Gaucher (2):
add rpc parallel test group logic
Update walletbackup.py
practicalswift (3):
Remove unused code
Use -Wthread-safety-analysis if available (+ -Werror=thread-safety-analysis if --enable-werror)
Fix typos
sasha (3):
make-release.py: Versioning changes for 5.1.0-rc1.
make-release.py: Updated manpages for 5.1.0-rc1.
make-release.py: Updated release notes and changelog for 5.1.0-rc1.
Ying Tong Lai (3):
Add orchard_bundle FFI.
Use orchard_bundle ffi in getrawtransaction.
Test getrawtransaction in wallet_orchard.py

View File

@ -6,8 +6,10 @@
native_cxxbridge 1.0.69 2022-09-01
native_cxxbridge 1.0.70 2022-09-01
native_cxxbridge 1.0.71 2022-09-01
rustcxx 1.0.69 2022-09-01
rustcxx 1.0.70 2022-09-01
rustcxx 1.0.71 2022-09-01
# Ccache 4.0 requires adding CMake to the depends system.
native_ccache 4.0 2022-09-01

View File

@ -18,7 +18,7 @@
#define CLIENT_VERSION_MAJOR 5
#define CLIENT_VERSION_MINOR 1
#define CLIENT_VERSION_REVISION 0
#define CLIENT_VERSION_BUILD 25
#define CLIENT_VERSION_BUILD 50
//! Set to true for release, false for prerelease or test build
#define CLIENT_VERSION_IS_RELEASE true

View File

@ -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 = 1727474;
static const int APPROX_RELEASE_HEIGHT = 1730371;
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.");

View File

@ -712,8 +712,8 @@ void ThreadStartWalletNotifier()
// We know we have the genesis block.
assert(pindexFork != nullptr);
if (pindexLastTip->nHeight < pindexFork->nHeight ||
pindexLastTip->nHeight - pindexFork->nHeight < 100)
if ((pindexLastTip->nHeight < pindexFork->nHeight || pindexLastTip->nHeight - pindexFork->nHeight < 100) &&
!pindexLastTip->GetBlockPos().IsNull())
{
break;
}

View File

@ -2241,6 +2241,11 @@ bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos, const Consensus:
bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams)
{
if (pindex->GetBlockPos().IsNull()) {
return error("ReadBlockFromDisk(CBlock&, CBlockIndex*): block index entry does not provide a valid disk position for block %s at %s",
pindex->ToString(), pindex->GetBlockPos().ToString());
}
if (!ReadBlockFromDisk(block, pindex->GetBlockPos(), consensusParams))
return false;
if (block.GetHash() != pindex->GetBlockHash())
@ -3060,12 +3065,30 @@ static bool ShouldCheckTransactions(const CChainParams& chainparams, const CBloc
bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pindex,
CCoinsViewCache& view, const CChainParams& chainparams,
bool fJustCheck, bool fCheckAuthDataRoot)
bool fJustCheck, CheckAs blockChecks)
{
AssertLockHeld(cs_main);
bool fCheckAuthDataRoot = true;
bool fExpensiveChecks = true;
switch (blockChecks) {
case CheckAs::Block:
break;
case CheckAs::BlockTemplate:
// Disable checking proofs and signatures for block templates, to avoid
// checking them twice for transactions that were already checked when
// added to the mempool.
fExpensiveChecks = false;
case CheckAs::SlowBenchmark:
// Disable checking the authDataRoot for block templates and slow block
// benchmarks.
fCheckAuthDataRoot = false;
break;
default:
assert(false);
}
// If this block is an ancestor of a checkpoint, disable expensive checks
if (fCheckpointsEnabled && Checkpoints::IsAncestorOfLastCheckpoint(chainparams.Checkpoints(), pindex)) {
fExpensiveChecks = false;
@ -3618,14 +3641,6 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
int64_t nTime3 = GetTimeMicros(); nTimeIndex += nTime3 - nTime2;
LogPrint("bench", " - Index writing: %.2fms [%.2fs]\n", 0.001 * (nTime3 - nTime2), nTimeIndex * 0.000001);
// Watch for changes to the previous coinbase transaction.
static uint256 hashPrevBestCoinBase;
GetMainSignals().UpdatedTransaction(hashPrevBestCoinBase);
hashPrevBestCoinBase = block.vtx[0].GetHash();
int64_t nTime4 = GetTimeMicros(); nTimeCallbacks += nTime4 - nTime3;
LogPrint("bench", " - Callbacks: %.2fms [%.2fs]\n", 0.001 * (nTime4 - nTime3), nTimeCallbacks * 0.000001);
return true;
}
@ -5090,7 +5105,10 @@ bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, c
* This is only invoked by the miner.
* The block's proof-of-work is assumed invalid and not checked.
*/
bool TestBlockValidity(CValidationState& state, const CChainParams& chainparams, const CBlock& block, CBlockIndex* pindexPrev, bool fCheckMerkleRoot)
bool TestBlockValidity(
CValidationState& state, const CChainParams& chainparams,
const CBlock& block, CBlockIndex* pindexPrev,
bool fIsBlockTemplate)
{
AssertLockHeld(cs_main);
assert(pindexPrev == chainActive.Tip());
@ -5103,6 +5121,9 @@ bool TestBlockValidity(CValidationState& state, const CChainParams& chainparams,
// JoinSplit proofs are verified in ConnectBlock
auto verifier = ProofVerifier::Disabled();
bool fCheckMerkleRoot = !fIsBlockTemplate;
auto blockChecks = fIsBlockTemplate ? CheckAs::BlockTemplate : CheckAs::Block;
// NOTE: CheckBlockHeader is called by CheckBlock
if (!ContextualCheckBlockHeader(block, state, chainparams, pindexPrev))
return false;
@ -5111,7 +5132,7 @@ bool TestBlockValidity(CValidationState& state, const CChainParams& chainparams,
return false;
if (!ContextualCheckBlock(block, state, chainparams, pindexPrev, true))
return false;
if (!ConnectBlock(block, state, &indexDummy, viewNew, chainparams, true, fCheckMerkleRoot))
if (!ConnectBlock(block, state, &indexDummy, viewNew, chainparams, true, blockChecks))
return false;
assert(state.IsValid());

View File

@ -561,18 +561,35 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state,
CBlockIndex *pindexPrev,
bool fCheckTransactions);
/**
* How a given block should be checked.
*
* - `CheckAs::Block` applies all relevant block checks.
* - `CheckAs::BlockTemplate` is the same as `CheckAs::Block` except that proofs
* and signatures are not validated, and the authDataRoot is not checked (as
* the coinbase transaction is not fully complete).
* - `CheckAs::SlowBenchmark` is the same as `CheckAs::Block` except that the
* authDataRoot is not checked (as the required history tree state is not
* currently faked).
*/
enum class CheckAs {
Block,
BlockTemplate,
SlowBenchmark,
};
/** Apply the effects of this block (with given index) on the UTXO set represented by coins.
* Validity checks that depend on the UTXO set are also done; ConnectBlock()
* can fail if those validity checks fail (among other reasons). */
bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pindex, CCoinsViewCache& coins,
const CChainParams& chainparams,
bool fJustCheck = false, bool fCheckAuthDataRoot = true);
bool fJustCheck = false, CheckAs blockChecks = CheckAs::Block);
/**
* Check a block is completely valid from start to finish (only works on top
* of our current best block, with cs_main held)
*/
bool TestBlockValidity(CValidationState& state, const CChainParams& chainparams, const CBlock& block, CBlockIndex* pindexPrev, bool fCheckMerkleRoot);
bool TestBlockValidity(CValidationState& state, const CChainParams& chainparams, const CBlock& block, CBlockIndex* pindexPrev, bool fIsBlockTemplate);
/**

View File

@ -769,7 +769,7 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const MinerAddre
pblocktemplate->vTxSigOps[0] = GetLegacySigOpCount(pblock->vtx[0]);
CValidationState state;
if (!TestBlockValidity(state, chainparams, *pblock, pindexPrev, false))
if (!TestBlockValidity(state, chainparams, *pblock, pindexPrev, true))
throw std::runtime_error(std::string("CreateNewBlock(): TestBlockValidity failed: ") + state.GetRejectReason());
}

View File

@ -561,7 +561,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
return "inconclusive-not-best-prevblk";
CValidationState state;
TestBlockValidity(state, Params(), block, pindexPrev, true);
TestBlockValidity(state, Params(), block, pindexPrev, false);
return BIP22ValidationResult(state);
}
}

View File

@ -250,6 +250,11 @@ void ThreadNotifyWallets(CBlockIndex *pindexLastTip)
// exploitable as a timing channel.
GetMainSignals().ChainTip(blockData.pindex, &block, blockData.oldTrees);
// Notify UI to display prev block's coinbase if it was ours.
static uint256 hashPrevBestCoinBase;
GetMainSignals().UpdatedTransaction(hashPrevBestCoinBase);
hashPrevBestCoinBase = block.vtx[0].GetHash();
// This block is done!
pindexLastTip = blockData.pindex;
}

View File

@ -2693,7 +2693,12 @@ void CWallet::IncrementNoteWitnesses(
// If we're at or beyond NU5 activation, update the Orchard note commitment tree.
if (performOrchardWalletUpdates && consensus.NetworkUpgradeActive(pindex->nHeight, Consensus::UPGRADE_NU5)) {
assert(orchardWallet.AppendNoteCommitments(pindex->nHeight, *pblock));
assert(pindex->hashFinalOrchardRoot == orchardWallet.GetLatestAnchor());
// This assertion slows scanning for blocks with few shielded transactions by an
// order of magnitude. It is only intended as a consistency check between the node
// and wallet computing trees. Commented out until we have figured out what is
// causing the slowness and fixed it.
// https://github.com/zcash/zcash/issues/6052
//assert(pindex->hashFinalOrchardRoot == orchardWallet.GetLatestAnchor());
}
// Update witness heights

View File

@ -645,7 +645,7 @@ double benchmark_connectblock_sapling()
CValidationState state;
struct timeval tv_start;
timer_start(tv_start);
assert(ConnectBlock(block, state, &index, view, Params(), true, false));
assert(ConnectBlock(block, state, &index, view, Params(), true, CheckAs::SlowBenchmark));
auto duration = timer_stop(tv_start);
// Undo alterations to global state
@ -691,7 +691,7 @@ double benchmark_connectblock_orchard()
CValidationState state;
struct timeval tv_start;
timer_start(tv_start);
assert(ConnectBlock(block, state, &index, view, Params(), true, false));
assert(ConnectBlock(block, state, &index, view, Params(), true, CheckAs::SlowBenchmark));
auto duration = timer_stop(tv_start);
// Undo alterations to global state