diff --git a/qa/rpc-tests/test_framework/mininode.py b/qa/rpc-tests/test_framework/mininode.py index 359553def..5a7dc067a 100755 --- a/qa/rpc-tests/test_framework/mininode.py +++ b/qa/rpc-tests/test_framework/mininode.py @@ -58,6 +58,7 @@ OVERWINTER_BRANCH_ID = 0x5BA81B19 SAPLING_BRANCH_ID = 0x76B809BB BLOSSOM_BRANCH_ID = 0x2BB40E60 HEARTWOOD_BRANCH_ID = 0xF5B9230B +NU4_BRANCH_ID = 0xE9FF75A6 MAX_INV_SZ = 50000 diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 31a9673ff..0317cf6d8 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -122,6 +122,9 @@ public: consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].nProtocolVersion = 170011; consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_NU4].nProtocolVersion = 170013; + consensus.vUpgrades[Consensus::UPGRADE_NU4].nActivationHeight = + Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("000000000000000000000000000000000000000000000000017e73a331fae01c"); @@ -322,6 +325,9 @@ public: uint256S("00367515ef2e781b8c9358b443b6329572599edd02c59e8af67db9785122f298"); consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].nProtocolVersion = 170010; consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].nActivationHeight = 903800; + consensus.vUpgrades[Consensus::UPGRADE_NU4].nProtocolVersion = 170012; + consensus.vUpgrades[Consensus::UPGRADE_NU4].nActivationHeight = + Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; // On testnet we activate this rule 6 blocks after Blossom activation. From block 299188 and // prior to Blossom activation, the testnet minimum-difficulty threshold was 15 minutes (i.e. @@ -479,6 +485,9 @@ public: consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].nProtocolVersion = 170010; consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_NU4].nProtocolVersion = 170012; + consensus.vUpgrades[Consensus::UPGRADE_NU4].nActivationHeight = + Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("0x00"); diff --git a/src/consensus/params.h b/src/consensus/params.h index 78e5e5c5a..3ccb2e109 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -28,6 +28,7 @@ enum UpgradeIndex : uint32_t { UPGRADE_SAPLING, UPGRADE_BLOSSOM, UPGRADE_HEARTWOOD, + UPGRADE_NU4, // NOTE: Also add new upgrades to NetworkUpgradeInfo in upgrades.cpp MAX_NETWORK_UPGRADES }; diff --git a/src/consensus/upgrades.cpp b/src/consensus/upgrades.cpp index 03b2d6df6..798480f3d 100644 --- a/src/consensus/upgrades.cpp +++ b/src/consensus/upgrades.cpp @@ -22,22 +22,27 @@ const struct NUInfo NetworkUpgradeInfo[Consensus::MAX_NETWORK_UPGRADES] = { { /*.nBranchId =*/ 0x5ba81b19, /*.strName =*/ "Overwinter", - /*.strInfo =*/ "See https://z.cash/upgrade/overwinter.html for details.", + /*.strInfo =*/ "See https://z.cash/upgrade/overwinter/ for details.", }, { /*.nBranchId =*/ 0x76b809bb, /*.strName =*/ "Sapling", - /*.strInfo =*/ "See https://z.cash/upgrade/sapling.html for details.", + /*.strInfo =*/ "See https://z.cash/upgrade/sapling/ for details.", }, { /*.nBranchId =*/ 0x2bb40e60, /*.strName =*/ "Blossom", - /*.strInfo =*/ "See https://z.cash/upgrade/blossom.html for details.", + /*.strInfo =*/ "See https://z.cash/upgrade/blossom/ for details.", }, { /*.nBranchId =*/ 0xf5b9230b, /*.strName =*/ "Heartwood", /*.strInfo =*/ "See https://z.cash/upgrade/heartwood/ for details.", + }, + { + /*.nBranchId =*/ 0xe9ff75a6, + /*.strName =*/ "NU4", + /*.strInfo =*/ "See https://z.cash/upgrade/nu4/ for details.", } }; diff --git a/src/utiltest.cpp b/src/utiltest.cpp index c8e01fad5..5e74704a0 100644 --- a/src/utiltest.cpp +++ b/src/utiltest.cpp @@ -251,6 +251,29 @@ void RegtestDeactivateHeartwood() { SelectParams(CBaseChainParams::MAIN); } +const Consensus::Params& RegtestActivateNU4(bool updatePow, int nu4ActivationHeight) { + SelectParams(CBaseChainParams::REGTEST); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_OVERWINTER, Consensus::NetworkUpgrade::ALWAYS_ACTIVE); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_SAPLING, Consensus::NetworkUpgrade::ALWAYS_ACTIVE); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_BLOSSOM, Consensus::NetworkUpgrade::ALWAYS_ACTIVE); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_HEARTWOOD, Consensus::NetworkUpgrade::ALWAYS_ACTIVE); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_NU4, nu4ActivationHeight); + if (updatePow) { + UpdateRegtestPow(32, 16, uint256S("0007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); + } + return Params().GetConsensus(); +} + +void RegtestDeactivateNU4() { + UpdateRegtestPow(0, 0, uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f")); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_NU4, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_HEARTWOOD, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_BLOSSOM, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_SAPLING, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT); + UpdateNetworkUpgradeParameters(Consensus::UPGRADE_OVERWINTER, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT); + SelectParams(CBaseChainParams::MAIN); +} + libzcash::SaplingExtendedSpendingKey GetTestMasterSaplingSpendingKey() { std::vector> rawSeed(32); diff --git a/src/utiltest.h b/src/utiltest.h index 07409b786..056b3aa46 100644 --- a/src/utiltest.h +++ b/src/utiltest.h @@ -53,6 +53,10 @@ const Consensus::Params& RegtestActivateHeartwood(bool updatePow, int heartwoodA void RegtestDeactivateHeartwood(); +const Consensus::Params& RegtestActivateNU4(bool updatePow, int nu4ActivationHeight = Consensus::NetworkUpgrade::ALWAYS_ACTIVE); + +void RegtestDeactivateNU4(); + libzcash::SaplingExtendedSpendingKey GetTestMasterSaplingSpendingKey(); CKey AddTestCKeyToKeyStore(CBasicKeyStore& keyStore);