Skip to main content

blvm_protocol/
genesis.rs

1//! Genesis blocks.
2//!
3//! The header and coinbase are built by [`blvm_consensus::block::genesis_block`].
4
5use blvm_consensus::block::genesis_block;
6use blvm_consensus::types::{Block, Network};
7
8/// Mainnet genesis. Hash `000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f`.
9pub fn mainnet_genesis() -> Block {
10    genesis_block(Network::Mainnet)
11}
12
13/// Testnet genesis. Hash `000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943`.
14pub fn testnet_genesis() -> Block {
15    genesis_block(Network::Testnet)
16}
17
18/// Regtest genesis. Hash `0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206`.
19pub fn regtest_genesis() -> Block {
20    genesis_block(Network::Regtest)
21}
22
23/// Testnet4 genesis. Hash `00000000da84f2bafbbc53dee25a72ae507ff4914b867c565be350b0da8bf043`.
24pub fn testnet4_genesis() -> Block {
25    genesis_block(Network::Testnet4)
26}
27
28/// Signet genesis. Hash `00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6`.
29pub fn signet_genesis() -> Block {
30    genesis_block(Network::Signet)
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn testnet4_genesis_matches_core() {
39        let block = testnet4_genesis();
40        let hash = blvm_consensus::block::block_header_hash(&block.header);
41        let mut display = hash;
42        display.reverse();
43        assert_eq!(
44            hex_encode(&display),
45            "00000000da84f2bafbbc53dee25a72ae507ff4914b867c565be350b0da8bf043"
46        );
47        let mut merkle = block.header.merkle_root;
48        merkle.reverse();
49        assert_eq!(
50            hex_encode(&merkle),
51            "7aa0a7ae1e223414cb807e40cd57e667b718e42aaf9306db9102fe28912b7b4e"
52        );
53    }
54
55    fn hex_encode(bytes: &[u8]) -> String {
56        const HEX: &[u8; 16] = b"0123456789abcdef";
57        let mut out = String::with_capacity(bytes.len() * 2);
58        for b in bytes {
59            out.push(HEX[(b >> 4) as usize] as char);
60            out.push(HEX[(b & 0xf) as usize] as char);
61        }
62        out
63    }
64}