Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add(network-params): Allow configuring NU6 activation height on Regtest #8700

Merged
merged 2 commits into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions zebra-chain/src/parameters/network.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,14 @@ 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<u32>) -> Self {
Self::new_configured_testnet(testnet::Parameters::new_regtest(nu5_activation_height))
pub fn new_regtest(
nu5_activation_height: Option<u32>,
nu6_activation_height: Option<u32>,
) -> Self {
Self::new_configured_testnet(testnet::Parameters::new_regtest(
nu5_activation_height,
nu6_activation_height,
))
}

/// Returns true if the network is the default Testnet, or false otherwise.
Expand Down
9 changes: 7 additions & 2 deletions zebra-chain/src/parameters/network/testnet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ pub struct ConfiguredActivationHeights {
#[serde(rename = "NU5")]
pub nu5: Option<u32>,
/// Activation height for `NU6` network upgrade.
#[serde(rename = "NU6")]
pub nu6: Option<u32>,
}

Expand Down Expand Up @@ -347,7 +348,10 @@ impl Parameters {
/// Accepts a [`ConfiguredActivationHeights`].
///
/// Creates an instance of [`Parameters`] with `Regtest` values.
pub fn new_regtest(nu5_activation_height: Option<u32>) -> Self {
pub fn new_regtest(
nu5_activation_height: Option<u32>,
nu6_activation_height: Option<u32>,
) -> Self {
#[cfg(any(test, feature = "proptest-impl"))]
let nu5_activation_height = nu5_activation_height.or(Some(100));

Expand All @@ -365,6 +369,7 @@ impl Parameters {
.with_activation_heights(ConfiguredActivationHeights {
canopy: Some(1),
nu5: nu5_activation_height,
nu6: nu6_activation_height,
..Default::default()
})
.finish()
Expand All @@ -388,7 +393,7 @@ impl Parameters {
slow_start_shift,
target_difficulty_limit,
disable_pow,
} = Self::new_regtest(None);
} = Self::new_regtest(None, None);

self.network_name == network_name
&& self.network_magic == network_magic
Expand Down
4 changes: 2 additions & 2 deletions zebra-chain/src/parameters/network/tests/vectors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ fn activates_network_upgrades_correctly() {
(Network::Mainnet, MAINNET_ACTIVATION_HEIGHTS),
(Network::new_default_testnet(), TESTNET_ACTIVATION_HEIGHTS),
(
Network::new_regtest(None),
Network::new_regtest(None, None),
expected_default_regtest_activation_heights,
),
] {
Expand Down Expand Up @@ -192,7 +192,7 @@ fn check_configured_network_name() {
"Mainnet should be displayed as 'Mainnet'"
);
assert_eq!(
Network::new_regtest(None).to_string(),
Network::new_regtest(None, None).to_string(),
"Regtest",
"Regtest should be displayed as 'Regtest'"
);
Expand Down
2 changes: 1 addition & 1 deletion zebra-consensus/src/checkpoint/list/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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).checkpoint_list();
let _ = Network::new_regtest(None, None).checkpoint_list();

Ok(())
}
Expand Down
7 changes: 4 additions & 3 deletions zebra-network/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -719,11 +719,12 @@ 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 = testnet_parameters
let (nu5_activation_height, nu6_activation_height) = testnet_parameters
.and_then(|params| params.activation_heights)
.and_then(|activation_height| activation_height.nu5);
.map(|ConfiguredActivationHeights { nu5, nu6, .. }| (nu5, nu6))
.unwrap_or_default();

Network::new_regtest(nu5_activation_height)
Network::new_regtest(nu5_activation_height, nu6_activation_height)
}
(
NetworkKind::Testnet,
Expand Down
2 changes: 1 addition & 1 deletion zebra-network/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,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), Nu5));
hash_map.insert(NetworkKind::Regtest, Version::min_specified_for_upgrade(&Network::new_regtest(None, None), Nu5));

hash_map
};
Expand Down
4 changes: 2 additions & 2 deletions zebrad/tests/acceptance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@
parameters::Network::{self, *},
};
use zebra_consensus::ParameterCheckpoint;
use zebra_network::constants::PORT_IN_USE_ERROR;

Check warning on line 162 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test stable on windows-latest

unused import: `zebra_network::constants::PORT_IN_USE_ERROR`

Check warning on line 162 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on windows-latest

unused import: `zebra_network::constants::PORT_IN_USE_ERROR`
use zebra_node_services::rpc_client::RpcRequestClient;
use zebra_rpc::server::OPENED_RPC_ENDPOINT_MSG;
use zebra_state::{constants::LOCK_FILE_ERROR, state_database_format_version_in_code};
Expand All @@ -167,7 +167,7 @@
use zebra_test::{
args,
command::{to_regex::CollectRegexSet, ContextFrom},
net::random_known_port,

Check warning on line 170 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test stable on windows-latest

unused import: `net::random_known_port`

Check warning on line 170 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on windows-latest

unused import: `net::random_known_port`
prelude::*,
};

Expand Down Expand Up @@ -818,17 +818,17 @@
zebrad generate | \n\
sed 's/cache_dir = \".*\"/cache_dir = \"cache_dir\"/' > \n\
zebrad/tests/common/configs/{}<next-release-tag>.toml",
if cfg!(feature = "shielded-scan") {

Check warning on line 821 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on windows-latest

unexpected `cfg` condition value: `shielded-scan`

Check warning on line 821 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on ubuntu-latest

unexpected `cfg` condition value: `shielded-scan`
SHIELDED_SCAN_CONFIG_PREFIX
} else {
""
},
if cfg!(feature = "shielded-scan") {

Check warning on line 826 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on windows-latest

unexpected `cfg` condition value: `shielded-scan`

Check warning on line 826 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on ubuntu-latest

unexpected `cfg` condition value: `shielded-scan`
"--features=shielded-scan "
} else {
""
},
if cfg!(feature = "shielded-scan") {

Check warning on line 831 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on windows-latest

unexpected `cfg` condition value: `shielded-scan`

Check warning on line 831 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on ubuntu-latest

unexpected `cfg` condition value: `shielded-scan`
SHIELDED_SCAN_CONFIG_PREFIX
} else {
""
Expand Down Expand Up @@ -963,7 +963,7 @@

// ignore files starting with shieldedscan prefix
// if we were not built with the shielded-scan feature.
#[cfg(not(feature = "shielded-scan"))]

Check warning on line 966 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on ubuntu-latest

unexpected `cfg` condition value: `shielded-scan`
if config_file_name.starts_with(SHIELDED_SCAN_CONFIG_PREFIX) {
tracing::info!(?config_file_path, "skipping shielded-scan config file path");
continue;
Expand Down Expand Up @@ -1023,7 +1023,7 @@

// ignore files starting with shieldedscan prefix
// if we were not built with the shielded-scan feature.
#[cfg(not(feature = "shielded-scan"))]

Check warning on line 1026 in zebrad/tests/acceptance.rs

View workflow job for this annotation

GitHub Actions / Test beta on ubuntu-latest

unexpected `cfg` condition value: `shielded-scan`
if config_file_name.starts_with(SHIELDED_SCAN_CONFIG_PREFIX) {
tracing::info!(?config_file_path, "skipping shielded-scan config file path");
continue;
Expand Down Expand Up @@ -2888,7 +2888,7 @@
async fn validate_regtest_genesis_block() {
let _init_guard = zebra_test::init();

let network = Network::new_regtest(None);
let network = Network::new_regtest(None, None);
let state = zebra_state::init_test(&network);
let (
block_verifier_router,
Expand Down Expand Up @@ -2963,7 +2963,7 @@
use zebra_state::{ReadResponse, Response};

let _init_guard = zebra_test::init();
let mut config = os_assigned_rpc_port_config(false, &Network::new_regtest(None))?;
let mut config = os_assigned_rpc_port_config(false, &Network::new_regtest(None, None))?;
config.state.ephemeral = false;
let network = config.network.network.clone();

Expand Down
96 changes: 96 additions & 0 deletions zebrad/tests/common/configs/v1.9.0.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Default configuration for zebrad.
#
# This file can be used as a skeleton for custom configs.
#
# Unspecified fields use default values. Optional fields are Some(field) if the
# field is present and None if it is absent.
#
# This file is generated as an example using zebrad's current defaults.
# You should set only the config options you want to keep, and delete the rest.
# Only a subset of fields are present in the skeleton, since optional values
# whose default is None are omitted.
#
# The config format (including a complete list of sections and fields) is
# documented here:
# https://docs.rs/zebrad/latest/zebrad/config/struct.ZebradConfig.html
#
# zebrad attempts to load configs in the following order:
#
# 1. The -c flag on the command line, e.g., `zebrad -c myconfig.toml start`;
# 2. The file `zebrad.toml` in the users's preference directory (platform-dependent);
# 3. The default config.
#
# The user's preference directory and the default path to the `zebrad` config are platform dependent,
# based on `dirs::preference_dir`, see https://docs.rs/dirs/latest/dirs/fn.preference_dir.html :
#
# | Platform | Value | Example |
# | -------- | ------------------------------------- | ---------------------------------------------- |
# | Linux | `$XDG_CONFIG_HOME` or `$HOME/.config` | `/home/alice/.config/zebrad.toml` |
# | macOS | `$HOME/Library/Preferences` | `/Users/Alice/Library/Preferences/zebrad.toml` |
# | Windows | `{FOLDERID_RoamingAppData}` | `C:\Users\Alice\AppData\Local\zebrad.toml` |

[consensus]
checkpoint_sync = true

[mempool]
eviction_memory_time = "1h"
tx_cost_limit = 80000000

[metrics]

[mining]
debug_like_zcashd = true

[network]
cache_dir = true
crawl_new_peer_interval = "1m 1s"
initial_mainnet_peers = [
"dnsseed.z.cash:8233",
"dnsseed.str4d.xyz:8233",
"mainnet.seeder.zfnd.org:8233",
"mainnet.is.yolo.money:8233",
]
initial_testnet_peers = []
listen_addr = "0.0.0.0:8233"
max_connections_per_ip = 1
network = "Testnet"
peerset_initial_target_size = 25

[network.testnet_parameters]
network_name = "ConfiguredTestnet_1"
network_magic = [0, 0, 0, 0]
slow_start_interval = 0
target_difficulty_limit = "0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"
disable_pow = true
genesis_hash = "00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08"

[network.testnet_parameters.activation_heights]
BeforeOverwinter = 1
Overwinter = 207_500
Sapling = 280_000
Blossom = 584_000
Heartwood = 903_800
Canopy = 1_028_500
NU5 = 1_842_420
NU6 = 2_000_000

[rpc]
debug_force_finished_sync = false
parallel_cpu_threads = 0

[state]
cache_dir = "cache_dir"
delete_old_database = true
ephemeral = false

[sync]
checkpoint_verify_concurrency_limit = 1000
download_concurrency_limit = 50
full_verify_concurrency_limit = 20
parallel_cpu_threads = 0

[tracing]
buffer_limit = 128000
force_use_color = false
use_color = true
use_journald = false
2 changes: 1 addition & 1 deletion zebrad/tests/common/regtest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
let network = Network::new_regtest(None, None);
let mut config = os_assigned_rpc_port_config(false, &network)?;
config.mempool.debug_enable_at_height = Some(0);

Expand Down
Loading