rustywallet_hd/
network.rs

1//! Network types and version bytes for extended keys.
2
3/// Network for extended key serialization.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub enum Network {
6    /// Bitcoin Mainnet (xprv/xpub)
7    #[default]
8    Mainnet,
9    /// Bitcoin Testnet (tprv/tpub)
10    Testnet,
11}
12
13impl Network {
14    /// Version bytes for extended private key (xprv/tprv).
15    pub fn xprv_version(&self) -> [u8; 4] {
16        match self {
17            Network::Mainnet => [0x04, 0x88, 0xAD, 0xE4], // xprv
18            Network::Testnet => [0x04, 0x35, 0x83, 0x94], // tprv
19        }
20    }
21
22    /// Version bytes for extended public key (xpub/tpub).
23    pub fn xpub_version(&self) -> [u8; 4] {
24        match self {
25            Network::Mainnet => [0x04, 0x88, 0xB2, 0x1E], // xpub
26            Network::Testnet => [0x04, 0x35, 0x87, 0xCF], // tpub
27        }
28    }
29
30    /// Detect network from version bytes.
31    pub fn from_version(version: &[u8; 4]) -> Option<(Self, bool)> {
32        match version {
33            [0x04, 0x88, 0xAD, 0xE4] => Some((Network::Mainnet, true)),  // xprv
34            [0x04, 0x88, 0xB2, 0x1E] => Some((Network::Mainnet, false)), // xpub
35            [0x04, 0x35, 0x83, 0x94] => Some((Network::Testnet, true)),  // tprv
36            [0x04, 0x35, 0x87, 0xCF] => Some((Network::Testnet, false)), // tpub
37            _ => None,
38        }
39    }
40}