From 49b0877bddaa2850f01a0cdf91001692df06e421 Mon Sep 17 00:00:00 2001 From: Hau Nguyen Van Date: Fri, 11 Oct 2024 10:04:06 +0700 Subject: [PATCH] update new version universal swap --- package.json | 2 +- src/assets/icons/celestia.svg | 2 +- src/assets/icons/hmstr.svg | 9 + src/assets/icons/pepe.svg | 14 + src/config/chainInfos.ts | 1892 +++++++---------- src/config/iconInfos.ts | 256 +++ .../SwapWarningModal/index.module.scss | 184 ++ .../components/SwapWarningModal/index.tsx | 60 + .../components/TooltipSwapBridge/index.tsx | 22 +- .../Swap/hooks/useCalculateDataSwap.ts | 22 +- .../UniversalSwap/Swap/hooks/useSimulate.ts | 36 +- src/pages/UniversalSwap/Swap/index.tsx | 151 +- src/pages/UniversalSwap/helpers.ts | 42 +- yarn.lock | 29 +- 14 files changed, 1422 insertions(+), 1299 deletions(-) create mode 100644 src/assets/icons/hmstr.svg create mode 100644 src/assets/icons/pepe.svg create mode 100644 src/config/iconInfos.ts create mode 100644 src/pages/UniversalSwap/Swap/components/SwapWarningModal/index.module.scss create mode 100644 src/pages/UniversalSwap/Swap/components/SwapWarningModal/index.tsx diff --git a/package.json b/package.json index b7e0ab65..d7714915 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@oraichain/orai-bitcoin": "^1.0.7", "@oraichain/oraidex-common-ui": "1.0.11", "@oraichain/oraidex-contracts-sdk": "^1.0.26", - "@oraichain/oraidex-universal-swap": "1.1.4", + "@oraichain/oraidex-universal-swap": "1.1.14", "@reduxjs/toolkit": "^1.9.3", "@sentry/react": "^7.47.0", "@tanstack/react-query": "^4.32.6", diff --git a/src/assets/icons/celestia.svg b/src/assets/icons/celestia.svg index de8c58e9..72634f69 100644 --- a/src/assets/icons/celestia.svg +++ b/src/assets/icons/celestia.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/assets/icons/hmstr.svg b/src/assets/icons/hmstr.svg new file mode 100644 index 00000000..92354cac --- /dev/null +++ b/src/assets/icons/hmstr.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/icons/pepe.svg b/src/assets/icons/pepe.svg new file mode 100644 index 00000000..88c56ff8 --- /dev/null +++ b/src/assets/icons/pepe.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/config/chainInfos.ts b/src/config/chainInfos.ts index 9ef4d895..ef71f087 100644 --- a/src/config/chainInfos.ts +++ b/src/config/chainInfos.ts @@ -1,92 +1,26 @@ import { - TokenItemType, tokens, + oraichainNetwork as customOraichainNetwork, chainInfos as customChainInfos, - OsmoToken, - AtomToken, - InjectiveToken, - ChainIdEnum + ChainIdEnum, + BridgeAppCurrency, + CustomChainInfo, + defaultBech32Config } from '@oraichain/oraidex-common'; -import { ReactComponent as AiriIcon } from 'assets/icons/airi.svg'; -import { ReactComponent as AtomIcon } from 'assets/icons/atom_cosmos.svg'; -import { ReactComponent as BnbIcon } from 'assets/icons/bnb.svg'; -import { ReactComponent as EthIcon } from 'assets/icons/ethereum.svg'; -import { ReactComponent as KwtIcon } from 'assets/icons/kwt.svg'; -import { ReactComponent as MilkyIcon } from 'assets/icons/milky-token.svg'; -import { ReactComponent as OraiIcon } from 'assets/icons/oraichain.svg'; +import { ReactComponent as BitcoinIcon } from 'assets/icons/bitcoin.svg'; +import { ReactComponent as OraiIcon } from 'assets/icons/oraichain.svg'; import { ReactComponent as BTCIcon } from 'assets/icons/btc-icon.svg'; import { ReactComponent as OraiLightIcon } from 'assets/icons/oraichain_light.svg'; -import { ReactComponent as OraixIcon } from 'assets/icons/oraix.svg'; -import { ReactComponent as OraixLightIcon } from 'assets/icons/oraix_light.svg'; -import { ReactComponent as OsmoIcon } from 'assets/icons/osmosis_light.svg'; -import { ReactComponent as ScOraiIcon } from 'assets/icons/orchai.svg'; -import { ReactComponent as UsdtIcon } from 'assets/icons/tether.svg'; -import { ReactComponent as TronIcon } from 'assets/icons/tron.svg'; -import { ReactComponent as UsdcIcon } from 'assets/icons/usd_coin.svg'; -import { ReactComponent as ScAtomIcon } from 'assets/icons/scatom.svg'; -import { ReactComponent as InjIcon } from 'assets/icons/inj.svg'; -import { ReactComponent as NobleIcon } from 'assets/icons/noble.svg'; -import { ReactComponent as NobleLightIcon } from 'assets/icons/ic_noble_light.svg'; -import { ReactComponent as TimpiIcon } from 'assets/icons/timpiIcon.svg'; -import { ReactComponent as NeutaroIcon } from 'assets/icons/neutaro.svg'; -import { ReactComponent as OrchaiIcon } from 'assets/icons/orchaiIcon.svg'; -import { ReactComponent as BitcoinIcon } from 'assets/icons/bitcoin.svg'; -import { ReactComponent as CelestiaIcon } from 'assets/icons/celestia.svg'; -import { ReactComponent as TonIcon } from 'assets/icons/ton.svg'; +import flatten from 'lodash/flatten'; -import { - AIRI_BSC_CONTRACT, - AIRI_CONTRACT, - ATOM_ORAICHAIN_DENOM, - INJECTIVE_CONTRACT, - INJECTIVE_ORAICHAIN_DENOM, - KWTBSC_ORAICHAIN_DENOM, - KWT_BSC_CONTRACT, - KWT_CONTRACT, - KWT_DENOM, - KWT_SUB_NETWORK_DENOM, - MILKYBSC_ORAICHAIN_DENOM, - MILKY_BSC_CONTRACT, - MILKY_CONTRACT, - MILKY_DENOM, - MILKY_ERC_CONTRACT, - MILKY_SUB_NETWORK_DENOM, - ORAIIBC_INJECTIVE_DENOM, - ORAIX_CONTRACT, - ORAI_BRIDGE_EVM_DENOM_PREFIX, - ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, - ORAI_BSC_CONTRACT, - ORAI_ETH_CONTRACT, - OSMOSIS_ORAICHAIN_DENOM, - SCATOM_CONTRACT, - SCORAI_CONTRACT, - TRX_CONTRACT, - USDC_CONTRACT, - USDC_ETH_CONTRACT, - USDT_BSC_CONTRACT, - USDT_CONTRACT, - USDT_TRON_CONTRACT, - WRAP_BNB_CONTRACT, - WRAP_ETH_CONTRACT, - WRAP_TRON_TRX_CONTRACT, - WETH_CONTRACT, - USDT_ETH_CONTRACT, - NEUTARO_ORAICHAIN_DENOM, - OCH_CONTRACT, - OCH_ETH_CONTRACT, - ORAIX_ETH_CONTRACT, - TON_ORAICHAIN_DENOM -} from '@oraichain/oraidex-common'; -import { BridgeAppCurrency, CustomChainInfo, defaultBech32Config } from '@oraichain/oraidex-common'; -import { flatten } from 'lodash'; -import { bitcoinChainId } from 'helper/constants'; -import { OBTCContractAddress } from 'libs/nomic/models/ibc-chain'; +import { chainIconsInfos, tokensIconInfos, mapListWithIcon } from './iconInfos'; + +export const tokensIcon = tokensIconInfos; +export const chainIcons = chainIconsInfos; const [otherChainTokens, oraichainTokens] = tokens; -type TokenIcon = Pick; -type ChainIcon = Pick; + export const bitcoinMainnet: CustomChainInfo = { rest: 'https://blockstream.info/api', rpc: 'https://blockstream.info/api', @@ -135,215 +69,9 @@ export const bitcoinMainnet: CustomChainInfo = { accountUrl: 'https://blockstream.info/address/{address}' } }; -export const tokensIcon: TokenIcon[] = [ - { - coinGeckoId: 'oraichain-token', - Icon: OraiIcon, - IconLight: OraiLightIcon - }, - { - coinGeckoId: 'usd-coin', - Icon: UsdcIcon, - IconLight: UsdcIcon - }, - { - coinGeckoId: 'bitcoin', - Icon: BTCIcon, - IconLight: BTCIcon - }, - { - coinGeckoId: 'airight', - Icon: AiriIcon, - IconLight: AiriIcon - }, - { - coinGeckoId: 'tether', - Icon: UsdtIcon, - IconLight: UsdtIcon - }, - { - coinGeckoId: 'tron', - Icon: TronIcon, - IconLight: TronIcon - }, - { - coinGeckoId: 'kawaii-islands', - Icon: KwtIcon, - IconLight: KwtIcon - }, - { - coinGeckoId: 'milky-token', - Icon: MilkyIcon, - IconLight: MilkyIcon - }, - { - coinGeckoId: 'osmosis', - Icon: OsmoIcon, - IconLight: OsmoIcon - }, - { - coinGeckoId: 'injective-protocol', - Icon: InjIcon, - IconLight: InjIcon - }, - { - coinGeckoId: 'cosmos', - Icon: AtomIcon, - IconLight: AtomIcon - }, - { - coinGeckoId: 'weth', - Icon: EthIcon, - IconLight: EthIcon - }, - { - coinGeckoId: 'ethereum', - Icon: EthIcon, - IconLight: EthIcon - }, - { - coinGeckoId: 'wbnb', - Icon: BnbIcon, - IconLight: BnbIcon - }, - { - coinGeckoId: 'binancecoin', - Icon: BnbIcon, - IconLight: BnbIcon - }, - { - coinGeckoId: 'oraidex', - Icon: OraixIcon, - IconLight: OraixLightIcon - }, - { - coinGeckoId: 'scorai', - Icon: ScOraiIcon, - IconLight: ScOraiIcon - }, - { - coinGeckoId: 'scatom', - Icon: ScAtomIcon, - IconLight: ScAtomIcon - }, - { - coinGeckoId: 'neutaro', - Icon: TimpiIcon, - IconLight: TimpiIcon - }, - { - coinGeckoId: 'och', - Icon: OrchaiIcon, - IconLight: OrchaiIcon - }, - { - coinGeckoId: 'bitcoin', - Icon: BitcoinIcon, - IconLight: BitcoinIcon - }, - { - coinGeckoId: 'celestia', - Icon: CelestiaIcon, - IconLight: CelestiaIcon - }, - { - coinGeckoId: 'the-open-network', - Icon: TonIcon, - IconLight: TonIcon - } -]; - -export const chainIcons: ChainIcon[] = [ - { - chainId: 'Oraichain', - Icon: OraiIcon, - IconLight: OraiLightIcon - }, - { - chainId: bitcoinChainId, - Icon: BTCIcon, - IconLight: BTCIcon - }, - { - chainId: 'kawaii_6886-1', - Icon: KwtIcon, - IconLight: KwtIcon - }, - { - chainId: 'osmosis-1', - Icon: OsmoIcon, - IconLight: OsmoIcon - }, - { - chainId: 'injective-1', - Icon: InjIcon, - IconLight: InjIcon - }, - { - chainId: 'cosmoshub-4', - Icon: AtomIcon, - IconLight: AtomIcon - }, - { - chainId: '0x01', - Icon: EthIcon, - IconLight: EthIcon - }, - { - chainId: '0x2b6653dc', - Icon: TronIcon, - IconLight: TronIcon - }, - { - chainId: '0x38', - Icon: BnbIcon, - IconLight: BnbIcon - }, - { - chainId: '0x1ae6', - Icon: KwtIcon, - IconLight: KwtIcon - }, - { - chainId: 'noble-1', - Icon: NobleIcon, - IconLight: NobleLightIcon - }, - { - chainId: 'Neutaro-1', - Icon: NeutaroIcon, - IconLight: NeutaroIcon - }, - { - chainId: 'oraibtc-mainnet-1', - Icon: BitcoinIcon, - IconLight: BitcoinIcon - } -]; -export const mapListWithIcon = (list: any[], listIcon: ChainIcon[] | TokenIcon[], key: 'chainId' | 'coinGeckoId') => { - return list.map((item) => { - let Icon = OraiIcon; - let IconLight = OraiLightIcon; - - //@ts-ignore - const findedItem = listIcon.find((icon) => icon[key] === item[key]); - if (findedItem) { - Icon = findedItem.Icon; - IconLight = findedItem.IconLight; - } - - return { - ...item, - Icon, - IconLight - }; - }); -}; // mapped chain info with icon export const chainInfosWithIcon = mapListWithIcon([...customChainInfos, bitcoinMainnet], chainIcons, 'chainId'); - -// mapped token with icon export const oraichainTokensWithIcon = mapListWithIcon(oraichainTokens, tokensIcon, 'coinGeckoId'); export const otherTokensWithIcon = mapListWithIcon(otherChainTokens, tokensIcon, 'coinGeckoId'); @@ -365,270 +93,8 @@ export const OraiToken: BridgeAppCurrency = { } }; -const OraiBToken: BridgeAppCurrency = { - coinDenom: 'ORAIB', - coinMinimalDenom: 'uoraib', - coinDecimals: 6, - gasPriceStep: { - low: 0, - average: 0, - high: 0 - } -}; - -const OraiBTCToken: BridgeAppCurrency = { - coinDenom: 'ORAIBTC', - coinMinimalDenom: 'uoraibtc', - coinDecimals: 6, - gasPriceStep: { - low: 0, - average: 0, - high: 0 - } -}; - -const KawaiiToken: BridgeAppCurrency = { - coinDenom: 'ORAIE', - coinMinimalDenom: 'oraie', - coinDecimals: 18, - coinGeckoId: 'kawaii-islands', - Icon: KwtIcon, - gasPriceStep: { - low: 0, - average: 0.000025, - high: 0.00004 - } -}; - export const oraichainNetwork: CustomChainInfo = { - rpc: 'https://rpc.orai.io', - rest: 'https://lcd.orai.io', - chainId: 'Oraichain', - chainName: 'Oraichain', - networkType: 'cosmos', - stakeCurrency: OraiToken, - bip44: { - coinType: 118 - }, - bech32Config: defaultBech32Config('orai'), - feeCurrencies: [OraiToken], - - Icon: OraiIcon, - IconLight: OraiLightIcon, - features: ['ibc-transfer', 'cosmwasm', 'wasmd_0.24+'], - currencies: [ - OraiToken, - { - coinDenom: 'ATOM', - coinGeckoId: 'cosmos', - coinMinimalDenom: ATOM_ORAICHAIN_DENOM, - bridgeTo: ['cosmoshub-4'], - coinDecimals: 6, - Icon: AtomIcon, - IconLight: AtomIcon - }, - { - coinDenom: 'NTMPI', - coinGeckoId: 'neutaro', - coinMinimalDenom: NEUTARO_ORAICHAIN_DENOM, - bridgeTo: ['Neutaro-1'], - coinDecimals: 6, - Icon: TimpiIcon, - IconLight: TimpiIcon - }, - // { - // coinDenom: 'BEP20 AIRI', - // coinGeckoId: 'airight', - // coinMinimalDenom: AIRIBSC_ORAICHAIN_DENOM, - // coinDecimals: 18, - // Icon: AiriIcon - // }, - { - coinDenom: 'AIRI', - coinGeckoId: 'airight', - coinMinimalDenom: 'airi', - type: 'cw20', - contractAddress: AIRI_CONTRACT, - bridgeTo: ['0x38'], - coinDecimals: 6, - Icon: AiriIcon - }, - { - coinDenom: 'USDT', - coinGeckoId: 'tether', - coinMinimalDenom: 'usdt', - type: 'cw20', - contractAddress: USDT_CONTRACT, - bridgeTo: ['0x38', '0x2b6653dc', '0x01'], - coinDecimals: 6, - Icon: UsdtIcon - }, - { - coinDenom: 'USDC', - coinGeckoId: 'usd-coin', - coinMinimalDenom: 'usdc', - type: 'cw20', - contractAddress: USDC_CONTRACT, - bridgeTo: ['0x01', 'noble-1'], - coinDecimals: 6, - Icon: UsdcIcon - }, - { - coinDenom: 'OSMO', - coinMinimalDenom: OSMOSIS_ORAICHAIN_DENOM, - coinDecimals: 6, - coinGeckoId: 'osmosis', - bridgeTo: ['osmosis-1'], - Icon: OsmoIcon, - IconLight: OsmoIcon - }, - { - coinDenom: 'BEP20 KWT', - coinGeckoId: 'kawaii-islands', - coinMinimalDenom: KWTBSC_ORAICHAIN_DENOM, - coinDecimals: 18, - Icon: KwtIcon - }, - { - coinDenom: 'KWT', - coinGeckoId: 'kawaii-islands', - coinMinimalDenom: 'kwt', - type: 'cw20', - contractAddress: KWT_CONTRACT, - bridgeTo: ['kawaii_6886-1', '0x38'], - coinDecimals: 6, - Icon: KwtIcon - }, - { - coinDenom: 'BEP20 MILKY', - coinGeckoId: 'milky-token', - coinMinimalDenom: MILKYBSC_ORAICHAIN_DENOM, - coinDecimals: 18, - Icon: MilkyIcon - }, - { - coinDenom: 'MILKY', - coinGeckoId: 'milky-token', - coinMinimalDenom: 'milky', - type: 'cw20', - contractAddress: MILKY_CONTRACT, - bridgeTo: ['kawaii_6886-1', '0x38'], - coinDecimals: 6, - Icon: MilkyIcon - }, - { - coinDenom: 'ORAIX', - coinMinimalDenom: 'oraix', - type: 'cw20', - contractAddress: ORAIX_CONTRACT, - coinGeckoId: 'oraidex', - coinDecimals: 6, - bridgeTo: ['0x01'], - Icon: OraixIcon, - IconLight: OraixLightIcon - }, - { - coinDenom: 'scORAI', - coinMinimalDenom: 'scorai', - type: 'cw20', - contractAddress: SCORAI_CONTRACT, - coinGeckoId: 'scorai', - coinDecimals: 6, - Icon: ScOraiIcon - }, - { - coinDenom: 'wTRX', - coinGeckoId: 'tron', - coinMinimalDenom: 'trx', - type: 'cw20', - contractAddress: TRX_CONTRACT, - bridgeTo: ['0x2b6653dc'], - coinDecimals: 6, - Icon: TronIcon - }, - { - coinDenom: 'scATOM', - coinMinimalDenom: 'scatom', - type: 'cw20', - contractAddress: SCATOM_CONTRACT, - coinGeckoId: 'scatom', - coinDecimals: 6, - Icon: ScAtomIcon - }, - { - coinDenom: 'IBC INJ', - coinGeckoId: 'injective-protocol', - coinMinimalDenom: INJECTIVE_ORAICHAIN_DENOM, - coinDecimals: 18, - Icon: InjIcon, - IconLight: InjIcon - }, - { - coinDenom: 'INJ', - coinGeckoId: 'injective-protocol', - coinMinimalDenom: 'injective', - contractAddress: INJECTIVE_CONTRACT, - bridgeTo: ['injective-1'], - type: 'cw20', - coinDecimals: 6, - Icon: InjIcon, - IconLight: InjIcon - }, - { - coinDenom: 'WETH', - coinGeckoId: 'weth', - coinMinimalDenom: 'weth', - type: 'cw20', - contractAddress: WETH_CONTRACT, - bridgeTo: ['0x01'], - coinDecimals: 6, - coinImageUrl: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', - Icon: EthIcon, - IconLight: EthIcon - }, - { - coinDenom: 'OCH', - coinGeckoId: 'och', - coinMinimalDenom: 'och', - type: 'cw20', - contractAddress: OCH_CONTRACT, - bridgeTo: ['0x01'], - coinDecimals: 6, - coinImageUrl: - 'https://assets.coingecko.com/coins/images/34236/standard/orchai_logo_white_copy_4x-8_%281%29.png?1704307670', - Icon: OrchaiIcon, - IconLight: OrchaiIcon - }, - { - coinDenom: 'BTC', - coinGeckoId: 'bitcoin', - coinMinimalDenom: 'usat', - type: 'cw20', - contractAddress: OBTCContractAddress, - bridgeTo: [bitcoinChainId], - coinDecimals: 6, - Icon: BTCIcon, - IconLight: BTCIcon, - coinImageUrl: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1.png' - }, - { - coinDenom: 'TON', - coinMinimalDenom: TON_ORAICHAIN_DENOM, - coinDecimals: 9, - coinGeckoId: 'the-open-network', - coinImageUrl: 'https://assets.coingecko.com/coins/images/17980/standard/ton_symbol.png?1696517498' - } - // { - // coinDenom: 'ATOM-CW20', - // coinGeckoId: 'cosmos', - // coinMinimalDenom: 'uatom', - // type: 'cw20', - // contractAddress: 'orai17l2zk3arrx0a0fyuneyx8raln68622a2lrsz8ph75u7gw9tgz3esayqryf', - // bridgeTo: ['cosmoshub-4'], - // coinDecimals: 6, - // Icon: AtomIcon - // } - ] + ...customOraichainNetwork }; export const OraiBTCBridgeNetwork = { @@ -685,644 +151,710 @@ export const OraiBTCBridgeNetwork = { } }; -const bitcoinNetwork = bitcoinMainnet; -export const chainInfos: CustomChainInfo[] = [ - // networks to add on keplr - oraichainNetwork, - bitcoinNetwork, - { - rpc: 'https://bridge-v2.rpc.orai.io', - rest: 'https://bridge-v2.lcd.orai.io', - chainId: 'oraibridge-subnet-2', - chainName: 'OraiBridge', - networkType: 'cosmos', - bip44: { - coinType: 118 - }, - bech32Config: defaultBech32Config('oraib'), +const OraiBTCToken: BridgeAppCurrency = { + coinDenom: 'ORAIBTC', + coinMinimalDenom: 'uoraibtc', + coinDecimals: 6, + gasPriceStep: { + low: 0, + average: 0, + high: 0 + } +}; - features: ['ibc-transfer'], - stakeCurrency: OraiBToken, - feeCurrencies: [OraiBToken], - // not use oraib as currency - currencies: [ - OraiBToken, - { - coinDenom: 'ORAI', - coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + ORAI_BSC_CONTRACT, - bridgeNetworkIdentifier: '0x38', - coinDecimals: 18, - coinGeckoId: 'oraichain-token', - IconLight: OraiLightIcon, - Icon: OraiIcon - }, - { - coinDenom: 'ORAI', - coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + ORAI_ETH_CONTRACT, - bridgeNetworkIdentifier: '0x01', - coinDecimals: 18, - coinGeckoId: 'oraichain-token', - IconLight: OraiLightIcon, - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: OraiIcon - }, - { - coinDenom: 'USDC', - coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + USDC_ETH_CONTRACT, - bridgeNetworkIdentifier: '0x01', - coinDecimals: 6, - coinGeckoId: 'usd-coin', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: UsdcIcon - }, - { - coinDenom: 'WETH', - coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + WRAP_ETH_CONTRACT, - bridgeNetworkIdentifier: '0x01', - coinDecimals: 6, - coinGeckoId: 'weth', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: EthIcon - }, - { - coinDenom: 'AIRI', - coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + AIRI_BSC_CONTRACT, - bridgeNetworkIdentifier: '0x38', - coinDecimals: 18, - coinGeckoId: 'airight', - Icon: AiriIcon - }, - { - coinDenom: 'USDT', - coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + USDT_ETH_CONTRACT, - bridgeNetworkIdentifier: '0x01', - coinDecimals: 6, - coinGeckoId: 'tether', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: UsdtIcon - }, - { - coinDenom: 'USDT', - coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + USDT_BSC_CONTRACT, - bridgeNetworkIdentifier: '0x38', - coinDecimals: 18, - coinGeckoId: 'tether', - Icon: UsdtIcon - }, - { - coinDenom: 'USDT', - coinMinimalDenom: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX + USDT_TRON_CONTRACT, - bridgeNetworkIdentifier: '0x2b6653dc', - prefixToken: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, - coinDecimals: 6, - coinGeckoId: 'tether', - Icon: UsdtIcon - }, - { - coinDenom: 'wTRX', - coinMinimalDenom: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX + WRAP_TRON_TRX_CONTRACT, - bridgeNetworkIdentifier: '0x2b6653dc', - coinDecimals: 6, - coinGeckoId: 'tron', - prefixToken: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, - Icon: TronIcon - }, - { - coinDenom: 'KWT', - bridgeNetworkIdentifier: '0x38', - coinMinimalDenom: KWT_DENOM, - coinDecimals: 18, - coinGeckoId: 'kawaii-islands', - Icon: KwtIcon - }, - { - coinDenom: 'MILKY', - bridgeNetworkIdentifier: '0x38', - coinMinimalDenom: MILKY_DENOM, - coinDecimals: 18, - coinGeckoId: 'milky-token', - Icon: MilkyIcon - }, - { - coinDenom: 'OCH', - coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + OCH_ETH_CONTRACT, - bridgeNetworkIdentifier: '0x01', - coinDecimals: 18, - coinGeckoId: 'och', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - coinImageUrl: - 'https://assets.coingecko.com/coins/images/34236/standard/orchai_logo_white_copy_4x-8_%281%29.png?1704307670' - }, - { - coinDenom: 'ORAIX', - coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + ORAIX_ETH_CONTRACT, - bridgeNetworkIdentifier: '0x01', - coinDecimals: 18, - coinGeckoId: 'oraidex', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - coinImageUrl: 'https://i.ibb.co/VmMJtf7/oraix.png' - } - ] +const oraibtcNetwork = { + rpc: 'https://btc.rpc.orai.io', + rest: 'https://btc.lcd.orai.io/', + chainId: 'oraibtc-mainnet-1' as any, + chainName: 'OraiBTC' as any, + networkType: 'cosmos', + bip44: { + coinType: 118 }, + Icon: BitcoinIcon, + IconLight: BitcoinIcon, + bech32Config: defaultBech32Config('oraibtc'), + feeCurrencies: [OraiBTCToken], + currencies: [ + { + coinDenom: 'BTC', + coinMinimalDenom: 'uoraibtc', + coinDecimals: 6, + coinGeckoId: 'bitcoin', + bridgeTo: ['Oraichain'], + Icon: BitcoinIcon, + IconLight: BitcoinIcon + } + ] +}; - { - rpc: 'https://tendermint1.kawaii.global', - rest: 'https://cosmos1.kawaii.global', - chainId: 'kawaii_6886-1', - chainName: 'Kawaiiverse', - networkType: 'cosmos', - stakeCurrency: KawaiiToken, - bip44: { - coinType: 60 - }, - bech32Config: defaultBech32Config('oraie'), - feeCurrencies: [KawaiiToken], +export const chainInfosWithSdk = [...customChainInfos, bitcoinMainnet, oraibtcNetwork]; +export const chainInfos = mapListWithIcon(chainInfosWithSdk, chainIcons, 'chainId'); - Icon: KwtIcon, - // features: ['ibc-transfer'], - features: ['ibc-transfer', 'ibc-go', 'stargate', 'eth-address-gen', 'eth-key-sign'], - currencies: [ - KawaiiToken, - { - coinDenom: 'MILKY', - coinGeckoId: 'milky-token', - coinMinimalDenom: MILKY_SUB_NETWORK_DENOM, - coinDecimals: 18, - bridgeTo: ['Oraichain', 'kawaii_6886-1'], - Icon: MilkyIcon - }, - { - coinDenom: 'ERC20 MILKY', - coinMinimalDenom: 'erc20_milky', - bridgeTo: ['Oraichain', 'kawaii_6886-1'], - contractAddress: MILKY_ERC_CONTRACT, - coinDecimals: 18, - coinGeckoId: 'milky-token', - Icon: MilkyIcon - }, - { - coinDenom: 'KWT', - coinMinimalDenom: KWT_SUB_NETWORK_DENOM, - coinDecimals: 18, - bridgeTo: ['Oraichain', 'kawaii_6886-1'], - coinGeckoId: 'kawaii-islands', - Icon: KwtIcon - }, - { - coinDenom: 'ERC20 KWT', - bridgeTo: ['Oraichain', 'kawaii_6886-1'], - coinMinimalDenom: 'erc20_kwt', - contractAddress: '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', - coinDecimals: 18, - coinGeckoId: 'kawaii-islands', - Icon: KwtIcon - } - ] - }, +// // networks to add on keplr +// oraichainNetwork, +// bitcoinMainnet, +// { +// rpc: 'https://bridge-v2.rpc.orai.io', +// rest: 'https://bridge-v2.lcd.orai.io', +// chainId: 'oraibridge-subnet-2', +// chainName: 'OraiBridge', +// networkType: 'cosmos', +// bip44: { +// coinType: 118 +// }, +// bech32Config: defaultBech32Config('oraib'), - /// popular networks already included - { - rpc: 'https://osmosis.rpc.orai.io/', - rest: 'https://osmosis.lcd.orai.io/', - chainId: 'osmosis-1', - chainName: 'Osmosis', - networkType: 'cosmos', - bip44: { - coinType: 118 - }, - Icon: OsmoIcon, - IconLight: OsmoIcon, - bech32Config: defaultBech32Config('osmo'), - feeCurrencies: [OsmoToken], - currencies: [ - { - coinDenom: 'OSMO', - coinMinimalDenom: 'uosmo', - coinDecimals: 6, - coinGeckoId: 'osmosis', - bridgeTo: ['Oraichain'], - Icon: OsmoIcon, - IconLight: OsmoIcon - } - ] - }, - { - rpc: 'https://btc.rpc.orai.io', - rest: 'https://btc.lcd.orai.io/', - chainId: 'oraibtc-mainnet-1' as any, - chainName: 'OraiBTC' as any, - networkType: 'cosmos', - bip44: { - coinType: 118 - }, - Icon: BitcoinIcon, - IconLight: BitcoinIcon, - bech32Config: defaultBech32Config('oraibtc'), - feeCurrencies: [OraiBTCToken], - currencies: [ - { - coinDenom: 'BTC', - coinMinimalDenom: 'uoraibtc', - coinDecimals: 6, - coinGeckoId: 'bitcoin', - bridgeTo: ['Oraichain'], - Icon: BitcoinIcon, - IconLight: BitcoinIcon - } - ] - }, - /// popular networks already included - { - rpc: 'https://injective.rpc.orai.io', - rest: 'https://injective.lcd.orai.io', - chainId: 'injective-1', - chainName: 'Injective', - networkType: 'cosmos', - bip44: { - coinType: 60 - }, - Icon: InjIcon, - IconLight: InjIcon, - bech32Config: defaultBech32Config('inj'), - feeCurrencies: [InjectiveToken], - currencies: [ - { - coinDenom: 'INJ', - coinMinimalDenom: 'inj', - coinDecimals: 18, - coinGeckoId: 'injective-protocol', - bridgeTo: ['Oraichain'], - Icon: InjIcon, - IconLight: InjIcon - }, - { - coinDenom: 'ORAI', - coinMinimalDenom: ORAIIBC_INJECTIVE_DENOM, - coinDecimals: 6, - coinGeckoId: 'oraichain-token', - bridgeTo: ['Oraichain'], - Icon: OraiIcon, - IconLight: OraiLightIcon - } - ] - }, - { - rpc: 'https://noble-rpc.polkachu.com/', - rest: 'https://noble-api.polkachu.com', - chainId: 'noble-1', - chainName: 'Noble', - networkType: 'cosmos', - bip44: { - coinType: 118 - }, - bech32Config: defaultBech32Config('noble'), - features: ['stargate', 'ibc-transfer', 'no-legacy-stdTx', 'ibc-go'], - Icon: NobleIcon, - IconLight: NobleIcon, - currencies: [ - { - coinDenom: 'USDC', - coinMinimalDenom: 'uusdc', - coinDecimals: 6, - coinGeckoId: 'usd-coin', - coinImageUrl: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/USDCoin.png', - gasPriceStep: { - low: 0, - average: 0.025, - high: 0.03 - }, - bridgeTo: ['Oraichain'], - Icon: UsdcIcon, - IconLight: UsdcIcon - } - ], - feeCurrencies: [ - { - coinDenom: 'USDC', - coinMinimalDenom: 'uusdc', - coinDecimals: 6, - coinGeckoId: 'usd-coin', - coinImageUrl: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/USDCoin.png', - gasPriceStep: { - low: 0, - average: 0.025, - high: 0.03 - } - } - ], - stakeCurrency: { - coinDecimals: 6, - coinDenom: 'STAKE', - coinMinimalDenom: 'ustake', - coinImageUrl: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/stake.png' - }, - chainSymbolImageUrl: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/stake.png', - txExplorer: { - name: 'Mintscan', - txUrl: 'https://www.mintscan.io/noble/txs/{txHash}' - } - }, - { - // rpc: 'http://rpc.neutaro.tech:26657/', - rpc: 'https://neutaro.rpc.orai.io', - rest: 'https://neutaro.lcd.orai.io', - // rest: 'http://api.neutaro.tech:1317/', - chainId: 'Neutaro-1', - chainName: 'Neutaro', - networkType: 'cosmos', - bip44: { - coinType: 118 - }, - Icon: NeutaroIcon, - IconLight: NeutaroIcon, - bech32Config: defaultBech32Config('neutaro'), - stakeCurrency: { - coinDenom: 'ntmpi', - coinMinimalDenom: 'uneutaro', - coinDecimals: 6, - coinImageUrl: 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/Neutaro/chain.png' - }, - feeCurrencies: [ - { - coinDenom: 'ntmpi', - coinMinimalDenom: 'uneutaro', - coinDecimals: 6, - coinImageUrl: 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/Neutaro/chain.png', - gasPriceStep: { - low: 0.01, - average: 0.025, - high: 0.03 - } - } - ], - currencies: [ - { - coinDenom: 'NTMPI', - coinMinimalDenom: 'uneutaro', - coinDecimals: 6, - bridgeTo: ['Oraichain'], - coinGeckoId: 'neutaro', - Icon: TimpiIcon, - IconLight: TimpiIcon - } - ] - }, - { - rpc: 'https://rpc-cosmos.oraidex.io', - rest: 'https://lcd-cosmos.oraidex.io', - chainId: 'cosmoshub-4', - chainName: 'Cosmos Hub', - networkType: 'cosmos', - bip44: { - coinType: 118 - }, - Icon: AtomIcon, - IconLight: AtomIcon, - bech32Config: defaultBech32Config('cosmos'), - feeCurrencies: [AtomToken], - currencies: [ - { - coinDenom: 'ATOM', - coinGeckoId: 'cosmos', - coinMinimalDenom: 'uatom', - coinDecimals: 6, - bridgeTo: ['Oraichain'], - Icon: AtomIcon, - IconLight: AtomIcon - } - ] - }, +// features: ['ibc-transfer'], +// stakeCurrency: OraiBToken, +// feeCurrencies: [OraiBToken], +// // not use oraib as currency +// currencies: [ +// OraiBToken, +// { +// coinDenom: 'ORAI', +// coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + ORAI_BSC_CONTRACT, +// bridgeNetworkIdentifier: '0x38', +// coinDecimals: 18, +// coinGeckoId: 'oraichain-token', +// IconLight: OraiLightIcon, +// Icon: OraiIcon +// }, +// { +// coinDenom: 'ORAI', +// coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + ORAI_ETH_CONTRACT, +// bridgeNetworkIdentifier: '0x01', +// coinDecimals: 18, +// coinGeckoId: 'oraichain-token', +// IconLight: OraiLightIcon, +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: OraiIcon +// }, +// { +// coinDenom: 'USDC', +// coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + USDC_ETH_CONTRACT, +// bridgeNetworkIdentifier: '0x01', +// coinDecimals: 6, +// coinGeckoId: 'usd-coin', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: UsdcIcon +// }, +// { +// coinDenom: 'WETH', +// coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + WRAP_ETH_CONTRACT, +// bridgeNetworkIdentifier: '0x01', +// coinDecimals: 6, +// coinGeckoId: 'weth', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: EthIcon +// }, +// { +// coinDenom: 'AIRI', +// coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + AIRI_BSC_CONTRACT, +// bridgeNetworkIdentifier: '0x38', +// coinDecimals: 18, +// coinGeckoId: 'airight', +// Icon: AiriIcon +// }, +// { +// coinDenom: 'USDT', +// coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + USDT_ETH_CONTRACT, +// bridgeNetworkIdentifier: '0x01', +// coinDecimals: 6, +// coinGeckoId: 'tether', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: UsdtIcon +// }, +// { +// coinDenom: 'USDT', +// coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + USDT_BSC_CONTRACT, +// bridgeNetworkIdentifier: '0x38', +// coinDecimals: 18, +// coinGeckoId: 'tether', +// Icon: UsdtIcon +// }, +// { +// coinDenom: 'USDT', +// coinMinimalDenom: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX + USDT_TRON_CONTRACT, +// bridgeNetworkIdentifier: '0x2b6653dc', +// prefixToken: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, +// coinDecimals: 6, +// coinGeckoId: 'tether', +// Icon: UsdtIcon +// }, +// { +// coinDenom: 'wTRX', +// coinMinimalDenom: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX + WRAP_TRON_TRX_CONTRACT, +// bridgeNetworkIdentifier: '0x2b6653dc', +// coinDecimals: 6, +// coinGeckoId: 'tron', +// prefixToken: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, +// Icon: TronIcon +// }, +// { +// coinDenom: 'KWT', +// bridgeNetworkIdentifier: '0x38', +// coinMinimalDenom: KWT_DENOM, +// coinDecimals: 18, +// coinGeckoId: 'kawaii-islands', +// Icon: KwtIcon +// }, +// { +// coinDenom: 'MILKY', +// bridgeNetworkIdentifier: '0x38', +// coinMinimalDenom: MILKY_DENOM, +// coinDecimals: 18, +// coinGeckoId: 'milky-token', +// Icon: MilkyIcon +// }, +// { +// coinDenom: 'OCH', +// coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + OCH_ETH_CONTRACT, +// bridgeNetworkIdentifier: '0x01', +// coinDecimals: 18, +// coinGeckoId: 'och', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// coinImageUrl: +// 'https://assets.coingecko.com/coins/images/34236/standard/orchai_logo_white_copy_4x-8_%281%29.png?1704307670' +// }, +// { +// coinDenom: 'ORAIX', +// coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + ORAIX_ETH_CONTRACT, +// bridgeNetworkIdentifier: '0x01', +// coinDecimals: 18, +// coinGeckoId: 'oraidex', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// coinImageUrl: 'https://i.ibb.co/VmMJtf7/oraix.png' +// }, +// { +// coinDenom: 'PEPE', +// coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + PEPE_BSC_CONTRACT, +// bridgeNetworkIdentifier: '0x38', +// coinDecimals: 18, +// coinGeckoId: 'pepe', +// prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, +// coinImageUrl: 'https://assets.coingecko.com/coins/images/29850/standard/pepe-token.jpeg?1696528776' +// }, +// { +// coinDenom: 'PEPE', +// coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + PEPE_ETH_CONTRACT, +// bridgeNetworkIdentifier: '0x01', +// coinDecimals: 18, +// coinGeckoId: 'pepe', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// coinImageUrl: 'https://assets.coingecko.com/coins/images/29850/standard/pepe-token.jpeg?1696528776' +// } +// ] +// }, - /// evm chain info - { - rpc: 'https://rpc.ankr.com/eth', - chainId: '0x01', - chainName: 'Ethereum', - bip44: { - coinType: 60 - }, - Icon: EthIcon, - networkType: 'evm', - currencies: [ - { - coinDenom: 'ORAI', - coinMinimalDenom: 'erc20_orai', - contractAddress: ORAI_ETH_CONTRACT, - coinDecimals: 18, - bridgeTo: ['Oraichain'], - coinGeckoId: 'oraichain-token', - IconLight: OraiLightIcon, - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: OraiIcon - }, - { - coinDenom: 'USDC', - coinMinimalDenom: 'erc20_usdc', - contractAddress: USDC_ETH_CONTRACT, - coinDecimals: 6, - bridgeTo: ['Oraichain'], - coinGeckoId: 'usd-coin', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: UsdcIcon - }, - { - coinDenom: 'WETH', - coinMinimalDenom: 'erc20_eth', - contractAddress: WRAP_ETH_CONTRACT, - coinDecimals: 18, - bridgeTo: ['Oraichain'], - coinGeckoId: 'weth', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: EthIcon - }, - { - coinDenom: 'ETH', - coinMinimalDenom: 'eth', - contractAddress: '', - coinDecimals: 18, - bridgeTo: ['Oraichain'], - coinGeckoId: 'ethereum', - Icon: EthIcon, - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX - }, - { - coinDenom: 'USDT', - coinMinimalDenom: 'erc20_usdt', - contractAddress: USDT_ETH_CONTRACT, - coinDecimals: 6, - bridgeTo: ['Oraichain'], - coinGeckoId: 'tether', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: UsdtIcon - }, - { - coinDenom: 'OCH', - coinMinimalDenom: 'erc20_och', - contractAddress: OCH_ETH_CONTRACT, - coinDecimals: 18, - bridgeTo: ['Oraichain'], - coinGeckoId: 'och', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - coinImageUrl: - 'https://assets.coingecko.com/coins/images/34236/standard/orchai_logo_white_copy_4x-8_%281%29.png?1704307670', - Icon: OrchaiIcon - }, - { - coinDenom: 'ORAIX', - coinMinimalDenom: 'erc20_oraix', - contractAddress: ORAIX_ETH_CONTRACT, - coinDecimals: 18, - bridgeTo: ['Oraichain'], - coinGeckoId: 'oraidex', - prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, - Icon: OraixIcon - } - ] - }, - { - rpc: 'https://api.trongrid.io/jsonrpc', - rest: 'https://api.trongrid.io', - chainId: '0x2b6653dc', - networkType: 'evm', - chainName: 'Tron Network', - Icon: TronIcon, - currencies: [ - { - coinDenom: 'USDT', - coinMinimalDenom: 'trx20_usdt', - contractAddress: USDT_TRON_CONTRACT, - bridgeTo: ['Oraichain'], - coinDecimals: 6, - coinGeckoId: 'tether', - prefixToken: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, - Icon: UsdtIcon - }, - { - coinDenom: 'wTRX', - coinMinimalDenom: 'trx20_trx', - contractAddress: WRAP_TRON_TRX_CONTRACT, - bridgeTo: ['Oraichain'], - coinDecimals: 6, - coinGeckoId: 'tron', - prefixToken: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, - Icon: TronIcon - } - ], - bip44: { - coinType: 195 - } - }, - { - rpc: 'https://bsc-dataseed1.binance.org', - networkType: 'evm', - Icon: BnbIcon, - chainId: '0x38', - chainName: 'BNB Chain', - bip44: { - coinType: 60 - }, - currencies: [ - { - coinDenom: 'ORAI', - coinMinimalDenom: 'bep20_orai', - contractAddress: ORAI_BSC_CONTRACT, - bridgeTo: ['Oraichain'], - coinDecimals: 18, - coinGeckoId: 'oraichain-token', - prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, - Icon: OraiIcon, - IconLight: OraiLightIcon - }, - { - coinDenom: 'AIRI', - coinMinimalDenom: 'bep20_airi', - contractAddress: AIRI_BSC_CONTRACT, - bridgeTo: ['Oraichain'], - coinDecimals: 18, - coinGeckoId: 'airight', - prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, - Icon: AiriIcon - }, - { - coinDenom: 'USDT', - coinMinimalDenom: 'bep20_usdt', - contractAddress: USDT_BSC_CONTRACT, - bridgeTo: ['Oraichain'], - coinDecimals: 18, - coinGeckoId: 'tether', - prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, - Icon: UsdtIcon - }, - { - coinDenom: 'KWT', - coinMinimalDenom: 'bep20_kwt', - contractAddress: KWT_BSC_CONTRACT, - bridgeTo: ['Oraichain'], - coinDecimals: 18, - coinGeckoId: 'kawaii-islands', - Icon: KwtIcon - }, - { - coinDenom: 'MILKY', - coinMinimalDenom: 'bep20_milky', - contractAddress: MILKY_BSC_CONTRACT, - coinDecimals: 18, - coinGeckoId: 'milky-token', - bridgeTo: ['Oraichain'], - Icon: MilkyIcon - }, - { - coinDenom: 'WBNB', - coinMinimalDenom: 'bep20_wbnb', - contractAddress: WRAP_BNB_CONTRACT, - coinDecimals: 18, - coinGeckoId: 'wbnb', - bridgeTo: ['Oraichain'], - Icon: BnbIcon - }, - { - coinDenom: 'BNB', - coinMinimalDenom: 'bnb', - contractAddress: '', - coinDecimals: 18, - coinGeckoId: 'binancecoin', - bridgeTo: ['Oraichain'], - prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, - Icon: BnbIcon - } - ] - }, - { - rpc: 'https://endpoint1.kawaii.global', - chainId: '0x1ae6', - networkType: 'evm', - chainName: 'Kawaiiverse EVM', - Icon: KwtIcon, - bip44: { - coinType: 60 - }, - currencies: [ - { - coinDenom: 'ERC20 MILKY', - coinMinimalDenom: 'erc20_milky', - bridgeTo: ['Oraichain', 'kawaii_6886-1'], - contractAddress: MILKY_ERC_CONTRACT, - coinDecimals: 18, - coinGeckoId: 'milky-token', - Icon: MilkyIcon - }, - { - coinDenom: 'ERC20 KWT', - bridgeTo: ['Oraichain', 'kawaii_6886-1'], - coinMinimalDenom: 'erc20_kwt', - contractAddress: '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', - coinDecimals: 18, - coinGeckoId: 'kawaii-islands', - Icon: KwtIcon - } - ] - } -]; +// { +// rpc: 'https://tendermint1.kawaii.global', +// rest: 'https://cosmos1.kawaii.global', +// chainId: 'kawaii_6886-1', +// chainName: 'Kawaiiverse', +// networkType: 'cosmos', +// stakeCurrency: KawaiiToken, +// bip44: { +// coinType: 60 +// }, +// bech32Config: defaultBech32Config('oraie'), +// feeCurrencies: [KawaiiToken], + +// Icon: KwtIcon, +// // features: ['ibc-transfer'], +// features: ['ibc-transfer', 'ibc-go', 'stargate', 'eth-address-gen', 'eth-key-sign'], +// currencies: [ +// KawaiiToken, +// { +// coinDenom: 'MILKY', +// coinGeckoId: 'milky-token', +// coinMinimalDenom: MILKY_SUB_NETWORK_DENOM, +// coinDecimals: 18, +// bridgeTo: ['Oraichain', 'kawaii_6886-1'], +// Icon: MilkyIcon +// }, +// { +// coinDenom: 'ERC20 MILKY', +// coinMinimalDenom: 'erc20_milky', +// bridgeTo: ['Oraichain', 'kawaii_6886-1'], +// contractAddress: MILKY_ERC_CONTRACT, +// coinDecimals: 18, +// coinGeckoId: 'milky-token', +// Icon: MilkyIcon +// }, +// { +// coinDenom: 'KWT', +// coinMinimalDenom: KWT_SUB_NETWORK_DENOM, +// coinDecimals: 18, +// bridgeTo: ['Oraichain', 'kawaii_6886-1'], +// coinGeckoId: 'kawaii-islands', +// Icon: KwtIcon +// }, +// { +// coinDenom: 'ERC20 KWT', +// bridgeTo: ['Oraichain', 'kawaii_6886-1'], +// coinMinimalDenom: 'erc20_kwt', +// contractAddress: '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', +// coinDecimals: 18, +// coinGeckoId: 'kawaii-islands', +// Icon: KwtIcon +// } +// ] +// }, + +// /// popular networks already included +// { +// rpc: 'https://osmosis.rpc.orai.io/', +// rest: 'https://osmosis.lcd.orai.io/', +// chainId: 'osmosis-1', +// chainName: 'Osmosis', +// networkType: 'cosmos', +// bip44: { +// coinType: 118 +// }, +// Icon: OsmoIcon, +// IconLight: OsmoIcon, +// bech32Config: defaultBech32Config('osmo'), +// feeCurrencies: [OsmoToken], +// currencies: [ +// { +// coinDenom: 'OSMO', +// coinMinimalDenom: 'uosmo', +// coinDecimals: 6, +// coinGeckoId: 'osmosis', +// bridgeTo: ['Oraichain'], +// Icon: OsmoIcon, +// IconLight: OsmoIcon +// }, +// ...listOsmosisToken +// ] +// }, +// { +// rpc: 'https://btc.rpc.orai.io', +// rest: 'https://btc.lcd.orai.io/', +// chainId: 'oraibtc-mainnet-1' as any, +// chainName: 'OraiBTC' as any, +// networkType: 'cosmos', +// bip44: { +// coinType: 118 +// }, +// Icon: BitcoinIcon, +// IconLight: BitcoinIcon, +// bech32Config: defaultBech32Config('oraibtc'), +// feeCurrencies: [OraiBTCToken], +// currencies: [ +// { +// coinDenom: 'BTC', +// coinMinimalDenom: 'uoraibtc', +// coinDecimals: 6, +// coinGeckoId: 'bitcoin', +// bridgeTo: ['Oraichain'], +// Icon: BitcoinIcon, +// IconLight: BitcoinIcon +// } +// ] +// }, +// /// popular networks already included +// { +// rpc: 'https://injective.rpc.orai.io', +// rest: 'https://injective.lcd.orai.io', +// chainId: 'injective-1', +// chainName: 'Injective', +// networkType: 'cosmos', +// bip44: { +// coinType: 60 +// }, +// Icon: InjIcon, +// IconLight: InjIcon, +// bech32Config: defaultBech32Config('inj'), +// feeCurrencies: [InjectiveToken], +// currencies: [ +// { +// coinDenom: 'INJ', +// coinMinimalDenom: 'inj', +// coinDecimals: 18, +// coinGeckoId: 'injective-protocol', +// bridgeTo: ['Oraichain'], +// Icon: InjIcon, +// IconLight: InjIcon +// }, +// { +// coinDenom: 'ORAI', +// coinMinimalDenom: ORAIIBC_INJECTIVE_DENOM, +// coinDecimals: 6, +// coinGeckoId: 'oraichain-token', +// bridgeTo: ['Oraichain'], +// Icon: OraiIcon, +// IconLight: OraiLightIcon +// } +// ] +// }, +// { +// rpc: 'https://noble-rpc.polkachu.com/', +// rest: 'https://noble-api.polkachu.com', +// chainId: 'noble-1', +// chainName: 'Noble', +// networkType: 'cosmos', +// bip44: { +// coinType: 118 +// }, +// bech32Config: defaultBech32Config('noble'), +// features: ['stargate', 'ibc-transfer', 'no-legacy-stdTx', 'ibc-go'], +// Icon: NobleIcon, +// IconLight: NobleIcon, +// currencies: [ +// { +// coinDenom: 'USDC', +// coinMinimalDenom: 'uusdc', +// coinDecimals: 6, +// coinGeckoId: 'usd-coin', +// coinImageUrl: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/USDCoin.png', +// gasPriceStep: { +// low: 0, +// average: 0.025, +// high: 0.03 +// }, +// bridgeTo: ['Oraichain'], +// Icon: UsdcIcon, +// IconLight: UsdcIcon +// } +// ], +// feeCurrencies: [ +// { +// coinDenom: 'USDC', +// coinMinimalDenom: 'uusdc', +// coinDecimals: 6, +// coinGeckoId: 'usd-coin', +// coinImageUrl: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/USDCoin.png', +// gasPriceStep: { +// low: 0, +// average: 0.025, +// high: 0.03 +// } +// } +// ], +// stakeCurrency: { +// coinDecimals: 6, +// coinDenom: 'STAKE', +// coinMinimalDenom: 'ustake', +// coinImageUrl: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/stake.png' +// }, +// chainSymbolImageUrl: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/stake.png', +// txExplorer: { +// name: 'Mintscan', +// txUrl: 'https://www.mintscan.io/noble/txs/{txHash}' +// } +// }, +// { +// // rpc: 'http://rpc.neutaro.tech:26657/', +// rpc: 'https://neutaro.rpc.orai.io', +// rest: 'https://neutaro.lcd.orai.io', +// // rest: 'http://api.neutaro.tech:1317/', +// chainId: 'Neutaro-1', +// chainName: 'Neutaro', +// networkType: 'cosmos', +// bip44: { +// coinType: 118 +// }, +// Icon: NeutaroIcon, +// IconLight: NeutaroIcon, +// bech32Config: defaultBech32Config('neutaro'), +// stakeCurrency: { +// coinDenom: 'ntmpi', +// coinMinimalDenom: 'uneutaro', +// coinDecimals: 6, +// coinImageUrl: 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/Neutaro/chain.png' +// }, +// feeCurrencies: [ +// { +// coinDenom: 'ntmpi', +// coinMinimalDenom: 'uneutaro', +// coinDecimals: 6, +// coinImageUrl: 'https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/Neutaro/chain.png', +// gasPriceStep: { +// low: 0.01, +// average: 0.025, +// high: 0.03 +// } +// } +// ], +// currencies: [ +// { +// coinDenom: 'NTMPI', +// coinMinimalDenom: 'uneutaro', +// coinDecimals: 6, +// bridgeTo: ['Oraichain'], +// coinGeckoId: 'neutaro', +// Icon: TimpiIcon, +// IconLight: TimpiIcon +// } +// ] +// }, +// { +// rpc: 'https://rpc-cosmos.oraidex.io', +// rest: 'https://lcd-cosmos.oraidex.io', +// chainId: 'cosmoshub-4', +// chainName: 'Cosmos Hub', +// networkType: 'cosmos', +// bip44: { +// coinType: 118 +// }, +// Icon: AtomIcon, +// IconLight: AtomIcon, +// bech32Config: defaultBech32Config('cosmos'), +// feeCurrencies: [AtomToken], +// currencies: [ +// { +// coinDenom: 'ATOM', +// coinGeckoId: 'cosmos', +// coinMinimalDenom: 'uatom', +// coinDecimals: 6, +// bridgeTo: ['Oraichain'], +// Icon: AtomIcon, +// IconLight: AtomIcon +// } +// ] +// }, + +// /// evm chain info +// { +// rpc: 'https://rpc.ankr.com/eth', +// chainId: '0x01', +// chainName: 'Ethereum', +// bip44: { +// coinType: 60 +// }, +// Icon: EthIcon, +// networkType: 'evm', +// currencies: [ +// { +// coinDenom: 'ORAI', +// coinMinimalDenom: 'erc20_orai', +// contractAddress: ORAI_ETH_CONTRACT, +// coinDecimals: 18, +// bridgeTo: ['Oraichain'], +// coinGeckoId: 'oraichain-token', +// IconLight: OraiLightIcon, +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: OraiIcon +// }, +// { +// coinDenom: 'USDC', +// coinMinimalDenom: 'erc20_usdc', +// contractAddress: USDC_ETH_CONTRACT, +// coinDecimals: 6, +// bridgeTo: ['Oraichain'], +// coinGeckoId: 'usd-coin', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: UsdcIcon +// }, +// { +// coinDenom: 'WETH', +// coinMinimalDenom: 'erc20_eth', +// contractAddress: WRAP_ETH_CONTRACT, +// coinDecimals: 18, +// bridgeTo: ['Oraichain'], +// coinGeckoId: 'weth', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: EthIcon +// }, +// { +// coinDenom: 'ETH', +// coinMinimalDenom: 'eth', +// contractAddress: '', +// coinDecimals: 18, +// bridgeTo: ['Oraichain'], +// coinGeckoId: 'ethereum', +// Icon: EthIcon, +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX +// }, +// { +// coinDenom: 'USDT', +// coinMinimalDenom: 'erc20_usdt', +// contractAddress: USDT_ETH_CONTRACT, +// coinDecimals: 6, +// bridgeTo: ['Oraichain'], +// coinGeckoId: 'tether', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: UsdtIcon +// }, +// { +// coinDenom: 'OCH', +// coinMinimalDenom: 'erc20_och', +// contractAddress: OCH_ETH_CONTRACT, +// coinDecimals: 18, +// bridgeTo: ['Oraichain'], +// coinGeckoId: 'och', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// coinImageUrl: +// 'https://assets.coingecko.com/coins/images/34236/standard/orchai_logo_white_copy_4x-8_%281%29.png?1704307670', +// Icon: OrchaiIcon +// }, +// { +// coinDenom: 'ORAIX', +// coinMinimalDenom: 'erc20_oraix', +// contractAddress: ORAIX_ETH_CONTRACT, +// coinDecimals: 18, +// bridgeTo: ['Oraichain'], +// coinGeckoId: 'oraidex', +// prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX, +// Icon: OraixIcon +// } +// ] +// }, +// { +// rpc: 'https://api.trongrid.io/jsonrpc', +// rest: 'https://api.trongrid.io', +// chainId: '0x2b6653dc', +// networkType: 'evm', +// chainName: 'Tron Network', +// Icon: TronIcon, +// currencies: [ +// { +// coinDenom: 'USDT', +// coinMinimalDenom: 'trx20_usdt', +// contractAddress: USDT_TRON_CONTRACT, +// bridgeTo: ['Oraichain'], +// coinDecimals: 6, +// coinGeckoId: 'tether', +// prefixToken: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, +// Icon: UsdtIcon +// }, +// { +// coinDenom: 'wTRX', +// coinMinimalDenom: 'trx20_trx', +// contractAddress: WRAP_TRON_TRX_CONTRACT, +// bridgeTo: ['Oraichain'], +// coinDecimals: 6, +// coinGeckoId: 'tron', +// prefixToken: ORAI_BRIDGE_EVM_TRON_DENOM_PREFIX, +// Icon: TronIcon +// } +// ], +// bip44: { +// coinType: 195 +// } +// }, +// { +// rpc: 'https://bsc-dataseed1.binance.org', +// networkType: 'evm', +// Icon: BnbIcon, +// chainId: '0x38', +// chainName: 'BNB Chain', +// bip44: { +// coinType: 60 +// }, +// currencies: [ +// { +// coinDenom: 'ORAI', +// coinMinimalDenom: 'bep20_orai', +// contractAddress: ORAI_BSC_CONTRACT, +// bridgeTo: ['Oraichain'], +// coinDecimals: 18, +// coinGeckoId: 'oraichain-token', +// prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, +// Icon: OraiIcon, +// IconLight: OraiLightIcon +// }, +// { +// coinDenom: 'AIRI', +// coinMinimalDenom: 'bep20_airi', +// contractAddress: AIRI_BSC_CONTRACT, +// bridgeTo: ['Oraichain'], +// coinDecimals: 18, +// coinGeckoId: 'airight', +// prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, +// Icon: AiriIcon +// }, +// { +// coinDenom: 'USDT', +// coinMinimalDenom: 'bep20_usdt', +// contractAddress: USDT_BSC_CONTRACT, +// bridgeTo: ['Oraichain'], +// coinDecimals: 18, +// coinGeckoId: 'tether', +// prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, +// Icon: UsdtIcon +// }, +// { +// coinDenom: 'KWT', +// coinMinimalDenom: 'bep20_kwt', +// contractAddress: KWT_BSC_CONTRACT, +// bridgeTo: ['Oraichain'], +// coinDecimals: 18, +// coinGeckoId: 'kawaii-islands', +// Icon: KwtIcon +// }, +// { +// coinDenom: 'MILKY', +// coinMinimalDenom: 'bep20_milky', +// contractAddress: MILKY_BSC_CONTRACT, +// coinDecimals: 18, +// coinGeckoId: 'milky-token', +// bridgeTo: ['Oraichain'], +// Icon: MilkyIcon +// }, +// { +// coinDenom: 'WBNB', +// coinMinimalDenom: 'bep20_wbnb', +// contractAddress: WRAP_BNB_CONTRACT, +// coinDecimals: 18, +// coinGeckoId: 'wbnb', +// bridgeTo: ['Oraichain'], +// Icon: BnbIcon +// }, +// { +// coinDenom: 'BNB', +// coinMinimalDenom: 'bnb', +// contractAddress: '', +// coinDecimals: 18, +// coinGeckoId: 'binancecoin', +// bridgeTo: ['Oraichain'], +// prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX, +// Icon: BnbIcon +// }, +// { +// coinDenom: 'PEPE', +// coinMinimalDenom: 'bep20_pepe', +// contractAddress: PEPE_BSC_CONTRACT, +// coinDecimals: 18, +// coinGeckoId: 'pepe', +// bridgeTo: ['Oraichain'], +// coinImageUrl: 'https://assets.coingecko.com/coins/images/29850/standard/pepe-token.jpeg?1696528776' +// } +// ] +// }, +// { +// rpc: 'https://endpoint1.kawaii.global', +// chainId: '0x1ae6', +// networkType: 'evm', +// chainName: 'Kawaiiverse EVM', +// Icon: KwtIcon, +// bip44: { +// coinType: 60 +// }, +// currencies: [ +// { +// coinDenom: 'ERC20 MILKY', +// coinMinimalDenom: 'erc20_milky', +// bridgeTo: ['Oraichain', 'kawaii_6886-1'], +// contractAddress: MILKY_ERC_CONTRACT, +// coinDecimals: 18, +// coinGeckoId: 'milky-token', +// Icon: MilkyIcon +// }, +// { +// coinDenom: 'ERC20 KWT', +// bridgeTo: ['Oraichain', 'kawaii_6886-1'], +// coinMinimalDenom: 'erc20_kwt', +// contractAddress: '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', +// coinDecimals: 18, +// coinGeckoId: 'kawaii-islands', +// Icon: KwtIcon +// } +// ] +// } +// ]; // exclude kawaiverse subnet and other special evm that has different cointype export const evmChains = chainInfos.filter( diff --git a/src/config/iconInfos.ts b/src/config/iconInfos.ts new file mode 100644 index 00000000..eeb4cfdd --- /dev/null +++ b/src/config/iconInfos.ts @@ -0,0 +1,256 @@ +import { ReactComponent as AiriIcon } from 'assets/icons/airi.svg'; +import { ReactComponent as AtomIcon } from 'assets/icons/atom_cosmos.svg'; +import { ReactComponent as BnbIcon } from 'assets/icons/bnb.svg'; +import { ReactComponent as EthIcon } from 'assets/icons/ethereum.svg'; +import { ReactComponent as KwtIcon } from 'assets/icons/kwt.svg'; +import { ReactComponent as MilkyIcon } from 'assets/icons/milky-token.svg'; +import { ReactComponent as OraiIcon } from 'assets/icons/oraichain.svg'; + +import { ReactComponent as BTCIcon } from 'assets/icons/btc-icon.svg'; +import { ReactComponent as OraiLightIcon } from 'assets/icons/oraichain_light.svg'; +import { ReactComponent as OraixIcon } from 'assets/icons/oraix.svg'; +import { ReactComponent as OraixLightIcon } from 'assets/icons/oraix_light.svg'; +import { ReactComponent as OsmoIcon } from 'assets/icons/osmosis_light.svg'; +import { ReactComponent as ScOraiIcon } from 'assets/icons/orchai.svg'; +import { ReactComponent as UsdtIcon } from 'assets/icons/tether.svg'; +import { ReactComponent as TronIcon } from 'assets/icons/tron.svg'; +import { ReactComponent as UsdcIcon } from 'assets/icons/usd_coin.svg'; +import { ReactComponent as ScAtomIcon } from 'assets/icons/scatom.svg'; +import { ReactComponent as InjIcon } from 'assets/icons/inj.svg'; +import { ReactComponent as NobleIcon } from 'assets/icons/noble.svg'; +import { ReactComponent as NobleLightIcon } from 'assets/icons/ic_noble_light.svg'; +import { ReactComponent as TimpiIcon } from 'assets/icons/timpiIcon.svg'; +import { ReactComponent as NeutaroIcon } from 'assets/icons/neutaro.svg'; +import { ReactComponent as OrchaiIcon } from 'assets/icons/orchaiIcon.svg'; +import { ReactComponent as BitcoinIcon } from 'assets/icons/bitcoin.svg'; +import { ReactComponent as CelestiaIcon } from 'assets/icons/celestia.svg'; +import { ReactComponent as TonIcon } from 'assets/icons/ton.svg'; +import { ReactComponent as PepeIcon } from 'assets/icons/pepe.svg'; +// import { ReactComponent as CatIcon } from 'assets/icons/icon-simoncat.svg'; +import { ReactComponent as HmstrIcon } from 'assets/icons/hmstr.svg'; + +import { CustomChainInfo, TokenItemType } from '@oraichain/oraidex-common'; +import { bitcoinChainId } from 'helper/constants'; + +export type TokenIcon = Pick; +export type ChainIcon = Pick; + +export const tokensIconInfos: TokenIcon[] = [ + { + coinGeckoId: 'oraichain-token', + Icon: OraiIcon, + IconLight: OraiLightIcon + }, + { + coinGeckoId: 'usd-coin', + Icon: UsdcIcon, + IconLight: UsdcIcon + }, + { + coinGeckoId: 'bitcoin', + Icon: BTCIcon, + IconLight: BTCIcon + }, + { + coinGeckoId: 'airight', + Icon: AiriIcon, + IconLight: AiriIcon + }, + { + coinGeckoId: 'tether', + Icon: UsdtIcon, + IconLight: UsdtIcon + }, + { + coinGeckoId: 'tron', + Icon: TronIcon, + IconLight: TronIcon + }, + { + coinGeckoId: 'kawaii-islands', + Icon: KwtIcon, + IconLight: KwtIcon + }, + { + coinGeckoId: 'milky-token', + Icon: MilkyIcon, + IconLight: MilkyIcon + }, + { + coinGeckoId: 'osmosis', + Icon: OsmoIcon, + IconLight: OsmoIcon + }, + { + coinGeckoId: 'injective-protocol', + Icon: InjIcon, + IconLight: InjIcon + }, + { + coinGeckoId: 'cosmos', + Icon: AtomIcon, + IconLight: AtomIcon + }, + { + coinGeckoId: 'weth', + Icon: EthIcon, + IconLight: EthIcon + }, + { + coinGeckoId: 'ethereum', + Icon: EthIcon, + IconLight: EthIcon + }, + { + coinGeckoId: 'wbnb', + Icon: BnbIcon, + IconLight: BnbIcon + }, + { + coinGeckoId: 'binancecoin', + Icon: BnbIcon, + IconLight: BnbIcon + }, + { + coinGeckoId: 'oraidex', + Icon: OraixIcon, + IconLight: OraixLightIcon + }, + { + coinGeckoId: 'scorai', + Icon: ScOraiIcon, + IconLight: ScOraiIcon + }, + { + coinGeckoId: 'scatom', + Icon: ScAtomIcon, + IconLight: ScAtomIcon + }, + { + coinGeckoId: 'neutaro', + Icon: TimpiIcon, + IconLight: TimpiIcon + }, + { + coinGeckoId: 'och', + Icon: OrchaiIcon, + IconLight: OrchaiIcon + }, + { + coinGeckoId: 'bitcoin', + Icon: BitcoinIcon, + IconLight: BitcoinIcon + }, + { + coinGeckoId: 'celestia', + Icon: CelestiaIcon, + IconLight: CelestiaIcon + }, + { + coinGeckoId: 'the-open-network', + Icon: TonIcon, + IconLight: TonIcon + }, + { + coinGeckoId: 'pepe', + Icon: PepeIcon, + IconLight: PepeIcon + }, + { + coinGeckoId: 'hamster-kombat', + Icon: HmstrIcon, + IconLight: HmstrIcon + } +]; + +export const chainIconsInfos: ChainIcon[] = [ + { + chainId: 'Oraichain', + Icon: OraiIcon, + IconLight: OraiLightIcon + }, + { + chainId: bitcoinChainId, + Icon: BTCIcon, + IconLight: BTCIcon + }, + { + chainId: 'kawaii_6886-1', + Icon: KwtIcon, + IconLight: KwtIcon + }, + { + chainId: 'osmosis-1', + Icon: OsmoIcon, + IconLight: OsmoIcon + }, + { + chainId: 'injective-1', + Icon: InjIcon, + IconLight: InjIcon + }, + { + chainId: 'cosmoshub-4', + Icon: AtomIcon, + IconLight: AtomIcon + }, + { + chainId: '0x01', + Icon: EthIcon, + IconLight: EthIcon + }, + { + chainId: '0x2b6653dc', + Icon: TronIcon, + IconLight: TronIcon + }, + { + chainId: '0x38', + Icon: BnbIcon, + IconLight: BnbIcon + }, + { + chainId: '0x1ae6', + Icon: KwtIcon, + IconLight: KwtIcon + }, + { + chainId: 'noble-1', + Icon: NobleIcon, + IconLight: NobleLightIcon + }, + { + chainId: 'Neutaro-1', + Icon: NeutaroIcon, + IconLight: NeutaroIcon + }, + { + chainId: 'oraibtc-mainnet-1', + Icon: BitcoinIcon, + IconLight: BitcoinIcon + }, + { + chainId: 'celestia', + Icon: CelestiaIcon, + IconLight: CelestiaIcon + } +]; + +export const mapListWithIcon = (list: any[], listIcon: ChainIcon[] | TokenIcon[], key: 'chainId' | 'coinGeckoId') => { + return list.map((item) => { + let Icon = OraiIcon; + let IconLight = OraiLightIcon; + + const findedItem = listIcon.find((icon) => icon[key] === item[key]); + if (findedItem) { + Icon = findedItem.Icon; + IconLight = findedItem.IconLight; + } + + return { + ...item, + Icon, + IconLight + }; + }); +}; diff --git a/src/pages/UniversalSwap/Swap/components/SwapWarningModal/index.module.scss b/src/pages/UniversalSwap/Swap/components/SwapWarningModal/index.module.scss new file mode 100644 index 00000000..0ca696aa --- /dev/null +++ b/src/pages/UniversalSwap/Swap/components/SwapWarningModal/index.module.scss @@ -0,0 +1,184 @@ +@import 'src/styles/mixins'; +@import 'src/styles/variables'; +@import 'src/styles/themes'; + +.modalConfirm { + display: flex; + justify-content: center; + align-items: center; + flex-direction: row; + position: fixed; + inset: 0; + + z-index: 30; + + @include small_mobile { + align-items: flex-end; + } + + .overlay { + position: absolute; + inset: 0; + + background: rgba(7, 10, 19, 0.4); + width: 100%; + height: 100%; + } + + .modalContent { + position: relative; + z-index: 1; + width: 100%; + max-width: 500px; + padding: 24px; + display: flex; + flex-direction: column; + gap: 24px; + + border-radius: 12px; + box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.1); + + @include theme { + background: theme-get('neutral-surface-bg-2'); + } + + @include small-mobile { + max-width: 576px; + + padding: 10px; + border-end-end-radius: 0px; + border-end-start-radius: 0px; + max-width: unset; + + gap: 16px; + } + + .closeIcon { + cursor: pointer; + position: absolute; + top: 24px; + right: 24px; + + @include mobile { + top: 10px; + right: 10px; + } + } + + .title { + @include theme { + color: theme-get('neutral-text-text-token-name'); + } + font-size: 20px; + font-weight: 600; + line-height: 150%; + + width: 100%; + text-align: left; + + display: inline-flex; + align-items: center; + gap: 4px; + } + + .logo { + margin: auto; + } + + .content { + display: flex; + flex-direction: column; + align-items: center; + gap: 24px; + + overflow-y: auto; + height: 100%; + max-height: calc(100vh - 250px); + + @include mobile { + padding: 0px 5px; + } + + @include theme { + color: theme-get('neutral-text-text-token-name'); + } + font-size: 16px; + font-weight: 400; + line-height: 150%; + text-align: center; + + .desc { + width: 100%; + text-align: left; + + font-size: 14px; + font-weight: 400; + line-height: 150%; + + @include mobile { + font-size: 12px; + } + + .impact { + font-weight: 600; + color: $warning-10-color; + } + + @include theme { + color: theme-get('neutral-text-title-2'); + } + } + } + + .button { + width: 100%; + display: flex; + gap: 16px; + + @include small-mobile { + gap: 8px; + flex-direction: column-reverse; + } + + button { + height: 44px; + padding: 6px 10px; + + @include mobile { + font-size: 12px; + height: 30px; + } + width: 100%; + } + } + } +} + +.tooltip { + color: #efefef; + font-size: 14px; + font-weight: 400; + line-height: 150%; + text-align: left; + width: 100%; + max-width: 400px; + padding: 12px; + border-radius: 8px; + border: 1px solid; + border-color: #494949; + background: #121511; + box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.1); + + &.light { + color: #494949; + border-color: #dfe0de; + background: #fff; + box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.1); + } + + @include mobile { + font-size: 12px; + padding: 8px; + width: calc(100% - 20px); + } +} diff --git a/src/pages/UniversalSwap/Swap/components/SwapWarningModal/index.tsx b/src/pages/UniversalSwap/Swap/components/SwapWarningModal/index.tsx new file mode 100644 index 00000000..5f1af492 --- /dev/null +++ b/src/pages/UniversalSwap/Swap/components/SwapWarningModal/index.tsx @@ -0,0 +1,60 @@ +import { isMobile } from '@walletconnect/browser-utils'; +import { ReactComponent as CloseIcon } from 'assets/icons/close-icon.svg'; +import { Button } from 'components/Button'; +import useOnClickOutside from 'hooks/useOnClickOutside'; +import { useRef } from 'react'; +import styles from './index.module.scss'; + +export type SwapWarningModalProps = { + open: boolean; + onClose: () => void; + onConfirm: () => void; + impact: number; +}; + +const SwapWarningModal = ({ open, onClose, onConfirm, impact }: SwapWarningModalProps) => { + const ref = useRef(null); + const mobileMode = isMobile(); + + useOnClickOutside(ref, () => { + onClose(); + }); + + const btnConfirmType = mobileMode ? 'primary-sm' : 'primary'; + const btnCancelType = mobileMode ? 'third-sm' : 'third'; + + if (!open) { + return null; + } + + return ( +
+
+ +
+
+ +
+ +
Confirmation
+ +
+
+ This swap has price impact over {impact}% , Are you sure you have + reviewed the swap detail? +
+
+
+ + +
+
+
+ ); +}; + +export default SwapWarningModal; diff --git a/src/pages/UniversalSwap/Swap/components/TooltipSwapBridge/index.tsx b/src/pages/UniversalSwap/Swap/components/TooltipSwapBridge/index.tsx index 1cf02b27..6b7cb086 100644 --- a/src/pages/UniversalSwap/Swap/components/TooltipSwapBridge/index.tsx +++ b/src/pages/UniversalSwap/Swap/components/TooltipSwapBridge/index.tsx @@ -4,15 +4,13 @@ import ArrowImg from 'assets/icons/arrow_right.svg'; export const TooltipSwapBridge = ({ type, pathChainId, - tokenInChainId, - tokenOutChainId, TokenInIcon, TokenOutIcon, NetworkFromIcon, NetworkToIcon, - info + symbolOut, + symbolIn }) => { - const isOraichain = (chainId) => chainId === 'Oraichain'; return (
{type === 'Swap' ? pathChainId : 'IBC Transfer'}
@@ -20,34 +18,26 @@ export const TooltipSwapBridge = ({
- {isOraichain(tokenInChainId) ? ( - TokenInIcon && - ) : ( - arrow - )} +
-
{info?.tokenIn}
+
{symbolIn}
arrow
- {isOraichain(type === 'Swap' ? tokenInChainId : tokenOutChainId) ? ( - TokenOutIcon && - ) : ( - arrow - )} +
{type === 'Swap' ? : }
-
{info?.tokenOut}
+
{symbolOut}
diff --git a/src/pages/UniversalSwap/Swap/hooks/useCalculateDataSwap.ts b/src/pages/UniversalSwap/Swap/hooks/useCalculateDataSwap.ts index 22d955b7..9778e768 100644 --- a/src/pages/UniversalSwap/Swap/hooks/useCalculateDataSwap.ts +++ b/src/pages/UniversalSwap/Swap/hooks/useCalculateDataSwap.ts @@ -9,6 +9,7 @@ import { getAverageRatio, getProtocolsSmartRoute, getRemoteDenom, + isAllowAlphaIbcWasm, isAllowAlphaSmartRouter, isAllowIBCWasm } from 'pages/UniversalSwap/helpers'; @@ -32,11 +33,18 @@ const useCalculateDataSwap = ({ originalFromToken, originalToToken, fromToken, t const fromTokenFee = useTokenFee(remoteTokenDenomFrom, fromToken.chainId, toToken.chainId); const toTokenFee = useTokenFee(remoteTokenDenomTo, fromToken.chainId, toToken.chainId); - const useAlphaSmartRoute = isAllowAlphaSmartRouter(); + const useAlphaIbcWasm = isAllowAlphaIbcWasm(originalFromToken, originalToToken); const useIbcWasm = isAllowIBCWasm(originalFromToken, originalToToken); const routerClient = new OraiswapRouterQueryClient(window.client, network.router); - const protocols = getProtocolsSmartRoute(originalFromToken, originalToToken, useIbcWasm); + const protocols = getProtocolsSmartRoute(originalFromToken, originalToToken, { useIbcWasm, useAlphaIbcWasm }); + const simulateOption = { + useAlphaIbcWasm, + useIbcWasm, + protocols, + maxSplits: useAlphaIbcWasm ? 1 : 10, + dontAllowSwapAfter: useAlphaIbcWasm ? [''] : undefined + }; const { relayerFee, relayerFeeInOraiToAmount: relayerFeeToken } = useRelayerFeeToken( originalFromToken, originalToToken @@ -62,9 +70,7 @@ const useCalculateDataSwap = ({ originalFromToken, originalToToken, fromToken, t routerClient, null, { - useAlphaSmartRoute, - useIbcWasm, - protocols + ...simulateOption } ); @@ -77,10 +83,8 @@ const useCalculateDataSwap = ({ originalFromToken, originalToToken, fromToken, t routerClient, SIMULATE_INIT_AMOUNT, { - useAlphaSmartRoute, - useIbcWasm, - protocols, - isAvgSimulate: isAvgSimulate.status + ...simulateOption, + ignoreFee: true } ); diff --git a/src/pages/UniversalSwap/Swap/hooks/useSimulate.ts b/src/pages/UniversalSwap/Swap/hooks/useSimulate.ts index 51f6b3e0..c4fd7d88 100644 --- a/src/pages/UniversalSwap/Swap/hooks/useSimulate.ts +++ b/src/pages/UniversalSwap/Swap/hooks/useSimulate.ts @@ -1,10 +1,28 @@ import { TokenItemType } from '@oraichain/oraidex-common'; import { OraiswapRouterReadOnlyInterface } from '@oraichain/oraidex-contracts-sdk'; -import { UniversalSwapHelper } from '@oraichain/oraidex-universal-swap'; +import { UniversalSwapHelper, RouterConfigSmartRoute } from '@oraichain/oraidex-universal-swap'; import { useQuery } from '@tanstack/react-query'; import { useEffect, useState } from 'react'; import { TokenInfo } from 'types/token'; import { useDebounce } from 'hooks/useDebounce'; + +export const getRouterConfig = (options?: { + path?: string; + protocols?: string[]; + dontAllowSwapAfter?: string[]; + maxSplits?: number; + ignoreFee?: boolean; +}) => { + return { + url: 'https://osor.oraidex.io', + path: options?.path ?? '/smart-router/alpha-router', + protocols: options?.protocols ?? ['Oraidex', 'OraidexV3'], + dontAllowSwapAfter: options?.dontAllowSwapAfter ?? ['Oraidex', 'OraidexV3'], + maxSplits: options?.maxSplits, + ignoreFee: options?.ignoreFee ?? false + }; +}; + /** * Simulate ratio between fromToken & toToken * @param queryKey @@ -24,8 +42,13 @@ export const useSimulate = ( simulateOption?: { useAlphaSmartRoute?: boolean; useIbcWasm?: boolean; - protocols?: string[]; + useAlphaIbcWasm?: boolean; isAvgSimulate?: boolean; + path?: string; + protocols?: string[]; + dontAllowSwapAfter?: string[]; + maxSplits?: number; + ignoreFee?: boolean; } ) => { const [[fromAmountToken, toAmountToken], setSwapAmount] = useState([initAmount || null, 0]); @@ -41,15 +64,10 @@ export const useSimulate = ( originalAmount: debouncedFromAmount, routerClient, routerOption: { - useAlphaSmartRoute: simulateOption?.useAlphaSmartRoute, + useAlphaIbcWasm: simulateOption?.useAlphaIbcWasm, useIbcWasm: simulateOption?.useIbcWasm }, - routerConfig: { - url: 'https://osor.oraidex.io', - path: '/smart-router/alpha-router', - protocols: simulateOption?.protocols ?? ['Oraidex', 'OraidexV3'], - dontAllowSwapAfter: ['Oraidex', 'OraidexV3'] - } + routerConfig: getRouterConfig(simulateOption) }); }, { diff --git a/src/pages/UniversalSwap/Swap/index.tsx b/src/pages/UniversalSwap/Swap/index.tsx index 4e39caba..ec2fa4a2 100644 --- a/src/pages/UniversalSwap/Swap/index.tsx +++ b/src/pages/UniversalSwap/Swap/index.tsx @@ -30,7 +30,7 @@ import Loader from 'components/Loader'; import LoadingBox from 'components/LoadingBox'; import { TToastType, displayToast } from 'components/Toasts/Toast'; import { flattenTokens } from 'config/bridgeTokens'; -import { chainIcons } from 'config/chainInfos'; +import { chainIcons, flattenTokensWithIcon } from 'config/chainInfos'; import { ethers } from 'ethers'; import { assert, @@ -56,6 +56,7 @@ import { getPathInfo, getTokenBalance, getTokenInfo, + isAllowAlphaIbcWasm, isAllowAlphaSmartRouter, isAllowIBCWasm, refreshBalances @@ -80,6 +81,7 @@ import { calcMaxAmount, isNegative, numberWithCommas } from 'helper/helpers'; import { TooltipSwapBridge } from './components/TooltipSwapBridge'; import TokenAndChainSelectors from './components/TokenAndChainSelectors'; import { SmartRouteModal } from '../Modals/SmartRouteModal'; +import SwapWarningModal from './components/SwapWarningModal'; // import SwapWarningModal from '../Component/SwapWarningModal'; const cx = cn.bind(styles); @@ -120,7 +122,7 @@ const SwapComponent: React.FC<{ const [openSmartRoute, setOpenSmartRoute] = useState(false); const [indSmartRoute, setIndSmartRoute] = useState([0, 0]); const [userSlippage, setUserSlippage] = useState(DEFAULT_SLIPPAGE); - // const [openSwapWarning, setOpenSwapWarning] = useState(false); + const [openSwapWarning, setOpenSwapWarning] = useState(false); // value state const [coe, setCoe] = useState(0); @@ -180,7 +182,7 @@ const SwapComponent: React.FC<{ const toTokenBalance = getTokenBalance(originalToToken, amounts, subAmountTo); const useIbcWasm = isAllowIBCWasm(originalFromToken, originalToToken); - const useAlphaSmartRouter = isAllowAlphaSmartRouter(); + const useAlphaIbcWasm = isAllowAlphaIbcWasm(originalFromToken, originalToToken); const settingRef = useRef(); const smartRouteRef = useRef(); @@ -282,8 +284,7 @@ const SwapComponent: React.FC<{ if (isSpecialFromCoingecko && originalFromToken.chainId === 'Oraichain') { const tokenInfo = getTokenOnOraichain(originalFromToken.coinGeckoId); - const IBC_DECIMALS = 18; - const fromTokenInOrai = getTokenOnOraichain(tokenInfo.coinGeckoId, IBC_DECIMALS); + const fromTokenInOrai = getTokenOnOraichain(tokenInfo.coinGeckoId, true); const [nativeAmount, cw20Amount] = await Promise.all([ window.client.getBalance(oraiAddress, fromTokenInOrai.denom), window.client.queryContractSmart(tokenInfo.contractAddress, { @@ -312,7 +313,7 @@ const SwapComponent: React.FC<{ } const isCustomRecipient = validAddress.isValid && addressTransfer !== initAddressTransfer; - const alphaSmartRoutes = useAlphaSmartRouter ? simulateData?.routes : undefined; + const alphaSmartRoutes = simulateData?.routes; const swapData = { sender: { cosmos: cosmosAddress, evm: checksumMetamaskAddress, tron: tronAddress }, @@ -334,7 +335,7 @@ const SwapComponent: React.FC<{ cosmosWallet: window.Keplr, evmWallet: new Metamask(window.tronWebDapp), swapOptions: { - isAlphaSmartRouter: useAlphaSmartRouter, + isAlphaIbcWasm: useAlphaIbcWasm, isIbcWasm: useIbcWasm } }); @@ -373,7 +374,7 @@ const SwapComponent: React.FC<{ toAmount: `${toAmountToken}`, fromNetwork: originalFromToken.chainId, toNetwork: originalToToken.chainId, - useAlphaSmartRouter, + useAlphaSmartRouter: true, priceOfFromTokenInUsd: usdPriceShowFrom, priceOfToTokenInUsd: usdPriceShowTo }; @@ -413,9 +414,9 @@ const SwapComponent: React.FC<{ return networks.filter((chainInfo) => chainInfo.chainId === 'Oraichain').map((chain) => chain.chainId); } - if (!originalFromToken.cosmosBased) { - return networks.filter((chainInfo) => chainInfo.chainId !== 'injective-1').map((chain) => chain.chainId); - } + // if (!originalFromToken.cosmosBased) { + // return networks.filter((chainInfo) => chainInfo.chainId !== 'injective-1').map((chain) => chain.chainId); + // } return []; }; @@ -562,7 +563,7 @@ const SwapComponent: React.FC<{ } ${originalToToken.name}`} - {!!isRoutersSwapData && useAlphaSmartRouter && !isPreviousSimulate && ( + {!!isRoutersSwapData && !isPreviousSimulate && ( arrow )} @@ -638,48 +639,51 @@ const SwapComponent: React.FC<{ {generateRatioComp()} - {!!isRoutersSwapData && useAlphaSmartRouter && !isPreviousSimulate && !!routersSwapData?.routes.length && ( -
-
- {routersSwapData?.routes.map((route, ind) => { - const volumn = Math.round( - new BigDecimal(route.returnAmount).div(routersSwapData.amount).mul(100).toNumber() - ); - return ( -
-
{volumn.toFixed(0)}%
- {route.paths.map((path, i, acc) => { - const { NetworkFromIcon, NetworkToIcon } = getPathInfo(path, chainIcons, assets); - return ( - -
-
-
-
setOpenSmartRoute(!openSmartRoute)} - > -
setIndSmartRoute([ind, i])} - > -
{}
-
{}
-
-
- {i === acc.length - 1 && ( + {!!isRoutersSwapData && + !!averageSimulateData?.displayAmount && + !isPreviousSimulate && + !!routersSwapData?.routes.length && ( +
+
+ {routersSwapData?.routes.map((route, ind) => { + const volumn = Math.round( + new BigDecimal(route.returnAmount).div(routersSwapData.amount).mul(100).toNumber() + ); + return ( +
+
{volumn.toFixed(0)}%
+ {route.paths.map((path, i, acc) => { + const { NetworkFromIcon, NetworkToIcon } = getPathInfo(path, chainIcons, assets); + return ( +
- )} - - ); - })} -
{volumn.toFixed(0)}%
-
- ); - })} - {/*
+
setOpenSmartRoute(!openSmartRoute)} + > +
setIndSmartRoute([ind, i])} + > +
{}
+
{}
+
+
+ {i === acc.length - 1 && ( +
+
+
+ )} + + ); + })} +
{volumn.toFixed(0)}%
+
+ ); + })} + {/*
Price Impact:
*/} +
-
- )} + )}
{ - // if (impactWarning > 10) return setOpenSwapWarning(true); + if (impactWarning > 5) return setOpenSwapWarning(true); handleSubmit(); }} disabled={disabledSwapBtn} @@ -871,19 +875,30 @@ const SwapComponent: React.FC<{
{openSmartRoute && [routersSwapData?.routes[indSmartRoute[0]]?.paths[indSmartRoute[1]]].map((path) => { - if (!path) return null; - const { NetworkFromIcon, NetworkToIcon, assetList, pathChainId } = getPathInfo( - path, - chainIcons, - assets - ); - return path.actions?.map((action, index, actions) => { - const { info, TokenInIcon, TokenOutIcon } = getTokenInfo(action, path, assetList); - const tokenInChainId = path.chainId; - const tokenOutChainId = path.tokenOutChainId; + const { NetworkFromIcon, NetworkToIcon, pathChainId } = getPathInfo(path, chainIcons, assets); + const flattenSmartRouters = UniversalSwapHelper.flattenSmartRouters([ + { + swapAmount: '0', + returnAmount: '0', + paths: [path] + } + ]); + return flattenSmartRouters?.map((action, index, actions) => { + const tokenInData = flattenTokensWithIcon.find((flat) => + [flat.denom, flat.contractAddress].filter(Boolean).includes(action.tokenIn) + ); + const TokenInIcon = tokenInData?.Icon; + const symbolIn = tokenInData?.name; + const tokenOutData = flattenTokensWithIcon.find((flat) => + [flat.denom, flat.contractAddress].filter(Boolean).includes(action.tokenOut) + ); + const TokenOutIcon = tokenOutData?.Icon; + const symbolOut = tokenOutData?.name; + const hasTypeConvert = actions.find((act) => act.type === 'Convert'); const width = hasTypeConvert ? actions.length - 1 : actions.length; if (action.type === 'Convert') return null; + return (
); @@ -928,7 +942,6 @@ const SwapComponent: React.FC<{ openSlippage={() => setOpenSetting(true)} closeSlippage={() => setOpenSetting(false)} /> - {/* setOpenSwapWarning(false)} open={openSwapWarning} @@ -937,7 +950,7 @@ const SwapComponent: React.FC<{ handleSubmit(); }} impact={impactWarning} - /> */} + />
); }; diff --git a/src/pages/UniversalSwap/helpers.ts b/src/pages/UniversalSwap/helpers.ts index 374dd54c..88f6972a 100644 --- a/src/pages/UniversalSwap/helpers.ts +++ b/src/pages/UniversalSwap/helpers.ts @@ -13,7 +13,8 @@ import { getTokenOnSpecificChainId, NetworkName, BigDecimal, - toAmount + toAmount, + COSMOS_CHAIN_ID_COMMON } from '@oraichain/oraidex-common'; import { UniversalSwapHelper @@ -368,11 +369,15 @@ export const getDisableSwap = ({ * @param useIbcWasm * @returns string */ -export const getProtocolsSmartRoute = (fromToken: TokenItemType, toToken: TokenItemType, useIbcWasm: boolean) => { +export const getProtocolsSmartRoute = ( + fromToken: TokenItemType, + toToken: TokenItemType, + { useAlphaIbcWasm, useIbcWasm } +) => { const protocols = ['Oraidex', 'OraidexV3']; - if (useIbcWasm) return protocols; + if (useIbcWasm && !useAlphaIbcWasm) return protocols; - const allowOsmosisProtocols = ['injective-1', 'Neutaro-1', 'noble-1', 'osmosis-1', 'cosmoshub-4']; + const allowOsmosisProtocols = ['injective-1', 'Neutaro-1', 'noble-1', 'osmosis-1', 'cosmoshub-4', 'celestia']; const isAllowOsmosisProtocol = allowOsmosisProtocols.includes(fromToken.chainId) || allowOsmosisProtocols.includes(toToken.chainId); @@ -416,6 +421,9 @@ export const isAllowIBCWasm = (fromToken: TokenItemType, toToken: TokenItemType) const toTokenIsOraichain = toToken.chainId === 'Oraichain'; const toTokenIsCosmos = toToken.cosmosBased; + // from chainId and to chainId is CELESTIA_CHAIN_ID + if ([toToken.chainId, fromToken.chainId].includes(COSMOS_CHAIN_ID_COMMON.CELESTIA_CHAIN_ID)) return false; + // Oraichain -> Oraichain or Cosmos if (fromTokenIsOraichain) { if (toToken.chainId == 'Neutaro-1') return true; @@ -426,7 +434,18 @@ export const isAllowIBCWasm = (fromToken: TokenItemType, toToken: TokenItemType) // Evm -> EVM if (!fromTokenIsCosmos && !toTokenIsCosmos && toToken.chainId === fromToken.chainId) return false; // Evm -> Oraichain or Cosmos - if (!fromTokenIsCosmos) return true; + if (!fromTokenIsCosmos) { + // Evm -> INJ or TIA + if ( + toToken.chainId === COSMOS_CHAIN_ID_COMMON.INJECTVE_CHAIN_ID || + toToken.chainId === COSMOS_CHAIN_ID_COMMON.CELESTIA_CHAIN_ID + ) { + return false; + } + + return true; + } + // Cosmos -> Cosmos or Oraichain if (fromTokenIsCosmos && toTokenIsCosmos) { const key = [fromToken, toToken].map((e) => e.chainId).join('-'); @@ -440,6 +459,19 @@ export const isAllowIBCWasm = (fromToken: TokenItemType, toToken: TokenItemType) return false; }; +export const isAllowAlphaIbcWasm = (fromToken: TokenItemType, toToken: TokenItemType) => { + if ( + !fromToken.cosmosBased && + (toToken.chainId === COSMOS_CHAIN_ID_COMMON.INJECTVE_CHAIN_ID || + toToken.chainId === COSMOS_CHAIN_ID_COMMON.CELESTIA_CHAIN_ID) + ) + return true; + + // from chainId and to chainId is CELESTIA_CHAIN_ID + if ([toToken.chainId, fromToken.chainId].includes(COSMOS_CHAIN_ID_COMMON.CELESTIA_CHAIN_ID)) return true; + return false; +}; + export const getAverageRatio = ( simulateData: SimulateResponse, averageSimulateData: SimulateResponse, diff --git a/yarn.lock b/yarn.lock index c9aca70c..c04940e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3032,10 +3032,10 @@ react-use "^17.4.0" react-use-websocket "^4.5.0" -"@oraichain/oraidex-common@^1.0.91": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@oraichain/oraidex-common/-/oraidex-common-1.1.6.tgz#e5fbc8edd911f8c6924b87ce0fe75cc5a3b484f4" - integrity sha512-XUTpvukbtff6UkK25kfE+wHxraFeum6QDZOnHy0k/VVv44FUUlWzWyo/h/D85LyDuKD4u01ryHMmU8XR7M0X7w== +"@oraichain/oraidex-common@^1.1.21": + version "1.1.23" + resolved "https://registry.yarnpkg.com/@oraichain/oraidex-common/-/oraidex-common-1.1.23.tgz#7f9b57182972dc4f2f3a9a1fe103c0b12b24fec8" + integrity sha512-f7JYAWZH0Hb0UAH1df5oORWZXeiEIX3gN1a5e+udUDuTqexzC2kVJ5TZyj4KDgJo6JyEjVr10zrzWm+tcFR4fg== dependencies: "@cosmjs/amino" "0.31.3" "@cosmjs/cosmwasm-stargate" "0.31.3" @@ -3074,19 +3074,30 @@ resolved "https://registry.yarnpkg.com/@oraichain/oraidex-contracts-sdk/-/oraidex-contracts-sdk-1.0.44.tgz#9ff41ec388dd92ba112c2eef545d11fd6e18c684" integrity sha512-fMY/QOzO/afPlAVkLGH1bcpJTs6V/URrJju2r4UoE9f5HUWC/6OC6+H5dWuIgq26frp8wjH23mNCQAlmHzji8g== -"@oraichain/oraidex-universal-swap@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@oraichain/oraidex-universal-swap/-/oraidex-universal-swap-1.1.4.tgz#134019ac5c69d6be5aca58380f982375a94f3d54" - integrity sha512-XkJRQWG6n1YYKRFcVGpjRTKS0sU60jgxwJB4lj0SgP5M2Kd1WsBCBj0dw44QxwZMm3Lzw9rufDzNgGWJZMGvAQ== +"@oraichain/oraidex-universal-swap@1.1.14": + version "1.1.14" + resolved "https://registry.yarnpkg.com/@oraichain/oraidex-universal-swap/-/oraidex-universal-swap-1.1.14.tgz#6c1deb0a85dec6acae9bb8bb7c7b3da32b24b946" + integrity sha512-YrtrdYu8Nt8HjK49C5ZYNV7thqMxz5okvTLYFAIav75WcDTHWAWWw2RY70J9lzT3zAkXmSHYrb28zFpUUElGIw== dependencies: "@oraichain/common" "^1.0.3" - "@oraichain/oraidex-common" "^1.0.91" + "@oraichain/oraidex-common" "^1.1.21" "@oraichain/oraidex-contracts-sdk" "^1.0.49" + "@oraichain/osor-api-contracts-sdk" "^1.0.2" bech32 "1.1.4" ethers "^5.0.15" tronweb "5.3.2" ts-protoc-gen "^0.15.0" +"@oraichain/osor-api-contracts-sdk@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@oraichain/osor-api-contracts-sdk/-/osor-api-contracts-sdk-1.0.2.tgz#8aec43cfdb2df93cfa50538779f8eee550b94738" + integrity sha512-s4ebEgAN34rfnpz3l6qW75F9uKu3gwQTvUNPy+aYtpbkpjanY2Kke1lSt8QS0805Vb47ZfbIumsWLWzsi/4afg== + dependencies: + "@cosmjs/amino" "0.31.3" + "@cosmjs/cosmwasm-stargate" "0.31.3" + "@cosmjs/crypto" "0.31.3" + "@cosmjs/proto-signing" "0.31.3" + "@oraichain/wasm-json-toolkit@^1.0.24": version "1.0.24" resolved "https://registry.yarnpkg.com/@oraichain/wasm-json-toolkit/-/wasm-json-toolkit-1.0.24.tgz#e9a431560e8e946fbb7ec257e5f13d9320ffd23a"