use std::sync::LazyLock;
use r402::chain::NetworkInfo;
use solana_pubkey::pubkey;
use crate::chain::{SolanaChainReference, SolanaTokenDeployment};
pub static SOLANA_NETWORKS: &[NetworkInfo] = &[
NetworkInfo {
name: "solana",
namespace: "solana",
reference: "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
},
NetworkInfo {
name: "solana-devnet",
namespace: "solana",
reference: "EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
},
];
static USDC_DEPLOYMENTS: LazyLock<Vec<SolanaTokenDeployment>> = LazyLock::new(|| {
vec![
SolanaTokenDeployment::new(
SolanaChainReference::SOLANA,
pubkey!("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v").into(),
6,
),
SolanaTokenDeployment::new(
SolanaChainReference::SOLANA_DEVNET,
pubkey!("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU").into(),
6,
),
]
});
#[must_use]
pub fn usdc_solana_deployments() -> &'static [SolanaTokenDeployment] {
&USDC_DEPLOYMENTS
}
#[must_use]
pub fn usdc_solana_deployment(
chain: &SolanaChainReference,
) -> Option<&'static SolanaTokenDeployment> {
USDC_DEPLOYMENTS
.iter()
.find(|d| d.chain_reference == *chain)
}
#[derive(Debug, Clone, Copy)]
#[allow(
clippy::upper_case_acronyms,
reason = "USDC is a well-known token ticker"
)]
pub struct USDC;
#[allow(
clippy::doc_markdown,
clippy::missing_panics_doc,
clippy::expect_used,
reason = "static deployment lookups are infallible for built-in data"
)]
impl USDC {
#[must_use]
pub fn on(chain: &SolanaChainReference) -> Option<&'static SolanaTokenDeployment> {
usdc_solana_deployment(chain)
}
#[must_use]
pub fn all() -> &'static [SolanaTokenDeployment] {
usdc_solana_deployments()
}
#[must_use]
pub fn solana() -> &'static SolanaTokenDeployment {
usdc_solana_deployment(&SolanaChainReference::SOLANA)
.expect("built-in USDC deployment for Solana mainnet missing")
}
#[must_use]
pub fn solana_devnet() -> &'static SolanaTokenDeployment {
usdc_solana_deployment(&SolanaChainReference::SOLANA_DEVNET)
.expect("built-in USDC deployment for Solana devnet missing")
}
}