diff --git a/zcash_extensions/Cargo.toml b/zcash_extensions/Cargo.toml index 1bd361caf..14a3f3947 100644 --- a/zcash_extensions/Cargo.toml +++ b/zcash_extensions/Cargo.toml @@ -23,6 +23,7 @@ zcash_proofs.workspace = true [features] transparent-inputs = [] +unstable-nu6 = ["zcash_primitives/unstable-nu6"] [lib] bench = false diff --git a/zcash_extensions/src/transparent/demo.rs b/zcash_extensions/src/transparent/demo.rs index 640f7e617..1d5b84b99 100644 --- a/zcash_extensions/src/transparent/demo.rs +++ b/zcash_extensions/src/transparent/demo.rs @@ -512,6 +512,8 @@ mod tests { NetworkUpgrade::Heartwood => Some(BlockHeight::from_u32(903_800)), NetworkUpgrade::Canopy => Some(BlockHeight::from_u32(1_028_500)), NetworkUpgrade::Nu5 => Some(BlockHeight::from_u32(1_200_000)), + #[cfg(feature = "unstable-nu6")] + NetworkUpgrade::Nu6 => Some(BlockHeight::from_u32(1_300_000)), NetworkUpgrade::ZFuture => Some(BlockHeight::from_u32(1_400_000)), } } diff --git a/zcash_primitives/Cargo.toml b/zcash_primitives/Cargo.toml index 6147475ba..864684053 100644 --- a/zcash_primitives/Cargo.toml +++ b/zcash_primitives/Cargo.toml @@ -106,6 +106,7 @@ multicore = ["bellman/multicore", "orchard/multicore"] transparent-inputs = ["hdwallet", "ripemd", "secp256k1"] temporary-zcashd = [] test-dependencies = ["proptest", "orchard/test-dependencies"] +unstable-nu6 = [] zfuture = [] [lib] diff --git a/zcash_primitives/src/consensus.rs b/zcash_primitives/src/consensus.rs index 7ed52d9bc..f6a734ec4 100644 --- a/zcash_primitives/src/consensus.rs +++ b/zcash_primitives/src/consensus.rs @@ -212,6 +212,8 @@ impl Parameters for MainNetwork { NetworkUpgrade::Heartwood => Some(BlockHeight(903_000)), NetworkUpgrade::Canopy => Some(BlockHeight(1_046_400)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_687_104)), + #[cfg(feature = "unstable-nu6")] + NetworkUpgrade::Nu6 => None, #[cfg(feature = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -263,6 +265,8 @@ impl Parameters for TestNetwork { NetworkUpgrade::Heartwood => Some(BlockHeight(903_800)), NetworkUpgrade::Canopy => Some(BlockHeight(1_028_500)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_842_420)), + #[cfg(feature = "unstable-nu6")] + NetworkUpgrade::Nu6 => None, #[cfg(feature = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -393,6 +397,11 @@ pub enum NetworkUpgrade { /// /// [Nu5]: https://z.cash/upgrade/nu5/ Nu5, + /// The [Nu6] network upgrade. + /// + /// [Nu6]: https://z.cash/upgrade/nu6/ + #[cfg(feature = "unstable-nu6")] + Nu6, /// The ZFUTURE network upgrade. /// /// This upgrade is expected never to activate on mainnet; @@ -413,6 +422,8 @@ impl fmt::Display for NetworkUpgrade { NetworkUpgrade::Heartwood => write!(f, "Heartwood"), NetworkUpgrade::Canopy => write!(f, "Canopy"), NetworkUpgrade::Nu5 => write!(f, "Nu5"), + #[cfg(feature = "unstable-nu6")] + NetworkUpgrade::Nu6 => write!(f, "Nu6"), #[cfg(feature = "zfuture")] NetworkUpgrade::ZFuture => write!(f, "ZFUTURE"), } @@ -428,6 +439,8 @@ impl NetworkUpgrade { NetworkUpgrade::Heartwood => BranchId::Heartwood, NetworkUpgrade::Canopy => BranchId::Canopy, NetworkUpgrade::Nu5 => BranchId::Nu5, + #[cfg(feature = "unstable-nu6")] + NetworkUpgrade::Nu6 => BranchId::Nu6, #[cfg(feature = "zfuture")] NetworkUpgrade::ZFuture => BranchId::ZFuture, } @@ -445,6 +458,8 @@ const UPGRADES_IN_ORDER: &[NetworkUpgrade] = &[ NetworkUpgrade::Heartwood, NetworkUpgrade::Canopy, NetworkUpgrade::Nu5, + #[cfg(feature = "unstable-nu6")] + NetworkUpgrade::Nu6, ]; pub const ZIP212_GRACE_PERIOD: u32 = 32256; @@ -478,6 +493,9 @@ pub enum BranchId { Canopy, /// The consensus rules deployed by [`NetworkUpgrade::Nu5`]. Nu5, + /// The consensus rules deployed by [`NetworkUpgrade::Nu6`]. + #[cfg(feature = "unstable-nu6")] + Nu6, /// Candidates for future consensus rules; this branch will never /// activate on mainnet. #[cfg(feature = "zfuture")] @@ -498,6 +516,8 @@ impl TryFrom for BranchId { 0xf5b9_230b => Ok(BranchId::Heartwood), 0xe9ff_75a6 => Ok(BranchId::Canopy), 0xc2d6_d0b4 => Ok(BranchId::Nu5), + #[cfg(feature = "unstable-nu6")] + 0xc8e7_1055 => Ok(BranchId::Nu6), #[cfg(feature = "zfuture")] 0xffff_ffff => Ok(BranchId::ZFuture), _ => Err("Unknown consensus branch ID"), @@ -515,6 +535,8 @@ impl From for u32 { BranchId::Heartwood => 0xf5b9_230b, BranchId::Canopy => 0xe9ff_75a6, BranchId::Nu5 => 0xc2d6_d0b4, + #[cfg(feature = "unstable-nu6")] + BranchId::Nu6 => 0xc8e7_1055, #[cfg(feature = "zfuture")] BranchId::ZFuture => 0xffff_ffff, } @@ -587,6 +609,8 @@ impl BranchId { let upper = None; (lower, upper) }), + #[cfg(feature = "unstable-nu6")] + BranchId::Nu6 => None, #[cfg(feature = "zfuture")] BranchId::ZFuture => params .activation_height(NetworkUpgrade::ZFuture) @@ -634,6 +658,8 @@ pub mod testing { BranchId::Heartwood, BranchId::Canopy, BranchId::Nu5, + #[cfg(feature = "unstable-nu6")] + BranchId::Nu6, #[cfg(feature = "zfuture")] BranchId::ZFuture, ]) diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index b9ff932af..13bd24a2d 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -239,6 +239,8 @@ impl TxVersion { TxVersion::Sapling } BranchId::Nu5 => TxVersion::Zip225, + #[cfg(feature = "unstable-nu6")] + BranchId::Nu6 => TxVersion::Zip225, #[cfg(feature = "zfuture")] BranchId::ZFuture => TxVersion::ZFuture, } @@ -970,6 +972,8 @@ pub mod testing { Just(TxVersion::Sapling).boxed() } BranchId::Nu5 => Just(TxVersion::Zip225).boxed(), + #[cfg(feature = "unstable-nu6")] + BranchId::Nu6 => Just(TxVersion::Zip225).boxed(), #[cfg(feature = "zfuture")] BranchId::ZFuture => Just(TxVersion::ZFuture).boxed(), }