from eth_utils import to_checksum_address

ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"
NATIVE_TOKEN_SENTINEL = to_checksum_address(
    "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
)

BASE_WETH = to_checksum_address("0x4200000000000000000000000000000000000006")
BASE_USDC = to_checksum_address("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913")
BASE_WSTETH = to_checksum_address("0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452")

AVANTIS_AVUSDC = to_checksum_address("0x944766f715b51967E56aFdE5f0Aa76cEaCc9E7f9")
AVANTIS_VAULT_MANAGER = to_checksum_address(
    "0xe9fB8C70aF1b99F2Baaa07Aa926FCf3d237348DD"
)
AVANTIS_AVNT = to_checksum_address("0x696f9436b67233384889472cd7cd58a6fb5df4f1")

MOONWELL_M_USDC = to_checksum_address("0xEdc817A28E8B93B03976FBd4a3dDBc9f7D176c22")
MOONWELL_M_WETH = to_checksum_address("0x628ff693426583D9a7FB391E54366292F509D457")
MOONWELL_M_WSTETH = to_checksum_address("0x627Fe393Bc6EdDA28e99AE648fD6fF362514304b")
MOONWELL_COMPTROLLER = to_checksum_address("0xfBb21d0380beE3312B33c4353c8936a0F13EF26C")
MOONWELL_VIEWS = to_checksum_address("0x6834770aba6c2028f448e3259ddee4bcb879d459")
MOONWELL_REWARD_DISTRIBUTOR = to_checksum_address(
    "0xe9005b078701e2A0948D2EaC43010D35870Ad9d2"
)
MOONWELL_WELL_TOKEN = to_checksum_address("0xA88594D404727625A9437C3f886C7643872296AE")

ENSO_ROUTER = to_checksum_address("0xF75584eF6673aD213a685a1B58Cc0330B8eA22Cf")

HYPEREVM_WHYPE = to_checksum_address("0x5555555555555555555555555555555555555555")
HYPERCORE_SENTINEL_ADDRESS = to_checksum_address(
    "0x2222222222222222222222222222222222222222"
)
HYPERCORE_SENTINEL_VALUE = 100_000_000_000

HYPERLEND_POOL = to_checksum_address("0x00A89d7a5A02160f20150EbEA7a2b5E4879A1A8b")
HYPERLEND_POOL_ADDRESSES_PROVIDER = to_checksum_address(
    "0x72c98246a98bFe64022a3190e7710E157497170C"
)
HYPERLEND_UI_POOL_DATA_PROVIDER = to_checksum_address(
    "0x3Bb92CF81E38484183cc96a4Fb8fBd2d73535807"
)
HYPERLEND_WRAPPED_TOKEN_GATEWAY = to_checksum_address(
    "0x49558c794ea2aC8974C9F27886DDfAa951E99171"
)

PRJX_ROUTER = to_checksum_address("0x1EbDFC75FfE3ba3de61E7138a3E8706aC841Af9B")
PRJX_NPM = to_checksum_address("0xeaD19AE861c29bBb2101E834922B2FEee69B9091")

UNISWAP_V3_NPM: dict[int, str] = {
    1: to_checksum_address("0xC36442b4a4522E871399CD717aBDD847Ab11FE88"),
    42161: to_checksum_address("0xC36442b4a4522E871399CD717aBDD847Ab11FE88"),
    137: to_checksum_address("0xC36442b4a4522E871399CD717aBDD847Ab11FE88"),
    8453: to_checksum_address("0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1"),
    56: to_checksum_address("0x7b8A01B39D58278b5DE7e48c8449c9f4F5170613"),
    43114: to_checksum_address("0x655C406EBFa14EE2006250925e54ec43AD184f8B"),
}

UNISWAP_V3_FACTORY: dict[int, str] = {
    1: to_checksum_address("0x1F98431c8aD98523631AE4a59f267346ea31F984"),
    42161: to_checksum_address("0x1F98431c8aD98523631AE4a59f267346ea31F984"),
    137: to_checksum_address("0x1F98431c8aD98523631AE4a59f267346ea31F984"),
    8453: to_checksum_address("0x33128a8fC17869897dcE68Ed026d694621f6FDfD"),
    56: to_checksum_address("0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7"),
    43114: to_checksum_address("0x740b1c1de25031C31FF4fC9A62f554A55cdC1baD"),
}

ARBITRUM_USDC = to_checksum_address("0xaf88d065e77c8cC2239327C5EDb3A432268e5831")
ARBITRUM_WETH = to_checksum_address("0x82af49447d8a07e3bd95bd0d56f35241523fbab1")

HYPERLIQUID_BRIDGE = to_checksum_address("0x2Df1c51E09aECF9cacB7bc98cB1742757f163dF7")

BOROS_ROUTER = to_checksum_address("0x8080808080dab95efed788a9214e400ba552def6")
BOROS_MARKET_HUB = to_checksum_address("0x1080808080f145b14228443212e62447c112adad")

USDT_ETHEREUM = to_checksum_address("0xdAC17F958D2ee523a2206206994597C13D831ec7")
USDT_POLYGON = to_checksum_address("0xc2132D05D31c914a87C6611C10748AEb04B58e8F")
USDT_BSC = to_checksum_address("0x55d398326f99059fF775485246999027B3197955")

HYPE_FEE_WALLET = to_checksum_address("0xaA1D89f333857eD78F8434CC4f896A9293EFE65c")

KHYPE_ADDRESS = to_checksum_address("0xfD739d4e423301CE9385c1fb8850539D657C296D")
LOOPED_HYPE_ADDRESS = to_checksum_address("0x5748ae796AE46A4F1348a1693de4b50560485562")

# Accountant contracts for exchange rate calculations
KHYPE_STAKING_ACCOUNTANT = to_checksum_address(
    "0x9209648Ec9D448EF57116B73A2f081835643dc7A"
)
LHYPE_ACCOUNTANT = to_checksum_address("0xcE621a3CA6F72706678cFF0572ae8d15e5F001c3")

# LayerZero OFT bridge (HyperEVM native HYPE -> Arbitrum OFT HYPE)
HYPE_OFT_ADDRESS = to_checksum_address("0x007C26Ed5C33Fe6fEF62223d4c363A01F1b1dDc1")

# Multicall3 (deployed at same address on all EVM chains)
MULTICALL3_ADDRESS = to_checksum_address("0xcA11bde05977b3631167028862bE2a173976CA11")

LIFI_ROUTER_HYPEREVM = to_checksum_address("0x0a0758d937d1059c356D4714e57F5df0239bce1A")
LIFI_GENERIC = to_checksum_address("0x31a9b1835864706Af10103b31Ea2b79bdb995F5F")

TOKENS_REQUIRING_APPROVAL_RESET: set[tuple[int, str]] = {
    (1, USDT_ETHEREUM),
    (137, USDT_POLYGON),
    (56, USDT_BSC),
}
