From bf18f0c0a7aa466e04e91fd54fd2e7a5e97b808e Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Sun, 18 Aug 2024 22:34:58 +0200 Subject: [PATCH 01/25] Introduce Nu7 --- zebra-chain/src/block/commitment.rs | 4 ++-- zebra-chain/src/history_tree.rs | 4 ++-- zebra-chain/src/parameters/network.rs | 2 ++ zebra-chain/src/parameters/network/testnet.rs | 8 ++++++- .../src/parameters/network/tests/vectors.rs | 5 ++-- zebra-chain/src/parameters/network_upgrade.rs | 23 ++++++++++++++++--- zebra-chain/src/primitives/zcash_history.rs | 3 ++- zebra-chain/src/transaction/arbitrary.rs | 2 +- 8 files changed, 39 insertions(+), 12 deletions(-) diff --git a/zebra-chain/src/block/commitment.rs b/zebra-chain/src/block/commitment.rs index 2cb09e75b22..ec4ef7d2616 100644 --- a/zebra-chain/src/block/commitment.rs +++ b/zebra-chain/src/block/commitment.rs @@ -125,7 +125,7 @@ impl Commitment { // NetworkUpgrade::current() returns the latest network upgrade that's activated at the provided height, so // on Regtest for heights above height 0, it could return NU6, and it's possible for the current network upgrade // to be NU6 (or Canopy, or any network upgrade above Heartwood) at the Heartwood activation height. - (Canopy | Nu5 | Nu6, activation_height) + (Canopy | Nu5 | Nu6 | Nu7, activation_height) if height == activation_height && Some(height) == Heartwood.activation_height(network) => { @@ -136,7 +136,7 @@ impl Commitment { } } (Heartwood | Canopy, _) => Ok(ChainHistoryRoot(ChainHistoryMmrRootHash(bytes))), - (Nu5 | Nu6, _) => Ok(ChainHistoryBlockTxAuthCommitment( + (Nu5 | Nu6 | Nu7, _) => Ok(ChainHistoryBlockTxAuthCommitment( ChainHistoryBlockTxAuthCommitmentHash(bytes), )), } diff --git a/zebra-chain/src/history_tree.rs b/zebra-chain/src/history_tree.rs index 91fa3a17628..613bf0616d7 100644 --- a/zebra-chain/src/history_tree.rs +++ b/zebra-chain/src/history_tree.rs @@ -102,7 +102,7 @@ impl NonEmptyHistoryTree { )?; InnerHistoryTree::PreOrchard(tree) } - NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 => { + NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 | NetworkUpgrade::Nu7 => { let tree = Tree::::new_from_cache( network, network_upgrade, @@ -156,7 +156,7 @@ impl NonEmptyHistoryTree { )?; (InnerHistoryTree::PreOrchard(tree), entry) } - NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 => { + NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 | NetworkUpgrade::Nu7 => { let (tree, entry) = Tree::::new_from_block( network, block, diff --git a/zebra-chain/src/parameters/network.rs b/zebra-chain/src/parameters/network.rs index e8571340b7d..d119c087dd9 100644 --- a/zebra-chain/src/parameters/network.rs +++ b/zebra-chain/src/parameters/network.rs @@ -152,10 +152,12 @@ impl Network { pub fn new_regtest( nu5_activation_height: Option, nu6_activation_height: Option, + nu7_activation_height: Option, ) -> Self { Self::new_configured_testnet(testnet::Parameters::new_regtest( nu5_activation_height, nu6_activation_height, + nu7_activation_height, )) } diff --git a/zebra-chain/src/parameters/network/testnet.rs b/zebra-chain/src/parameters/network/testnet.rs index 78f7a69a302..7c3ab24477b 100644 --- a/zebra-chain/src/parameters/network/testnet.rs +++ b/zebra-chain/src/parameters/network/testnet.rs @@ -206,6 +206,9 @@ pub struct ConfiguredActivationHeights { /// Activation height for `NU6` network upgrade. #[serde(rename = "NU6")] pub nu6: Option, + /// Activation height for `NU7` network upgrade. + #[serde(rename = "NU7")] + pub nu7: Option, } /// Builder for the [`Parameters`] struct. @@ -336,6 +339,7 @@ impl ParametersBuilder { canopy, nu5, nu6, + nu7, }: ConfiguredActivationHeights, ) -> Self { use NetworkUpgrade::*; @@ -358,6 +362,7 @@ impl ParametersBuilder { .chain(canopy.into_iter().map(|h| (h, Canopy))) .chain(nu5.into_iter().map(|h| (h, Nu5))) .chain(nu6.into_iter().map(|h| (h, Nu6))) + .chain(nu7.into_iter().map(|h| (h, Nu7))) .map(|(h, nu)| (h.try_into().expect("activation height must be valid"), nu)) .collect(); @@ -588,6 +593,7 @@ impl Parameters { pub fn new_regtest( nu5_activation_height: Option, nu6_activation_height: Option, + nu7_activation_height: Option, ) -> Self { #[cfg(any(test, feature = "proptest-impl"))] let nu5_activation_height = nu5_activation_height.or(Some(100)); @@ -647,7 +653,7 @@ impl Parameters { disable_pow, pre_blossom_halving_interval, post_blossom_halving_interval, - } = Self::new_regtest(None, None); + } = Self::new_regtest(None, None, None); self.network_name == network_name && self.genesis_hash == genesis_hash diff --git a/zebra-chain/src/parameters/network/tests/vectors.rs b/zebra-chain/src/parameters/network/tests/vectors.rs index 4282c86844f..ca341184b8c 100644 --- a/zebra-chain/src/parameters/network/tests/vectors.rs +++ b/zebra-chain/src/parameters/network/tests/vectors.rs @@ -109,6 +109,7 @@ fn activates_network_upgrades_correctly() { let expected_activation_height = 1; let network = testnet::Parameters::build() .with_activation_heights(ConfiguredActivationHeights { + // FIXME: nu7? nu6: Some(expected_activation_height), ..Default::default() }) @@ -147,7 +148,7 @@ fn activates_network_upgrades_correctly() { (Network::Mainnet, MAINNET_ACTIVATION_HEIGHTS), (Network::new_default_testnet(), TESTNET_ACTIVATION_HEIGHTS), ( - Network::new_regtest(None, None), + Network::new_regtest(None, None, None), expected_default_regtest_activation_heights, ), ] { @@ -198,7 +199,7 @@ fn check_configured_network_name() { "Mainnet should be displayed as 'Mainnet'" ); assert_eq!( - Network::new_regtest(None, None).to_string(), + Network::new_regtest(None, None, None).to_string(), "Regtest", "Regtest should be displayed as 'Regtest'" ); diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index 57165d0c760..c1719451fca 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -15,7 +15,7 @@ use hex::{FromHex, ToHex}; use proptest_derive::Arbitrary; /// A list of network upgrades in the order that they must be activated. -pub const NETWORK_UPGRADES_IN_ORDER: [NetworkUpgrade; 9] = [ +pub const NETWORK_UPGRADES_IN_ORDER: [NetworkUpgrade; 10] = [ Genesis, BeforeOverwinter, Overwinter, @@ -25,6 +25,7 @@ pub const NETWORK_UPGRADES_IN_ORDER: [NetworkUpgrade; 9] = [ Canopy, Nu5, Nu6, + Nu7, ]; /// A Zcash network upgrade. @@ -61,6 +62,8 @@ pub enum NetworkUpgrade { /// The Zcash protocol after the NU6 upgrade. #[serde(rename = "NU6")] Nu6, + /// The Zcash protocol after the NU7 upgrade. + Nu7, } impl fmt::Display for NetworkUpgrade { @@ -90,6 +93,8 @@ pub(super) const MAINNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_046_400), Canopy), (block::Height(1_687_104), Nu5), (block::Height(2_726_400), Nu6), + // FIXME: TODO: Add NU7 with a correct value + // (block::Height(2_726_401), Nu7), ]; /// Fake mainnet network upgrade activation heights, used in tests. @@ -104,6 +109,7 @@ const FAKE_MAINNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] = &[ (block::Height(30), Canopy), (block::Height(35), Nu5), (block::Height(40), Nu6), + (block::Height(45), Nu7), ]; /// Testnet network upgrade activation heights. @@ -126,6 +132,8 @@ pub(super) const TESTNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_028_500), Canopy), (block::Height(1_842_420), Nu5), (block::Height(2_976_000), Nu6), + // FIXME: TODO: Set a correct value for NU7 + (block::Height(2_942_001), Nu7), ]; /// Fake testnet network upgrade activation heights, used in tests. @@ -140,6 +148,7 @@ const FAKE_TESTNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] = &[ (block::Height(30), Canopy), (block::Height(35), Nu5), (block::Height(40), Nu6), + (block::Height(45), Nu7), ]; /// The Consensus Branch Id, used to bind transactions and blocks to a @@ -216,6 +225,8 @@ pub(crate) const CONSENSUS_BRANCH_IDS: &[(NetworkUpgrade, ConsensusBranchId)] = (Canopy, ConsensusBranchId(0xe9ff75a6)), (Nu5, ConsensusBranchId(0xc2d6d0b4)), (Nu6, ConsensusBranchId(0xc8e71055)), + // FIXME: use a proper value below + (Nu7, ConsensusBranchId(0xc8e71056)), ]; /// The target block spacing before Blossom. @@ -332,7 +343,8 @@ impl NetworkUpgrade { Heartwood => Some(Canopy), Canopy => Some(Nu5), Nu5 => Some(Nu6), - Nu6 => None, + Nu6 => Some(Nu7), + Nu7 => None, } } @@ -409,7 +421,9 @@ impl NetworkUpgrade { pub fn target_spacing(&self) -> Duration { let spacing_seconds = match self { Genesis | BeforeOverwinter | Overwinter | Sapling => PRE_BLOSSOM_POW_TARGET_SPACING, - Blossom | Heartwood | Canopy | Nu5 | Nu6 => POST_BLOSSOM_POW_TARGET_SPACING.into(), + Blossom | Heartwood | Canopy | Nu5 | Nu6 | Nu7 => { + POST_BLOSSOM_POW_TARGET_SPACING.into() + } }; Duration::seconds(spacing_seconds) @@ -531,6 +545,9 @@ impl From for NetworkUpgrade { zcash_protocol::consensus::NetworkUpgrade::Canopy => Self::Canopy, zcash_protocol::consensus::NetworkUpgrade::Nu5 => Self::Nu5, zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, + // FIXME: do we need the following cfg check? + #[cfg(zcash_unstable = "nu7")] + zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu7, } } } diff --git a/zebra-chain/src/primitives/zcash_history.rs b/zebra-chain/src/primitives/zcash_history.rs index e8ca97d63f8..4b52c85d8e8 100644 --- a/zebra-chain/src/primitives/zcash_history.rs +++ b/zebra-chain/src/primitives/zcash_history.rs @@ -276,7 +276,8 @@ impl Version for zcash_history::V1 { NetworkUpgrade::Heartwood | NetworkUpgrade::Canopy | NetworkUpgrade::Nu5 - | NetworkUpgrade::Nu6 => zcash_history::NodeData { + | NetworkUpgrade::Nu6 + | NetworkUpgrade::Nu7 => zcash_history::NodeData { consensus_branch_id: branch_id.into(), subtree_commitment: block_hash, start_time: time, diff --git a/zebra-chain/src/transaction/arbitrary.rs b/zebra-chain/src/transaction/arbitrary.rs index cf4aa7a9552..0541bd7acd3 100644 --- a/zebra-chain/src/transaction/arbitrary.rs +++ b/zebra-chain/src/transaction/arbitrary.rs @@ -778,7 +778,7 @@ impl Arbitrary for Transaction { NetworkUpgrade::Blossom | NetworkUpgrade::Heartwood | NetworkUpgrade::Canopy => { Self::v4_strategy(ledger_state) } - NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 => prop_oneof![ + NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 | NetworkUpgrade::Nu7 => prop_oneof![ Self::v4_strategy(ledger_state.clone()), Self::v5_strategy(ledger_state) ] From 99ec8e6356ef041e5967db5197315f77d93f2f7e Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 19 Aug 2024 07:51:31 +0200 Subject: [PATCH 02/25] Introduce Nu7 fo other crates of Zebra --- zebra-consensus/src/transaction.rs | 5 +++-- zebra-consensus/src/transaction/tests/prop.rs | 3 ++- zebra-network/src/config.rs | 17 +++++++++++------ zebra-network/src/protocol/external/types.rs | 3 +++ .../types/get_block_template/proposal.rs | 2 +- zebrad/tests/common/configs/v1.9.0.toml | 2 ++ 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/zebra-consensus/src/transaction.rs b/zebra-consensus/src/transaction.rs index 1c303003615..192f1413332 100644 --- a/zebra-consensus/src/transaction.rs +++ b/zebra-consensus/src/transaction.rs @@ -678,7 +678,8 @@ where | NetworkUpgrade::Heartwood | NetworkUpgrade::Canopy | NetworkUpgrade::Nu5 - | NetworkUpgrade::Nu6 => Ok(()), + | NetworkUpgrade::Nu6 + | NetworkUpgrade::Nu7 => Ok(()), // Does not support V4 transactions NetworkUpgrade::Genesis @@ -766,7 +767,7 @@ where // // Note: Here we verify the transaction version number of the above rule, the group // id is checked in zebra-chain crate, in the transaction serialize. - NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 => Ok(()), + NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 | NetworkUpgrade::Nu7 => Ok(()), // Does not support V5 transactions NetworkUpgrade::Genesis diff --git a/zebra-consensus/src/transaction/tests/prop.rs b/zebra-consensus/src/transaction/tests/prop.rs index f45b4731de0..3f57bbb74bf 100644 --- a/zebra-consensus/src/transaction/tests/prop.rs +++ b/zebra-consensus/src/transaction/tests/prop.rs @@ -344,7 +344,8 @@ fn sanitize_transaction_version( BeforeOverwinter => 2, Overwinter => 3, Sapling | Blossom | Heartwood | Canopy => 4, - Nu5 | Nu6 => 5, + // FIXME: Use 6 for Nu7 + Nu5 | Nu6 | Nu7 => 5, } }; diff --git a/zebra-network/src/config.rs b/zebra-network/src/config.rs index 8619507fa0d..25e82714ae5 100644 --- a/zebra-network/src/config.rs +++ b/zebra-network/src/config.rs @@ -668,12 +668,17 @@ impl<'de> Deserialize<'de> for Config { (NetworkKind::Mainnet, _) => Network::Mainnet, (NetworkKind::Testnet, None) => Network::new_default_testnet(), (NetworkKind::Regtest, testnet_parameters) => { - let (nu5_activation_height, nu6_activation_height) = testnet_parameters - .and_then(|params| params.activation_heights) - .map(|ConfiguredActivationHeights { nu5, nu6, .. }| (nu5, nu6)) - .unwrap_or_default(); - - Network::new_regtest(nu5_activation_height, nu6_activation_height) + let (nu5_activation_height, nu6_activation_height, nu7_activation_height) = + testnet_parameters + .and_then(|params| params.activation_heights) + .map(|ConfiguredActivationHeights { nu5, nu6, nu7, .. }| (nu5, nu6, nu7)) + .unwrap_or_default(); + + Network::new_regtest( + nu5_activation_height, + nu6_activation_height, + nu7_activation_height, + ) } ( NetworkKind::Testnet, diff --git a/zebra-network/src/protocol/external/types.rs b/zebra-network/src/protocol/external/types.rs index c6241ba4d78..725d8d6d8de 100644 --- a/zebra-network/src/protocol/external/types.rs +++ b/zebra-network/src/protocol/external/types.rs @@ -106,6 +106,9 @@ impl Version { (Mainnet, Nu5) => 170_100, (Testnet(params), Nu6) if params.is_default_testnet() => 170_110, (Mainnet, Nu6) => 170_120, + // FIXME: use proper values for Nu7 + (Testnet(params), Nu7) if params.is_default_testnet() => 170_111, + (Mainnet, Nu7) => 170_121, // It should be fine to reject peers with earlier network protocol versions on custom testnets for now. (Testnet(_), _) => CURRENT_NETWORK_PROTOCOL_VERSION.0, diff --git a/zebra-rpc/src/methods/get_block_template_rpcs/types/get_block_template/proposal.rs b/zebra-rpc/src/methods/get_block_template_rpcs/types/get_block_template/proposal.rs index fc0805b533d..373ba2d7c20 100644 --- a/zebra-rpc/src/methods/get_block_template_rpcs/types/get_block_template/proposal.rs +++ b/zebra-rpc/src/methods/get_block_template_rpcs/types/get_block_template/proposal.rs @@ -217,7 +217,7 @@ pub fn proposal_block_from_template( | NetworkUpgrade::Blossom | NetworkUpgrade::Heartwood => panic!("pre-Canopy block templates not supported"), NetworkUpgrade::Canopy => chain_history_root.bytes_in_serialized_order().into(), - NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 => { + NetworkUpgrade::Nu5 | NetworkUpgrade::Nu6 | NetworkUpgrade::Nu7 => { block_commitments_hash.bytes_in_serialized_order().into() } }; diff --git a/zebrad/tests/common/configs/v1.9.0.toml b/zebrad/tests/common/configs/v1.9.0.toml index 11bcf62107a..93291298f98 100644 --- a/zebrad/tests/common/configs/v1.9.0.toml +++ b/zebrad/tests/common/configs/v1.9.0.toml @@ -73,6 +73,8 @@ Heartwood = 903_800 Canopy = 1_028_500 NU5 = 1_842_420 NU6 = 2_000_000 +# FIXME: Use a proper value for NU7. +NU7 = 2_000_001 [network.testnet_parameters.pre_nu6_funding_streams.height_range] start = 0 From 7e2ca82aa0e2964b0de97986aa38162cbe573f06 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 11:05:59 +0200 Subject: [PATCH 03/25] Fix of new_regtest call (as it additionally needs Nu7 arg now) --- zebrad/tests/common/regtest.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zebrad/tests/common/regtest.rs b/zebrad/tests/common/regtest.rs index bf1cba697de..f7b571e5a09 100644 --- a/zebrad/tests/common/regtest.rs +++ b/zebrad/tests/common/regtest.rs @@ -43,7 +43,7 @@ pub(crate) async fn submit_blocks_test() -> Result<()> { let _init_guard = zebra_test::init(); info!("starting regtest submit_blocks test"); - let network = Network::new_regtest(None, None); + let network = Network::new_regtest(None, None, None); let mut config = os_assigned_rpc_port_config(false, &network)?; config.mempool.debug_enable_at_height = Some(0); From 78e035ac70396ca95b88d0901d10fd4f156aea13 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 13:15:21 +0200 Subject: [PATCH 04/25] Fix of new_regtest call (as it additionally needs Nu7 arg now) (2) --- zebra-consensus/src/checkpoint/list/tests.rs | 2 +- zebrad/tests/acceptance.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/zebra-consensus/src/checkpoint/list/tests.rs b/zebra-consensus/src/checkpoint/list/tests.rs index 5a2fe803f3d..698eaf36082 100644 --- a/zebra-consensus/src/checkpoint/list/tests.rs +++ b/zebra-consensus/src/checkpoint/list/tests.rs @@ -237,7 +237,7 @@ fn checkpoint_list_load_hard_coded() -> Result<(), BoxError> { let _ = Mainnet.checkpoint_list(); let _ = Network::new_default_testnet().checkpoint_list(); - let _ = Network::new_regtest(None, None).checkpoint_list(); + let _ = Network::new_regtest(None, None, None).checkpoint_list(); Ok(()) } diff --git a/zebrad/tests/acceptance.rs b/zebrad/tests/acceptance.rs index cd3572ce3f2..c71cede4c3b 100644 --- a/zebrad/tests/acceptance.rs +++ b/zebrad/tests/acceptance.rs @@ -2907,7 +2907,7 @@ async fn fully_synced_rpc_z_getsubtreesbyindex_snapshot_test() -> Result<()> { async fn validate_regtest_genesis_block() { let _init_guard = zebra_test::init(); - let network = Network::new_regtest(None, None); + let network = Network::new_regtest(None, None, None); let state = zebra_state::init_test(&network); let ( block_verifier_router, @@ -2982,7 +2982,7 @@ async fn trusted_chain_sync_handles_forks_correctly() -> Result<()> { use zebra_state::{ReadResponse, Response}; let _init_guard = zebra_test::init(); - let mut config = os_assigned_rpc_port_config(false, &Network::new_regtest(None, None))?; + let mut config = os_assigned_rpc_port_config(false, &Network::new_regtest(None, None, None))?; config.state.ephemeral = false; let network = config.network.network.clone(); From ac491b8041f98603c32259482787dcc1ca3b0567 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 14:46:17 +0200 Subject: [PATCH 05/25] Set Nu7 as a network update for testnet in zebra-chain network tests --- zebra-chain/src/parameters/network/tests/vectors.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zebra-chain/src/parameters/network/tests/vectors.rs b/zebra-chain/src/parameters/network/tests/vectors.rs index ca341184b8c..6c1426e4e0e 100644 --- a/zebra-chain/src/parameters/network/tests/vectors.rs +++ b/zebra-chain/src/parameters/network/tests/vectors.rs @@ -109,8 +109,7 @@ fn activates_network_upgrades_correctly() { let expected_activation_height = 1; let network = testnet::Parameters::build() .with_activation_heights(ConfiguredActivationHeights { - // FIXME: nu7? - nu6: Some(expected_activation_height), + nu7: Some(expected_activation_height), ..Default::default() }) .to_network(); From 6883488fc2fdafbc5e0bf1706bea6f163e6d8dd6 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 15:14:51 +0200 Subject: [PATCH 06/25] Fix serde names for NU7 --- zebra-chain/src/parameters/network_upgrade.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index c1719451fca..06b99879279 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -63,6 +63,7 @@ pub enum NetworkUpgrade { #[serde(rename = "NU6")] Nu6, /// The Zcash protocol after the NU7 upgrade. + #[serde(rename = "NU7")] Nu7, } From aa373f1d2eeecd54b7f156f1dbca1fa708595dfa Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 15:19:20 +0200 Subject: [PATCH 07/25] Update test snapshot in zebra-rpc to use NU7 --- .../tests/snapshots/get_blockchain_info@testnet_10.snap | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap index 3bea6c01509..9d7ea3f5176 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap @@ -1,5 +1,6 @@ --- source: zebra-rpc/src/methods/tests/snapshot.rs +assertion_line: 562 expression: info --- { @@ -69,6 +70,11 @@ expression: info "name": "NU6", "activationheight": 2976000, "status": "pending" + }, + "c8e71056": { + "name": "NU7", + "activationheight": 2942001, + "status": "pending" } }, "consensus": { From 0fba7f3c31901a36174da4cbb3d58044c18d6413 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 10 Feb 2025 10:20:11 +0100 Subject: [PATCH 08/25] Copy Nu7-related changes from zsa-integration-state --- zebra-chain/src/parameters/network/testnet.rs | 1 + zebra-chain/src/parameters/network_upgrade.rs | 10 ++++++---- zebra-network/src/constants.rs | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/zebra-chain/src/parameters/network/testnet.rs b/zebra-chain/src/parameters/network/testnet.rs index 7c3ab24477b..dc1b4c83e28 100644 --- a/zebra-chain/src/parameters/network/testnet.rs +++ b/zebra-chain/src/parameters/network/testnet.rs @@ -610,6 +610,7 @@ impl Parameters { canopy: Some(1), nu5: nu5_activation_height, nu6: nu6_activation_height, + nu7: nu7_activation_height, ..Default::default() }) .with_halving_interval(PRE_BLOSSOM_REGTEST_HALVING_INTERVAL); diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index 06b99879279..1eade62208c 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -227,7 +227,7 @@ pub(crate) const CONSENSUS_BRANCH_IDS: &[(NetworkUpgrade, ConsensusBranchId)] = (Nu5, ConsensusBranchId(0xc2d6d0b4)), (Nu6, ConsensusBranchId(0xc8e71055)), // FIXME: use a proper value below - (Nu7, ConsensusBranchId(0xc8e71056)), + (Nu7, ConsensusBranchId(0x77777777)), ]; /// The target block spacing before Blossom. @@ -545,10 +545,12 @@ impl From for NetworkUpgrade { zcash_protocol::consensus::NetworkUpgrade::Heartwood => Self::Heartwood, zcash_protocol::consensus::NetworkUpgrade::Canopy => Self::Canopy, zcash_protocol::consensus::NetworkUpgrade::Nu5 => Self::Nu5, + // FIXME: remove this cfg + //#[cfg(zcash_unstable = "nu6")] zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, - // FIXME: do we need the following cfg check? - #[cfg(zcash_unstable = "nu7")] - zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu7, + // FIXME: remove this cfg and process Nu7 properly (uses Self::Nu6 for now) + //#[cfg(zcash_unstable = "nu6")] + zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu6, } } } diff --git a/zebra-network/src/constants.rs b/zebra-network/src/constants.rs index a116fd63018..a9ecf68537a 100644 --- a/zebra-network/src/constants.rs +++ b/zebra-network/src/constants.rs @@ -403,7 +403,7 @@ lazy_static! { hash_map.insert(NetworkKind::Mainnet, Version::min_specified_for_upgrade(&Mainnet, Nu5)); hash_map.insert(NetworkKind::Testnet, Version::min_specified_for_upgrade(&Network::new_default_testnet(), Nu5)); - hash_map.insert(NetworkKind::Regtest, Version::min_specified_for_upgrade(&Network::new_regtest(None, None), Nu5)); + hash_map.insert(NetworkKind::Regtest, Version::min_specified_for_upgrade(&Network::new_regtest(None, None, None), Nu5)); hash_map }; From b42d84a56ce4d41c84554671864628e16f56f24e Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 10 Feb 2025 11:03:41 +0100 Subject: [PATCH 09/25] Uncomment zcash_unstable = nu7 --- zebra-chain/src/parameters/network_upgrade.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index 1eade62208c..36f9e297272 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -549,7 +549,7 @@ impl From for NetworkUpgrade { //#[cfg(zcash_unstable = "nu6")] zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, // FIXME: remove this cfg and process Nu7 properly (uses Self::Nu6 for now) - //#[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu7")] zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu6, } } From d8b48c92a733d5a9c2ed8d755f627026ea607ab5 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 10 Feb 2025 12:05:08 +0100 Subject: [PATCH 10/25] Fix Nu7 constants and add cfg(zcash_unstable ...) attribute according to PR #15 review comments --- zebra-chain/src/parameters/network_upgrade.rs | 19 ++++++++++--------- zebra-network/src/protocol/external/types.rs | 4 ++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index 36f9e297272..ae6cf89fd7e 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -94,8 +94,9 @@ pub(super) const MAINNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_046_400), Canopy), (block::Height(1_687_104), Nu5), (block::Height(2_726_400), Nu6), - // FIXME: TODO: Add NU7 with a correct value - // (block::Height(2_726_401), Nu7), + // FIXME: TODO: Use a proper value below. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + (block::Height(2_726_401), Nu7), ]; /// Fake mainnet network upgrade activation heights, used in tests. @@ -133,7 +134,8 @@ pub(super) const TESTNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_028_500), Canopy), (block::Height(1_842_420), Nu5), (block::Height(2_976_000), Nu6), - // FIXME: TODO: Set a correct value for NU7 + // FIXME: TODO: Use a proper value below. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] (block::Height(2_942_001), Nu7), ]; @@ -226,8 +228,9 @@ pub(crate) const CONSENSUS_BRANCH_IDS: &[(NetworkUpgrade, ConsensusBranchId)] = (Canopy, ConsensusBranchId(0xe9ff75a6)), (Nu5, ConsensusBranchId(0xc2d6d0b4)), (Nu6, ConsensusBranchId(0xc8e71055)), - // FIXME: use a proper value below - (Nu7, ConsensusBranchId(0x77777777)), + // FIXME: TODO: Use a proper value below. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + (Nu7, ConsensusBranchId(0x77190AD8)), ]; /// The target block spacing before Blossom. @@ -545,11 +548,9 @@ impl From for NetworkUpgrade { zcash_protocol::consensus::NetworkUpgrade::Heartwood => Self::Heartwood, zcash_protocol::consensus::NetworkUpgrade::Canopy => Self::Canopy, zcash_protocol::consensus::NetworkUpgrade::Nu5 => Self::Nu5, - // FIXME: remove this cfg - //#[cfg(zcash_unstable = "nu6")] zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, - // FIXME: remove this cfg and process Nu7 properly (uses Self::Nu6 for now) - #[cfg(zcash_unstable = "nu7")] + // FIXME: TODO: Use a proper value below. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu6, } } diff --git a/zebra-network/src/protocol/external/types.rs b/zebra-network/src/protocol/external/types.rs index 725d8d6d8de..652a2fe8776 100644 --- a/zebra-network/src/protocol/external/types.rs +++ b/zebra-network/src/protocol/external/types.rs @@ -107,8 +107,8 @@ impl Version { (Testnet(params), Nu6) if params.is_default_testnet() => 170_110, (Mainnet, Nu6) => 170_120, // FIXME: use proper values for Nu7 - (Testnet(params), Nu7) if params.is_default_testnet() => 170_111, - (Mainnet, Nu7) => 170_121, + (Testnet(params), Nu7) if params.is_default_testnet() => 170_130, + (Mainnet, Nu7) => 170_140, // It should be fine to reject peers with earlier network protocol versions on custom testnets for now. (Testnet(_), _) => CURRENT_NETWORK_PROTOCOL_VERSION.0, From 75f56e7e5615001346b0487919821c773e9db3bb Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 10 Feb 2025 13:32:15 +0100 Subject: [PATCH 11/25] Update network constant values according to PR #15 review comments --- zebra-chain/src/parameters/network_upgrade.rs | 2 +- .../tests/snapshots/get_blockchain_info@testnet_10.snap | 4 ++-- zebrad/tests/common/configs/v1.9.0.toml | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index ae6cf89fd7e..4518a5bfb2a 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -230,7 +230,7 @@ pub(crate) const CONSENSUS_BRANCH_IDS: &[(NetworkUpgrade, ConsensusBranchId)] = (Nu6, ConsensusBranchId(0xc8e71055)), // FIXME: TODO: Use a proper value below. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - (Nu7, ConsensusBranchId(0x77190AD8)), + (Nu7, ConsensusBranchId(0x77190ad8)), ]; /// The target block spacing before Blossom. diff --git a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap index 9d7ea3f5176..3fb53c4f71c 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap @@ -71,9 +71,9 @@ expression: info "activationheight": 2976000, "status": "pending" }, - "c8e71056": { + "77190ad8": { "name": "NU7", - "activationheight": 2942001, + "activationheight": 2726401, "status": "pending" } }, diff --git a/zebrad/tests/common/configs/v1.9.0.toml b/zebrad/tests/common/configs/v1.9.0.toml index 93291298f98..98a4b14bf67 100644 --- a/zebrad/tests/common/configs/v1.9.0.toml +++ b/zebrad/tests/common/configs/v1.9.0.toml @@ -73,7 +73,6 @@ Heartwood = 903_800 Canopy = 1_028_500 NU5 = 1_842_420 NU6 = 2_000_000 -# FIXME: Use a proper value for NU7. NU7 = 2_000_001 [network.testnet_parameters.pre_nu6_funding_streams.height_range] From f2b10a52b6464a9bee3e9767d1b3890a2c817b91 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 10 Feb 2025 13:43:24 +0100 Subject: [PATCH 12/25] Add zcash_unstable=nu6 Rust flag to .cargo/config.toml to use nu6 by default --- .cargo/config.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.cargo/config.toml b/.cargo/config.toml index 1368e393fe4..ab7095e21bd 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,6 +3,9 @@ # Flags that apply to all Zebra crates and configurations [target.'cfg(all())'] rustflags = [ + # FIXME: Consider removing this line later (it's needed for the ZSA version of librustzcash crates) + "--cfg", "zcash_unstable=\"nu6\"", + # Zebra standard lints for Rust 1.65+ # High-risk code From 58da3357f7f5b464f31249a2588099f8996ddf72 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 10 Feb 2025 15:29:45 +0100 Subject: [PATCH 13/25] Add zcash_unstable = nu6 cfg in zebra-network/.../types.rs --- zebra-network/src/protocol/external/types.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zebra-network/src/protocol/external/types.rs b/zebra-network/src/protocol/external/types.rs index 652a2fe8776..45c2278db51 100644 --- a/zebra-network/src/protocol/external/types.rs +++ b/zebra-network/src/protocol/external/types.rs @@ -106,8 +106,9 @@ impl Version { (Mainnet, Nu5) => 170_100, (Testnet(params), Nu6) if params.is_default_testnet() => 170_110, (Mainnet, Nu6) => 170_120, - // FIXME: use proper values for Nu7 + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] (Testnet(params), Nu7) if params.is_default_testnet() => 170_130, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] (Mainnet, Nu7) => 170_140, // It should be fine to reject peers with earlier network protocol versions on custom testnets for now. From 9a5a5a121110280bd2d7b41319c5286f99cdabbf Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 11 Feb 2025 11:29:09 +0100 Subject: [PATCH 14/25] Fix nu7 activation heights in network_upgrade.rs (nu6 value + 1 does not work - causes a test failure) --- zebra-chain/src/parameters/network_upgrade.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index 4518a5bfb2a..fe9eb672c01 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -96,7 +96,7 @@ pub(super) const MAINNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(2_726_400), Nu6), // FIXME: TODO: Use a proper value below. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - (block::Height(2_726_401), Nu7), + (block::Height(3_111_000), Nu7), ]; /// Fake mainnet network upgrade activation heights, used in tests. @@ -136,7 +136,7 @@ pub(super) const TESTNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(2_976_000), Nu6), // FIXME: TODO: Use a proper value below. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - (block::Height(2_942_001), Nu7), + (block::Height(3_222_000), Nu7), ]; /// Fake testnet network upgrade activation heights, used in tests. @@ -551,7 +551,7 @@ impl From for NetworkUpgrade { zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, // FIXME: TODO: Use a proper value below. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu6, + zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu7, } } } From c277d51cb900d88451da7b7fab2842c688422799 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Wed, 12 Feb 2025 15:25:31 +0100 Subject: [PATCH 15/25] Add cfg for CURRENT_NETWORK_PROTOCOL_VERSION constant definition, add FIXMEs for a couple of Nu6 processing cases, add processing of Nu7 --- zebra-chain/src/parameters/network/testnet.rs | 1 + zebra-consensus/src/block/check.rs | 1 + zebra-consensus/src/block/subsidy/funding_streams/tests.rs | 1 + zebra-network/src/constants.rs | 4 ++++ zebra-network/src/protocol/external/types.rs | 6 ++++-- zebra-rpc/src/methods/get_block_template_rpcs.rs | 1 + .../src/methods/tests/snapshot/get_block_template_rpcs.rs | 1 + zebrad/tests/acceptance.rs | 3 +++ 8 files changed, 16 insertions(+), 2 deletions(-) diff --git a/zebra-chain/src/parameters/network/testnet.rs b/zebra-chain/src/parameters/network/testnet.rs index dc1b4c83e28..f6153c8b304 100644 --- a/zebra-chain/src/parameters/network/testnet.rs +++ b/zebra-chain/src/parameters/network/testnet.rs @@ -787,6 +787,7 @@ impl Network { /// Returns post-Canopy funding streams for this network at the provided height pub fn funding_streams(&self, height: Height) -> &FundingStreams { + // FIXME: Would this work after Nu7 activation? if NetworkUpgrade::current(self, height) < NetworkUpgrade::Nu6 { self.pre_nu6_funding_streams() } else { diff --git a/zebra-consensus/src/block/check.rs b/zebra-consensus/src/block/check.rs index 24ef2ba2ed1..eaf193cda10 100644 --- a/zebra-consensus/src/block/check.rs +++ b/zebra-consensus/src/block/check.rs @@ -272,6 +272,7 @@ pub fn miner_fees_are_valid( // input. // // > [NU6 onward] The total output of a coinbase transaction MUST be equal to its total input. + // FIXME: Would this work after Nu7 activation? if if NetworkUpgrade::current(network, height) < NetworkUpgrade::Nu6 { total_output_value > total_input_value } else { diff --git a/zebra-consensus/src/block/subsidy/funding_streams/tests.rs b/zebra-consensus/src/block/subsidy/funding_streams/tests.rs index 91faa923c93..5cb8b3bc5f9 100644 --- a/zebra-consensus/src/block/subsidy/funding_streams/tests.rs +++ b/zebra-consensus/src/block/subsidy/funding_streams/tests.rs @@ -8,6 +8,7 @@ use crate::block::subsidy::general::block_subsidy; use super::*; /// Checks that the Mainnet funding stream values are correct. +// FIXME: Would this work after Nu7 activation? #[test] fn test_funding_stream_values() -> Result<(), Report> { let _init_guard = zebra_test::init(); diff --git a/zebra-network/src/constants.rs b/zebra-network/src/constants.rs index a9ecf68537a..a879a4562bf 100644 --- a/zebra-network/src/constants.rs +++ b/zebra-network/src/constants.rs @@ -340,7 +340,10 @@ pub const TIMESTAMP_TRUNCATION_SECONDS: u32 = 30 * 60; /// /// This version of Zebra draws the current network protocol version from /// [ZIP-253](https://zips.z.cash/zip-0253). +#[cfg(not(zcash_unstable = "nu6" /* TODO nu7 */ ))] pub const CURRENT_NETWORK_PROTOCOL_VERSION: Version = Version(170_120); +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +pub const CURRENT_NETWORK_PROTOCOL_VERSION: Version = Version(170_140); /// The default RTT estimate for peer responses. /// @@ -398,6 +401,7 @@ lazy_static! { /// Testnet network upgrades. // TODO: Change `Nu5` to `Nu6` after NU6 activation. // TODO: Move the value here to a field on `testnet::Parameters` (#8367) + // TODO: FIXME: Change `Nu...` to `Nu7` after NU7 activation? pub static ref INITIAL_MIN_NETWORK_PROTOCOL_VERSION: HashMap = { let mut hash_map = HashMap::new(); diff --git a/zebra-network/src/protocol/external/types.rs b/zebra-network/src/protocol/external/types.rs index 45c2278db51..91a1874c024 100644 --- a/zebra-network/src/protocol/external/types.rs +++ b/zebra-network/src/protocol/external/types.rs @@ -209,8 +209,9 @@ mod test { let _init_guard = zebra_test::init(); let highest_network_upgrade = NetworkUpgrade::current(network, block::Height::MAX); - assert!(highest_network_upgrade == Nu6 || highest_network_upgrade == Nu5, - "expected coverage of all network upgrades: add the new network upgrade to the list in this test"); + assert!( + highest_network_upgrade == Nu7 || highest_network_upgrade == Nu6 || highest_network_upgrade == Nu5, + "expected coverage of all network upgrades: add the new network upgrade to the list in this test"); for &network_upgrade in &[ BeforeOverwinter, @@ -221,6 +222,7 @@ mod test { Canopy, Nu5, Nu6, + Nu7, ] { let height = network_upgrade.activation_height(network); if let Some(height) = height { diff --git a/zebra-rpc/src/methods/get_block_template_rpcs.rs b/zebra-rpc/src/methods/get_block_template_rpcs.rs index 2d50552cfec..30661b664f7 100644 --- a/zebra-rpc/src/methods/get_block_template_rpcs.rs +++ b/zebra-rpc/src/methods/get_block_template_rpcs.rs @@ -1234,6 +1234,7 @@ where // Separate the funding streams into deferred and non-deferred streams .partition(|(receiver, _)| matches!(receiver, FundingStreamReceiver::Deferred)); + // FIXME: Would this work after Nu7 activation? let is_nu6 = NetworkUpgrade::current(&network, height) == NetworkUpgrade::Nu6; let [lockbox_total, funding_streams_total]: [std::result::Result< diff --git a/zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs b/zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs index 8afb7dd312d..5479f0a9271 100644 --- a/zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs +++ b/zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs @@ -149,6 +149,7 @@ pub async fn test_responses( ); if network.is_a_test_network() && !network.is_default_testnet() { + // FIXME: Would this work after Nu7 activation? let fake_future_nu6_block_height = NetworkUpgrade::Nu6.activation_height(network).unwrap().0 + 100_000; let get_block_subsidy = get_block_template_rpc diff --git a/zebrad/tests/acceptance.rs b/zebrad/tests/acceptance.rs index c71cede4c3b..4c717f62eb0 100644 --- a/zebrad/tests/acceptance.rs +++ b/zebrad/tests/acceptance.rs @@ -3362,6 +3362,7 @@ async fn nu6_funding_streams_and_coinbase_balance() -> Result<()> { panic!("this getblocktemplate call without parameters should return the `TemplateMode` variant of the response") }; + // FIXME: Would this work after Nu7 activation? let proposal_block = proposal_block_from_template(&block_template, None, NetworkUpgrade::Nu6)?; let hex_proposal_block = HexData(proposal_block.zcash_serialize_to_vec()?); @@ -3459,6 +3460,7 @@ async fn nu6_funding_streams_and_coinbase_balance() -> Result<()> { ..(*block_template) }; + // FIXME: Would this work after Nu7 activation? let proposal_block = proposal_block_from_template(&block_template, None, NetworkUpgrade::Nu6)?; // Submit the invalid block with an excessive coinbase output value @@ -3502,6 +3504,7 @@ async fn nu6_funding_streams_and_coinbase_balance() -> Result<()> { ..block_template }; + // FIXME: Would this work after Nu7 activation? let proposal_block = proposal_block_from_template(&block_template, None, NetworkUpgrade::Nu6)?; // Submit the invalid block with an excessive coinbase input value From c48c753c7ac2e39764ec9263e6afccaaba0c4bc2 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Wed, 12 Feb 2025 15:47:44 +0100 Subject: [PATCH 16/25] Update get_blockchain_info@testnet_10.snap --- .../methods/tests/snapshots/get_blockchain_info@testnet_10.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap index 3fb53c4f71c..14085ee0770 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap @@ -73,7 +73,7 @@ expression: info }, "77190ad8": { "name": "NU7", - "activationheight": 2726401, + "activationheight": 3222000, "status": "pending" } }, From 152d8935682bdc1630024e3cb1fe047137bef897 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Wed, 12 Feb 2025 16:06:30 +0100 Subject: [PATCH 17/25] Update get_blockchain_info@mainnet_10.snap --- .../tests/snapshots/get_blockchain_info@mainnet_10.snap | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@mainnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@mainnet_10.snap index 9986da0ec95..9fadb83a0fb 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@mainnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@mainnet_10.snap @@ -1,5 +1,6 @@ --- source: zebra-rpc/src/methods/tests/snapshot.rs +assertion_line: 562 expression: info --- { @@ -69,6 +70,11 @@ expression: info "name": "NU6", "activationheight": 2726400, "status": "pending" + }, + "77190ad8": { + "name": "NU7", + "activationheight": 3111000, + "status": "pending" } }, "consensus": { From 9b03c652ddd1ca97a76836f8edb44a64553faef9 Mon Sep 17 00:00:00 2001 From: Paul <3682187+PaulLaux@users.noreply.github.com> Date: Thu, 13 Feb 2025 11:53:52 -0600 Subject: [PATCH 18/25] updated cfg flag --- .cargo/config.toml | 4 ++-- zebra-chain/src/parameters/network_upgrade.rs | 8 ++++---- zebra-network/src/constants.rs | 4 ++-- zebra-network/src/protocol/external/types.rs | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index ab7095e21bd..f96f8d9c234 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,8 +3,8 @@ # Flags that apply to all Zebra crates and configurations [target.'cfg(all())'] rustflags = [ - # FIXME: Consider removing this line later (it's needed for the ZSA version of librustzcash crates) - "--cfg", "zcash_unstable=\"nu6\"", + # TODO: Remove later + "--cfg", "zcash_unstable=\"nu7\"", # Zebra standard lints for Rust 1.65+ diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index f41b70ceac8..31aa498588a 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -95,7 +95,7 @@ pub(super) const MAINNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_687_104), Nu5), (block::Height(2_726_400), Nu6), // FIXME: TODO: Use a proper value below. - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + #[cfg(zcash_unstable = "nu7")] (block::Height(3_111_000), Nu7), ]; @@ -135,7 +135,7 @@ pub(super) const TESTNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_842_420), Nu5), (block::Height(2_976_000), Nu6), // FIXME: TODO: Use a proper value below. - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + #[cfg(zcash_unstable = "nu7")] (block::Height(3_222_000), Nu7), ]; @@ -235,7 +235,7 @@ pub(crate) const CONSENSUS_BRANCH_IDS: &[(NetworkUpgrade, ConsensusBranchId)] = (Nu5, ConsensusBranchId(0xc2d6d0b4)), (Nu6, ConsensusBranchId(0xc8e71055)), // FIXME: TODO: Use a proper value below. - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + #[cfg(zcash_unstable = "nu7")] (Nu7, ConsensusBranchId(0x77190ad8)), ]; @@ -556,7 +556,7 @@ impl From for NetworkUpgrade { zcash_protocol::consensus::NetworkUpgrade::Nu5 => Self::Nu5, zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, // FIXME: TODO: Use a proper value below. - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + #[cfg(zcash_unstable = "nu7")] zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu7, } } diff --git a/zebra-network/src/constants.rs b/zebra-network/src/constants.rs index 7e03d1864a4..2a40b123262 100644 --- a/zebra-network/src/constants.rs +++ b/zebra-network/src/constants.rs @@ -340,9 +340,9 @@ pub const TIMESTAMP_TRUNCATION_SECONDS: u32 = 30 * 60; /// /// This version of Zebra draws the current network protocol version from /// [ZIP-253](https://zips.z.cash/zip-0253). -#[cfg(not(zcash_unstable = "nu6" /* TODO nu7 */ ))] +#[cfg(not(zcash_unstable = "nu7"))] pub const CURRENT_NETWORK_PROTOCOL_VERSION: Version = Version(170_120); -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +#[cfg(zcash_unstable = "nu7")] pub const CURRENT_NETWORK_PROTOCOL_VERSION: Version = Version(170_140); /// The default RTT estimate for peer responses. diff --git a/zebra-network/src/protocol/external/types.rs b/zebra-network/src/protocol/external/types.rs index 91a1874c024..ea37e562d3c 100644 --- a/zebra-network/src/protocol/external/types.rs +++ b/zebra-network/src/protocol/external/types.rs @@ -106,9 +106,9 @@ impl Version { (Mainnet, Nu5) => 170_100, (Testnet(params), Nu6) if params.is_default_testnet() => 170_110, (Mainnet, Nu6) => 170_120, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + #[cfg(zcash_unstable = "nu7")] (Testnet(params), Nu7) if params.is_default_testnet() => 170_130, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + #[cfg(zcash_unstable = "nu7")] (Mainnet, Nu7) => 170_140, // It should be fine to reject peers with earlier network protocol versions on custom testnets for now. From ee959b199c6ef7bc177293ddc8663e2e1413b6b4 Mon Sep 17 00:00:00 2001 From: Arya Date: Mon, 17 Feb 2025 18:34:50 -0500 Subject: [PATCH 19/25] remove `zcash_unstable` flag --- .cargo/config.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index f96f8d9c234..1368e393fe4 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,9 +3,6 @@ # Flags that apply to all Zebra crates and configurations [target.'cfg(all())'] rustflags = [ - # TODO: Remove later - "--cfg", "zcash_unstable=\"nu7\"", - # Zebra standard lints for Rust 1.65+ # High-risk code From e47e5bf653012b31c545b2df819942ea3c031cb0 Mon Sep 17 00:00:00 2001 From: Arya Date: Mon, 17 Feb 2025 18:35:37 -0500 Subject: [PATCH 20/25] Remove testnet and mainnet NU7 activation heights, comment out consensus branch id and conversion to zcash primitives nu type --- zebra-chain/src/parameters/network_upgrade.rs | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index 31aa498588a..bd18349ffa6 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -94,9 +94,6 @@ pub(super) const MAINNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_046_400), Canopy), (block::Height(1_687_104), Nu5), (block::Height(2_726_400), Nu6), - // FIXME: TODO: Use a proper value below. - #[cfg(zcash_unstable = "nu7")] - (block::Height(3_111_000), Nu7), ]; /// Fake mainnet network upgrade activation heights, used in tests. @@ -134,9 +131,6 @@ pub(super) const TESTNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_028_500), Canopy), (block::Height(1_842_420), Nu5), (block::Height(2_976_000), Nu6), - // FIXME: TODO: Use a proper value below. - #[cfg(zcash_unstable = "nu7")] - (block::Height(3_222_000), Nu7), ]; /// Fake testnet network upgrade activation heights, used in tests. @@ -234,9 +228,7 @@ pub(crate) const CONSENSUS_BRANCH_IDS: &[(NetworkUpgrade, ConsensusBranchId)] = (Canopy, ConsensusBranchId(0xe9ff75a6)), (Nu5, ConsensusBranchId(0xc2d6d0b4)), (Nu6, ConsensusBranchId(0xc8e71055)), - // FIXME: TODO: Use a proper value below. - #[cfg(zcash_unstable = "nu7")] - (Nu7, ConsensusBranchId(0x77190ad8)), + // (Nu7, ConsensusBranchId(0x77190ad8)), ]; /// The target block spacing before Blossom. @@ -555,9 +547,7 @@ impl From for NetworkUpgrade { zcash_protocol::consensus::NetworkUpgrade::Canopy => Self::Canopy, zcash_protocol::consensus::NetworkUpgrade::Nu5 => Self::Nu5, zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, - // FIXME: TODO: Use a proper value below. - #[cfg(zcash_unstable = "nu7")] - zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu7, + // zcash_protocol::consensus::NetworkUpgrade::Nu7 => Self::Nu7, } } } From 53e852037b584042b24dbfaa67809405c6f1fd67 Mon Sep 17 00:00:00 2001 From: Arya Date: Mon, 17 Feb 2025 18:39:59 -0500 Subject: [PATCH 21/25] Yep, it'll work after NU7 --- zebra-consensus/src/block/check.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/zebra-consensus/src/block/check.rs b/zebra-consensus/src/block/check.rs index eaf193cda10..24ef2ba2ed1 100644 --- a/zebra-consensus/src/block/check.rs +++ b/zebra-consensus/src/block/check.rs @@ -272,7 +272,6 @@ pub fn miner_fees_are_valid( // input. // // > [NU6 onward] The total output of a coinbase transaction MUST be equal to its total input. - // FIXME: Would this work after Nu7 activation? if if NetworkUpgrade::current(network, height) < NetworkUpgrade::Nu6 { total_output_value > total_input_value } else { From 1e632778bccdeb582da7dadc1ee4e4b1155cc39b Mon Sep 17 00:00:00 2001 From: Arya Date: Mon, 17 Feb 2025 18:41:21 -0500 Subject: [PATCH 22/25] Yep, the test should work fine after NU7 --- zebra-consensus/src/block/subsidy/funding_streams/tests.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/zebra-consensus/src/block/subsidy/funding_streams/tests.rs b/zebra-consensus/src/block/subsidy/funding_streams/tests.rs index 5cb8b3bc5f9..91faa923c93 100644 --- a/zebra-consensus/src/block/subsidy/funding_streams/tests.rs +++ b/zebra-consensus/src/block/subsidy/funding_streams/tests.rs @@ -8,7 +8,6 @@ use crate::block::subsidy::general::block_subsidy; use super::*; /// Checks that the Mainnet funding stream values are correct. -// FIXME: Would this work after Nu7 activation? #[test] fn test_funding_stream_values() -> Result<(), Report> { let _init_guard = zebra_test::init(); From b2aae758e7e311c35a802b74eaf745aedc9505c0 Mon Sep 17 00:00:00 2001 From: Arya Date: Mon, 17 Feb 2025 18:57:26 -0500 Subject: [PATCH 23/25] Yep, it only needs to be a post-nu6 height. --- zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs b/zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs index 98e49b30120..b2e012c7bcd 100644 --- a/zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs +++ b/zebra-rpc/src/methods/tests/snapshot/get_block_template_rpcs.rs @@ -153,7 +153,6 @@ pub async fn test_responses( ); if network.is_a_test_network() && !network.is_default_testnet() { - // FIXME: Would this work after Nu7 activation? let fake_future_nu6_block_height = NetworkUpgrade::Nu6.activation_height(network).unwrap().0 + 100_000; let get_block_subsidy = get_block_template_rpc From 6bf39707d4727e45d528391ec85e5674cfc3fda9 Mon Sep 17 00:00:00 2001 From: Arya Date: Mon, 17 Feb 2025 18:58:15 -0500 Subject: [PATCH 24/25] other fixes and cleanups --- zebra-chain/src/parameters/network.rs | 8 ++------ zebra-chain/src/parameters/network/subsidy.rs | 4 ++-- zebra-chain/src/parameters/network/testnet.rs | 14 ++++++-------- .../src/parameters/network/tests/vectors.rs | 4 ++-- zebra-consensus/src/checkpoint/list/tests.rs | 2 +- zebra-consensus/src/transaction/tests.rs | 5 ++++- zebra-network/src/config.rs | 16 +++++----------- zebra-network/src/constants.rs | 8 +++----- zebra-network/src/protocol/external/types.rs | 4 +--- zebra-rpc/src/methods/get_block_template_rpcs.rs | 5 ++--- .../get_block_template_rpcs/types/subsidy.rs | 4 ++-- zebrad/tests/acceptance.rs | 4 ++-- zebrad/tests/common/regtest.rs | 2 +- 13 files changed, 33 insertions(+), 47 deletions(-) diff --git a/zebra-chain/src/parameters/network.rs b/zebra-chain/src/parameters/network.rs index d119c087dd9..b6476253727 100644 --- a/zebra-chain/src/parameters/network.rs +++ b/zebra-chain/src/parameters/network.rs @@ -150,14 +150,10 @@ impl Network { /// Creates a new [`Network::Testnet`] with `Regtest` parameters and the provided network upgrade activation heights. pub fn new_regtest( - nu5_activation_height: Option, - nu6_activation_height: Option, - nu7_activation_height: Option, + configured_activation_heights: testnet::ConfiguredActivationHeights, ) -> Self { Self::new_configured_testnet(testnet::Parameters::new_regtest( - nu5_activation_height, - nu6_activation_height, - nu7_activation_height, + configured_activation_heights, )) } diff --git a/zebra-chain/src/parameters/network/subsidy.rs b/zebra-chain/src/parameters/network/subsidy.rs index df3d8c966f4..684b6b343f5 100644 --- a/zebra-chain/src/parameters/network/subsidy.rs +++ b/zebra-chain/src/parameters/network/subsidy.rs @@ -77,8 +77,8 @@ impl FundingStreamReceiver { /// [ZIP-1014]: https://zips.z.cash/zip-1014#abstract /// [`zcashd`]: https://github.com/zcash/zcash/blob/3f09cfa00a3c90336580a127e0096d99e25a38d6/src/consensus/funding.cpp#L13-L32 /// [ZIP-1015]: https://zips.z.cash/zip-1015 - pub fn info(&self, is_nu6: bool) -> (&'static str, &'static str) { - if is_nu6 { + pub fn info(&self, is_post_nu6: bool) -> (&'static str, &'static str) { + if is_post_nu6 { ( match self { FundingStreamReceiver::Ecc => "Electric Coin Company", diff --git a/zebra-chain/src/parameters/network/testnet.rs b/zebra-chain/src/parameters/network/testnet.rs index f6153c8b304..7548a13514d 100644 --- a/zebra-chain/src/parameters/network/testnet.rs +++ b/zebra-chain/src/parameters/network/testnet.rs @@ -591,12 +591,10 @@ impl Parameters { /// /// Creates an instance of [`Parameters`] with `Regtest` values. pub fn new_regtest( - nu5_activation_height: Option, - nu6_activation_height: Option, - nu7_activation_height: Option, + ConfiguredActivationHeights { nu5, nu6, nu7, .. }: ConfiguredActivationHeights, ) -> Self { #[cfg(any(test, feature = "proptest-impl"))] - let nu5_activation_height = nu5_activation_height.or(Some(100)); + let nu5 = nu5.or(Some(100)); let parameters = Self::build() .with_genesis_hash(REGTEST_GENESIS_HASH) @@ -608,9 +606,9 @@ impl Parameters { // most network upgrades are disabled by default for Regtest in zcashd .with_activation_heights(ConfiguredActivationHeights { canopy: Some(1), - nu5: nu5_activation_height, - nu6: nu6_activation_height, - nu7: nu7_activation_height, + nu5, + nu6, + nu7, ..Default::default() }) .with_halving_interval(PRE_BLOSSOM_REGTEST_HALVING_INTERVAL); @@ -654,7 +652,7 @@ impl Parameters { disable_pow, pre_blossom_halving_interval, post_blossom_halving_interval, - } = Self::new_regtest(None, None, None); + } = Self::new_regtest(Default::default()); self.network_name == network_name && self.genesis_hash == genesis_hash diff --git a/zebra-chain/src/parameters/network/tests/vectors.rs b/zebra-chain/src/parameters/network/tests/vectors.rs index 6c1426e4e0e..5d01134195c 100644 --- a/zebra-chain/src/parameters/network/tests/vectors.rs +++ b/zebra-chain/src/parameters/network/tests/vectors.rs @@ -147,7 +147,7 @@ fn activates_network_upgrades_correctly() { (Network::Mainnet, MAINNET_ACTIVATION_HEIGHTS), (Network::new_default_testnet(), TESTNET_ACTIVATION_HEIGHTS), ( - Network::new_regtest(None, None, None), + Network::new_regtest(Default::default()), expected_default_regtest_activation_heights, ), ] { @@ -198,7 +198,7 @@ fn check_configured_network_name() { "Mainnet should be displayed as 'Mainnet'" ); assert_eq!( - Network::new_regtest(None, None, None).to_string(), + Network::new_regtest(Default::default()).to_string(), "Regtest", "Regtest should be displayed as 'Regtest'" ); diff --git a/zebra-consensus/src/checkpoint/list/tests.rs b/zebra-consensus/src/checkpoint/list/tests.rs index 698eaf36082..1df05327d64 100644 --- a/zebra-consensus/src/checkpoint/list/tests.rs +++ b/zebra-consensus/src/checkpoint/list/tests.rs @@ -237,7 +237,7 @@ fn checkpoint_list_load_hard_coded() -> Result<(), BoxError> { let _ = Mainnet.checkpoint_list(); let _ = Network::new_default_testnet().checkpoint_list(); - let _ = Network::new_regtest(None, None, None).checkpoint_list(); + let _ = Network::new_regtest(Default::default()).checkpoint_list(); Ok(()) } diff --git a/zebra-consensus/src/transaction/tests.rs b/zebra-consensus/src/transaction/tests.rs index 8627a578c62..8eed738e3ce 100644 --- a/zebra-consensus/src/transaction/tests.rs +++ b/zebra-consensus/src/transaction/tests.rs @@ -2600,7 +2600,10 @@ async fn v5_consensus_branch_ids() { while let Some(next_nu) = network_upgrade.next_upgrade() { // Check an outdated network upgrade. - let height = next_nu.activation_height(&network).expect("height"); + let Some(height) = next_nu.activation_height(&network) else { + tracing::warn!(?next_nu, "missing activation height",); + continue; + }; let block_req = verifier .clone() diff --git a/zebra-network/src/config.rs b/zebra-network/src/config.rs index 25e82714ae5..aeb47782e2d 100644 --- a/zebra-network/src/config.rs +++ b/zebra-network/src/config.rs @@ -668,17 +668,11 @@ impl<'de> Deserialize<'de> for Config { (NetworkKind::Mainnet, _) => Network::Mainnet, (NetworkKind::Testnet, None) => Network::new_default_testnet(), (NetworkKind::Regtest, testnet_parameters) => { - let (nu5_activation_height, nu6_activation_height, nu7_activation_height) = - testnet_parameters - .and_then(|params| params.activation_heights) - .map(|ConfiguredActivationHeights { nu5, nu6, nu7, .. }| (nu5, nu6, nu7)) - .unwrap_or_default(); - - Network::new_regtest( - nu5_activation_height, - nu6_activation_height, - nu7_activation_height, - ) + let configured_activation_heights = testnet_parameters + .and_then(|params| params.activation_heights) + .unwrap_or_default(); + + Network::new_regtest(configured_activation_heights) } ( NetworkKind::Testnet, diff --git a/zebra-network/src/constants.rs b/zebra-network/src/constants.rs index 2a40b123262..215130d0d60 100644 --- a/zebra-network/src/constants.rs +++ b/zebra-network/src/constants.rs @@ -340,10 +340,9 @@ pub const TIMESTAMP_TRUNCATION_SECONDS: u32 = 30 * 60; /// /// This version of Zebra draws the current network protocol version from /// [ZIP-253](https://zips.z.cash/zip-0253). -#[cfg(not(zcash_unstable = "nu7"))] +// TODO: Update this constant to the correct value after NU7 activation, +// pub const CURRENT_NETWORK_PROTOCOL_VERSION: Version = Version(170_140); pub const CURRENT_NETWORK_PROTOCOL_VERSION: Version = Version(170_120); -#[cfg(zcash_unstable = "nu7")] -pub const CURRENT_NETWORK_PROTOCOL_VERSION: Version = Version(170_140); /// The default RTT estimate for peer responses. /// @@ -401,13 +400,12 @@ lazy_static! { /// Testnet network upgrades. // TODO: Change `Nu6` to `Nu7` after NU7 activation. // TODO: Move the value here to a field on `testnet::Parameters` (#8367) - // TODO: FIXME: Change `Nu...` to `Nu7` after NU7 activation? pub static ref INITIAL_MIN_NETWORK_PROTOCOL_VERSION: HashMap = { let mut hash_map = HashMap::new(); hash_map.insert(NetworkKind::Mainnet, Version::min_specified_for_upgrade(&Mainnet, Nu6)); hash_map.insert(NetworkKind::Testnet, Version::min_specified_for_upgrade(&Network::new_default_testnet(), Nu6)); - hash_map.insert(NetworkKind::Regtest, Version::min_specified_for_upgrade(&Network::new_regtest(None, None), Nu6)); + hash_map.insert(NetworkKind::Regtest, Version::min_specified_for_upgrade(&Network::new_regtest(Default::default()), Nu6)); hash_map }; diff --git a/zebra-network/src/protocol/external/types.rs b/zebra-network/src/protocol/external/types.rs index ea37e562d3c..78148253ba8 100644 --- a/zebra-network/src/protocol/external/types.rs +++ b/zebra-network/src/protocol/external/types.rs @@ -106,9 +106,7 @@ impl Version { (Mainnet, Nu5) => 170_100, (Testnet(params), Nu6) if params.is_default_testnet() => 170_110, (Mainnet, Nu6) => 170_120, - #[cfg(zcash_unstable = "nu7")] (Testnet(params), Nu7) if params.is_default_testnet() => 170_130, - #[cfg(zcash_unstable = "nu7")] (Mainnet, Nu7) => 170_140, // It should be fine to reject peers with earlier network protocol versions on custom testnets for now. @@ -210,7 +208,7 @@ mod test { let highest_network_upgrade = NetworkUpgrade::current(network, block::Height::MAX); assert!( - highest_network_upgrade == Nu7 || highest_network_upgrade == Nu6 || highest_network_upgrade == Nu5, + highest_network_upgrade == Nu7 || highest_network_upgrade == Nu6, "expected coverage of all network upgrades: add the new network upgrade to the list in this test"); for &network_upgrade in &[ diff --git a/zebra-rpc/src/methods/get_block_template_rpcs.rs b/zebra-rpc/src/methods/get_block_template_rpcs.rs index 64c024d55a5..b4e7d9c29bc 100644 --- a/zebra-rpc/src/methods/get_block_template_rpcs.rs +++ b/zebra-rpc/src/methods/get_block_template_rpcs.rs @@ -1242,8 +1242,7 @@ where // Separate the funding streams into deferred and non-deferred streams .partition(|(receiver, _)| matches!(receiver, FundingStreamReceiver::Deferred)); - // FIXME: Would this work after Nu7 activation? - let is_nu6 = NetworkUpgrade::current(&network, height) == NetworkUpgrade::Nu6; + let is_post_nu6 = NetworkUpgrade::current(&network, height) >= NetworkUpgrade::Nu6; let [lockbox_total, funding_streams_total]: [std::result::Result< Amount, @@ -1265,7 +1264,7 @@ where .into_iter() .map(|(receiver, value)| { let address = funding_stream_address(height, &network, receiver); - FundingStream::new(is_nu6, receiver, value, address) + FundingStream::new(is_post_nu6, receiver, value, address) }) .collect() }); diff --git a/zebra-rpc/src/methods/get_block_template_rpcs/types/subsidy.rs b/zebra-rpc/src/methods/get_block_template_rpcs/types/subsidy.rs index 6d64dcbdee9..e1973c7af4a 100644 --- a/zebra-rpc/src/methods/get_block_template_rpcs/types/subsidy.rs +++ b/zebra-rpc/src/methods/get_block_template_rpcs/types/subsidy.rs @@ -76,12 +76,12 @@ pub struct FundingStream { impl FundingStream { /// Convert a `receiver`, `value`, and `address` into a `FundingStream` response. pub fn new( - is_nu6: bool, + is_post_nu6: bool, receiver: FundingStreamReceiver, value: Amount, address: Option<&transparent::Address>, ) -> FundingStream { - let (name, specification) = receiver.info(is_nu6); + let (name, specification) = receiver.info(is_post_nu6); FundingStream { recipient: name.to_string(), diff --git a/zebrad/tests/acceptance.rs b/zebrad/tests/acceptance.rs index 9506da61edb..6421c040cbd 100644 --- a/zebrad/tests/acceptance.rs +++ b/zebrad/tests/acceptance.rs @@ -2907,7 +2907,7 @@ async fn fully_synced_rpc_z_getsubtreesbyindex_snapshot_test() -> Result<()> { async fn validate_regtest_genesis_block() { let _init_guard = zebra_test::init(); - let network = Network::new_regtest(None, None, None); + let network = Network::new_regtest(Default::default()); let state = zebra_state::init_test(&network); let ( block_verifier_router, @@ -2983,7 +2983,7 @@ async fn trusted_chain_sync_handles_forks_correctly() -> Result<()> { use zebra_state::{ReadResponse, Response}; let _init_guard = zebra_test::init(); - let mut config = os_assigned_rpc_port_config(false, &Network::new_regtest(None, None, None))?; + let mut config = os_assigned_rpc_port_config(false, &Network::new_regtest(Default::default()))?; config.state.ephemeral = false; let network = config.network.network.clone(); diff --git a/zebrad/tests/common/regtest.rs b/zebrad/tests/common/regtest.rs index f7b571e5a09..cb4c23a7db4 100644 --- a/zebrad/tests/common/regtest.rs +++ b/zebrad/tests/common/regtest.rs @@ -43,7 +43,7 @@ pub(crate) async fn submit_blocks_test() -> Result<()> { let _init_guard = zebra_test::init(); info!("starting regtest submit_blocks test"); - let network = Network::new_regtest(None, None, None); + let network = Network::new_regtest(Default::default()); let mut config = os_assigned_rpc_port_config(false, &network)?; config.mempool.debug_enable_at_height = Some(0); From 8d302bb3d06f2facdeb56ce64b657c7e18405e33 Mon Sep 17 00:00:00 2001 From: Arya Date: Mon, 17 Feb 2025 19:18:15 -0500 Subject: [PATCH 25/25] Updates snapshots, removes unnecessary FIXMEs, fixes issues with bad merge conflict resolution --- zebra-chain/src/parameters/network/testnet.rs | 38 +++++++------------ zebra-consensus/src/transaction/tests.rs | 7 +++- .../get_blockchain_info@mainnet_10.snap | 6 --- .../get_blockchain_info@testnet_10.snap | 6 --- zebrad/tests/acceptance.rs | 3 -- 5 files changed, 18 insertions(+), 42 deletions(-) diff --git a/zebra-chain/src/parameters/network/testnet.rs b/zebra-chain/src/parameters/network/testnet.rs index 37f37b65057..16c4906061d 100644 --- a/zebra-chain/src/parameters/network/testnet.rs +++ b/zebra-chain/src/parameters/network/testnet.rs @@ -118,35 +118,24 @@ impl From<&BTreeMap> for ConfiguredActivationHeights { let mut configured_activation_heights = ConfiguredActivationHeights::default(); for (height, network_upgrade) in activation_heights.iter() { - match network_upgrade { + let field = match network_upgrade { NetworkUpgrade::BeforeOverwinter => { - configured_activation_heights.before_overwinter = Some(height.0); - } - NetworkUpgrade::Overwinter => { - configured_activation_heights.overwinter = Some(height.0); - } - NetworkUpgrade::Sapling => { - configured_activation_heights.sapling = Some(height.0); - } - NetworkUpgrade::Blossom => { - configured_activation_heights.blossom = Some(height.0); - } - NetworkUpgrade::Heartwood => { - configured_activation_heights.heartwood = Some(height.0); - } - NetworkUpgrade::Canopy => { - configured_activation_heights.canopy = Some(height.0); - } - NetworkUpgrade::Nu5 => { - configured_activation_heights.nu5 = Some(height.0); - } - NetworkUpgrade::Nu6 => { - configured_activation_heights.nu6 = Some(height.0); + &mut configured_activation_heights.before_overwinter } + NetworkUpgrade::Overwinter => &mut configured_activation_heights.overwinter, + NetworkUpgrade::Sapling => &mut configured_activation_heights.sapling, + NetworkUpgrade::Blossom => &mut configured_activation_heights.blossom, + NetworkUpgrade::Heartwood => &mut configured_activation_heights.heartwood, + NetworkUpgrade::Canopy => &mut configured_activation_heights.canopy, + NetworkUpgrade::Nu5 => &mut configured_activation_heights.nu5, + NetworkUpgrade::Nu6 => &mut configured_activation_heights.nu6, + NetworkUpgrade::Nu7 => &mut configured_activation_heights.nu7, NetworkUpgrade::Genesis => { continue; } - } + }; + + *field = Some(height.0) } configured_activation_heights @@ -890,7 +879,6 @@ impl Network { /// Returns post-Canopy funding streams for this network at the provided height pub fn funding_streams(&self, height: Height) -> &FundingStreams { - // FIXME: Would this work after Nu7 activation? if NetworkUpgrade::current(self, height) < NetworkUpgrade::Nu6 { self.pre_nu6_funding_streams() } else { diff --git a/zebra-consensus/src/transaction/tests.rs b/zebra-consensus/src/transaction/tests.rs index 86235208ede..ffee6d36297 100644 --- a/zebra-consensus/src/transaction/tests.rs +++ b/zebra-consensus/src/transaction/tests.rs @@ -17,7 +17,7 @@ use zebra_chain::{ amount::{Amount, NonNegative}, block::{self, Block, Height}, orchard::{Action, AuthorizedAction, Flags}, - parameters::{Network, NetworkUpgrade}, + parameters::{testnet::ConfiguredActivationHeights, Network, NetworkUpgrade}, primitives::{ed25519, x25519, Groth16Proof}, sapling, serialization::{DateTime32, ZcashDeserialize, ZcashDeserializeInto}, @@ -1007,7 +1007,10 @@ async fn mempool_request_with_immature_spend_is_rejected() { async fn mempool_request_with_transparent_coinbase_spend_is_accepted_on_regtest() { let _init_guard = zebra_test::init(); - let network = Network::new_regtest(None, Some(1_000)); + let network = Network::new_regtest(ConfiguredActivationHeights { + nu6: Some(1_000), + ..Default::default() + }); let mut state: MockService<_, _, _, _> = MockService::build().for_unit_tests(); let verifier = Verifier::new_for_tests(&network, state.clone()); diff --git a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@mainnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@mainnet_10.snap index 5140c1d30db..c5a536205c3 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@mainnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@mainnet_10.snap @@ -1,6 +1,5 @@ --- source: zebra-rpc/src/methods/tests/snapshot.rs -assertion_line: 562 expression: info --- { @@ -87,11 +86,6 @@ expression: info "name": "NU6", "activationheight": 2726400, "status": "pending" - }, - "77190ad8": { - "name": "NU7", - "activationheight": 3111000, - "status": "pending" } }, "consensus": { diff --git a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap index e3039e52d82..8a1747ac777 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_blockchain_info@testnet_10.snap @@ -1,6 +1,5 @@ --- source: zebra-rpc/src/methods/tests/snapshot.rs -assertion_line: 562 expression: info --- { @@ -87,11 +86,6 @@ expression: info "name": "NU6", "activationheight": 2976000, "status": "pending" - }, - "77190ad8": { - "name": "NU7", - "activationheight": 3222000, - "status": "pending" } }, "consensus": { diff --git a/zebrad/tests/acceptance.rs b/zebrad/tests/acceptance.rs index aa3279867b5..4d7cac42665 100644 --- a/zebrad/tests/acceptance.rs +++ b/zebrad/tests/acceptance.rs @@ -3377,7 +3377,6 @@ async fn nu6_funding_streams_and_coinbase_balance() -> Result<()> { panic!("this getblocktemplate call without parameters should return the `TemplateMode` variant of the response") }; - // FIXME: Would this work after Nu7 activation? let proposal_block = proposal_block_from_template(&block_template, None, NetworkUpgrade::Nu6)?; let hex_proposal_block = HexData(proposal_block.zcash_serialize_to_vec()?); @@ -3486,7 +3485,6 @@ async fn nu6_funding_streams_and_coinbase_balance() -> Result<()> { ..(*block_template) }; - // FIXME: Would this work after Nu7 activation? let proposal_block = proposal_block_from_template(&block_template, None, NetworkUpgrade::Nu6)?; // Submit the invalid block with an excessive coinbase output value @@ -3530,7 +3528,6 @@ async fn nu6_funding_streams_and_coinbase_balance() -> Result<()> { ..block_template }; - // FIXME: Would this work after Nu7 activation? let proposal_block = proposal_block_from_template(&block_template, None, NetworkUpgrade::Nu6)?; // Submit the invalid block with an excessive coinbase input value