#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Ecosystem {
Evm,
Solana,
Bitcoin,
}
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Chain {
Ethereum,
Base,
Arbitrum,
Optimism,
Polygon,
Bnb,
Monad,
Hyperliquid,
Solana,
Bitcoin,
}
impl Chain {
pub const ALL: &'static [Chain] = &[
Chain::Ethereum,
Chain::Base,
Chain::Arbitrum,
Chain::Optimism,
Chain::Polygon,
Chain::Bnb,
Chain::Monad,
Chain::Hyperliquid,
Chain::Solana,
Chain::Bitcoin,
];
pub fn ecosystem(self) -> Ecosystem {
match self {
Chain::Solana => Ecosystem::Solana,
Chain::Bitcoin => Ecosystem::Bitcoin,
_ => Ecosystem::Evm,
}
}
pub fn evm_chain_id(self) -> Option<u64> {
Some(match self {
Chain::Ethereum => 1,
Chain::Optimism => 10,
Chain::Bnb => 56,
Chain::Polygon => 137,
Chain::Base => 8453,
Chain::Arbitrum => 42161,
Chain::Monad => 143,
Chain::Hyperliquid => 999,
Chain::Solana | Chain::Bitcoin => return None,
})
}
}