From a4f31b4512941256996eee8e482fb6d0379804ba Mon Sep 17 00:00:00 2001 From: perfogic Date: Mon, 29 Jul 2024 16:29:36 +0700 Subject: [PATCH 1/5] add check minimum bridge fee and update contracts --- assets/icons/token.tsx | 20 ++++++++++++ components/page/bridge/constants.ts | 2 ++ components/page/bridge/index.tsx | 38 +++++++++++++++++----- constants/networks.ts | 16 ++++------ constants/tokens.ts | 49 ++++++++++++++++------------- 5 files changed, 85 insertions(+), 40 deletions(-) diff --git a/assets/icons/token.tsx b/assets/icons/token.tsx index b1d3338..fa46589 100644 --- a/assets/icons/token.tsx +++ b/assets/icons/token.tsx @@ -23,6 +23,26 @@ export const UsdcIcon = () => { ); }; +export const TetherIcon = () => { + return ( + + + + ); +}; + export const UsdtIcon = () => { return ( { const oraiAddress = useAuthOraiAddress(); @@ -91,6 +93,7 @@ const Bridge = () => { jettonWalletAddress: null, }); const [deductNativeAmount, setDeductNativeAmount] = useState(0n); + const { data: prices } = useCoinGeckoPrices(); const destinationAddress = toNetwork.id === NetworkList.oraichain.id @@ -194,6 +197,16 @@ const Bridge = () => { const handleCheckBalanceBridgeOfOraichain = async (token: TokenType) => { try { if (token) { + if (!token.contractAddress) { + const data = await window.client.getBalance( + network.CW_TON_BRIDGE, + token.denom + ); + return { + balance: data.amount, + }; + } + const tx = await window.client.queryContractSmart( token.contractAddress, { @@ -226,6 +239,19 @@ const Bridge = () => { return toDisplay(balance || 0, token.decimal || CW20_DECIMALS); }; + const validatePrice = (token: TokenType, amount: number) => { + const usdPrice = new BigDecimal(amount || 0) + .mul(prices?.[token?.coingeckoId] || 0) + .toNumber(); + + if (usdPrice < MINIMUM_BRIDGE_PER_USD) { + const minimumAmount = Math.ceil( + (MINIMUM_BRIDGE_PER_USD / usdPrice) * amount + ); + throw Error(`Minimum bridge is ${minimumAmount} ${token.symbol}`); + } + }; + const handleBridgeFromTon = async () => { try { if (!oraiAddress) { @@ -240,6 +266,8 @@ const Bridge = () => { throw "Not valid!"; } + validatePrice(token, amount); + setLoading(true); const tokenInOrai = OraichainTokenList.find( @@ -255,10 +283,6 @@ const Bridge = () => { throw `The bridge contract does not have enough balance to process this bridge transaction. Wanted ${amount} ${token.symbol}, have ${balanceMax} ${token.symbol}`; } - if (Number(amount) < 100) { - throw Error("Minimum bridge is 100 USDT"); - } - const bridgeAdapterAddress = Address.parse( TonInteractionContract[tonNetwork].bridgeAdapter ); @@ -370,6 +394,8 @@ const Bridge = () => { throw "Not valid!"; } + validatePrice(token, amount); + setLoading(true); const tokenInTon = TonTokenList(TonNetwork.Mainnet).find( @@ -395,10 +421,6 @@ const Bridge = () => { throw `The bridge contract does not have enough balance to process this bridge transaction. Wanted ${amount} ${token.symbol}, have ${displayBalance} ${token.symbol}`; } - if (Number(amount) < 100) { - throw Error("Minimum bridge is 100 USDT"); - } - const tonBridgeClient = new TonbridgeBridgeClient( window.client, oraiAddress, diff --git a/constants/networks.ts b/constants/networks.ts index acf04ff..d09fc7e 100644 --- a/constants/networks.ts +++ b/constants/networks.ts @@ -14,7 +14,7 @@ export const TonInteractionContract = { [TonNetwork.Mainnet]: { lightClient: "EQDt5RAUICxUeHaNicwspH8obI__z3X0UHy6vv1xhpi3AbfT", whitelist: "EQATDM6mfPZjPDMD9TVa6D9dlbmAKY5w6xOJiTXJ9Nqj_dsu", - bridgeAdapter: "EQC-aFP0rJXwTgKZQJPbPfTSpBFc8wxOgKHWD9cPvOl_DnaY", + bridgeAdapter: "EQASlo5_ZTuknZ5oZkM7RmPXN2oNOKk3usg4NMYBDf2VsTwk", }, [TonNetwork.Testnet]: { lightClient: "", @@ -28,18 +28,12 @@ export const TON_ADDRESS_CONTRACT = export const TonTokensContract = { [TonNetwork.Mainnet]: { - usdt: "EQBynBO23ywHy_CgarY9NK9FTz0yDsG82PtcbSTQgGoXwiuA", - // btc: "EQDcBkGHmC4pTf34x3Gm05XvepO5w60DNxZ-XT4I6-UGG5L5", - // dai: "EQDo_ZJyQ_YqBzBwbVpMmhbhIddKtRP99HugZJ14aFscxi7B", - // usdc: "EQB-MPwrd1G6WKNkLz_VnV6WqBDd142KMQv-g1O-8QUA3728", - // ton: TON_ADDRESS_CONTRACT, + usdt: "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs", + ton: TON_ADDRESS_CONTRACT, }, [TonNetwork.Testnet]: { usdt: "EQA5FnPP13uZPJQq7aj6UHLEukJJZSZW053cU1Wu6R6BpYYB", - // btc: "", - // dai: "", - // usdc: "", - // ton: null, + ton: null, }, }; @@ -58,4 +52,6 @@ export const network = { explorer: "https://scan.orai.io", CW_TON_BRIDGE: "orai159l8l9c5ckhqpuwdfgs9p4v599nqt3cjlfahalmtrhfuncnec2ms5mz60e", + TOKEN_FACTORY: + "orai17hyr3eg92fv34fdnkend48scu32hn26gqxw3hnwkfy904lk9r09qqzty42", }; diff --git a/constants/tokens.ts b/constants/tokens.ts index 33905b2..1272fb3 100644 --- a/constants/tokens.ts +++ b/constants/tokens.ts @@ -1,6 +1,11 @@ -import { UsdcIcon, UsdtIcon } from "@/assets/icons/token"; +import { UsdcIcon, UsdtIcon, TetherIcon } from "@/assets/icons/token"; import { USDC_CONTRACT, USDT_CONTRACT } from "@oraichain/oraidex-common"; -import { CW20_TON_CONTRACT, TonNetwork, TonTokensContract } from "./networks"; +import { + CW20_TON_CONTRACT, + network, + TonNetwork, + TonTokensContract, +} from "./networks"; import { TonNetworkICon } from "@/assets/icons/network"; export type TokenType = { @@ -32,22 +37,22 @@ export const OraichainTokenList: TokenType[] = [ // coingeckoId: "usd-coin", // decimal: 6, // }, - // { - // name: "Ton", - // symbol: "TON", - // Icon: TonNetworkICon, - // contractAddress: CW20_TON_CONTRACT, - // denom: "cw20_ton", - // coingeckoId: "the-open-network", - // decimal: 6, - // }, + { + name: "Ton", + symbol: "TON", + Icon: TonNetworkICon, + contractAddress: null, + denom: `factory/${network.TOKEN_FACTORY}/ton`, + coingeckoId: "the-open-network", + decimal: 6, + }, ]; export const TonTokenList = (network: TonNetwork): TokenType[] => [ { name: "Tether", - symbol: "jUSDT", - Icon: UsdtIcon, + symbol: "USDT", + Icon: TetherIcon, contractAddress: TonTokensContract[network].usdt, denom: "ton20_usdt", coingeckoId: "tether", @@ -62,13 +67,13 @@ export const TonTokenList = (network: TonNetwork): TokenType[] => [ // coingeckoId: "usd-coin", // decimal: 6, // }, - // { - // name: "Ton", - // symbol: "TON", - // Icon: TonNetworkICon, - // contractAddress: TonTokensContract[network].ton, - // denom: "ton", - // coingeckoId: "the-open-network", - // decimal: 9, - // }, + { + name: "Ton", + symbol: "TON", + Icon: TonNetworkICon, + contractAddress: TonTokensContract[network].ton, + denom: "ton", + coingeckoId: "the-open-network", + decimal: 9, + }, ]; From 6f2436fb8f9d0744e90bff7e77652f38f945f813 Mon Sep 17 00:00:00 2001 From: perfogic Date: Mon, 29 Jul 2024 17:52:10 +0700 Subject: [PATCH 2/5] update tokens --- constants/tokens.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/constants/tokens.ts b/constants/tokens.ts index 1272fb3..ffcd24b 100644 --- a/constants/tokens.ts +++ b/constants/tokens.ts @@ -42,9 +42,9 @@ export const OraichainTokenList: TokenType[] = [ symbol: "TON", Icon: TonNetworkICon, contractAddress: null, - denom: `factory/${network.TOKEN_FACTORY}/ton`, + denom: `factory/${network.TOKEN_FACTORY}/XuanDang`, coingeckoId: "the-open-network", - decimal: 6, + decimal: 9, }, ]; From a6cd5337ff7af1b29b02f48a0d23874efb0528b2 Mon Sep 17 00:00:00 2001 From: perfogic Date: Tue, 30 Jul 2024 00:42:47 +0700 Subject: [PATCH 3/5] fix fetch native ton denom and fix circle importation --- .../bridge/components/inputBridge/index.tsx | 2 +- components/page/bridge/constants.ts | 4 +- components/page/bridge/hooks/useGetFee.ts | 3 +- components/page/bridge/index.tsx | 34 +++++++------- constants/chainInfo.ts | 11 ++++- constants/contract.ts | 33 +++++++++++++ constants/networks.ts | 44 ++---------------- constants/tokens.ts | 34 +++----------- constants/ton.ts | 4 ++ contexts/app-provider.tsx | 3 +- contexts/ton-provider.tsx | 2 +- hooks/useLoadToken.ts | 46 ++++++------------- libs/utils.ts | 4 +- 13 files changed, 98 insertions(+), 126 deletions(-) create mode 100644 constants/contract.ts diff --git a/components/page/bridge/components/inputBridge/index.tsx b/components/page/bridge/components/inputBridge/index.tsx index 39f5ce5..5675ef3 100644 --- a/components/page/bridge/components/inputBridge/index.tsx +++ b/components/page/bridge/components/inputBridge/index.tsx @@ -5,7 +5,7 @@ import { ArrowDownIcon } from "@/assets/icons/arrow"; import { SelectOptionIcon } from "@/assets/icons/network"; import SelectCommon from "@/components/commons/select"; import { AMOUNT_BALANCE_ENTRIES_UNIVERSAL_SWAP } from "@/constants/config"; -import { TonNetwork } from "@/constants/networks"; +import { TonNetwork } from "@/constants/ton"; import { OraichainTokenList, TonTokenList } from "@/constants/tokens"; import { numberWithCommas } from "@/helper/number"; import { useCoinGeckoPrices } from "@/hooks/useCoingecko"; diff --git a/components/page/bridge/constants.ts b/components/page/bridge/constants.ts index 335fe13..4e8469e 100644 --- a/components/page/bridge/constants.ts +++ b/components/page/bridge/constants.ts @@ -1,10 +1,10 @@ import { toNano } from "@ton/core"; -const FWD_AMOUNT = toNano(0.1); +const FWD_AMOUNT = toNano(0.15); const TON_MESSAGE_VALID_UNTIL = 100000; const BRIDGE_TON_TO_ORAI_MINIMUM_GAS = toNano(1); const EXTERNAL_MESSAGE_FEE = toNano(0.01); -const MINIMUM_BRIDGE_PER_USD = 100; +const MINIMUM_BRIDGE_PER_USD = 0.001; export { FWD_AMOUNT, diff --git a/components/page/bridge/hooks/useGetFee.ts b/components/page/bridge/hooks/useGetFee.ts index fe5703c..9ce3e84 100644 --- a/components/page/bridge/hooks/useGetFee.ts +++ b/components/page/bridge/hooks/useGetFee.ts @@ -1,4 +1,5 @@ -import { network, TonNetwork } from "@/constants/networks"; +import { TonNetwork } from "@/constants/ton"; +import { network } from "@/constants/networks"; import { TokenType, TonTokenList } from "@/constants/tokens"; import { useAuthOraiAddress } from "@/stores/authentication/selector"; import { BigDecimal, toDisplay } from "@oraichain/oraidex-common"; diff --git a/components/page/bridge/index.tsx b/components/page/bridge/index.tsx index 55a174b..2ada40e 100644 --- a/components/page/bridge/index.tsx +++ b/components/page/bridge/index.tsx @@ -6,13 +6,9 @@ import { OraiIcon } from "@/assets/icons/token"; import Loader from "@/components/commons/loader/Loader"; import ConnectButton from "@/components/layout/connectButton"; import { TON_SCAN } from "@/constants/config"; -import mixpanel from "mixpanel-browser"; -import { - TON_ADDRESS_CONTRACT, - TonInteractionContract, - TonNetwork, - network, -} from "@/constants/networks"; +import { TonNetwork } from "@/constants/ton"; +import { TON_ZERO_ADDRESS, TonInteractionContract } from "@/constants/contract"; +import { network } from "@/constants/networks"; import { OraichainTokenList, TokenType, @@ -112,7 +108,7 @@ const Bridge = () => { useEffect(() => { if ( toNetwork.id == NetworkList.oraichain.id && - token?.contractAddress === TON_ADDRESS_CONTRACT + token?.contractAddress === TON_ZERO_ADDRESS ) { setDeductNativeAmount(BRIDGE_TON_TO_ORAI_MINIMUM_GAS); return; @@ -131,7 +127,7 @@ const Bridge = () => { const client = new TonClient({ endpoint, }); - if (token?.contractAddress === TON_ADDRESS_CONTRACT) { + if (token?.contractAddress === TON_ZERO_ADDRESS) { setDeductNativeAmount(BRIDGE_TON_TO_ORAI_MINIMUM_GAS); setTokenInfo({ jettonWalletAddress: "", @@ -167,7 +163,7 @@ const Bridge = () => { const bridgeAdapter = TonInteractionContract[TonNetwork.Mainnet].bridgeAdapter; - if (token.contractAddress === TON_ADDRESS_CONTRACT) { + if (token.contractAddress === TON_ZERO_ADDRESS) { const balance = await client.getBalance(Address.parse(bridgeAdapter)); return { @@ -244,10 +240,10 @@ const Bridge = () => { .mul(prices?.[token?.coingeckoId] || 0) .toNumber(); - if (usdPrice < MINIMUM_BRIDGE_PER_USD) { - const minimumAmount = Math.ceil( - (MINIMUM_BRIDGE_PER_USD / usdPrice) * amount - ); + const minimumAmount = + Math.ceil((MINIMUM_BRIDGE_PER_USD * amount * 1000) / usdPrice) / 1000; + + if (amount < minimumAmount) { throw Error(`Minimum bridge is ${minimumAmount} ${token.symbol}`); } }; @@ -278,7 +274,10 @@ const Bridge = () => { tokenInOrai ); - if (Number(balanceMax) < Number(amount)) { + if ( + Number(balanceMax) < Number(amount) && + token.contractAddress !== TON_ZERO_ADDRESS + ) { setLoading(false); throw `The bridge contract does not have enough balance to process this bridge transaction. Wanted ${amount} ${token.symbol}, have ${balanceMax} ${token.symbol}`; } @@ -287,8 +286,7 @@ const Bridge = () => { TonInteractionContract[tonNetwork].bridgeAdapter ); const fmtAmount = new BigDecimal(10).pow(token.decimal).mul(amount); - const isNativeTon: boolean = - token.contractAddress === TON_ADDRESS_CONTRACT; + const isNativeTon: boolean = token.contractAddress === TON_ZERO_ADDRESS; const toAddress: string = isNativeTon ? bridgeAdapterAddress.toString() : tokenInfo.jettonWalletAddress?.toString(); @@ -416,7 +414,7 @@ const Bridge = () => { tokenInTon?.decimal || CW20_DECIMALS ); - if (displayBalance < Number(amount)) { + if (displayBalance < Number(amount) && token.contractAddress !== null) { setLoading(false); throw `The bridge contract does not have enough balance to process this bridge transaction. Wanted ${amount} ${token.symbol}, have ${displayBalance} ${token.symbol}`; } diff --git a/constants/chainInfo.ts b/constants/chainInfo.ts index c5b55a3..2b4274f 100644 --- a/constants/chainInfo.ts +++ b/constants/chainInfo.ts @@ -58,6 +58,8 @@ import { WRAP_TRON_TRX_CONTRACT, defaultBech32Config, } from "@oraichain/oraidex-common"; +import { TonNetworkICon } from "@/assets/icons/network"; +import { TON_DENOM } from "./tokens"; export const OraiToken: BridgeAppCurrency = { coinDenom: "ORAI", @@ -86,12 +88,18 @@ export const oraichainNetwork: CustomChainInfo = { }, bech32Config: defaultBech32Config("orai"), feeCurrencies: [OraiToken], - Icon: OraiIcon, IconLight: OraiIcon, features: ["ibc-transfer", "cosmwasm", "wasmd_0.24+"], currencies: [ OraiToken, + { + coinDenom: "TON", + coinGeckoId: "the-open-network", + coinMinimalDenom: TON_DENOM, + coinDecimals: 9, + Icon: TonNetworkICon, + }, { coinDenom: "ATOM", coinGeckoId: "cosmos", @@ -173,6 +181,7 @@ export const oraichainNetwork: CustomChainInfo = { coinDecimals: 18, // Icon: MilkyIcon }, + { coinDenom: "MILKY", coinGeckoId: "milky-token", diff --git a/constants/contract.ts b/constants/contract.ts new file mode 100644 index 0000000..9526a8b --- /dev/null +++ b/constants/contract.ts @@ -0,0 +1,33 @@ +import { TonNetwork } from "./ton"; + +export const TonInteractionContract = { + [TonNetwork.Mainnet]: { + lightClient: "EQDt5RAUICxUeHaNicwspH8obI__z3X0UHy6vv1xhpi3AbfT", + whitelist: "EQATDM6mfPZjPDMD9TVa6D9dlbmAKY5w6xOJiTXJ9Nqj_dsu", + bridgeAdapter: "EQASlo5_ZTuknZ5oZkM7RmPXN2oNOKk3usg4NMYBDf2VsTwk", + }, + [TonNetwork.Testnet]: { + lightClient: "", + whitelist: "EQD2xPIqdeggqtP3q852Y-7yD-RRHi12Zy7M4iUx4-7q0E1", + bridgeAdapter: "EQDZfQX89gMo3HAiW1tSK9visb2gouUvDCt6PODo3qkXKeox", + }, +}; + +export const TON_ZERO_ADDRESS = + "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c"; + +export const TonTokensContract = { + [TonNetwork.Mainnet]: { + usdt: "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs", + ton: TON_ZERO_ADDRESS, + }, + [TonNetwork.Testnet]: { + usdt: "EQA5FnPP13uZPJQq7aj6UHLEukJJZSZW053cU1Wu6R6BpYYB", + ton: TON_ZERO_ADDRESS, + }, +}; + +export const CW_TON_BRIDGE = + "orai1f8yer2astssamnyzzp6yvk6q5h49kzj2gu0n7rct8uj38pswy7lqwa8mdw"; +export const TOKEN_FACTORY = + "orai17hyr3eg92fv34fdnkend48scu32hn26gqxw3hnwkfy904lk9r09qqzty42"; diff --git a/constants/networks.ts b/constants/networks.ts index d09fc7e..36e2e32 100644 --- a/constants/networks.ts +++ b/constants/networks.ts @@ -4,41 +4,7 @@ import { ROUTER_V2_CONTRACT, } from "@oraichain/oraidex-common"; import { oraichainNetwork } from "./chainInfo"; - -export enum TonNetwork { - Mainnet = "mainnet", - Testnet = "testnet", -} - -export const TonInteractionContract = { - [TonNetwork.Mainnet]: { - lightClient: "EQDt5RAUICxUeHaNicwspH8obI__z3X0UHy6vv1xhpi3AbfT", - whitelist: "EQATDM6mfPZjPDMD9TVa6D9dlbmAKY5w6xOJiTXJ9Nqj_dsu", - bridgeAdapter: "EQASlo5_ZTuknZ5oZkM7RmPXN2oNOKk3usg4NMYBDf2VsTwk", - }, - [TonNetwork.Testnet]: { - lightClient: "", - whitelist: "EQD2xPIqdeggqtP3q852Y-7yD-RRHi12Zy7M4iUx4-7q0E1", - bridgeAdapter: "EQDZfQX89gMo3HAiW1tSK9visb2gouUvDCt6PODo3qkXKeox", - }, -}; - -export const TON_ADDRESS_CONTRACT = - "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c"; - -export const TonTokensContract = { - [TonNetwork.Mainnet]: { - usdt: "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs", - ton: TON_ADDRESS_CONTRACT, - }, - [TonNetwork.Testnet]: { - usdt: "EQA5FnPP13uZPJQq7aj6UHLEukJJZSZW053cU1Wu6R6BpYYB", - ton: null, - }, -}; - -export const CW20_TON_CONTRACT = - "orai1v5msmzjhyrf0285fyhfwg7uxk4yzdhrn6srvf8jf27dz8uuvu3mstj78qt"; +import { CW_TON_BRIDGE, TOKEN_FACTORY } from "./contract"; export const network = { ...oraichainNetwork, @@ -46,12 +12,10 @@ export const network = { denom: "orai", coinType: oraichainNetwork.bip44.coinType, fee: { gasPrice: "0.00506", amount: "1518", gas: "2000000" }, // 0.000500 ORAI + explorer: "https://scan.orai.io", router: ROUTER_V2_CONTRACT, oracle: ORACLE_CONTRACT, multicall: MULTICALL_CONTRACT, - explorer: "https://scan.orai.io", - CW_TON_BRIDGE: - "orai159l8l9c5ckhqpuwdfgs9p4v599nqt3cjlfahalmtrhfuncnec2ms5mz60e", - TOKEN_FACTORY: - "orai17hyr3eg92fv34fdnkend48scu32hn26gqxw3hnwkfy904lk9r09qqzty42", + CW_TON_BRIDGE: CW_TON_BRIDGE, + TOKEN_FACTORY: TOKEN_FACTORY, }; diff --git a/constants/tokens.ts b/constants/tokens.ts index ffcd24b..61e7310 100644 --- a/constants/tokens.ts +++ b/constants/tokens.ts @@ -1,11 +1,7 @@ -import { UsdcIcon, UsdtIcon, TetherIcon } from "@/assets/icons/token"; -import { USDC_CONTRACT, USDT_CONTRACT } from "@oraichain/oraidex-common"; -import { - CW20_TON_CONTRACT, - network, - TonNetwork, - TonTokensContract, -} from "./networks"; +import { TonNetwork } from "./ton"; +import { TonTokensContract } from "./contract"; +import { UsdtIcon, TetherIcon } from "@/assets/icons/token"; +import { USDT_CONTRACT } from "@oraichain/oraidex-common"; import { TonNetworkICon } from "@/assets/icons/network"; export type TokenType = { @@ -18,6 +14,8 @@ export type TokenType = { decimal: number; }; +export const TON_DENOM = `factory/orai17hyr3eg92fv34fdnkend48scu32hn26gqxw3hnwkfy904lk9r09qqzty42/XuanDang`; + export const OraichainTokenList: TokenType[] = [ { name: "Tether", @@ -28,21 +26,12 @@ export const OraichainTokenList: TokenType[] = [ coingeckoId: "tether", decimal: 6, }, - // { - // name: "USD Coin", - // symbol: "USDC", - // Icon: UsdcIcon, - // contractAddress: USDC_CONTRACT, - // denom: "usdc", - // coingeckoId: "usd-coin", - // decimal: 6, - // }, { name: "Ton", symbol: "TON", Icon: TonNetworkICon, contractAddress: null, - denom: `factory/${network.TOKEN_FACTORY}/XuanDang`, + denom: TON_DENOM, coingeckoId: "the-open-network", decimal: 9, }, @@ -58,15 +47,6 @@ export const TonTokenList = (network: TonNetwork): TokenType[] => [ coingeckoId: "tether", decimal: 6, }, - // { - // name: "USD Coin", - // symbol: "USDC", - // Icon: UsdcIcon, - // contractAddress: TonTokensContract[network].usdc, - // denom: "ton20_usdc", - // coingeckoId: "usd-coin", - // decimal: 6, - // }, { name: "Ton", symbol: "TON", diff --git a/constants/ton.ts b/constants/ton.ts index e69de29..a4fa5b7 100644 --- a/constants/ton.ts +++ b/constants/ton.ts @@ -0,0 +1,4 @@ +export enum TonNetwork { + Mainnet = "mainnet", + Testnet = "testnet", +} diff --git a/contexts/app-provider.tsx b/contexts/app-provider.tsx index 2ab0047..c37d4ed 100644 --- a/contexts/app-provider.tsx +++ b/contexts/app-provider.tsx @@ -1,6 +1,7 @@ "use client"; -import { TonNetwork, network } from "@/constants/networks"; +import { TonNetwork } from "@/constants/ton"; +import { network } from "@/constants/networks"; import { useLoadToken, useLoadTonBalance } from "@/hooks/useLoadToken"; import { getCosmWasmClient } from "@/libs/cosmjs"; import Keplr from "@/libs/keplr"; diff --git a/contexts/ton-provider.tsx b/contexts/ton-provider.tsx index 11cef80..205f398 100644 --- a/contexts/ton-provider.tsx +++ b/contexts/ton-provider.tsx @@ -1,7 +1,7 @@ "use client"; +import { TonNetwork } from "@/constants/ton"; import { MANIFEST_URL } from "@/constants/config"; -import { TonNetwork } from "@/constants/networks"; import { useLoadTonBalance } from "@/hooks/useLoadToken"; import { useAuthTonAddress } from "@/stores/authentication/selector"; import { TonConnectUIProvider } from "@tonconnect/ui-react"; diff --git a/hooks/useLoadToken.ts b/hooks/useLoadToken.ts index ee30eca..76c282d 100644 --- a/hooks/useLoadToken.ts +++ b/hooks/useLoadToken.ts @@ -6,13 +6,9 @@ import { tokenMap, } from "@/constants/bridgeTokens"; import { chainInfos } from "@/constants/chainInfo"; -import { - CW20_TON_CONTRACT, - TON_ADDRESS_CONTRACT, - TonNetwork, - TonTokensContract, - network, -} from "@/constants/networks"; +import { TonNetwork } from "@/constants/ton"; +import { TON_ZERO_ADDRESS, TonTokensContract } from "@/constants/contract"; +import { network } from "@/constants/networks"; import { TonTokenList } from "@/constants/tokens"; import { genAddressCosmos, handleCheckWallet } from "@/helper"; import { useAmountsCache, useTokenActions } from "@/stores/token/selector"; @@ -41,7 +37,7 @@ async function loadNativeBalance( let amountDetails: AmountDetails = {}; // reset native balances - cosmosTokens + [...cosmosTokens] .filter((t) => t.chainId === tokenInfo.chainId && !t.contractAddress) .forEach((t) => { amountDetails[t.denom] = "0"; @@ -93,19 +89,7 @@ async function loadCw20Balance( if (!address) return; // get all cw20 token contract - const cw20Tokens = [ - ...[ - ...oraichainTokens, - { - name: "Ton", - symbol: "TON", - contractAddress: CW20_TON_CONTRACT, - denom: "cw20_ton", - coingeckoId: "the-open-network", - decimal: 9, - }, - ].filter((t) => t.contractAddress), - ]; + const cw20Tokens = [...[...oraichainTokens].filter((t) => t.contractAddress)]; const data = toBinary({ balance: { address }, @@ -149,14 +133,14 @@ async function loadCw20BalanceWithSpecificTokens( const cw20Tokens = [ ...[ ...oraichainTokens, - { - name: "Ton", - symbol: "TON", - contractAddress: CW20_TON_CONTRACT, - denom: "cw20_ton", - coingeckoId: "the-open-network", - decimal: 9, - }, + // { + // name: "Ton", + // symbol: "TON", + // contractAddress: CW20_TON_CONTRACT, + // denom: "cw20_ton", + // coingeckoId: "the-open-network", + // decimal: 9, + // }, ].filter( (t) => t.contractAddress && specificTokens.includes(t.contractAddress) ), @@ -223,7 +207,7 @@ export const useLoadTonBalance = ({ const client = new TonClient({ endpoint, }); - if (address === TON_ADDRESS_CONTRACT) { + if (address === TON_ZERO_ADDRESS) { const balance = await client.getBalance(Address.parse(tonAddress)); handleSetTonAmountsCache({ @@ -275,7 +259,7 @@ export const useLoadTonBalance = ({ const fullData = await Promise.all( allTokens.map(async (item) => { - if (item === TON_ADDRESS_CONTRACT) { + if (item === TON_ZERO_ADDRESS) { // native token: TON const balance = await client.getBalance(Address.parse(tonAddress)); diff --git a/libs/utils.ts b/libs/utils.ts index 7b235e2..1d9c651 100644 --- a/libs/utils.ts +++ b/libs/utils.ts @@ -257,9 +257,7 @@ export const initEthereum = async () => { export const initClient = async () => { try { // suggest our chain - const arrChainIds = [ - network.chainId, - ] as NetworkChainId[]; + const arrChainIds = [network.chainId] as NetworkChainId[]; for (const chainId of arrChainIds) { await window.Keplr.suggestChain(chainId); } From ebeef0be0a288abae21e51bf91dc5e599f20e847 Mon Sep 17 00:00:00 2001 From: perfogic Date: Tue, 30 Jul 2024 17:46:55 +0700 Subject: [PATCH 4/5] update mainnet address --- constants/contract.ts | 6 +++--- constants/tokens.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/constants/contract.ts b/constants/contract.ts index 9526a8b..42dea2e 100644 --- a/constants/contract.ts +++ b/constants/contract.ts @@ -4,7 +4,7 @@ export const TonInteractionContract = { [TonNetwork.Mainnet]: { lightClient: "EQDt5RAUICxUeHaNicwspH8obI__z3X0UHy6vv1xhpi3AbfT", whitelist: "EQATDM6mfPZjPDMD9TVa6D9dlbmAKY5w6xOJiTXJ9Nqj_dsu", - bridgeAdapter: "EQASlo5_ZTuknZ5oZkM7RmPXN2oNOKk3usg4NMYBDf2VsTwk", + bridgeAdapter: "EQC-aFP0rJXwTgKZQJPbPfTSpBFc8wxOgKHWD9cPvOl_DnaY", }, [TonNetwork.Testnet]: { lightClient: "", @@ -28,6 +28,6 @@ export const TonTokensContract = { }; export const CW_TON_BRIDGE = - "orai1f8yer2astssamnyzzp6yvk6q5h49kzj2gu0n7rct8uj38pswy7lqwa8mdw"; + "orai159l8l9c5ckhqpuwdfgs9p4v599nqt3cjlfahalmtrhfuncnec2ms5mz60e"; export const TOKEN_FACTORY = - "orai17hyr3eg92fv34fdnkend48scu32hn26gqxw3hnwkfy904lk9r09qqzty42"; + "orai1wuvhex9xqs3r539mvc6mtm7n20fcj3qr2m0y9khx6n5vtlngfzes3k0rq9"; diff --git a/constants/tokens.ts b/constants/tokens.ts index 61e7310..02a3ac8 100644 --- a/constants/tokens.ts +++ b/constants/tokens.ts @@ -14,7 +14,7 @@ export type TokenType = { decimal: number; }; -export const TON_DENOM = `factory/orai17hyr3eg92fv34fdnkend48scu32hn26gqxw3hnwkfy904lk9r09qqzty42/XuanDang`; +export const TON_DENOM = `factory/orai1wuvhex9xqs3r539mvc6mtm7n20fcj3qr2m0y9khx6n5vtlngfzes3k0rq9/ton`; export const OraichainTokenList: TokenType[] = [ { From 490ccdc511000f9caec143fe9f81026b27d4ae61 Mon Sep 17 00:00:00 2001 From: perfogic Date: Wed, 31 Jul 2024 09:25:04 +0700 Subject: [PATCH 5/5] update new light client --- constants/contract.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constants/contract.ts b/constants/contract.ts index 42dea2e..65776ac 100644 --- a/constants/contract.ts +++ b/constants/contract.ts @@ -2,7 +2,7 @@ import { TonNetwork } from "./ton"; export const TonInteractionContract = { [TonNetwork.Mainnet]: { - lightClient: "EQDt5RAUICxUeHaNicwspH8obI__z3X0UHy6vv1xhpi3AbfT", + lightClient: "EQDzy_POlimFDyzrHd3OQsb9sZCngyG3O7Za4GRFzM-rrO93", whitelist: "EQATDM6mfPZjPDMD9TVa6D9dlbmAKY5w6xOJiTXJ9Nqj_dsu", bridgeAdapter: "EQC-aFP0rJXwTgKZQJPbPfTSpBFc8wxOgKHWD9cPvOl_DnaY", },