From 50190a3c3f74566ee0602c9454a476491d15b4b3 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Sun, 18 Aug 2024 22:34:58 +0200 Subject: [PATCH 01/31] Introduce Nu7 --- zebra-chain/Cargo.toml | 3 ++- 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 | 9 +++++++- .../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 +- 9 files changed, 42 insertions(+), 13 deletions(-) diff --git a/zebra-chain/Cargo.toml b/zebra-chain/Cargo.toml index badeb6b699f..10c5ed926cd 100644 --- a/zebra-chain/Cargo.toml +++ b/zebra-chain/Cargo.toml @@ -179,4 +179,5 @@ harness = false [lints.rust] # TODO: Remove this once it's no longer needed for NU6. -unexpected_cfgs = { level = "warn", check-cfg = ['cfg(zcash_unstable, values("nu6"))'] } +# FIXME: TODO: What about NU7? +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(zcash_unstable, values("nu6", "nu7"))'] } 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 8cec6c16c1e..6b793b4f634 100644 --- a/zebra-chain/src/parameters/network.rs +++ b/zebra-chain/src/parameters/network.rs @@ -136,10 +136,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 80cb8419c77..53ae14711c1 100644 --- a/zebra-chain/src/parameters/network/testnet.rs +++ b/zebra-chain/src/parameters/network/testnet.rs @@ -194,6 +194,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. @@ -314,6 +317,7 @@ impl ParametersBuilder { canopy, nu5, nu6, + nu7, }: ConfiguredActivationHeights, ) -> Self { use NetworkUpgrade::*; @@ -332,6 +336,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(); @@ -519,6 +524,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)); @@ -538,6 +544,7 @@ impl Parameters { canopy: Some(1), nu5: nu5_activation_height, nu6: nu6_activation_height, + nu7: nu7_activation_height, ..Default::default() }) .finish() @@ -568,7 +575,7 @@ impl Parameters { post_nu6_funding_streams, target_difficulty_limit, disable_pow, - } = 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 c839a26c116..4683a908d2b 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 121a5bdcf13..74669a9b0fe 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. @@ -60,6 +61,8 @@ pub enum NetworkUpgrade { Nu5, /// The Zcash protocol after the NU6 upgrade. 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_687_104), Nu5), // TODO: Add NU6 // (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. @@ -127,6 +133,8 @@ pub(super) const TESTNET_ACTIVATION_HEIGHTS: &[(block::Height, NetworkUpgrade)] (block::Height(1_842_420), Nu5), // TODO: Add NU6 // (block::Height(2_942_000), Nu6), + // FIXME: TODO: Add NU7 with a correct value + // (block::Height(2_942_001), Nu7), ]; /// Fake testnet network upgrade activation heights, used in tests. @@ -141,6 +149,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 @@ -217,6 +226,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. @@ -333,7 +344,8 @@ impl NetworkUpgrade { Heartwood => Some(Canopy), Canopy => Some(Nu5), Nu5 => Some(Nu6), - Nu6 => None, + Nu6 => Some(Nu7), + Nu7 => None, } } @@ -410,7 +422,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) @@ -533,6 +547,9 @@ impl From for NetworkUpgrade { zcash_protocol::consensus::NetworkUpgrade::Nu5 => Self::Nu5, #[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, } } } 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 2d3845dc7230e4e81c5c2ffa42093dfbbf919acb Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 19 Aug 2024 07:51:31 +0200 Subject: [PATCH 02/31] 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 00f4f8b4460..236608b11cc 100644 --- a/zebra-network/src/config.rs +++ b/zebra-network/src/config.rs @@ -722,12 +722,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 7ac76d7670f..1c8c2fd3b2f 100644 --- a/zebra-network/src/protocol/external/types.rs +++ b/zebra-network/src/protocol/external/types.rs @@ -95,6 +95,9 @@ impl Version { (Mainnet, Nu5) => 170_100, (Testnet(params), Nu6) if params.is_default_testnet() => 170_050, (Mainnet, Nu6) => 170_100, + // FIXME: use proper values for Nu7 + (Testnet(params), Nu7) if params.is_default_testnet() => 170_051, + (Mainnet, Nu7) => 170_101, // It should be fine to reject peers with earlier network protocol versions on custom testnets for now. (Testnet(_params), _) => 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 53c65b675b1ce50905f145412b8e18fcc56a98d3 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 2 Sep 2024 10:39:29 +0200 Subject: [PATCH 03/31] Trigger CI From c238847af2f5ad57f537889e87860042af2100bb Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 3 Sep 2024 08:54:05 +0200 Subject: [PATCH 04/31] Add basic CI checks workflow --- .github/workflows/ci-basic.yml | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/ci-basic.yml diff --git a/.github/workflows/ci-basic.yml b/.github/workflows/ci-basic.yml new file mode 100644 index 00000000000..92dedd60cb0 --- /dev/null +++ b/.github/workflows/ci-basic.yml @@ -0,0 +1,36 @@ +name: Basic checks + +on: [push, pull_request] + +jobs: + test: + name: Test on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v4 + - name: Run tests + run: cargo test --verbose + - name: Verify working directory is clean + run: git diff --exit-code + + doc-links: + name: Intra-doc links + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: cargo fetch + # Requires #![deny(rustdoc::broken_intra_doc_links)] in crates. + - name: Check intra-doc links + run: cargo doc --all-features --document-private-items + + fmt: + name: Rustfmt + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: cargo fmt -- --check From 2c13ae9ab1ffbc6865867ed7f42a2f5d262a3539 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 3 Sep 2024 10:28:32 +0200 Subject: [PATCH 05/31] Fix ci-basic.yml --- .github/workflows/ci-basic.yml | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci-basic.yml b/.github/workflows/ci-basic.yml index 92dedd60cb0..7b50109c04a 100644 --- a/.github/workflows/ci-basic.yml +++ b/.github/workflows/ci-basic.yml @@ -12,25 +12,13 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install dependencies on Ubuntu + run: sudo apt-get update && sudo apt-get install -y protoc - name: Run tests run: cargo test --verbose - name: Verify working directory is clean run: git diff --exit-code - - doc-links: - name: Intra-doc links - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - run: cargo fetch - # Requires #![deny(rustdoc::broken_intra_doc_links)] in crates. - - name: Check intra-doc links + - name: Run doc check run: cargo doc --all-features --document-private-items - - fmt: - name: Rustfmt - timeout-minutes: 30 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - run: cargo fmt -- --check + - name: Run format check + run: cargo fmt -- --check From 5a839c6f2b56f3ca73f16a101b7a34551a4816da Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 3 Sep 2024 10:31:29 +0200 Subject: [PATCH 06/31] Fix ci-basic.yml (2) --- .github/workflows/ci-basic.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-basic.yml b/.github/workflows/ci-basic.yml index 7b50109c04a..522329e2440 100644 --- a/.github/workflows/ci-basic.yml +++ b/.github/workflows/ci-basic.yml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Install dependencies on Ubuntu - run: sudo apt-get update && sudo apt-get install -y protoc + run: sudo apt-get update && sudo apt-get install -y protobuf-compiler - name: Run tests run: cargo test --verbose - name: Verify working directory is clean From 367a14bff6885625577eac433b6b4ccdc5c6600b Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 3 Sep 2024 10:52:49 +0200 Subject: [PATCH 07/31] Add installing of build-essential to ci-basic.yml --- .github/workflows/ci-basic.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-basic.yml b/.github/workflows/ci-basic.yml index 522329e2440..be3d44917eb 100644 --- a/.github/workflows/ci-basic.yml +++ b/.github/workflows/ci-basic.yml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Install dependencies on Ubuntu - run: sudo apt-get update && sudo apt-get install -y protobuf-compiler + run: sudo apt-get update && sudo apt-get install -y protobuf-compiler build-essential - name: Run tests run: cargo test --verbose - name: Verify working directory is clean From f425747e759a17c8a102bd30985bddb406d60906 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 3 Sep 2024 20:57:11 +0200 Subject: [PATCH 08/31] Try to use librocksdb-dev in ci-basic.yml --- .github/workflows/ci-basic.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-basic.yml b/.github/workflows/ci-basic.yml index be3d44917eb..547b64446c3 100644 --- a/.github/workflows/ci-basic.yml +++ b/.github/workflows/ci-basic.yml @@ -1,6 +1,7 @@ name: Basic checks -on: [push, pull_request] +#on: [push, pull_request] +on: [push] jobs: test: @@ -13,9 +14,9 @@ jobs: steps: - uses: actions/checkout@v4 - name: Install dependencies on Ubuntu - run: sudo apt-get update && sudo apt-get install -y protobuf-compiler build-essential + run: sudo apt-get update && sudo apt-get install -y protobuf-compiler build-essential librocksdb-dev - name: Run tests - run: cargo test --verbose + run: ROCKSDB_LIB_DIR=/usr/lib SNAPPY_LIB_DIR=/usr/lib/x86_64-linux-gnu cargo test --verbose - name: Verify working directory is clean run: git diff --exit-code - name: Run doc check From 831c847d32201ceb7dc0cf6efde9a317a7274d59 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 3 Sep 2024 21:05:06 +0200 Subject: [PATCH 09/31] Run ci-basic.yml on ubuntu-24.04 --- .github/workflows/ci-basic.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-basic.yml b/.github/workflows/ci-basic.yml index 547b64446c3..840d406b609 100644 --- a/.github/workflows/ci-basic.yml +++ b/.github/workflows/ci-basic.yml @@ -9,7 +9,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest] + os: [ubuntu-24.04] steps: - uses: actions/checkout@v4 From ecaf98d9a04213b2bc0b6e2fc553880a4849bf5a Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 3 Sep 2024 22:32:19 +0200 Subject: [PATCH 10/31] Enable nu6 cfg flag in ci-basic.yml --- .github/workflows/ci-basic.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-basic.yml b/.github/workflows/ci-basic.yml index 840d406b609..4a9bdafa1b5 100644 --- a/.github/workflows/ci-basic.yml +++ b/.github/workflows/ci-basic.yml @@ -11,12 +11,20 @@ jobs: matrix: os: [ubuntu-24.04] + env: + # Use system-installed RocksDB library instead of building from scratch + ROCKSDB_LIB_DIR: /usr/lib + # Use system-installed Snappy library for compression in RocksDB + SNAPPY_LIB_DIR: /usr/lib/x86_64-linux-gnu + # Enable the `nu6` feature in `zcash_protocol` + RUSTFLAGS: '--cfg zcash_unstable="nu6"' + steps: - uses: actions/checkout@v4 - name: Install dependencies on Ubuntu run: sudo apt-get update && sudo apt-get install -y protobuf-compiler build-essential librocksdb-dev - name: Run tests - run: ROCKSDB_LIB_DIR=/usr/lib SNAPPY_LIB_DIR=/usr/lib/x86_64-linux-gnu cargo test --verbose + run: cargo test --verbose - name: Verify working directory is clean run: git diff --exit-code - name: Run doc check From 7d1115990ab39f28035f568ad4d69eadbd764147 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Wed, 4 Sep 2024 10:51:26 +0200 Subject: [PATCH 11/31] Adjust the code with librustzcash/zcash_protocol nu6 related changes --- zebra-chain/Cargo.toml | 4 +++ zebra-chain/src/parameters/network_upgrade.rs | 7 ++++- .../src/primitives/zcash_primitives.rs | 27 ++++++++++++++++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/zebra-chain/Cargo.toml b/zebra-chain/Cargo.toml index bf9479976ee..44954d31af7 100644 --- a/zebra-chain/Cargo.toml +++ b/zebra-chain/Cargo.toml @@ -176,3 +176,7 @@ required-features = ["bench"] [[bench]] name = "redpallas" harness = false + +# FIXME: remove this and all zcash_unstable usage in the code after updating librustzcash +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(zcash_unstable, values("nu6"))'] } diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index 551c4a88801..ab66fbc7895 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -530,7 +530,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: uncomment this! zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, + // FIXME: remove cfg + #[cfg(zcash_unstable = "nu6")] + zcash_protocol::consensus::NetworkUpgrade::Nu6 => Self::Nu6, + // FIXME: remove 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-chain/src/primitives/zcash_primitives.rs b/zebra-chain/src/primitives/zcash_primitives.rs index 7ab2f32d751..be90f18ed23 100644 --- a/zebra-chain/src/primitives/zcash_primitives.rs +++ b/zebra-chain/src/primitives/zcash_primitives.rs @@ -137,6 +137,16 @@ impl zp_tx::components::orchard::MapAuth + for IdentityMap +{ + fn map_issue_authorization(&self, s: orchard::issuance::Signed) -> orchard::issuance::Signed { + s + } +} + #[derive(Debug)] struct PrecomputedAuth<'a> { _phantom: std::marker::PhantomData<&'a ()>, @@ -146,6 +156,14 @@ impl<'a> zp_tx::Authorization for PrecomputedAuth<'a> { type TransparentAuth = TransparentAuth<'a>; type SaplingAuth = sapling_crypto::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; + + // FIXME: is this correct? + #[cfg(zcash_unstable = "nu6")] + type OrchardZsaAuth = orchard::bundle::Authorized; + + // FIXME: is this correct? + #[cfg(zcash_unstable = "nu6")] + type IssueAuth = orchard::issuance::Signed; } // End of (mostly) copied code @@ -275,7 +293,14 @@ impl<'a> PrecomputedTxData<'a> { }; let tx_data: zp_tx::TransactionData = alt_tx .into_data() - .map_authorization(f_transparent, IdentityMap, IdentityMap); + // FIXME: do we need to pass another arg values or orchard_zsa and issue instead of IdentityMap? + .map_authorization( + f_transparent, + IdentityMap, + IdentityMap, + IdentityMap, + IdentityMap, + ); PrecomputedTxData { tx_data, From 6a0196e9b791f6873b42bb086bc4bfe18ebeb299 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Wed, 4 Sep 2024 11:40:25 +0200 Subject: [PATCH 12/31] Add RUSTDOCFLAGS to ci-basic.yml --- .github/workflows/ci-basic.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-basic.yml b/.github/workflows/ci-basic.yml index 4a9bdafa1b5..c2cde8686bf 100644 --- a/.github/workflows/ci-basic.yml +++ b/.github/workflows/ci-basic.yml @@ -18,11 +18,13 @@ jobs: SNAPPY_LIB_DIR: /usr/lib/x86_64-linux-gnu # Enable the `nu6` feature in `zcash_protocol` RUSTFLAGS: '--cfg zcash_unstable="nu6"' + RUSTDOCFLAGS: '--cfg zcash_unstable="nu6"' steps: - uses: actions/checkout@v4 - name: Install dependencies on Ubuntu - run: sudo apt-get update && sudo apt-get install -y protobuf-compiler build-essential librocksdb-dev + #run: sudo apt-get update && sudo apt-get install -y protobuf-compiler build-essential librocksdb-dev + run: sudo apt-get update && sudo apt-get install -y protobuf-compiler librocksdb-dev - name: Run tests run: cargo test --verbose - name: Verify working directory is clean From d8964e714e6527ba6632b0b6451eab934baa8040 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 11:05:59 +0200 Subject: [PATCH 13/31] 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 e8abddd11e856fe0d972b1bbf2c93949e2040e34 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 13:15:21 +0200 Subject: [PATCH 14/31] 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 23d9e7754ae959f5f6d8174ad0f3d7bce927545d Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 14:46:17 +0200 Subject: [PATCH 15/31] Set Nu7 as a network update for testnet in zebra-chain network tests --- zebra-chain/src/parameters/network/tests/vectors.rs | 3 +-- zebra-chain/src/parameters/network_upgrade.rs | 4 ++-- 2 files changed, 3 insertions(+), 4 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(); diff --git a/zebra-chain/src/parameters/network_upgrade.rs b/zebra-chain/src/parameters/network_upgrade.rs index 845bbec981e..4ca8c6a8777 100644 --- a/zebra-chain/src/parameters/network_upgrade.rs +++ b/zebra-chain/src/parameters/network_upgrade.rs @@ -133,8 +133,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: Add NU7 with a correct value - // (block::Height(2_942_001), Nu7), + // FIXME: TODO: Set a correct value for NU7 + (block::Height(2_942_001), Nu7), ]; /// Fake testnet network upgrade activation heights, used in tests. From e0adb4ca39ea389589a729c1fc294b6658b7fd79 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 15:14:51 +0200 Subject: [PATCH 16/31] 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 4ca8c6a8777..325f2558b17 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 0daf0ce05a5a9bdef648860862b35b0c001350e8 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 17 Oct 2024 15:19:20 +0200 Subject: [PATCH 17/31] 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 bf18f0c0a7aa466e04e91fd54fd2e7a5e97b808e Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Sun, 18 Aug 2024 22:34:58 +0200 Subject: [PATCH 18/31] 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 19/31] 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 20/31] 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 21/31] 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 22/31] 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 23/31] 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 24/31] 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 25/31] 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 26/31] 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 27/31] 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 28/31] 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 29/31] 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 30/31] 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 31/31] 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, } } }