use std::{
collections::{HashMap, HashSet},
sync::LazyLock,
};
use tycho_common::{models::Chain, Bytes};
use crate::encoding::errors::EncodingError;
pub(crate) const DEFAULT_EXECUTORS_JSON: &str =
include_str!("../../../config/executor_addresses.json");
pub(crate) const DEFAULT_ROUTERS_JSON: &str = include_str!("../../../config/router_addresses.json");
pub(crate) const PROTOCOL_SPECIFIC_CONFIG: &str =
include_str!("../../../config/protocol_specific_addresses.json");
pub static DEFAULT_ROUTER_ADDRESSES: LazyLock<HashMap<Chain, Bytes>> = LazyLock::new(|| {
serde_json::from_str(DEFAULT_ROUTERS_JSON).expect("valid router_addresses.json")
});
pub fn get_router_address(chain: &Chain) -> Result<&'static Bytes, EncodingError> {
DEFAULT_ROUTER_ADDRESSES
.get(chain)
.ok_or_else(|| {
EncodingError::FatalError(format!(
"No default router address found for chain {chain:?}"
))
})
}
pub const ANGSTROM_DEFAULT_BLOCKS_IN_FUTURE: u64 = 5;
pub static GROUPABLE_PROTOCOLS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
let mut set = HashSet::new();
set.insert("uniswap_v4");
set.insert("uniswap_v4_hooks");
set.insert("vm:balancer_v3");
set.insert("ekubo_v2");
set.insert("ekubo_v3");
set
});
pub static NON_PLE_ENCODED_PROTOCOLS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
let mut set = HashSet::new();
set.insert("ekubo_v2");
set.insert("ekubo_v3");
set
});