use alloy::primitives::Address; use near_primitives::types::AccountId; use omni_types::ChainKind; use serde::Deserialize; pub fn get_private_key(chain_kind: ChainKind) -> String { let env_var = match chain_kind { ChainKind::Near => "NEAR_PRIVATE_KEY", ChainKind::Eth => "ETH_PRIVATE_KEY", ChainKind::Base => "BASE_PRIVATE_KEY", ChainKind::Arb => "ARB_PRIVATE_KEY", ChainKind::Sol => "SOLANA_PRIVATE_KEY", }; std::env::var(env_var).unwrap_or_else(|_| panic!("Failed to get `{env_var}` env variable")) } fn replace_rpc_api_key<'de, D>(deserializer: D) -> Result where D: serde::Deserializer<'de>, { let url = String::deserialize(deserializer)?; let api_key = std::env::var("INFURA_API_KEY").map_err(serde::de::Error::custom)?; Ok(url.replace("INFURA_API_KEY", &api_key)) } #[derive(Debug, Clone, Deserialize)] pub struct Config { pub redis: Redis, #[cfg(not(feature = "disable_fee_check"))] pub bridge_indexer: BridgeIndexer, pub near: Near, pub eth: Option, pub base: Option, pub arb: Option, pub solana: Option, pub wormhole: Wormhole, } #[derive(Debug, Clone, Deserialize)] pub struct Redis { pub url: String, } #[cfg(not(feature = "disable_fee_check"))] #[derive(Debug, Clone, Deserialize)] pub struct BridgeIndexer { pub api_url: String, } #[derive(Debug, Clone, Deserialize)] #[serde(rename_all = "lowercase")] pub enum Network { Testnet, Mainnet, } #[derive(Debug, Clone, Deserialize)] pub struct Near { pub network: Network, pub rpc_url: String, pub token_locker_id: AccountId, pub credentials_path: Option, } #[derive(Debug, Clone, Deserialize)] pub struct Evm { #[serde(deserialize_with = "replace_rpc_api_key")] pub rpc_http_url: String, #[serde(deserialize_with = "replace_rpc_api_key")] pub rpc_ws_url: String, pub chain_id: u64, pub bridge_token_factory_address: Address, pub light_client: Option, pub block_processing_batch_size: u64, pub expected_finalization_time: i64, } #[derive(Debug, Clone, Deserialize)] pub struct Solana { #[serde(deserialize_with = "replace_rpc_api_key")] pub rpc_http_url: String, #[serde(deserialize_with = "replace_rpc_api_key")] pub rpc_ws_url: String, pub program_id: String, pub wormhole_id: String, pub init_transfer_sender_index: usize, pub init_transfer_token_index: usize, pub init_transfer_emitter_index: usize, pub init_transfer_sol_sender_index: usize, pub init_transfer_sol_emitter_index: usize, pub init_transfer_discriminator: Vec, pub init_transfer_sol_discriminator: Vec, pub finalize_transfer_emitter_index: usize, pub finalize_transfer_sol_emitter_index: usize, pub finalize_transfer_discriminator: Vec, pub finalize_transfer_sol_discriminator: Vec, pub credentials_path: Option, } #[derive(Debug, Clone, Deserialize)] pub struct Wormhole { pub api_url: String, pub eth_chain_id: u64, pub base_chain_id: u64, pub arb_chain_id: u64, pub solana_chain_id: u64, }