zebra/zebra-chain/src/block/genesis.rs

20 lines
632 B
Rust
Raw Normal View History

add(consensus): Adds `disable_pow` and `genesis_hash` fields, converts `equihash::Solution` to an enum (#8421) * minor cleanup and rename * Adds an empty NetworkParameters struct to Network::Testnet variant, updates production code. * Updates tests * Adds `NetworkKind` and uses it instead of `Network` in `HistoryTreeParts` and `transparent::Address` * Adds a [network.testnet_parameters] section to the config, uses `NetworkKind` as zebra_network::Config::network field type, and converts 'Network' to `NetworkKind` before serializing * Applies some suggestions from code review * Applies suggestions from code review * returns b58 prefix constants directly to remove From<NetworkKind> impl for zcash_primitives::consensus::Network * Applies more suggestions from code review. * moves conversions to zcash_primitives::consensus::Network to where they're used. * Apply suggestions from code review Co-authored-by: Marek <mail@marek.onl> * rename `network` variables and method names typed as NetworkKind to `network_kind` * use only test block heights for the network associated with them * Applies more suggestions from code review. * Rename `NetworkParameters` to `Parameters` and move it a new `testnet` module * adds activation heights field * updates stored test config, adds a quicker test for checking that stored configs can be parsed, adds an intermediate representation of activation heights * implement Parameters for Network * Passes &Network directly instead of converting to zp_consensus::Network where there were conversions * fixes a bad merge (removes a network conversion in zcash_note_encryption) * Adds a test for the Parameters impl for zebra_chain::Network * fixes doc links * - Makes the `activation_heights` config field optional by adding a #[serde(default)] - Panics if a non-zero activation height is provided for the `Genesis` network upgrade - Always sets the `Genesis` and `BeforeOverwinter` network upgrade activation heights to 0 and 1, `BeforeOverwinter` could be overwritten by a later network upgrade - Makes the `activation_heights` field on `Parameters` private, adds/uses an accessor method instead, and adds a builder struct and `build()` method * small refactor of activation_heights() method * check that activation heights are in the right order * Updates `NetworkUpgrade::activation_height()` to return the height of the next NetworkUpgrade if it doesn't find the activation height of `&self` * checks that the miner address is of TestnetKind on Regtest and update assertion message * Adds a DNetworkUpgradeActivationHeights struct for better control over how activation heights can be configured * moves all ordered network upgrades to a constant, adds a no_duplicates test, moves struct with activation heights outside deserialization impl and accepts it in `ParametersBuilder::activation_heights()` instead of a Vec * panics if any network upgrades are configured to activate at Height(0) because it's reserved for Genesis * Simplifies the `ParametersBuilder::activation_heights()` method and removes an unnecessary test. * Adds Sapling HRPs as fields on testnet params. (#8398) * Applies suggestions from code review. * Update zebra-chain/src/parameters/network_upgrade.rs Co-authored-by: Marek <mail@marek.onl> * Adds `network_name` field and accessor method on `Parameters`, uses it in the `Display` impl for `Network` * Removes unnecessary `.filter()` * adds constraints on valid network names and a test * adds config field for setting network name, adds "with_" prefix to ParameterBuilder setter methods * Adds `MainnetKind`, `TestnetKind`, and `RegtestKind` to reserved network names * updates stored test configs and fixes `network_name()` docs * Adds a `new_regtest()` method on `Network` and `testnet::Parameters`, updates config deserialization to return an error if the initial_testnet_peers include any default initial peers AND contain configured activation heights * Updates `activates_network_upgrades_correctly` test to check Regtest activation heights (and default Mainnet/Testnet) * Refactors if-let & match statement into general match statement, removes constraint against including `testnet_parameters` field/section in the config when using `Mainnet` or `Regtest` * Removes outdated TODO * Restores `testnet_parameters` section of the latest stored config. * Adds `with_sapling_hrps()` method and uses it to set the Regtest HRPs in `new_regtest()`. Adds a test for Sapling HRP validation * Checks that default Mainnet/Testnet/Regtest Sapling HRPs pass validation in `with_sapling_hrps()` * Uses the correct constant in test * Adds `is_regtest()` methods * Adds genesis hash methods and fields to `testnet::Parameters` and its builder * Copies Regtest genesis block from zcashd * moves genesis hash check to Network.checkpoint_list() * Checks the first line in the checkpoint list instead of the first item in the BTreeMap * Checks that there is _some_ genesis block in the checkpoints list in `from_list()`, adds Regtest checkpoints (which only includes the genesis block) * Adds a doc comment to `ParametersBuilder::default()` * Adds a `disable_pow` field and skips checking proof of work if it's true * Makes `equihash::Solution` an enum to support Regtest solutions, adds a test for validating and committing the Regtest genesis block * use genesis_hash as first checkpoint when checkpoints are missing for configured testnets too * Applies suggestions from code review. * Reverts changes to `activation_height()` method * Avoids panic in test * Updates test docs * drop custom panic hooks after expected panics --------- Co-authored-by: Marek <mail@marek.onl>
2024-04-25 22:30:36 -07:00
//! Regtest genesis block
use std::sync::Arc;
use hex::FromHex;
use crate::{block::Block, serialization::ZcashDeserializeInto};
/// Genesis block for Regtest, copied from zcashd via `getblock 0 0` RPC method
pub fn regtest_genesis_block() -> Arc<Block> {
let regtest_genesis_block_bytes =
<Vec<u8>>::from_hex(include_str!("genesis/block-regtest-0-000-000.txt").trim())
.expect("Block bytes are in valid hex representation");
regtest_genesis_block_bytes
.zcash_deserialize_into()
.map(Arc::new)
.expect("hard-coded Regtest genesis block data must deserialize successfully")
}