#[cfg(not(target_arch = "wasm32"))]
use std::sync::OnceLock;
pub struct ChainConfig {
pub name: &'static str,
pub rpc_url: &'static str,
pub chain_id: u64,
pub diamond: &'static str,
pub lh_token: &'static str,
pub fee_token: &'static str,
}
pub const MODERATO: ChainConfig = ChainConfig {
name: "Tempo Moderato",
rpc_url: "https://rpc.moderato.tempo.xyz",
chain_id: 42431,
diamond: "0x6c31c01e10C44f4813FffDC7D5e671c1b26Da30c",
lh_token: "0x90B84c7234Aae89BadA7f69160B9901B9bc37B17",
fee_token: "0x20c0000000000000000000000000000000000001", };
pub const MAINNET: ChainConfig = ChainConfig {
name: "Tempo mainnet",
rpc_url: "https://rpc.tempo.xyz",
chain_id: 4217,
diamond: "0x8ab4f3a57643410cdf4022cdaf1faeef234f3a77",
lh_token: "0x7ba3c9a39596e438b05c56dfc779700b58aea814",
fee_token: "0x20c000000000000000000000b9537d11c60e8b50",
};
pub fn active() -> &'static ChainConfig {
#[cfg(target_arch = "wasm32")]
{
#[cfg(feature = "mainnet")]
{
&MAINNET
}
#[cfg(not(feature = "mainnet"))]
{
&MODERATO
}
}
#[cfg(not(target_arch = "wasm32"))]
{
static ACTIVE_CHAIN: OnceLock<&'static ChainConfig> = OnceLock::new();
ACTIVE_CHAIN.get_or_init(|| resolve_chain(std::env::var("LH_CHAIN").ok().as_deref()))
}
}
#[cfg(not(target_arch = "wasm32"))]
pub(crate) fn resolve_chain(lh_chain: Option<&str>) -> &'static ChainConfig {
match lh_chain {
Some("mainnet") => &MAINNET,
_ => &MODERATO,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[cfg(all(not(feature = "mainnet"), not(target_arch = "wasm32")))]
fn active_is_moderato_by_default() {
let a = active();
assert_eq!(a.chain_id, 42431);
assert_eq!(a.rpc_url, "https://rpc.moderato.tempo.xyz");
assert_eq!(a.diamond, "0x6c31c01e10C44f4813FffDC7D5e671c1b26Da30c");
assert_eq!(a.lh_token, "0x90B84c7234Aae89BadA7f69160B9901B9bc37B17");
assert_eq!(a.fee_token, "0x20c0000000000000000000000000000000000001");
}
#[test]
#[cfg(not(target_arch = "wasm32"))]
fn lh_chain_env_selects_chain() {
assert_eq!(resolve_chain(Some("mainnet")).chain_id, 4217);
assert_eq!(resolve_chain(None).chain_id, 42431);
assert_eq!(resolve_chain(Some("")).chain_id, 42431);
assert_eq!(resolve_chain(Some("moderato")).chain_id, 42431);
assert_eq!(resolve_chain(Some("testnet")).chain_id, 42431);
assert_eq!(resolve_chain(Some("MAINNET")).chain_id, 42431); }
#[test]
fn mainnet_addresses_pinned() {
assert_eq!(MAINNET.chain_id, 4217);
assert_eq!(MAINNET.rpc_url, "https://rpc.tempo.xyz");
assert_eq!(MAINNET.diamond, "0x8ab4f3a57643410cdf4022cdaf1faeef234f3a77");
assert_eq!(MAINNET.lh_token, "0x7ba3c9a39596e438b05c56dfc779700b58aea814");
assert_eq!(MAINNET.fee_token, "0x20c000000000000000000000b9537d11c60e8b50");
}
}