1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChainParams {
    pub p2pkh: u8,
    pub p2sh: u8,
    pub privkey: u8,
    pub xpub: u32,
    pub xpriv: u32,
    pub magic: u32,
}

impl Default for ChainParams {
    fn default() -> ChainParams {
        ChainParams {
            p2pkh: 0x00,
            p2sh: 0x05,
            privkey: 0x80,
            xpub: 0x0488b21e,
            xpriv: 0x0488ade4,
            magic: 0xe3e1f3e8,
        }
    }
}

impl ChainParams {
    // #[cfg_attr(all(feature = "wasm-bindgen-address"), wasm_bindgen(constructor))]
    pub fn new(p2pkh: u8, p2sh: u8, privkey: u8, xpub: u32, xpriv: u32, magic: u32) -> ChainParams {
        ChainParams {
            p2pkh,
            p2sh,
            privkey,
            xpub,
            xpriv,
            magic,
        }
    }

    // #[cfg_attr(all(feature = "wasm-bindgen-address"), wasm_bindgen(js_name = Mainnet))]
    pub fn mainnet() -> ChainParams {
        ChainParams::default()
    }

    // #[cfg_attr(all(feature = "wasm-bindgen-address"), wasm_bindgen(js_name = Testnet))]
    pub fn testnet() -> ChainParams {
        ChainParams {
            p2pkh: 0x6f,
            p2sh: 0xc4,
            privkey: 0xef,
            xpub: 0x043587cf,
            xpriv: 0x04358394,
            magic: 0xf4e5f3f4,
        }
    }

    // #[cfg_attr(all(feature = "wasm-bindgen-address"), wasm_bindgen(js_name = Regtest))]
    pub fn regtest() -> ChainParams {
        let ChainParams {
            p2pkh, p2sh, privkey, xpub, xpriv, ..
        } = ChainParams::testnet();
        ChainParams {
            p2pkh,
            p2sh,
            privkey,
            xpub,
            xpriv,
            magic: 0xdab5bffa,
        }
    }

    // #[cfg_attr(all(feature = "wasm-bindgen-address"), wasm_bindgen(js_name = STN))]
    pub fn stn() -> ChainParams {
        let ChainParams {
            p2pkh, p2sh, privkey, xpub, xpriv, ..
        } = ChainParams::testnet();
        ChainParams {
            p2pkh,
            p2sh,
            privkey,
            xpub,
            xpriv,
            magic: 0xfbcec4f9,
        }
    }
}