#![deny(unused_import_braces, unused_qualifications, trivial_casts, trivial_numeric_casts)]
#![deny(unused_qualifications, variant_size_differences, stable_features, unreachable_pub)]
#![deny(non_shorthand_field_patterns, unused_attributes, unused_extern_crates)]
#![deny(
renamed_and_removed_lints,
stable_features,
unused_allocation,
unused_comparisons,
bare_trait_objects
)]
#![deny(
const_err,
unused_must_use,
unused_mut,
unused_unsafe,
private_in_public,
unsafe_code
)]
#![forbid(unsafe_code)]
#[macro_use]
extern crate thiserror;
#[macro_use]
extern crate tracing;
pub mod consensus;
pub use consensus::*;
pub mod difficulty;
pub use difficulty::*;
pub mod error;
pub mod miner;
pub use miner::Miner;
pub mod memory_pool;
pub use memory_pool::MemoryPool;
pub mod parameters;
pub use parameters::*;
use snarkos_storage::Ledger;
use snarkvm_dpc::{
testnet1::{
instantiated::{CommitmentMerkleParameters, Tx},
transaction::amount::AleoAmount,
},
BlockHeader,
BlockHeaderHash,
};
pub type MerkleTreeLedger<S> = Ledger<Tx, CommitmentMerkleParameters, S>;
pub fn get_block_reward(block_num: u32) -> AleoAmount {
let expected_blocks_per_hour: u32 = 100;
let num_years = 4;
let block_segments = num_years * 365 * 24 * expected_blocks_per_hour;
let aleo_denonimation = AleoAmount::COIN;
let initial_reward = 150i64 * aleo_denonimation;
let num_halves = u32::min(block_num / block_segments, 2);
let reward = initial_reward / (2_u64.pow(num_halves)) as i64;
AleoAmount::from_bytes(reward)
}
pub fn is_genesis(block_header: &BlockHeader) -> bool {
block_header.previous_block_hash == BlockHeaderHash([0u8; 32])
}