From 40487c079dc67e9203627d8536c6395c159ab00d Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Tue, 12 Apr 2022 16:05:01 -0600 Subject: [PATCH 1/5] Set NU5 testnet reactivation height. --- .cargo/config.offline | 2 +- Cargo.lock | 16 ++++++++-------- Cargo.toml | 12 ++++++------ src/chainparams.cpp | 3 +-- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/.cargo/config.offline b/.cargo/config.offline index 01d8840e1..2ede4e521 100644 --- a/.cargo/config.offline +++ b/.cargo/config.offline @@ -6,7 +6,7 @@ replace-with = "vendored-sources" [source."https://github.com/zcash/librustzcash.git"] git = "https://github.com/zcash/librustzcash.git" -rev = "d5c5f048947d211c2fbef23ce986b329b91d1aa5" +rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" replace-with = "vendored-sources" [source."https://github.com/nuttycom/hdwallet.git"] diff --git a/Cargo.lock b/Cargo.lock index de4356cff..71e2c949a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -562,7 +562,7 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "equihash" version = "0.1.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=d5c5f048947d211c2fbef23ce986b329b91d1aa5#d5c5f048947d211c2fbef23ce986b329b91d1aa5" +source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" dependencies = [ "blake2b_simd", "byteorder", @@ -571,7 +571,7 @@ dependencies = [ [[package]] name = "f4jumble" version = "0.0.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=d5c5f048947d211c2fbef23ce986b329b91d1aa5#d5c5f048947d211c2fbef23ce986b329b91d1aa5" +source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" dependencies = [ "blake2b_simd", ] @@ -2201,7 +2201,7 @@ dependencies = [ [[package]] name = "zcash_address" version = "0.0.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=d5c5f048947d211c2fbef23ce986b329b91d1aa5#d5c5f048947d211c2fbef23ce986b329b91d1aa5" +source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" dependencies = [ "bech32", "bs58", @@ -2212,7 +2212,7 @@ dependencies = [ [[package]] name = "zcash_encoding" version = "0.0.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=d5c5f048947d211c2fbef23ce986b329b91d1aa5#d5c5f048947d211c2fbef23ce986b329b91d1aa5" +source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" dependencies = [ "byteorder", "nonempty", @@ -2221,7 +2221,7 @@ dependencies = [ [[package]] name = "zcash_history" version = "0.2.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=d5c5f048947d211c2fbef23ce986b329b91d1aa5#d5c5f048947d211c2fbef23ce986b329b91d1aa5" +source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" dependencies = [ "bigint", "blake2b_simd", @@ -2231,7 +2231,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.1.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=d5c5f048947d211c2fbef23ce986b329b91d1aa5#d5c5f048947d211c2fbef23ce986b329b91d1aa5" +source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" dependencies = [ "chacha20", "chacha20poly1305", @@ -2242,7 +2242,7 @@ dependencies = [ [[package]] name = "zcash_primitives" version = "0.5.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=d5c5f048947d211c2fbef23ce986b329b91d1aa5#d5c5f048947d211c2fbef23ce986b329b91d1aa5" +source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" dependencies = [ "aes", "bip0039", @@ -2278,7 +2278,7 @@ dependencies = [ [[package]] name = "zcash_proofs" version = "0.5.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=d5c5f048947d211c2fbef23ce986b329b91d1aa5#d5c5f048947d211c2fbef23ce986b329b91d1aa5" +source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" dependencies = [ "bellman", "blake2b_simd", diff --git a/Cargo.toml b/Cargo.toml index 405bd323b..b5c33f5c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -85,9 +85,9 @@ codegen-units = 1 [patch.crates-io] hdwallet = { git = "https://github.com/nuttycom/hdwallet", rev = "9b4c1bdbe0517e3a7a8f285d6048a37d472ba3bc" } -zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "d5c5f048947d211c2fbef23ce986b329b91d1aa5" } -zcash_encoding = { git = "https://github.com/zcash/librustzcash.git", rev = "d5c5f048947d211c2fbef23ce986b329b91d1aa5" } -zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "d5c5f048947d211c2fbef23ce986b329b91d1aa5" } -zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "d5c5f048947d211c2fbef23ce986b329b91d1aa5" } -zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "d5c5f048947d211c2fbef23ce986b329b91d1aa5" } -zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "d5c5f048947d211c2fbef23ce986b329b91d1aa5" } +zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } +zcash_encoding = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } +zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } +zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } +zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } +zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 1faec4cee..5f03599c9 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -418,8 +418,7 @@ public: consensus.vUpgrades[Consensus::UPGRADE_CANOPY].hashActivationBlock = uint256S("01a4d7c6aada30c87762c1bf33fff5df7266b1fd7616bfdb5227fa59bd79e7a2"); consensus.vUpgrades[Consensus::UPGRADE_NU5].nProtocolVersion = 170050; - consensus.vUpgrades[Consensus::UPGRADE_NU5].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_NU5].nActivationHeight = 1840000; consensus.vUpgrades[Consensus::UPGRADE_ZFUTURE].nProtocolVersion = 0x7FFFFFFF; consensus.vUpgrades[Consensus::UPGRADE_ZFUTURE].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; From 9ca0a41cf7880d4931d8819e8a4d5888de927eae Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Wed, 13 Apr 2022 08:22:56 -0600 Subject: [PATCH 2/5] Update protocol version to 170050 for v4.7.0 release. --- qa/rpc-tests/test_framework/mininode.py | 2 +- src/chainparams.cpp | 2 +- src/version.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/qa/rpc-tests/test_framework/mininode.py b/qa/rpc-tests/test_framework/mininode.py index 93be95c8b..5b3ff3b63 100755 --- a/qa/rpc-tests/test_framework/mininode.py +++ b/qa/rpc-tests/test_framework/mininode.py @@ -52,7 +52,7 @@ SPROUT_PROTO_VERSION = 170002 # past bip-31 for ping/pong OVERWINTER_PROTO_VERSION = 170003 SAPLING_PROTO_VERSION = 170006 BLOSSOM_PROTO_VERSION = 170008 -NU5_PROTO_VERSION = 170040 +NU5_PROTO_VERSION = 170050 MY_SUBVERSION = b"/python-mininode-tester:0.0.3/" diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 5f03599c9..a8311fe38 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -663,7 +663,7 @@ public: consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nProtocolVersion = 170012; consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; - consensus.vUpgrades[Consensus::UPGRADE_NU5].nProtocolVersion = 170040; + consensus.vUpgrades[Consensus::UPGRADE_NU5].nProtocolVersion = 170050; consensus.vUpgrades[Consensus::UPGRADE_NU5].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; consensus.vUpgrades[Consensus::UPGRADE_ZFUTURE].nProtocolVersion = 0x7FFFFFFF; diff --git a/src/version.h b/src/version.h index a51a6996d..276b815ef 100644 --- a/src/version.h +++ b/src/version.h @@ -9,7 +9,7 @@ * network protocol versioning */ -static const int PROTOCOL_VERSION = 170040; +static const int PROTOCOL_VERSION = 170050; //! initial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 209; From 254122f9d20a58cbd9dab71cf22c92a691f9f72e Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Wed, 13 Apr 2022 10:11:54 -0600 Subject: [PATCH 3/5] Update the release notes to describe consensus changes since v4.6.0 --- doc/release-notes.md | 253 +++++++++++++++++++++++++++++-------------- 1 file changed, 170 insertions(+), 83 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 6f251b0f1..011626ee8 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -4,36 +4,83 @@ release-notes at release time) Notable changes =============== +Changes to Testnet NU5 Consensus Rules +-------------------------------------- + +- In order to better support hardware wallets, transparent signature hash construction as + defined in [ZIP 244](https://zips.z.cash/zip-0244) has been modified to include a hash + of the serialization of the amounts of all outputs being spent, along with a hash of all + spent outputs `scriptPubKeys` values, except in the case that the `ANYONECANPAY` flag is + set. This allows hardware wallet devices to verify the UTXO amounts without having to + stream all the previous transactions containing the outputs being spent to the device. + Also as part of these changes, the transparent signature hash digest now commits + directly, rather than implicitly, to the sighash type, and the sighash type is + restricted to a fixed set of valid values. The change to ZIP 244 can be seen + [here](https://github.com/zcash/zips/commit/ac9dd97f77869b9191dc9592faa3ebf45475c341). +- This release fixes a bug in `v4.6.0` that caused a consensus failure on the Zcash + testnet at height `1,779,200`. For details see + . +- There have been changes to the Halo2 proving system to improve consistency between the + specification and the implementation, and these may break compatibility. See for example + . +- There have been numerous changes to the Orchard circuit impementation since `v4.6.0`. + See + for a complete list. +- A potential Faerie Gold vulnerability affecting the previous activation of NU5 on + testnet and existing since `v4.6.0` has been mitigated. + +NU5 Testnet Reactivation +------------------------ + +To support the aforementioned testnet consensus changes, the following changes are made in +`zcashd v4.7.0`: + +- The consensus branch ID for NU5 is changed to `0xC2D6D0B4`. +- The protocol version indicating NU5-aware testnet nodes is set to `170050`. +- The testnet reactivation height for NU5 is set to **1,840,000**. + +Testnet nodes that upgrade to `zcashd v4.7.0` prior to block height `1,840,000` will follow +the new testnet network upgrade. Testnet nodes that are running `zcashd v4.6.0-2` at that +height will need to upgrade to `v4.7.0` and then run with `-reindex`. + Mnemonic Recovery Phrases ------------------------- -The zcashd wallet has been modified to support BIP 39, which describes how to -derive the wallet's HD seed from a mnemonic phrase. The mnemonic phrase will -be generated on load of the wallet, or the first time the wallet is unlocked, -and is available via the `z_exportwallet` RPC call. All new addresses produced -by the wallet are now derived from this seed using the HD wallet functionality -described in ZIP 32 and ZIP 316. For users upgrading an existing Zcashd wallet, -it is recommended that the wallet be backed up prior to upgrading to the 4.7.0 -Zcashd release. +The zcashd wallet has been modified to support BIP 39, which describes how to derive the +wallet's HD seed from a mnemonic phrase. The mnemonic phrase will be generated on load of +the wallet, or the first time the wallet is unlocked, and is available via the +`z_exportwallet` RPC call. All new addresses produced by the wallet are now derived from +this seed using the HD wallet functionality described in ZIP 32 and ZIP 316. For users +upgrading an existing Zcashd wallet, it is recommended that the wallet be backed up prior +to upgrading to the 4.7.0 Zcashd release. -Following the upgrade to 4.7.0, Zcashd will require that the user confirm that -they have backed up their new emergency recovery phrase, which may be obtained -from the output of the `z_exportwallet` RPC call. This confirmation can be -performed manually using the `zcashd-wallet-tool` utility that is supplied -with this release (built or installed in the same directory as `zcashd`). -The wallet will not allow the generation of new addresses until this -confirmation has been performed. It is recommended that after this upgrade, -that funds tied to preexisting addresses be migrated to newly generated -addresses so that all wallet funds are recoverable using the emergency -recovery phrase going forward. If you choose not to migrate funds in this -fashion, you will continue to need to securely back up the entire `wallet.dat` -file to ensure that you do not lose access to existing funds; EXISTING FUNDS -WILL NOT BE RECOVERABLE USING THE EMERGENCY RECOVERY PHRASE UNLESS THEY HAVE -BEEN MOVED TO A NEWLY GENERATED ADDRESS FOLLOWING THE 4.7.0 UPGRADE. +Following the upgrade to 4.7.0, Zcashd will require that the user confirm that they have +backed up their new emergency recovery phrase, which may be obtained from the output of +the `z_exportwallet` RPC call. This confirmation can be performed manually using the +`zcashd-wallet-tool` utility that is supplied with this release (built or installed in the +same directory as `zcashd`). The wallet will not allow the generation of new addresses +until this confirmation has been performed. It is recommended that after this upgrade, +that funds tied to preexisting addresses be migrated to newly generated addresses so that +all wallet funds are recoverable using the emergency recovery phrase going forward. If you +choose not to migrate funds in this fashion, you will continue to need to securely back up +the entire `wallet.dat` file to ensure that you do not lose access to existing funds; +EXISTING FUNDS WILL NOT BE RECOVERABLE USING THE EMERGENCY RECOVERY PHRASE UNLESS THEY +HAVE BEEN MOVED TO A NEWLY GENERATED ADDRESS FOLLOWING THE 4.7.0 UPGRADE. + +In the case that your wallet previously contained a Sapling HD seed, the mnemonic phrase +is constructed using the bytes of that seed, such that it is possible to reconstruct +keys generated using that legacy seed if you know the mnemonic phrase. HOWEVER, THIS +RECONSTRUCTION DOES NOT FOLLOW THE NORMAL PROCESS OF DERIVATION FROM THE MNEMONIC PHRASE. +Instead, to recover a legacy Sapling key from the mnemonic seed, it is necessary to +reconstruct the bytes of the legacy seed by conversion of the mnemonic phrase back to +its source randomness instead of by hashing as is specified in BIP 39. Only keys and +addresses produced after the upgrade can be obtained by normal ZIP 32 or BIP 39 derivation. Wallet Updates -------------- +The zcashd wallet now supports the Orchard shielded protocol. + The zcashd wallet has been modified to alter the way that change is handled. In the case that funds are being spent from a unified account, change is sent to a wallet-internal change address for that account instead of sending change amounts back to the original @@ -47,44 +94,41 @@ originally received. New RPC Methods --------------- -- `walletconfirmbackup` This newly created API checks a provided emergency - recovery phrase against the wallet's emergency recovery phrase; if the phrases - match then it updates the wallet state to allow the generation of new addresses. - This backup confirmation workflow can be disabled by starting zcashd with - `-requirewalletbackup=false` but this is not recommended unless you know what - you're doing (and have otherwise backed up the wallet's recovery phrase anyway). - For security reasons, this RPC method is not intended for use via zcash-cli - but is provided to enable `zcashd-wallet-tool` and other third-party wallet - interfaces to satisfy the backup confirmation requirement. Use of the - `walletconfirmbackup` API via zcash-cli would risk that the recovery phrase - being confirmed might be leaked via the user's shell history or the system - process table; `zcashd-wallet-tool` is specifically provided to avoid this - problem. -- `z_getnewaccount` This API allows for creation of new BIP 44 / ZIP 32 - accounts using HD derivation from the wallet's mnemonic seed. Each account represents a - separate spending authority and source of funds. A single account may contain funds in - the Sapling and Orchard shielded pools, as well as funds held in transparent addresses. -- `z_getaddressforaccount` This API allows for creation of diversified unified - addresses under a single account. Each call to this API will, by default, create - a new diversified unified address containing p2pkh, Sapling, and Orchard receivers. - Additional arguments to this API may be provided to request the address to be created - with a user-specified set of receiver types and diversifier index. -- `z_getbalanceforaccount` This API makes it possible to obtain balance information - on a per-account basis. -- `z_getbalanceforviewingkey` This newly created API allows a user to obtain - balance information for funds visible to a Sapling or Unified full viewing key; if a - Sprout viewing key is provided, this method allows retrieval of the balance only in the - case that the wallet controls the corresponding spending key. This API has been added - to supplement (and largely supplant) `z_getbalance`. Querying for balance by a single +- `walletconfirmbackup` This newly created API checks a provided emergency recovery phrase + against the wallet's emergency recovery phrase; if the phrases match then it updates the + wallet state to allow the generation of new addresses. This backup confirmation + workflow can be disabled by starting zcashd with `-requirewalletbackup=false` but this + is not recommended unless you know what you're doing (and have otherwise backed up the + wallet's recovery phrase anyway). For security reasons, this RPC method is not intended + for use via zcash-cli but is provided to enable `zcashd-wallet-tool` and other + third-party wallet interfaces to satisfy the backup confirmation requirement. Use of the + `walletconfirmbackup` API via zcash-cli would risk that the recovery phrase being + confirmed might be leaked via the user's shell history or the system process table; + `zcashd-wallet-tool` is specifically provided to avoid this problem. +- `z_getnewaccount` This API allows for creation of new BIP 44 / ZIP 32 accounts using HD + derivation from the wallet's mnemonic seed. Each account represents a separate spending + authority and source of funds. A single account may contain funds in the Sapling and + Orchard shielded pools, as well as funds held in transparent addresses. +- `z_getaddressforaccount` This API allows for creation of diversified unified addresses + under a single account. Each call to this API will, by default, create a new diversified + unified address containing p2pkh, Sapling, and Orchard receivers. Additional arguments + to this API may be provided to request the address to be created with a user-specified + set of receiver types and diversifier index. +- `z_getbalanceforaccount` This API makes it possible to obtain balance information on a + per-account basis. +- `z_getbalanceforviewingkey` This newly created API allows a user to obtain balance + information for funds visible to a Sapling or Unified full viewing key; if a Sprout + viewing key is provided, this method allows retrieval of the balance only in the case + that the wallet controls the corresponding spending key. This API has been added to + supplement (and largely supplant) `z_getbalance`. Querying for balance by a single address returns only the amount received by that address, and omits value sent to other diversified addresses derived from the same full viewing key; by using `z_getbalanceforviewingkey` it is possible to obtain a correct balance that includes all amounts controlled by a single spending key, including both those sent to external diversified addresses and to wallet-internal change addresses. -- `z_listunifiedreceivers` This API allows the caller to extract the individual - component receivers from a unified address. This is useful if one needs to - provide a bare Sapling or p2pkh address to a service that does not yet - support unified addresses. +- `z_listunifiedreceivers` This API allows the caller to extract the individual component + receivers from a unified address. This is useful if one needs to provide a bare Sapling + or p2pkh address to a service that does not yet support unified addresses. RPC Changes ----------- @@ -95,16 +139,24 @@ RPC Changes removed in favor of `zip32KeyPath`. This is to allow distinct key paths to be reported for addresses derived from the legacy account under different child spending authorities, as are produced by `z_getnewaddress`. -- The results of the 'dumpwallet' and 'z_exportwallet' RPC methods have been modified + - Addresses derived from the wallet's mnemonic seed are now included in + `listaddresses` output. +- The results of the `dumpwallet` and `z_exportwallet` RPC methods have been modified to now include the wallet's newly generated emergency recovery phrase as part of the - exported data. + exported data. Also, the seed fingerprint and HD keypath information are now included in + the output of these methods for all HD-derived keys. - The results of the `getwalletinfo` RPC have been modified to return two new fields: `mnemonic_seedfp` and `legacy_seedfp`, the latter of which replaces the field that was previously named `seedfp`. - A new `pool` attribute has been added to each element returned by `z_listunspent` to indicate which value pool the unspent note controls funds in. -- `z_listreceivedbyaddress` a `pool` attribute has been added to each result to indicate - what pool the received funds are held in. +- `z_listreceivedbyaddress` + - A `pool` attribute has been added to each result to indicate what pool the received + funds are held in. + - A boolean-valued `change` attribute has been added to indicate whether the output is + change. + - Block metadata attributes `blockheight`, `blockindex`, and `blocktime` have been + added to the result. - `z_viewtransaction` has been updated to include attributes that provide information about Orchard components of the transaction. Also, the `type` attribute for spend and output values has been deprecated and replaced @@ -115,34 +167,47 @@ RPC Changes transparent addresses when available. - The result value for `z_importviewingkey` now includes an `address_type` field that replaces the now-deprecated `type` key. +- `z_listunspent` has been updated to render unified addresses for Sapling and + Orchard outputs when those outputs are controlled by unified spending keys. + Outputs received by unified internal addresses do not include the `address` field. +- Legacy transparent address generation using `getnewaddress` no longer uses a + preallocated keypool, but instead performs HD derivation from the wallet's mnemonic + seed according to BIP 39 and BIP 44 under account ID `0x7FFFFFFF`. ### 'z_sendmany' -- The `z_sendmany` RPC call no longer permits Sprout recipients in the - list of recipient addresses. Transactions spending Sprout funds will - still result in change being sent back into the Sprout pool, but no - other `Sprout->Sprout` transactions will be constructed by the Zcashd - wallet. - -- The restriction that prohibited `Sprout->Sapling` transactions has been - lifted; however, since such transactions reveal the amount crossing - pool boundaries, they must be explicitly enabled via a parameter to - the `z_sendmany` call. - -- A new string parameter, `privacyPolicy`, has been added to the list of - arguments accepted by `z_sendmany`. This parameter enables the caller to - control what kind of information they permit `zcashd` to reveal when creating - the transaction. If the transaction can only be created by revealing more - information than the given strategy permits, `z_sendmany` will return an - error. The parameter defaults to `LegacyCompat`, which applies the most - restrictive strategy `FullPrivacy` when a Unified Address is present as the - sender or a recipient, and otherwise preserves existing behaviour (which - corresponds to the `AllowFullyTransparent` policy). - +- The `z_sendmany` RPC call no longer permits Sprout recipients in the list of recipient + addresses. Transactions spending Sprout funds will still result in change being sent + back into the Sprout pool, but no other `Sprout->Sprout` transactions will be + constructed by the Zcashd wallet. +- The restriction that prohibited `Sprout->Sapling` transactions has been lifted; however, + since such transactions reveal the amount crossing pool boundaries, they must be + explicitly enabled via a parameter to the `z_sendmany` call. +- A new string parameter, `privacyPolicy`, has been added to the list of arguments + accepted by `z_sendmany`. This parameter enables the caller to control what kind of + information they permit `zcashd` to reveal when creating the transaction. If the + transaction can only be created by revealing more information than the given strategy + permits, `z_sendmany` will return an error. The parameter defaults to `LegacyCompat`, + which applies the most restrictive strategy `FullPrivacy` when a Unified Address is + present as the sender or a recipient, and otherwise preserves existing behaviour (which + corresponds to the `AllowFullyTransparent` policy). In cases where it is possible to do + so without revealing additional information, and where it is permitted by the privacy + policy, the wallet will now opportunistically shield funds to the most current pool. - Since Sprout outputs are no longer created (with the exception of change) - `z_sendmany` no longer generates payment disclosures (which were only - available for Sprout outputs) when the `-paymentdisclosure` experimental - feature flag is set. + `z_sendmany` no longer generates payment disclosures (which were only available for + Sprout outputs) when the `-paymentdisclosure` experimental feature flag is set. +- Outgoing viewing keys used for shielded outputs are now produced as + described in [ZIP 316](https://zips.z.cash/zip-0316#usage-of-outgoing-viewing-keys) +- When sending from or to one or more unified addresses, change outputs + are now always sent to addresses controlled by the wallet's internal spending keys, as + described in [ZIP 316](https://zips.z.cash/zip-0316#deriving-internal-keys). These + addresses are not returned by any RPC API, as they are intended to never be shared with + any third party, and are for wallet-internal use only. This change improves the privacy + properties that may be maintained when sharing a unified internal viewing key for an + account in the wallet. +- In cases where `z_sendmany` might produce transparent change UTXOs, those UTXOs are + sent to addresses derived from the wallet's mnemonic seed via the BIP 44 `change` + derivation path. RPC Deprecations ---------------- @@ -156,7 +221,29 @@ RPC Deprecations - `z_gettotalbalance` has been deprecated. Use `z_getbalanceforaccount` instead. - `dumpwallet` has been deprecated. Use `z_exportwallet` instead. +Build System +------------ + +- Clang has been updated to use LLVM 13.0.1. +- libcxx has been updated to use LLVM 13.0.1, except on Windows where it uses 13.0.0-3. +- The Rust toolchain dependency has been updated to version 1.59.0. + Platform Support ---------------- - Debian 9 has been removed from the list of supported platforms. +- A build issue (a missing header file) has been fixed for macOS targets. +- On Arch Linux only, use Debian's libtinfo5_6.0 to fix a build regression. + +Mining +------ + +- Mining to Orchard recipients is now supported on testnet. +- It is now possible to mine to a Sapling receiver of a unified address. +- Concurrency bugs related to `getblocktemplate` have been fixed via backports from + Bitcoin Core. + +Licenses +-------- + +- License information in `contrib/debian/copyright` has been updated to be more accurate. From a9e75ed10df8fac1b16efbe03f2c2979f67f5dcc Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Wed, 13 Apr 2022 16:20:15 -0600 Subject: [PATCH 4/5] Apply suggestions from code review Co-authored-by: Larry Ruane Co-authored-by: Daira Hopwood Co-authored-by: Steven <57410303+steven-ecc@users.noreply.github.com> --- doc/release-notes.md | 110 +++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 011626ee8..3b4501ad1 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -23,7 +23,7 @@ Changes to Testnet NU5 Consensus Rules - There have been changes to the Halo2 proving system to improve consistency between the specification and the implementation, and these may break compatibility. See for example . -- There have been numerous changes to the Orchard circuit impementation since `v4.6.0`. +- There have been numerous changes to the Orchard circuit implementation since `v4.6.0`. See for a complete list. - A potential Faerie Gold vulnerability affecting the previous activation of NU5 on @@ -47,12 +47,14 @@ Mnemonic Recovery Phrases ------------------------- The zcashd wallet has been modified to support BIP 39, which describes how to derive the -wallet's HD seed from a mnemonic phrase. The mnemonic phrase will be generated on load of -the wallet, or the first time the wallet is unlocked, and is available via the -`z_exportwallet` RPC call. All new addresses produced by the wallet are now derived from -this seed using the HD wallet functionality described in ZIP 32 and ZIP 316. For users -upgrading an existing Zcashd wallet, it is recommended that the wallet be backed up prior -to upgrading to the 4.7.0 Zcashd release. +wallet's HD seed from a mnemonic phrase, hereafter known as the wallet's "emergency +recovery phrase". The emergency recovery phrase will be generated on load of the wallet, +or the first time the wallet is unlocked, and is available via the `z_exportwallet` RPC +call. All new addresses produced by the wallet are now derived from this seed using the HD +wallet functionality described in ZIP 32 and ZIP 316. For users upgrading an existing +Zcashd wallet, it is recommended that the wallet be backed up prior to upgrading to the +4.7.0 Zcashd release. In the remainder of this document, the HD seed derived from the +emergency recovery phrase will be termed the wallet's "mnemonic seed". Following the upgrade to 4.7.0, Zcashd will require that the user confirm that they have backed up their new emergency recovery phrase, which may be obtained from the output of @@ -60,21 +62,22 @@ the `z_exportwallet` RPC call. This confirmation can be performed manually using `zcashd-wallet-tool` utility that is supplied with this release (built or installed in the same directory as `zcashd`). The wallet will not allow the generation of new addresses until this confirmation has been performed. It is recommended that after this upgrade, -that funds tied to preexisting addresses be migrated to newly generated addresses so that -all wallet funds are recoverable using the emergency recovery phrase going forward. If you +funds tied to preexisting addresses be migrated to newly generated addresses so that all +wallet funds are recoverable using the emergency recovery phrase going forward. If you choose not to migrate funds in this fashion, you will continue to need to securely back up the entire `wallet.dat` file to ensure that you do not lose access to existing funds; EXISTING FUNDS WILL NOT BE RECOVERABLE USING THE EMERGENCY RECOVERY PHRASE UNLESS THEY HAVE BEEN MOVED TO A NEWLY GENERATED ADDRESS FOLLOWING THE 4.7.0 UPGRADE. -In the case that your wallet previously contained a Sapling HD seed, the mnemonic phrase -is constructed using the bytes of that seed, such that it is possible to reconstruct -keys generated using that legacy seed if you know the mnemonic phrase. HOWEVER, THIS -RECONSTRUCTION DOES NOT FOLLOW THE NORMAL PROCESS OF DERIVATION FROM THE MNEMONIC PHRASE. -Instead, to recover a legacy Sapling key from the mnemonic seed, it is necessary to -reconstruct the bytes of the legacy seed by conversion of the mnemonic phrase back to -its source randomness instead of by hashing as is specified in BIP 39. Only keys and -addresses produced after the upgrade can be obtained by normal ZIP 32 or BIP 39 derivation. +In the case that your wallet previously contained a Sapling HD seed, the emergency +recovery phrase is constructed using the bytes of that seed, such that it is possible to +reconstruct keys generated using that legacy seed if you know the emergency recovery +phrase. HOWEVER, THIS RECONSTRUCTION DOES NOT FOLLOW THE NORMAL PROCESS OF DERIVATION FROM +THE EMERGENCY RECOVERY PHRASE. Instead, to recover a legacy Sapling key from the emergency +recovery phrase, it is necessary to reconstruct the bytes of the legacy seed by conversion +of the phrase back to its source randomness instead of by hashing as is specified in BIP +39. Only keys and addresses produced after the upgrade can be obtained by normal +derivation of a ZIP 32 or BIP 32 master seed using BIP 39. Wallet Updates -------------- @@ -97,26 +100,26 @@ New RPC Methods - `walletconfirmbackup` This newly created API checks a provided emergency recovery phrase against the wallet's emergency recovery phrase; if the phrases match then it updates the wallet state to allow the generation of new addresses. This backup confirmation - workflow can be disabled by starting zcashd with `-requirewalletbackup=false` but this + workflow can be disabled by starting zcashd with `-walletrequirebackup=false` but this is not recommended unless you know what you're doing (and have otherwise backed up the - wallet's recovery phrase anyway). For security reasons, this RPC method is not intended - for use via zcash-cli but is provided to enable `zcashd-wallet-tool` and other - third-party wallet interfaces to satisfy the backup confirmation requirement. Use of the - `walletconfirmbackup` API via zcash-cli would risk that the recovery phrase being - confirmed might be leaked via the user's shell history or the system process table; - `zcashd-wallet-tool` is specifically provided to avoid this problem. + wallet's emergency recovery phrase anyway). For security reasons, this RPC method is + not intended for use via `zcash-cli` but is provided to enable `zcashd-wallet-tool` and + other third-party wallet interfaces to satisfy the backup confirmation requirement. Use + of the `walletconfirmbackup` API via `zcash-cli` would risk that the emergency recovery + phrase being confirmed might be leaked via the user's shell history or the system + process table; `zcashd-wallet-tool` is provided specifically to avoid this problem. - `z_getnewaccount` This API allows for creation of new BIP 44 / ZIP 32 accounts using HD derivation from the wallet's mnemonic seed. Each account represents a separate spending authority and source of funds. A single account may contain funds in the Sapling and Orchard shielded pools, as well as funds held in transparent addresses. - `z_getaddressforaccount` This API allows for creation of diversified unified addresses under a single account. Each call to this API will, by default, create a new diversified - unified address containing p2pkh, Sapling, and Orchard receivers. Additional arguments - to this API may be provided to request the address to be created with a user-specified - set of receiver types and diversifier index. + unified address containing transparent p2pkh, Sapling, and Orchard receivers. Additional + arguments to this API may be provided to request the address to be created with a + user-specified set of receiver types and diversifier index. - `z_getbalanceforaccount` This API makes it possible to obtain balance information on a per-account basis. -- `z_getbalanceforviewingkey` This newly created API allows a user to obtain balance +- `z_getbalanceforviewingkey` This API allows a user to obtain balance information for funds visible to a Sapling or Unified full viewing key; if a Sprout viewing key is provided, this method allows retrieval of the balance only in the case that the wallet controls the corresponding spending key. This API has been added to @@ -128,17 +131,17 @@ New RPC Methods diversified addresses and to wallet-internal change addresses. - `z_listunifiedreceivers` This API allows the caller to extract the individual component receivers from a unified address. This is useful if one needs to provide a bare Sapling - or p2pkh address to a service that does not yet support unified addresses. + or transparent p2pkh address to a service that does not yet support unified addresses. RPC Changes ----------- - The result type for the `listaddresses` endpoint has been modified: - The `keypool` source type has been removed; it was reserved but not used. - - In the `sapling` address results, the `zip32AccountId` attribute has been - removed in favor of `zip32KeyPath`. This is to allow distinct key paths to - be reported for addresses derived from the legacy account under different - child spending authorities, as are produced by `z_getnewaddress`. + - In the `sapling` address results, the `zip32AccountId` attribute has been removed in + favor of `zip32KeyPath`. This is to allow distinct key paths to be reported for + addresses derived from the legacy account under different child spending authorities, + as are produced by `z_getnewaddress`. - Addresses derived from the wallet's mnemonic seed are now included in `listaddresses` output. - The results of the `dumpwallet` and `z_exportwallet` RPC methods have been modified @@ -148,8 +151,8 @@ RPC Changes - The results of the `getwalletinfo` RPC have been modified to return two new fields: `mnemonic_seedfp` and `legacy_seedfp`, the latter of which replaces the field that was previously named `seedfp`. -- A new `pool` attribute has been added to each element returned by `z_listunspent` - to indicate which value pool the unspent note controls funds in. +- A new `pool` attribute has been added to each element returned by `z_listunspent` to + indicate which value pool the unspent note controls funds in. - `z_listreceivedbyaddress` - A `pool` attribute has been added to each result to indicate what pool the received funds are held in. @@ -157,22 +160,23 @@ RPC Changes change. - Block metadata attributes `blockheight`, `blockindex`, and `blocktime` have been added to the result. -- `z_viewtransaction` has been updated to include attributes that provide - information about Orchard components of the transaction. Also, the `type` - attribute for spend and output values has been deprecated and replaced - by the `pool` attribute. +- `z_viewtransaction` has been updated to include attributes that provide information + about Orchard components of the transaction. Also, the `type` attribute for spend and + output values has been deprecated and replaced by the `pool` attribute. - `z_getnotescount` now also returns information for Orchard notes. -- The output format of `z_exportwallet` has been changed. The exported file now - includes the mnemonic seed for the wallet, and HD keypaths are now exported for - transparent addresses when available. -- The result value for `z_importviewingkey` now includes an `address_type` field - that replaces the now-deprecated `type` key. +- The output format of `z_exportwallet` has been changed. The exported file now includes + the mnemonic seed for the wallet, and HD keypaths are now exported for transparent + addresses when available. +- The result value for `z_importviewingkey` now includes an `address_type` field that + replaces the now-deprecated `type` key. - `z_listunspent` has been updated to render unified addresses for Sapling and - Orchard outputs when those outputs are controlled by unified spending keys. - Outputs received by unified internal addresses do not include the `address` field. -- Legacy transparent address generation using `getnewaddress` no longer uses a - preallocated keypool, but instead performs HD derivation from the wallet's mnemonic - seed according to BIP 39 and BIP 44 under account ID `0x7FFFFFFF`. + Orchard outputs when those outputs are controlled by unified spending keys. Outputs + received by unified internal addresses do not include the `address` field. +- Legacy transparent address generation using `getnewaddress` no longer uses a + preallocated keypool, but instead performs HD derivation from the wallet's mnemonic seed + according to BIP 39 and BIP 44 under account ID `0x7FFFFFFF`. +- `z_gettreestate` has been updated to include information about the orchard note + commitment tree. ### 'z_sendmany' @@ -185,7 +189,7 @@ RPC Changes explicitly enabled via a parameter to the `z_sendmany` call. - A new string parameter, `privacyPolicy`, has been added to the list of arguments accepted by `z_sendmany`. This parameter enables the caller to control what kind of - information they permit `zcashd` to reveal when creating the transaction. If the + information they permit `zcashd` to reveal on-chain when creating the transaction. If the transaction can only be created by revealing more information than the given strategy permits, `z_sendmany` will return an error. The parameter defaults to `LegacyCompat`, which applies the most restrictive strategy `FullPrivacy` when a Unified Address is @@ -225,15 +229,17 @@ Build System ------------ - Clang has been updated to use LLVM 13.0.1. -- libcxx has been updated to use LLVM 13.0.1, except on Windows where it uses 13.0.0-3. +- libc++ has been updated to use LLVM 13.0.1, except on Windows where it uses 13.0.0-3. - The Rust toolchain dependency has been updated to version 1.59.0. Platform Support ---------------- - Debian 9 has been removed from the list of supported platforms. +- Debian 11 (Bullseye) has been added to the list of supported platforms. - A build issue (a missing header file) has been fixed for macOS targets. -- On Arch Linux only, use Debian's libtinfo5_6.0 to fix a build regression. +- On Arch Linux only, a copy of Debian's libtinfo5_6.0 is used to fix a build + regression. Mining ------ From 825d8e8781eca93190a719e8b0a55f0b13fb2f85 Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Wed, 13 Apr 2022 16:52:34 -0600 Subject: [PATCH 5/5] Push back NU5 testnet release height to 1842420 --- .cargo/config.offline | 2 +- Cargo.lock | 16 ++++++++-------- Cargo.toml | 12 ++++++------ src/chainparams.cpp | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.cargo/config.offline b/.cargo/config.offline index 2ede4e521..ca6c2b3c3 100644 --- a/.cargo/config.offline +++ b/.cargo/config.offline @@ -6,7 +6,7 @@ replace-with = "vendored-sources" [source."https://github.com/zcash/librustzcash.git"] git = "https://github.com/zcash/librustzcash.git" -rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +rev = "d14e7a707ce01cefcbc82651dad48f002185dded" replace-with = "vendored-sources" [source."https://github.com/nuttycom/hdwallet.git"] diff --git a/Cargo.lock b/Cargo.lock index 71e2c949a..212c2a245 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -562,7 +562,7 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "equihash" version = "0.1.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +source = "git+https://github.com/zcash/librustzcash.git?rev=d14e7a707ce01cefcbc82651dad48f002185dded#d14e7a707ce01cefcbc82651dad48f002185dded" dependencies = [ "blake2b_simd", "byteorder", @@ -571,7 +571,7 @@ dependencies = [ [[package]] name = "f4jumble" version = "0.0.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +source = "git+https://github.com/zcash/librustzcash.git?rev=d14e7a707ce01cefcbc82651dad48f002185dded#d14e7a707ce01cefcbc82651dad48f002185dded" dependencies = [ "blake2b_simd", ] @@ -2201,7 +2201,7 @@ dependencies = [ [[package]] name = "zcash_address" version = "0.0.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +source = "git+https://github.com/zcash/librustzcash.git?rev=d14e7a707ce01cefcbc82651dad48f002185dded#d14e7a707ce01cefcbc82651dad48f002185dded" dependencies = [ "bech32", "bs58", @@ -2212,7 +2212,7 @@ dependencies = [ [[package]] name = "zcash_encoding" version = "0.0.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +source = "git+https://github.com/zcash/librustzcash.git?rev=d14e7a707ce01cefcbc82651dad48f002185dded#d14e7a707ce01cefcbc82651dad48f002185dded" dependencies = [ "byteorder", "nonempty", @@ -2221,7 +2221,7 @@ dependencies = [ [[package]] name = "zcash_history" version = "0.2.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +source = "git+https://github.com/zcash/librustzcash.git?rev=d14e7a707ce01cefcbc82651dad48f002185dded#d14e7a707ce01cefcbc82651dad48f002185dded" dependencies = [ "bigint", "blake2b_simd", @@ -2231,7 +2231,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.1.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +source = "git+https://github.com/zcash/librustzcash.git?rev=d14e7a707ce01cefcbc82651dad48f002185dded#d14e7a707ce01cefcbc82651dad48f002185dded" dependencies = [ "chacha20", "chacha20poly1305", @@ -2242,7 +2242,7 @@ dependencies = [ [[package]] name = "zcash_primitives" version = "0.5.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +source = "git+https://github.com/zcash/librustzcash.git?rev=d14e7a707ce01cefcbc82651dad48f002185dded#d14e7a707ce01cefcbc82651dad48f002185dded" dependencies = [ "aes", "bip0039", @@ -2278,7 +2278,7 @@ dependencies = [ [[package]] name = "zcash_proofs" version = "0.5.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=50bae5ed76737ae8db6b84a940dd1d2c08daeefd#50bae5ed76737ae8db6b84a940dd1d2c08daeefd" +source = "git+https://github.com/zcash/librustzcash.git?rev=d14e7a707ce01cefcbc82651dad48f002185dded#d14e7a707ce01cefcbc82651dad48f002185dded" dependencies = [ "bellman", "blake2b_simd", diff --git a/Cargo.toml b/Cargo.toml index b5c33f5c3..f6fa4088f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -85,9 +85,9 @@ codegen-units = 1 [patch.crates-io] hdwallet = { git = "https://github.com/nuttycom/hdwallet", rev = "9b4c1bdbe0517e3a7a8f285d6048a37d472ba3bc" } -zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } -zcash_encoding = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } -zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } -zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } -zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } -zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "50bae5ed76737ae8db6b84a940dd1d2c08daeefd" } +zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "d14e7a707ce01cefcbc82651dad48f002185dded" } +zcash_encoding = { git = "https://github.com/zcash/librustzcash.git", rev = "d14e7a707ce01cefcbc82651dad48f002185dded" } +zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "d14e7a707ce01cefcbc82651dad48f002185dded" } +zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "d14e7a707ce01cefcbc82651dad48f002185dded" } +zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "d14e7a707ce01cefcbc82651dad48f002185dded" } +zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "d14e7a707ce01cefcbc82651dad48f002185dded" } diff --git a/src/chainparams.cpp b/src/chainparams.cpp index a8311fe38..8ac5381e8 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -418,7 +418,7 @@ public: consensus.vUpgrades[Consensus::UPGRADE_CANOPY].hashActivationBlock = uint256S("01a4d7c6aada30c87762c1bf33fff5df7266b1fd7616bfdb5227fa59bd79e7a2"); consensus.vUpgrades[Consensus::UPGRADE_NU5].nProtocolVersion = 170050; - consensus.vUpgrades[Consensus::UPGRADE_NU5].nActivationHeight = 1840000; + consensus.vUpgrades[Consensus::UPGRADE_NU5].nActivationHeight = 1842420; consensus.vUpgrades[Consensus::UPGRADE_ZFUTURE].nProtocolVersion = 0x7FFFFFFF; consensus.vUpgrades[Consensus::UPGRADE_ZFUTURE].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT;