Skip to main content

lithium_cli/
deployments.rs

1//! Mainnet contract addresses parsed from `deployments/bostrom-mainnet.toml`.
2
3use std::sync::OnceLock;
4
5const MAINNET_TOML: &str = include_str!("../deployments/bostrom-mainnet.toml");
6
7/// Deployed contract addresses on Bostrom mainnet.
8#[derive(Debug, Clone)]
9pub struct Deployments {
10    pub litium_core: String,
11    pub litium_mine: String,
12    pub litium_stake: String,
13    pub litium_refer: String,
14    pub litium_wrap: String,
15}
16
17/// Parse and cache mainnet deployment addresses from the embedded TOML.
18pub fn mainnet() -> &'static Deployments {
19    static DEPLOYMENTS: OnceLock<Deployments> = OnceLock::new();
20    DEPLOYMENTS.get_or_init(|| {
21        let table: toml::Table =
22            toml::from_str(MAINNET_TOML).expect("embedded deployments TOML is valid");
23
24        let addr = |section: &str| -> String {
25            table[section]["address"]
26                .as_str()
27                .unwrap_or_else(|| panic!("{} address missing in deployments TOML", section))
28                .to_string()
29        };
30
31        Deployments {
32            litium_core: addr("litium-core"),
33            litium_mine: addr("litium-mine"),
34            litium_stake: addr("litium-stake"),
35            litium_refer: addr("litium-refer"),
36            litium_wrap: addr("litium-wrap"),
37        }
38    })
39}
40
41#[cfg(test)]
42mod tests {
43    use super::*;
44
45    #[test]
46    fn mainnet_deployments_parse_successfully() {
47        let d = mainnet();
48        assert!(d.litium_core.starts_with("bostrom1"), "bad litium-core addr");
49        assert!(d.litium_mine.starts_with("bostrom1"), "bad litium-mine addr");
50        assert!(
51            d.litium_stake.starts_with("bostrom1"),
52            "bad litium-stake addr"
53        );
54        assert!(
55            d.litium_refer.starts_with("bostrom1"),
56            "bad litium-refer addr"
57        );
58        assert!(
59            d.litium_wrap.starts_with("bostrom1"),
60            "bad litium-wrap addr"
61        );
62    }
63}