cuprate_consensus_rules/
genesis.rs1use monero_oxide::{
5 block::{Block, BlockHeader},
6 transaction::Transaction,
7};
8
9use cuprate_helper::network::Network;
10
11const fn genesis_nonce(network: Network) -> u32 {
12 match network {
13 Network::Mainnet | Network::FakeChain => 10000,
14 Network::Testnet => 10001,
15 Network::Stagenet => 10002,
16 }
17}
18
19fn genesis_miner_tx(network: Network) -> Transaction {
20 Transaction::read(&mut hex::decode(match network {
21 Network::Mainnet | Network::Testnet | Network::FakeChain => "013c01ff0001ffffffffffff03029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd08807121017767aafcde9be00dcfd098715ebcf7f410daebc582fda69d24a28e9d0bc890d1",
22 Network::Stagenet => "013c01ff0001ffffffffffff0302df5d56da0c7d643ddd1ce61901c7bdc5fb1738bfe39fbe69c28a3a7032729c0f2101168d0c4ca86fb55a4cf6a36d31431be1c53a3bd7411bb24e8832410289fa6f3b"
23 }).unwrap().as_slice()).unwrap()
24}
25
26pub fn generate_genesis_block(network: Network) -> Block {
30 Block::new(
31 BlockHeader {
32 hardfork_version: 1,
33 hardfork_signal: 0,
34 timestamp: 0,
35 previous: [0; 32],
36 nonce: genesis_nonce(network),
37 },
38 genesis_miner_tx(network),
39 vec![],
40 )
41 .unwrap()
42}
43
44#[cfg(test)]
45mod tests {
46 use super::*;
47
48 #[test]
49 fn generate_genesis_blocks() {
50 assert_eq!(
51 &generate_genesis_block(Network::Mainnet).hash(),
52 hex::decode("418015bb9ae982a1975da7d79277c2705727a56894ba0fb246adaabb1f4632e3")
53 .unwrap()
54 .as_slice()
55 );
56 assert_eq!(
57 &generate_genesis_block(Network::Testnet).hash(),
58 hex::decode("48ca7cd3c8de5b6a4d53d2861fbdaedca141553559f9be9520068053cda8430b")
59 .unwrap()
60 .as_slice()
61 );
62 assert_eq!(
63 &generate_genesis_block(Network::Stagenet).hash(),
64 hex::decode("76ee3cc98646292206cd3e86f74d88b4dcc1d937088645e9b0cbca84b7ce74eb")
65 .unwrap()
66 .as_slice()
67 );
68 }
69}