From faeb21652ee29b6b7be9a08b56c31cd24d4815c0 Mon Sep 17 00:00:00 2001 From: Hau Nguyen Van Date: Fri, 9 Aug 2024 18:24:22 +0700 Subject: [PATCH] pumb ibc wasm homebase --- package.json | 5 +- src/assets/icons/celestia.svg | 1 + src/assets/icons/ton.svg | 16 ++ src/config/chainInfos.ts | 42 ++- src/libs/utils.ts | 362 ++++++++++++------------- src/pages/UniversalSwap/Swap/index.tsx | 2 + src/tests/pool.spec.ts | 120 -------- yarn.lock | 203 +++++++++----- 8 files changed, 369 insertions(+), 382 deletions(-) create mode 100644 src/assets/icons/celestia.svg create mode 100644 src/assets/icons/ton.svg delete mode 100644 src/tests/pool.spec.ts diff --git a/package.json b/package.json index 7858532fa..60fd8326b 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.0.49", + "@oraichain/oraidex-universal-swap": "1.0.97", "@reduxjs/toolkit": "^1.9.3", "@sentry/react": "^7.47.0", "@tanstack/react-query": "^4.32.6", @@ -115,7 +115,8 @@ }, "resolutions": { "bech32": "1.1.4", - "bitcoinjs-lib": "5.2.0" + "bitcoinjs-lib": "5.2.0", + "axios": "0.26.1" }, "engines": { "node": "^18 || ^20" diff --git a/src/assets/icons/celestia.svg b/src/assets/icons/celestia.svg new file mode 100644 index 000000000..de8c58e95 --- /dev/null +++ b/src/assets/icons/celestia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/ton.svg b/src/assets/icons/ton.svg new file mode 100644 index 000000000..1f2697488 --- /dev/null +++ b/src/assets/icons/ton.svg @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/src/config/chainInfos.ts b/src/config/chainInfos.ts index 6b0a39d12..9ef4d8952 100644 --- a/src/config/chainInfos.ts +++ b/src/config/chainInfos.ts @@ -1,4 +1,3 @@ -// @ts-nocheck import { TokenItemType, tokens, @@ -33,6 +32,8 @@ 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 { AIRI_BSC_CONTRACT, @@ -75,7 +76,8 @@ import { NEUTARO_ORAICHAIN_DENOM, OCH_CONTRACT, OCH_ETH_CONTRACT, - ORAIX_ETH_CONTRACT + ORAIX_ETH_CONTRACT, + TON_ORAICHAIN_DENOM } from '@oraichain/oraidex-common'; import { BridgeAppCurrency, CustomChainInfo, defaultBech32Config } from '@oraichain/oraidex-common'; import { flatten } from 'lodash'; @@ -88,10 +90,10 @@ type ChainIcon = Pick; export const bitcoinMainnet: CustomChainInfo = { rest: 'https://blockstream.info/api', rpc: 'https://blockstream.info/api', - chainId: ChainIdEnum.Bitcoin, - chainName: 'Bitcoin', + chainId: ChainIdEnum.Bitcoin as any, + chainName: 'Bitcoin' as any, bip44: { - coinType: 0 + coinType: 0 as any }, coinType: 0, Icon: BTCIcon, @@ -104,12 +106,12 @@ export const bitcoinMainnet: CustomChainInfo = { coinImageUrl: 'https://assets.coingecko.com/coins/images/1/small/bitcoin.png' }, bech32Config: defaultBech32Config('bc'), - networkType: 'bitcoin', + networkType: 'bitcoin' as any, currencies: [ { coinDenom: 'BTC', coinMinimalDenom: 'btc', - coinDecimals: 8, + coinDecimals: 8 as any, bridgeTo: ['Oraichain'], prefixToken: 'oraibtc', Icon: BTCIcon, @@ -238,6 +240,16 @@ export const tokensIcon: TokenIcon[] = [ coinGeckoId: 'bitcoin', Icon: BitcoinIcon, IconLight: BitcoinIcon + }, + { + coinGeckoId: 'celestia', + Icon: CelestiaIcon, + IconLight: CelestiaIcon + }, + { + coinGeckoId: 'the-open-network', + Icon: TonIcon, + IconLight: TonIcon } ]; @@ -313,6 +325,7 @@ export const mapListWithIcon = (list: any[], listIcon: ChainIcon[] | TokenIcon[] let Icon = OraiIcon; let IconLight = OraiLightIcon; + //@ts-ignore const findedItem = listIcon.find((icon) => icon[key] === item[key]); if (findedItem) { Icon = findedItem.Icon; @@ -597,6 +610,13 @@ export const oraichainNetwork: CustomChainInfo = { 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', @@ -889,8 +909,8 @@ export const chainInfos: CustomChainInfo[] = [ { rpc: 'https://btc.rpc.orai.io', rest: 'https://btc.lcd.orai.io/', - chainId: 'oraibtc-mainnet-1', - chainName: 'OraiBTC', + chainId: 'oraibtc-mainnet-1' as any, + chainName: 'OraiBTC' as any, networkType: 'cosmos', bip44: { coinType: 118 @@ -947,7 +967,7 @@ export const chainInfos: CustomChainInfo[] = [ ] }, { - rpc: 'https://rpc.mainnet.noble.strange.love/', + rpc: 'https://noble-rpc.polkachu.com/', rest: 'https://noble-api.polkachu.com', chainId: 'noble-1', chainName: 'Noble', @@ -1309,4 +1329,4 @@ export const evmChains = chainInfos.filter( (c) => c.networkType === 'evm' && c.bip44.coinType === 60 && c.chainId !== '0x1ae6' ); -export const btcChains = chainInfos.filter((c) => c.networkType === 'bitcoin'); +export const btcChains = chainInfos.filter((c) => c.networkType === ('bitcoin' as any)); diff --git a/src/libs/utils.ts b/src/libs/utils.ts index 7333e3321..80a897c4e 100644 --- a/src/libs/utils.ts +++ b/src/libs/utils.ts @@ -1,83 +1,83 @@ import { - COSMOS_CHAIN_ID_COMMON, - NetworkChainId, - TokenItemType, - getSubAmountDetails, - toAmount, - toDisplay + COSMOS_CHAIN_ID_COMMON, + NetworkChainId, + TokenItemType, + getSubAmountDetails, + toAmount, + toDisplay } from '@oraichain/oraidex-common'; -import {isMobile} from '@walletconnect/browser-utils'; +import { isMobile } from '@walletconnect/browser-utils'; import WalletConnectProvider from '@walletconnect/ethereum-provider'; import bech32 from 'bech32'; -import {cosmosTokens, tokenMap} from 'config/bridgeTokens'; -import {chainInfos} from 'config/chainInfos'; -import {network} from 'config/networks'; -import {CoinGeckoPrices} from 'hooks/useCoingecko'; -import {getCosmWasmClient} from 'libs/cosmjs'; +import { cosmosTokens, tokenMap } from 'config/bridgeTokens'; +import { chainInfos } from 'config/chainInfos'; +import { network } from 'config/networks'; +import { CoinGeckoPrices } from 'hooks/useCoingecko'; +import { getCosmWasmClient } from 'libs/cosmjs'; export const checkRegex = (str: string, regex?: RegExp) => { - const re = regex ?? /^[a-zA-Z\-]{3,12}$/; - return re.test(str); + const re = regex ?? /^[a-zA-Z\-]{3,12}$/; + return re.test(str); }; export const validateAddressCosmos = (bech32Address: string, prefix?: string): boolean => { - try { - const {prefix: decodedPrefix} = bech32.decode(bech32Address); - return prefix && prefix === decodedPrefix; - } catch (error) { - return false; - } + try { + const { prefix: decodedPrefix } = bech32.decode(bech32Address); + return prefix && prefix === decodedPrefix; + } catch (error) { + return false; + } }; export const getUsd = ( - amount: string | bigint, - tokenInfo: TokenItemType, - prices: CoinGeckoPrices, - pricesAmount?: number + amount: string | bigint, + tokenInfo: TokenItemType, + prices: CoinGeckoPrices, + pricesAmount?: number ): number => { - if (!tokenInfo || !tokenInfo.decimals) return 0; - if (pricesAmount) { - return toDisplay(amount, tokenInfo.decimals) * pricesAmount; - } - return toDisplay(amount, tokenInfo.decimals) * (prices[tokenInfo.coinGeckoId] ?? 0); + if (!tokenInfo || !tokenInfo.decimals) return 0; + if (pricesAmount) { + return toDisplay(amount, tokenInfo.decimals) * pricesAmount; + } + return toDisplay(amount, tokenInfo.decimals) * (prices[tokenInfo.coinGeckoId] ?? 0); }; export const getTotalUsd = (amounts: AmountDetails, prices: CoinGeckoPrices): number => { - let usd = 0; - for (const denom in amounts) { - const tokenInfo = tokenMap[denom]; - if (!tokenInfo) continue; - const amount = toDisplay(amounts[denom], tokenInfo.decimals); - usd += amount * (prices[tokenInfo.coinGeckoId] ?? 0); - } - return usd; + let usd = 0; + for (const denom in amounts) { + const tokenInfo = tokenMap[denom]; + if (!tokenInfo) continue; + const amount = toDisplay(amounts[denom], tokenInfo.decimals); + usd += amount * (prices[tokenInfo.coinGeckoId] ?? 0); + } + return usd; }; export const toSubDisplay = (amounts: AmountDetails, tokenInfo: TokenItemType): number => { - const subAmounts = getSubAmountDetails(amounts, tokenInfo); - return toSumDisplay(subAmounts); + const subAmounts = getSubAmountDetails(amounts, tokenInfo); + return toSumDisplay(subAmounts); }; export const toTotalDisplay = (amounts: AmountDetails, tokenInfo: TokenItemType): number => { - return toDisplay(amounts[tokenInfo.denom], tokenInfo.decimals) + toSubDisplay(amounts, tokenInfo); + return toDisplay(amounts[tokenInfo.denom], tokenInfo.decimals) + toSubDisplay(amounts, tokenInfo); }; export const toSubAmount = (amounts: AmountDetails, tokenInfo: TokenItemType): bigint => { - const displayAmount = toSubDisplay(amounts, tokenInfo); - return toAmount(displayAmount, tokenInfo.decimals); + const displayAmount = toSubDisplay(amounts, tokenInfo); + return toAmount(displayAmount, tokenInfo.decimals); }; export const toSumDisplay = (amounts: AmountDetails): number => { - // get all native balances that are from oraibridge (ibc/...) - let amount = 0; + // get all native balances that are from oraibridge (ibc/...) + let amount = 0; - for (const denom in amounts) { - // update later - const balance = amounts[denom]; - if (!balance) continue; - amount += toDisplay(balance, tokenMap[denom].decimals); - } - return amount; + for (const denom in amounts) { + // update later + const balance = amounts[denom]; + if (!balance) continue; + amount += toDisplay(balance, tokenMap[denom]?.decimals); + } + return amount; }; /** @@ -88,173 +88,173 @@ export const toSumDisplay = (amounts: AmountDetails): number => { * @returns The shortened string, or '-' if the input string is null or undefined. */ export const reduceString = (str: string, from: number, end: number) => { - return str ? str.substring(0, from) + '...' + str.substring(str.length - end) : '-'; + return str ? str.substring(0, from) + '...' + str.substring(str.length - end) : '-'; }; export const formateNumberDecimals = (price, decimals = 2) => { - return new Intl.NumberFormat('en-US', { - currency: 'USD', - maximumFractionDigits: decimals - }).format(price); + return new Intl.NumberFormat('en-US', { + currency: 'USD', + maximumFractionDigits: decimals + }).format(price); }; export const detectBestDecimalsDisplay = (price, minDecimal = 2, minPrice = 1, maxDecimal) => { - if (price && price > minPrice) return minDecimal; - let decimals = minDecimal; - if (price !== undefined) { - // Find out the number of leading floating zeros via regex - const priceSplit = price?.toString().split('.'); - if (priceSplit?.length === 2 && priceSplit[0] === '0') { - const leadingZeros = priceSplit[1].match(/^0+/); - decimals += leadingZeros ? leadingZeros[0]?.length + 1 : 1; - } + if (price && price > minPrice) return minDecimal; + let decimals = minDecimal; + if (price !== undefined) { + // Find out the number of leading floating zeros via regex + const priceSplit = price?.toString().split('.'); + if (priceSplit?.length === 2 && priceSplit[0] === '0') { + const leadingZeros = priceSplit[1].match(/^0+/); + decimals += leadingZeros ? leadingZeros[0]?.length + 1 : 1; } - if (maxDecimal && decimals > maxDecimal) decimals = maxDecimal; - return decimals; + } + if (maxDecimal && decimals > maxDecimal) decimals = maxDecimal; + return decimals; }; interface FormatNumberDecimal { - price: number; - maxDecimal?: number; - unit?: string; - minDecimal?: number; - minPrice?: number; - unitPosition?: 'prefix' | 'suffix'; + price: number; + maxDecimal?: number; + unit?: string; + minDecimal?: number; + minPrice?: number; + unitPosition?: 'prefix' | 'suffix'; } export const formateNumberDecimalsAuto = ({ - price, - maxDecimal, - unit, - minDecimal, - minPrice, - unitPosition - }: FormatNumberDecimal) => { - minDecimal = minDecimal ? minDecimal : 2; - minPrice = minPrice ? minPrice : 1; - unit = unit ? unit : ''; - const priceFormat = formateNumberDecimals(price, detectBestDecimalsDisplay(price, minDecimal, minPrice, maxDecimal)); - const res = unitPosition === 'prefix' ? unit + priceFormat : priceFormat + unit; - return res; + price, + maxDecimal, + unit, + minDecimal, + minPrice, + unitPosition +}: FormatNumberDecimal) => { + minDecimal = minDecimal ? minDecimal : 2; + minPrice = minPrice ? minPrice : 1; + unit = unit ? unit : ''; + const priceFormat = formateNumberDecimals(price, detectBestDecimalsDisplay(price, minDecimal, minPrice, maxDecimal)); + const res = unitPosition === 'prefix' ? unit + priceFormat : priceFormat + unit; + return res; }; export const buildWebsocketSendMessage = (message: string, id = 1) => { - return { - jsonrpc: '2.0', - method: 'subscribe', - params: [`tm.event='Tx' AND ${message}`], - id - }; + return { + jsonrpc: '2.0', + method: 'subscribe', + params: [`tm.event='Tx' AND ${message}`], + id + }; }; export const buildUnsubscribeMessage = () => { - return { - jsonrpc: '2.0', - method: 'unsubscribe_all', - params: [], - id: 99 - }; + return { + jsonrpc: '2.0', + method: 'unsubscribe_all', + params: [], + id: 99 + }; }; export const processWsResponseMsg = (message: any): string => { - try { - if (message === null || message.result === null) { - return null; + try { + if (message === null || message.result === null) { + return null; + } + const { result } = message; + if ( + result && // 👈 null and undefined check + (Object.keys(result).length !== 0 || result.constructor !== Object) + ) { + if (!result.events) return null; + const events = result.events; + const packets = events['recv_packet.packet_data']; + if (!packets) return null; + let tokens = ''; + for (let packetRaw of packets) { + const packet = JSON.parse(packetRaw); + // we look for the true denom information with decimals to process + // format: {"amount":"100000000000000","denom":"oraib0xA325Ad6D9c92B55A3Fc5aD7e412B1518F96441C0","receiver":"orai...","sender":"oraib..."} + const receivedToken = cosmosTokens.find((token) => token.denom === packet.denom); + //TODO: Not show socket received amount with usat token; + if (receivedToken.denom === 'usat') { + return null; } - const {result} = message; - if ( - result && // 👈 null and undefined check - (Object.keys(result).length !== 0 || result.constructor !== Object) - ) { - if (!result.events) return null; - const events = result.events; - const packets = events['recv_packet.packet_data']; - if (!packets) return null; - let tokens = ''; - for (let packetRaw of packets) { - const packet = JSON.parse(packetRaw); - // we look for the true denom information with decimals to process - // format: {"amount":"100000000000000","denom":"oraib0xA325Ad6D9c92B55A3Fc5aD7e412B1518F96441C0","receiver":"orai...","sender":"oraib..."} - const receivedToken = cosmosTokens.find((token) => token.denom === packet.denom); - //TODO: Not show socket received amount with usat token; - if (receivedToken.denom === 'usat') { - return null; - } - const displayAmount = toDisplay(packet?.amount, receivedToken?.decimals); + const displayAmount = toDisplay(packet?.amount, receivedToken?.decimals); - tokens = tokens.concat(`${displayAmount} ${receivedToken?.name}, `); - } - return tokens.substring(0, tokens.length - 2); // remove , due to concat - } - return null; - } catch (error) { - console.error({errorProcessWsResponseMsg: error}); + tokens = tokens.concat(`${displayAmount} ${receivedToken?.name}, `); + } + return tokens.substring(0, tokens.length - 2); // remove , due to concat } + return null; + } catch (error) { + console.error({ errorProcessWsResponseMsg: error }); + } }; export const generateError = (message: string) => { - return {ex: {message}}; + return { ex: { message } }; }; export const initEthereum = async () => { - // support only https - if (isMobile() && !window.ethereumDapp && window.location.protocol === 'https:') { - const bscChain = chainInfos.find((c) => c.chainId === '0x38'); - const provider = new WalletConnectProvider({ - chainId: Networks.bsc, - storageId: 'metamask', - qrcode: true, - rpc: {[Networks.bsc]: bscChain.rpc}, - qrcodeModalOptions: { - mobileLinks: ['metamask'] - } - }); - await provider.enable(); - (window.ethereumDapp as any) = provider; - } + // support only https + if (isMobile() && !window.ethereumDapp && window.location.protocol === 'https:') { + const bscChain = chainInfos.find((c) => c.chainId === '0x38'); + const provider = new WalletConnectProvider({ + chainId: Networks.bsc, + storageId: 'metamask', + qrcode: true, + rpc: { [Networks.bsc]: bscChain.rpc }, + qrcodeModalOptions: { + mobileLinks: ['metamask'] + } + }); + await provider.enable(); + (window.ethereumDapp as any) = provider; + } }; export const initClient = async () => { - try { - // suggest our chain - const arrChainIds = [ - network.chainId, - COSMOS_CHAIN_ID_COMMON.ORAIBRIDGE_CHAIN_ID, - COSMOS_CHAIN_ID_COMMON.INJECTVE_CHAIN_ID - ] as NetworkChainId[]; - for (const chainId of arrChainIds) { - await window.Keplr.suggestChain(chainId); - } - const {client} = await getCosmWasmClient({chainId: network.chainId}); - window.client = client; - } catch (ex) { - console.log({errorInitClient: ex}); - throw new Error(ex?.message ?? 'Error when suggestChain'); + try { + // suggest our chain + const arrChainIds = [ + network.chainId, + COSMOS_CHAIN_ID_COMMON.ORAIBRIDGE_CHAIN_ID, + COSMOS_CHAIN_ID_COMMON.INJECTVE_CHAIN_ID + ] as NetworkChainId[]; + for (const chainId of arrChainIds) { + await window.Keplr.suggestChain(chainId); } + const { client } = await getCosmWasmClient({ chainId: network.chainId }); + window.client = client; + } catch (ex) { + console.log({ errorInitClient: ex }); + throw new Error(ex?.message ?? 'Error when suggestChain'); + } }; export const timeSince = (date: number): string => { - const seconds = Math.floor((Date.now() - date) / 1000); - let interval = seconds / 31536000; + const seconds = Math.floor((Date.now() - date) / 1000); + let interval = seconds / 31536000; - if (interval > 1) { - return Math.floor(interval) + ' years'; - } - interval = seconds / 2592000; - if (interval > 1) { - return Math.floor(interval) + ' months'; - } - interval = seconds / 86400; - if (interval > 1) { - return Math.floor(interval) + ' days'; - } - interval = seconds / 3600; - if (interval > 1) { - return Math.floor(interval) + ' hours'; - } - interval = seconds / 60; - if (interval > 1) { - return Math.floor(interval) + ' minutes'; - } - return Math.floor(seconds) + ' seconds'; + if (interval > 1) { + return Math.floor(interval) + ' years'; + } + interval = seconds / 2592000; + if (interval > 1) { + return Math.floor(interval) + ' months'; + } + interval = seconds / 86400; + if (interval > 1) { + return Math.floor(interval) + ' days'; + } + interval = seconds / 3600; + if (interval > 1) { + return Math.floor(interval) + ' hours'; + } + interval = seconds / 60; + if (interval > 1) { + return Math.floor(interval) + ' minutes'; + } + return Math.floor(seconds) + ' seconds'; }; diff --git a/src/pages/UniversalSwap/Swap/index.tsx b/src/pages/UniversalSwap/Swap/index.tsx index 26cb1b49d..3c04735ed 100644 --- a/src/pages/UniversalSwap/Swap/index.tsx +++ b/src/pages/UniversalSwap/Swap/index.tsx @@ -798,6 +798,7 @@ const SwapComponent: React.FC<{ }} prices={prices} isSelectToken={isSelectChainTo} + filterChainId={['Oraichain']} /> diff --git a/src/tests/pool.spec.ts b/src/tests/pool.spec.ts deleted file mode 100644 index 250be0406..000000000 --- a/src/tests/pool.spec.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { - ORAI, - buildMultipleExecuteMessages, - INJECTIVE_CONTRACT, - USDC_CONTRACT, - ORAIX_CONTRACT, - WETH_CONTRACT -} from '@oraichain/oraidex-common'; -import { flattenTokens } from 'config/bridgeTokens'; -import { getPoolTokens } from 'config/pools'; -import { estimateShare, formatDisplayUsdt, getSymbolPools, toFixedIfNecessary } from 'helper/helpers'; -import { ProvideQuery, Type, generateContractMessages } from 'rest/api'; -import { constants } from './listing-simulate'; - -/** - * We use 2 pairs: ORAI/AIRI & ORAI/USDT for all test below. - */ -describe('pool', () => { - const { devAddress } = constants; - - describe('add & withdraw liquidity', () => { - it('should generate contract messages correcty when add & withdraw liquidity pool ', async () => { - const [amount1, amount2] = [100, 100]; - const [token1InfoData, token2InfoData] = [ - flattenTokens.find((t) => t.name === 'ORAI' && t.chainId === 'Oraichain'), - flattenTokens.find((t) => t.name === 'USDT' && t.chainId === 'Oraichain') - ]; - const testPairContractAddr = 'test-contract-addr'; - const msg = generateContractMessages({ - type: Type.PROVIDE, - sender: devAddress, - fromInfo: token1InfoData!, - toInfo: token2InfoData!, - fromAmount: amount1.toString(), - toAmount: amount2.toString(), - pair: testPairContractAddr - } as ProvideQuery); - - // check if the contract address, sent_funds and sender are correct - expect(msg.contractAddress).toEqual(testPairContractAddr); - expect(msg.funds).toEqual([{ amount: '100', denom: ORAI }]); - expect(msg).toHaveProperty('msg'); - - const messages = buildMultipleExecuteMessages(msg); - // check if the contract address, sent_funds and sender are correct - expect(messages[0].contractAddress).toEqual(testPairContractAddr); - expect(messages[0]).toHaveProperty('funds'); - - expect(messages[0].msg).toEqual({ - provide_liquidity: { - assets: [ - { info: { token: { contract_addr: token2InfoData.contractAddress } }, amount: '100' }, - { info: { native_token: { denom: ORAI } }, amount: '100' } - ] - } - }); - }); - }); - - it('test Pairs getPoolTokens', () => { - const poolTokens = getPoolTokens().filter(Boolean); - expect(Array.isArray(poolTokens)).toBe(true); - expect(poolTokens.length).toBe(17); - }); - - it.each([ - ['0.001234', '$0.0012'], - ['2', '$2'], - ['2.1', '$2.1'], - ['2.129', '$2.13'], - ['1234567', '$1,234,567'], - ['1234567.111', '$1,234,567.11'] - ])('test formatDisplayUsdt should formats %s to %s', (input, expected) => { - expect(formatDisplayUsdt(input)).toBe(expected); - }); - - it.each([ - ['2.12345', 2, 2.12], - ['2.1', 2, 2.1], - ['2', 2, 2], - ['2.12345', 1, 2.1], - ['2.129', 1, 2.1] - ])('test toFixedIfNecessary should rounds %s to %d decimal places as %f', (value, dp, expected) => { - expect(toFixedIfNecessary(value, dp)).toBeCloseTo(expected); - }); - - it.each<[number, number, number]>([ - [0, 1, 0], - [1, 0, 0], - [100, 500, 0.02] - ])('test-estimateShare-should-return-correctly-share', (totalBaseAmount, totalQuoteAmount, expectedResult) => { - // setup - const payload = { - baseAmount: 1, - quoteAmount: 2, - totalShare: 5, - totalBaseAmount, - totalQuoteAmount - }; - - // act - const result = estimateShare(payload); - - // assertion - expect(result).toEqual(expectedResult); - - // if totalShare is falsy - payload.totalShare = NaN; - expect(estimateShare(payload)).toEqual(0); - }); - - it.each<[string, string, string, string]>([ - [INJECTIVE_CONTRACT, ORAI, 'INJ/ORAI', 'ORAI/INJ'], - [USDC_CONTRACT, ORAIX_CONTRACT, 'USDC/ORAIX', 'ORAIX/USDC'], - [ORAI, WETH_CONTRACT, 'ORAI/WETH', 'ORAI/WETH'] - ])('test getSymbolPools', (baseDenom, quoteDenom, originalSymbols, expected) => { - const symbols = getSymbolPools(baseDenom, quoteDenom, originalSymbols); - expect(symbols).toEqual(expected); - }); -}); diff --git a/yarn.lock b/yarn.lock index 1b74d9bd3..73939d364 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,11 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + "@adraffy/ens-normalize@1.9.2": version "1.9.2" resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz#60111a5d9db45b2e5cbb6231b0bb8d97e8659316" @@ -2787,6 +2792,20 @@ dependencies: "@noble/hashes" "1.3.1" +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + "@noble/hashes@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" @@ -2797,6 +2816,16 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + "@noble/hashes@^1", "@noble/hashes@^1.0.0", "@noble/hashes@^1.2.0", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": version "1.3.3" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" @@ -2877,6 +2906,20 @@ resolved "https://registry.yarnpkg.com/@oraichain/common-contracts-sdk/-/common-contracts-sdk-1.0.31.tgz#595f93b168438d69d64896909b37855c9afc92fb" integrity sha512-s8H20RXy5gCnu3DnM7L5ClQyj2mdQpbSBpZrXCpIAX9qY0LKsDdZG3sYaDQ8+VN333jz9Pp/qGWdFSYD+6PBsg== +"@oraichain/common@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@oraichain/common/-/common-1.0.3.tgz#c6746473deed39622a1368a8f8f733a13f628a7e" + integrity sha512-4Rwwl8DF3bMNh5XSlP44LjUIKCOglDc/R1bUCeVFifZlrTGaz6Zo7Fdw6xwych7b4doxcuQBBh2gr7AZE6jQyQ== + dependencies: + "@cosmjs/cosmwasm-stargate" "0.31.3" + "@cosmjs/tendermint-rpc" "^0.31.3" + axios "0.21.4" + axios-extensions "3.1.6" + bech32 "^1.1.4" + cosmjs-types "^0.8.0" + ethers "^5.5.1" + lodash "^4.17.21" + "@oraichain/cosmosjs@^0.0.94": version "0.0.94" resolved "https://registry.yarnpkg.com/@oraichain/cosmosjs/-/cosmosjs-0.0.94.tgz#35f1a045737b86015f728aa22b1a974058eb4104" @@ -2979,10 +3022,10 @@ react-use "^17.4.0" react-use-websocket "^4.5.0" -"@oraichain/oraidex-common@^1.0.78": - version "1.0.83" - resolved "https://registry.yarnpkg.com/@oraichain/oraidex-common/-/oraidex-common-1.0.83.tgz#2e525f8210904ff709e9c9d364322a85c55ae17a" - integrity sha512-nVPlhhOvAvo5Cz/Z45K5l1CBEspfljD1BlUFe9pqld+Uc5spCF5trJcYhN7/512+B/3Kaathy3n7AB+nk6/TBQ== +"@oraichain/oraidex-common@^1.0.91": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@oraichain/oraidex-common/-/oraidex-common-1.1.3.tgz#10e458f7eb7713910dc250e1587dff5cfa949e06" + integrity sha512-pVXKNDofnUp3iYl9153lrCVYPxz9H3gLPCWXZN5OEMFCmjIZU+4WMJgvgoe6OV9Fmw4z+DUus2cfhknP7hQw5A== dependencies: "@cosmjs/amino" "0.31.3" "@cosmjs/cosmwasm-stargate" "0.31.3" @@ -2994,9 +3037,12 @@ "@injectivelabs/sdk-ts" "1.12.1" "@keplr-wallet/types" "^0.11.38" "@oraichain/oraidex-contracts-sdk" latest + axios "1.7.2" + axios-extensions "3.1.7" bignumber.js "^9.1.2" cosmjs-types "0.8.0" ethers "^5.0.15" + tronweb "6.0.0-beta.4" "@oraichain/oraidex-contracts-build@^1.0.22": version "1.0.22" @@ -3018,12 +3064,13 @@ 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.0.49": - version "1.0.70" - resolved "https://registry.yarnpkg.com/@oraichain/oraidex-universal-swap/-/oraidex-universal-swap-1.0.70.tgz#93d40495484c66ab00d0b47494b29b19e479c8fa" - integrity sha512-H5nQDShw3+1Tka/yFeLRrioyLRFjiewndsKePQvI1ilXkayxOv9sugzbZYx/WdiVapGrOeYD6+yX/O60jzBVng== +"@oraichain/oraidex-universal-swap@1.0.97": + version "1.0.97" + resolved "https://registry.yarnpkg.com/@oraichain/oraidex-universal-swap/-/oraidex-universal-swap-1.0.97.tgz#b43148f7416482a7d0011b114d38daaa46533a8d" + integrity sha512-riNd4V6/8Ov5xATXlDaDUwTbKKvmnbQxuhP12uJBEjrBUHkNQjgPNal2sr4B1Zu12Vvmdr2WSIWDsHIG40cxJg== dependencies: - "@oraichain/oraidex-common" "^1.0.78" + "@oraichain/common" "^1.0.3" + "@oraichain/oraidex-common" "^1.0.91" "@oraichain/oraidex-contracts-sdk" "^1.0.43" bech32 "1.1.4" ethers "^5.0.15" @@ -3201,6 +3248,11 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== +"@scure/base@~1.1.6": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30" + integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== + "@scure/bip32@1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" @@ -3210,6 +3262,15 @@ "@noble/hashes" "~1.3.1" "@scure/base" "~1.1.0" +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + "@scure/bip39@1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" @@ -3218,6 +3279,14 @@ "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + "@sentry-internal/feedback@7.101.1": version "7.101.1" resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.101.1.tgz#d7e27ebcc46bd7306cfaa89b591293a394d75672" @@ -5268,7 +5337,7 @@ axe-core@=4.7.0: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== -axios-extensions@^3.1.3: +axios-extensions@3.1.6, axios-extensions@^3.1.3: version "3.1.6" resolved "https://registry.yarnpkg.com/axios-extensions/-/axios-extensions-3.1.6.tgz#bfa72f65f44f0a3efa55a030cdaaa6451c246b1e" integrity sha512-CmwMYxxAw4DcQDJ7/2Iv4GJj1Ao48lJEPieycgZQH6m1KcYZqf9zm2HM/CsULqheCpYxZbiGrCfZf5tVjXqoLg== @@ -5277,37 +5346,22 @@ axios-extensions@^3.1.3: tslib "^2.1.0" util "^0.12.3" -axios@^0.21.0, axios@^0.21.1, axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios-extensions@3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/axios-extensions/-/axios-extensions-3.1.7.tgz#0c3965dcb5b0d4969cb4df0170d111a811715541" + integrity sha512-Won5Qde6djRtiLle5w1Vae9xTREmAW8T7ZUN+OuMMax6R6YVoGTRKRygonLPV7qaNUfw2P1yAxesyFj1DheRjA== dependencies: - follow-redirects "^1.14.0" + lru-cache "^7.14.0" + tslib "^2.1.0" + util "^0.12.3" -axios@^0.26.1: +axios@0.21.4, axios@0.26.1, axios@1.7.2, axios@^0.21.0, axios@^0.21.1, axios@^0.21.2, axios@^0.26.1, axios@^0.27.2, axios@^1.6.2, axios@^1.6.8: version "0.26.1" resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== dependencies: follow-redirects "^1.14.8" -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -axios@^1.6.2: - version "1.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - axobject-query@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" @@ -8144,6 +8198,16 @@ ethereum-cryptography@^2.0.0: "@scure/bip32" "1.3.1" "@scure/bip39" "1.2.1" +ethereum-cryptography@^2.1.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== + dependencies: + "@noble/curves" "1.4.2" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + ethereumjs-abi@^0.6.8: version "0.6.8" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" @@ -8176,7 +8240,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@5.7.2, ethers@^5.0.15, ethers@^5.7.2: +ethers@5.7.2, ethers@^5.0.15, ethers@^5.5.1, ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -8212,6 +8276,19 @@ ethers@5.7.2, ethers@^5.0.15, ethers@^5.7.2: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +ethers@^6.13.1: + version "6.13.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.2.tgz#4b67d4b49e69b59893931a032560999e5e4419fe" + integrity sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.17.1" + ethers@^6.6.0: version "6.7.1" resolved "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz" @@ -8720,16 +8797,11 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.8, follow-redirects@^1.14.9: +follow-redirects@^1.0.0, follow-redirects@^1.14.8: version "1.15.4" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== -follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -15131,7 +15203,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -15149,15 +15221,6 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -15237,7 +15300,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -15258,13 +15321,6 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -15783,6 +15839,21 @@ tronweb@5.3.2: semver "^5.6.0" validator "^13.7.0" +tronweb@6.0.0-beta.4: + version "6.0.0-beta.4" + resolved "https://registry.yarnpkg.com/tronweb/-/tronweb-6.0.0-beta.4.tgz#80e982a64f2b2082d43921ab8254cfa3b0bf33a8" + integrity sha512-q34Vq7c0MQRXlWRgTHuz01v/+fyL0LEP2fMRuPj0rVXrwNM1nDvuMD2/6VGRODhNQIHYP2113iZa/MpdHUaBww== + dependencies: + "@babel/runtime" "^7.0.0" + "@tronweb3/google-protobuf" "^3.21.2" + axios "^1.6.8" + bignumber.js "^9.0.1" + ethereum-cryptography "^2.1.3" + ethers "^6.13.1" + eventemitter3 "^3.1.0" + semver "^5.6.0" + validator "^13.7.0" + tronweb@^5.1.0: version "5.3.1" resolved "https://registry.yarnpkg.com/tronweb/-/tronweb-5.3.1.tgz#eb97e667f580b2c7de81311dd1b353f4b5d927a9" @@ -16890,7 +16961,7 @@ workbox-window@6.6.1: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -16917,15 +16988,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -16960,6 +17022,11 @@ ws@7.5.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + ws@8.5.0: version "8.5.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"