use super::*;
impl<N: Network> Metadata<N> {
pub fn genesis() -> Result<Self> {
let network = N::ID;
let round = 0;
let height = 0;
let coinbase_target = u64::MAX;
let proof_target = u64::MAX;
let timestamp = 0;
Self::new(network, round, height, coinbase_target, proof_target, timestamp)
}
pub fn is_genesis(&self) -> bool {
self.network == N::ID
&& self.round == 0u64
&& self.height == 0u32
&& self.coinbase_target == u64::MAX
&& self.proof_target == u64::MAX
&& self.timestamp == 0i64
}
}
#[cfg(test)]
mod tests {
use super::*;
use console::network::Testnet3;
type CurrentNetwork = Testnet3;
fn get_expected_size<N: Network>() -> usize {
2 + 4 + 8 + 8 + 8 + 8
+ 2
}
#[test]
fn test_genesis_metadata_size() {
let expected_size = get_expected_size::<CurrentNetwork>();
let genesis_metadata = *crate::ledger::test_helpers::sample_genesis_block().metadata();
assert_eq!(expected_size, genesis_metadata.to_bytes_le().unwrap().len());
}
#[test]
fn test_genesis_metadata() {
let metadata = *crate::ledger::test_helpers::sample_genesis_block().metadata();
assert!(metadata.is_genesis());
assert_eq!(metadata.network(), CurrentNetwork::ID);
assert_eq!(metadata.height(), 0);
assert_eq!(metadata.round(), 0);
assert_eq!(metadata.coinbase_target(), u64::MAX);
assert_eq!(metadata.proof_target(), u64::MAX);
assert_eq!(metadata.timestamp(), 0);
}
}