UNPKG

@robertprp/intents-sdk

Version:

Shogun Network Intent-based cross-chain swaps SDK

158 lines (130 loc) 7.04 kB
import { type Address as SolanaAddress } from '@solana/kit'; import type { Address as EvmAddress } from 'viem'; import type { SupportedChain, SupportedEvmChain, SupportedSuiChain } from './chains.js'; import { ChainID } from './chains.js'; const useProdConfig = true; export enum OrderType { CROSS_CHAIN_LIMIT = 'CROSS_CHAIN_LIMIT', SINGLE_CHAIN_LIMIT = 'SINGLE_CHAIN_LIMIT', } export const PERMIT2_ADDRESS: Record<SupportedEvmChain, EvmAddress> = { [ChainID.Arbitrum]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress, [ChainID.Optimism]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress, [ChainID.Base]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress, [ChainID.Hyperliquid]: '0x000000000022d473030f116ddee9f6b43ac78ba3' as EvmAddress, }; // Production guard addresses export const PROD_CROSS_CHAIN_GUARD_ADDRESSES: Record<SupportedChain, SolanaAddress | EvmAddress> = { [ChainID.Arbitrum]: '0x921ab91ee3dc38fd47aefd6218fd6b0bd9d64c18' as EvmAddress, [ChainID.Optimism]: '0xa89b2aae94769bf4a5dc9982eabe2c513564d1ea' as EvmAddress, [ChainID.Base]: '0x5173e9f12e2485f990ce4dac877d8545fb4ec81a' as EvmAddress, [ChainID.Hyperliquid]: '0x6595bcc70e0c34ecf9174bb72881eea89b075021' as EvmAddress, [ChainID.Solana]: '4kD6otCKkKZQej8YNQkWdzG9xMo5XYN8T1BbUrJUE63E' as SolanaAddress<'4kD6otCKkKZQej8YNQkWdzG9xMo5XYN8T1BbUrJUE63E'>, [ChainID.Sui]: '0x88a47715f41c5e47ff6d6dcfc0285f3802ae1587a9f411d0daff20269245a1b0', }; // Test guard addresses export const TEST_CROSS_CHAIN_GUARD_ADDRESSES: Record<SupportedChain, SolanaAddress | EvmAddress> = { [ChainID.Arbitrum]: '0x8cfacbe4e236c0ca0a7b4b9fc5b696aa9f07cc41' as EvmAddress, [ChainID.Optimism]: '0x66fbcccbd3ffe2d347bc2776ef8a6561ff29998e' as EvmAddress, [ChainID.Base]: '0xa895a53634854756ae8e902065e3be26ee36381d' as EvmAddress, [ChainID.Hyperliquid]: '0xB8ec423b5f03b138Ad47c85Ea5F7AAEBB116D65e' as EvmAddress, [ChainID.Solana]: 'FAKnXTY7cNz9wMTpH1wwsU9a1xzBAiMwAn2NXmGMLynP' as SolanaAddress<'FAKnXTY7cNz9wMTpH1wwsU9a1xzBAiMwAn2NXmGMLynP'>, [ChainID.Sui]: '0xd5057237ba5fe3d9aa00bb2a1555c3d3de77fd5653e72ce70f4aa0561fa9f04d', }; // Prod guard addresses export const PROD_SINGLE_CHAIN_GUARD_ADDRESSES: Record< Exclude<ChainID, SupportedSuiChain>, SolanaAddress | EvmAddress > = { [ChainID.Arbitrum]: '0x0' as EvmAddress, [ChainID.Optimism]: '0x0' as EvmAddress, [ChainID.Base]: '0x449808a27f42518c57791d4c2c6626f0069a0ed9' as EvmAddress, [ChainID.Hyperliquid]: '0x618ee9b6829261108d811b91581e00da192b0b75' as EvmAddress, [ChainID.Solana]: 'CwWkajHjBCWMKZdwR5D1P5M6Fgf9dAyxqZ1qDZgZGo1e' as SolanaAddress<'CwWkajHjBCWMKZdwR5D1P5M6Fgf9dAyxqZ1qDZgZGo1e'>, }; // Test guard addresses export const TEST_SINGLE_CHAIN_GUARD_ADDRESSES: Record< Exclude<ChainID, SupportedSuiChain>, SolanaAddress | EvmAddress > = { [ChainID.Arbitrum]: '0x0' as EvmAddress, [ChainID.Optimism]: '0x0' as EvmAddress, [ChainID.Base]: '0x5602cedc725564694162a320c5bb91b5b4b25fca' as EvmAddress, [ChainID.Hyperliquid]: '0x6a2f41f905035fa89b7329c0661061b580b1eb92' as EvmAddress, [ChainID.Solana]: '4wi5wsgSs9q9WV55s9AvKWTdeMNPcDXhzcbx5SoRRFcg' as SolanaAddress<'4wi5wsgSs9q9WV55s9AvKWTdeMNPcDXhzcbx5SoRRFcg'>, }; export const PROD_DCA_SINGLE_CHAIN_GUARD_ADDRESSES: Record<SupportedEvmChain, EvmAddress> = { [ChainID.Arbitrum]: '0x0000000000000000000000000000000000000000' as EvmAddress, [ChainID.Optimism]: '0x0000000000000000000000000000000000000000' as EvmAddress, [ChainID.Base]: '0x1ab119e95a87ff59a57eba6dec6599aff8b2d7e4' as EvmAddress, [ChainID.Hyperliquid]: '0x490911e5236f68ba921cbecc4b82b5e01b745731' as EvmAddress, }; // Test guard addresses export const TEST_DCA_SINGLE_CHAIN_GUARD_ADDRESSES: Record<SupportedEvmChain, EvmAddress> = { [ChainID.Arbitrum]: '0x0000000000000000000000000000000000000000' as EvmAddress, [ChainID.Optimism]: '0x0000000000000000000000000000000000000000' as EvmAddress, [ChainID.Base]: '0x79fd6a458066396c8938823049b6e614ce6b71f2' as EvmAddress, [ChainID.Hyperliquid]: '0x5156e6c7b7a1c60ed4d6b2175f88f1f6875c78d8' as EvmAddress, }; export const CROSS_CHAIN_GUARD_ADDRESSES = useProdConfig ? PROD_CROSS_CHAIN_GUARD_ADDRESSES : TEST_CROSS_CHAIN_GUARD_ADDRESSES; export const SINGLE_CHAIN_GUARD_ADDRESSES = useProdConfig ? PROD_SINGLE_CHAIN_GUARD_ADDRESSES : TEST_SINGLE_CHAIN_GUARD_ADDRESSES; export const DCA_SINGLE_CHAIN_GUARD_ADDRESSES = useProdConfig ? PROD_DCA_SINGLE_CHAIN_GUARD_ADDRESSES : TEST_DCA_SINGLE_CHAIN_GUARD_ADDRESSES; export const NATIVE_SOLANA_TOKEN_ADDRESS = 'So11111111111111111111111111111111111111111' as SolanaAddress<'So11111111111111111111111111111111111111111'>; export const WRAPPED_SOL_MINT_ADDRESS = 'So11111111111111111111111111111111111111112' as SolanaAddress<'So11111111111111111111111111111111111111112'>; type SolanaMint = { name: string; mint: string; decimals: number; }; export const SOLANA_USDC_MINT = { name: 'USDC', mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', decimals: 6, } as SolanaMint; export const SOLANA_USDT_MINT = { name: 'USDT', mint: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', decimals: 6, } as SolanaMint; export const SOLANA_MINT_TOKEN = useProdConfig ? SOLANA_USDC_MINT : SOLANA_USDT_MINT; export const PROD_SUI_PACKAGE_ID = '0x9c0c9b7f5ddf7efbde76571783ef4a8a26b36ae5c2ef2eeba8fbc604a29cb195'; export const TEST_SUI_PACKAGE_ID = '0x6273e29f803ff5851f89ec17d40d5b1f367476e1677ad0a52ca408f64c4473fe'; export const SUI_PACKAGE_ID = useProdConfig ? PROD_SUI_PACKAGE_ID : TEST_SUI_PACKAGE_ID; export const SUI_GUARD_COLLATERAL_TYPE = '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC'; export const SUI_GUARD_STABLECOIN_TYPE = '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC'; export const AUCTIONEER_URL = useProdConfig ? 'https://auctioneer-825534211396.us-central1.run.app' : 'http://127.0.0.1:8080'; export const MAX_UINT_32 = 2n ** 32n - 1n; export const MAX_UINT_64 = 2n ** 64n - 1n; export const MAX_UINT_128 = 2n ** 128n - 1n; export const MAX_UINT_256 = 2n ** 256n - 1n; export const NATIVE_EVM_ETH_ADDRESSES = [ '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', '0x0000000000000000000000000000000000000000', ]; export const WRAPPED_ETH_ADDRESSES: Record<SupportedEvmChain, EvmAddress> = { [ChainID.Arbitrum]: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1' as EvmAddress, [ChainID.Optimism]: '0x4200000000000000000000000000000000000006' as EvmAddress, [ChainID.Base]: '0x4200000000000000000000000000000000000006' as EvmAddress, [ChainID.Hyperliquid]: '0x5555555555555555555555555555555555555555' as EvmAddress, }; export const NATIVE_SUI_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI'; export function isNativeEvmToken(tokenAddress: string): boolean { const normalizedAddress = tokenAddress.toLowerCase(); return NATIVE_EVM_ETH_ADDRESSES.some((addr) => addr.toLowerCase() === normalizedAddress); }