feature: Initial consensus parameter module

This commit is contained in:
teor 2020-07-15 17:01:05 +10:00 committed by Henry de Valence
parent 2d8e518499
commit 648d8daf12
2 changed files with 37 additions and 0 deletions

View File

@ -17,6 +17,7 @@
pub mod block;
pub mod checkpoint;
pub mod mempool;
pub mod parameters;
pub mod redjubjub;
mod script;
mod transaction;

View File

@ -0,0 +1,36 @@
//! The consensus parameters for each Zcash network.
//!
//! Some consensus parameters change based on network upgrades. Each network
//! upgrade happens at a particular block height. Some parameters have a value
//! (or function) before the upgrade height, at the upgrade height, and after
//! the upgrade height. (For example, the value of the reserved field in the
//! block header during the Heartwood upgrade.)
//!
//! Typically, consensus parameters are accessed via a function that takes a
//! `Network` and `BlockHeight`.
use zebra_chain::block::BlockHeaderHash;
use zebra_chain::{Network, Network::*};
/// Returns the previous block hash for the genesis block in `network`.
pub fn genesis_previous_block_hash(network: Network) -> BlockHeaderHash {
// All current networks use all-zeroes for the parent of the genesis block.
// (In Bitcoin, `null` is `[0; 32]`.)
//
// TODO: make this function const when feature(const_if_match) stabilises.
match network {
Mainnet | Testnet => BlockHeaderHash([0; 32]),
}
}
/// Returns the hash for the genesis block in `network`.
pub fn genesis_hash(network: Network) -> BlockHeaderHash {
match network {
// zcash-cli getblockhash 0 | zebrad revhex
Mainnet => "08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400",
// zcash-cli -testnet getblockhash 0 | zebrad revhex
Testnet => "382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605",
}
.parse()
.expect("hard-coded hash parses")
}