forked from ordinals/ord
-
Notifications
You must be signed in to change notification settings - Fork 35
/
chain.rs
84 lines (75 loc) Β· 1.95 KB
/
chain.rs
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
use {super::*, clap::ValueEnum};
#[derive(Default, ValueEnum, Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum Chain {
#[default]
#[value(alias("main"))]
Mainnet,
#[value(alias("test"))]
Testnet,
Signet,
Regtest,
}
impl Chain {
pub(crate) fn network(self) -> Network {
match self {
Self::Mainnet => Network::Bitcoin,
Self::Testnet => Network::Testnet,
Self::Signet => Network::Signet,
Self::Regtest => Network::Regtest,
}
}
pub(crate) fn default_rpc_port(self) -> u16 {
match self {
Self::Mainnet => 8332,
Self::Regtest => 18443,
Self::Signet => 38332,
Self::Testnet => 18332,
}
}
pub(crate) fn inscription_content_size_limit(self) -> Option<usize> {
match self {
Self::Mainnet | Self::Regtest => None,
Self::Testnet | Self::Signet => Some(1024),
}
}
pub(crate) fn first_inscription_height(self) -> u64 {
match self {
Self::Mainnet => 767430,
Self::Regtest => 0,
Self::Signet => 112402,
Self::Testnet => 2413343,
}
}
pub(crate) fn genesis_block(self) -> Block {
bitcoin::blockdata::constants::genesis_block(self.network())
}
pub(crate) fn address_from_script(
self,
script: &Script,
) -> Result<Address, bitcoin::address::Error> {
Address::from_script(script, self.network())
}
pub(crate) fn join_with_data_dir(self, data_dir: &Path) -> PathBuf {
match self {
Self::Mainnet => data_dir.to_owned(),
Self::Testnet => data_dir.join("testnet3"),
Self::Signet => data_dir.join("signet"),
Self::Regtest => data_dir.join("regtest"),
}
}
}
impl Display for Chain {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(
f,
"{}",
match self {
Self::Mainnet => "mainnet",
Self::Regtest => "regtest",
Self::Signet => "signet",
Self::Testnet => "testnet",
}
)
}
}