From c54814131e8440b22de9cdaadc22c4d303c8b9c1 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Fri, 19 Jan 2024 22:48:08 -0700 Subject: [PATCH 01/35] feat/Osmosis Chain - clean merge --- docs/swagger/definitions.yml | 271 ++- package.json | 5 + src/amm/amm.controllers.ts | 49 +- src/amm/amm.requests.ts | 76 +- src/amm/amm.validators.ts | 30 +- src/chains/cosmos/cosmos-base.ts | 190 +- src/chains/cosmos/cosmos.controllers.ts | 6 +- src/chains/cosmos/cosmos.validators.ts | 18 + src/chains/osmosis/osmosis.apr.ts | 31 + src/chains/osmosis/osmosis.config.ts | 59 + src/chains/osmosis/osmosis.controllers.ts | 778 +++++++ src/chains/osmosis/osmosis.lp.utils.ts | 145 ++ src/chains/osmosis/osmosis.prices.ts | 119 + src/chains/osmosis/osmosis.swap.ts | 231 ++ src/chains/osmosis/osmosis.ts | 2011 +++++++++++++++++ src/chains/osmosis/osmosis.types.ts | 326 +++ src/chains/osmosis/osmosis.utils.ts | 76 + src/connectors/connectors.routes.ts | 9 +- src/connectors/uniswap/uniswap.controllers.ts | 16 +- src/network/network.controllers.ts | 6 + src/services/base.ts | 2 +- src/services/common-interfaces.ts | 37 +- src/services/connection-manager.ts | 8 +- src/services/error-handler.ts | 8 + src/services/schema/osmosis-schema.json | 36 + src/services/wallet/wallet.controllers.ts | 11 + src/services/wallet/wallet.validators.ts | 3 +- src/templates/osmosis.yml | 23 + src/templates/root.yml | 6 +- test-helpers/curl/curl.sh | 25 + .../curl/requests/add_osmosis_key.json | 5 + .../curl/requests/osmosis_add_liquidity.json | 13 + .../curl/requests/osmosis_balances.json | 8 + .../curl/requests/osmosis_pool_price.json | 8 + .../curl/requests/osmosis_position.json | 7 + test-helpers/curl/requests/osmosis_trade.json | 10 + test-helpers/curl/requests/price_osmosis.json | 9 + .../curl/requests/remove_osmosis_key.json | 4 + test/chains/osmosis/osmosis.test.ts | 213 ++ test/chains/osmosis/osmosis.testnojest.ts | 528 +++++ yarn.lock | 895 ++++++-- 41 files changed, 5930 insertions(+), 381 deletions(-) create mode 100755 src/chains/osmosis/osmosis.apr.ts create mode 100755 src/chains/osmosis/osmosis.config.ts create mode 100755 src/chains/osmosis/osmosis.controllers.ts create mode 100755 src/chains/osmosis/osmosis.lp.utils.ts create mode 100755 src/chains/osmosis/osmosis.prices.ts create mode 100644 src/chains/osmosis/osmosis.swap.ts create mode 100755 src/chains/osmosis/osmosis.ts create mode 100755 src/chains/osmosis/osmosis.types.ts create mode 100755 src/chains/osmosis/osmosis.utils.ts create mode 100755 src/services/schema/osmosis-schema.json create mode 100755 src/templates/osmosis.yml create mode 100644 test-helpers/curl/requests/add_osmosis_key.json create mode 100644 test-helpers/curl/requests/osmosis_add_liquidity.json create mode 100644 test-helpers/curl/requests/osmosis_balances.json create mode 100644 test-helpers/curl/requests/osmosis_pool_price.json create mode 100644 test-helpers/curl/requests/osmosis_position.json create mode 100644 test-helpers/curl/requests/osmosis_trade.json create mode 100644 test-helpers/curl/requests/price_osmosis.json create mode 100644 test-helpers/curl/requests/remove_osmosis_key.json create mode 100755 test/chains/osmosis/osmosis.test.ts create mode 100644 test/chains/osmosis/osmosis.testnojest.ts diff --git a/docs/swagger/definitions.yml b/docs/swagger/definitions.yml index ef441fec12..195c5c11f3 100644 --- a/docs/swagger/definitions.yml +++ b/docs/swagger/definitions.yml @@ -378,9 +378,12 @@ definitions: gasLimit: type: 'number' example: 150688 - gasCost: + gasCost: # also gasUsed for Cosmos prices type: 'string' example: '0.014466048000000000' + gasWanted: + type: 'number' + example: 150688 TradeRequest: type: 'object' @@ -432,12 +435,8 @@ definitions: - 'base' - 'quote' - 'amount' - - 'price' - 'gasPrice' - - 'gasPriceToken' - 'gasLimit' - - 'gasCost' - - 'nonce' properties: network: type: 'string' @@ -457,6 +456,9 @@ definitions: amount: type: 'string' example: '10' + rawAmount: # Cosmos specific + type: 'string' + example: '10' expectedIn: type: 'string' expectedOut: @@ -472,8 +474,22 @@ definitions: type: 'string' gasCost: type: 'string' + gasUsed: # Cosmos specific + type: 'string' + gasWanted: # Cosmos specific + type: 'string' nonce: type: 'string' + expectedAmountReceived: # Cosmos specific + type: 'string' + finalAmountReceived: # Cosmos specific + type: 'string' + finalAmountReceived_basetoken: # Cosmos specific + type: 'string' + expectedPrice: # Cosmos specific + type: 'string' + finalPrice: # Cosmos specific + type: 'string' txHash: type: 'string' @@ -681,9 +697,8 @@ definitions: - 'token1' - 'amount0' - 'amount1' - - 'fee' - - 'lowerPrice' - - 'upperPrice' + - 'chain' + - 'network' properties: address: type: 'string' @@ -704,12 +719,16 @@ definitions: type: 'number' example: 1 upperPrice: - type: number + type: 'number' example: 5 maxFeePerGas: - type: number + type: 'number' maxPriorityFeePerGas: - type: number + type: 'number' + poolId: # Cosmos specific + type: 'string' + allowedSlippage: # Cosmos specific + type: 'string' chain: type: 'string' example: 'ethereum' @@ -718,7 +737,6 @@ definitions: example: 'goerli' connector: type: 'string' - example: 'uniswapLP' LiquidityAddResponse: type: 'object' @@ -728,10 +746,8 @@ definitions: - 'token0' - 'token1' - 'gasPrice' - - 'gasPriceToken' - 'gasLimit' - - 'gasCost' - - 'nonce' + - 'txHash' properties: network: type: 'string' @@ -759,12 +775,30 @@ definitions: txHash: type: 'string' example: '0x0000000000000000000000000000000000000000' + poolId: # Cosmos specific + type: 'string' + poolAddress: # Cosmos specific + type: 'string' + poolShares: # Cosmos specific + type: 'string' + token0FinalAmount: # Cosmos specific + type: 'string' + token1FinalAmount: # Cosmos specific + type: 'string' + latency: # Cosmos specific + type: 'number' + gasUsed: # Cosmos specific + type: 'string' + gasWanted: # Cosmos specific + type: 'string' LiquidityRemoveRequest: type: 'object' required: - 'address' - - 'tokenId' + - 'chain' + - 'network' + - 'connector' properties: address: type: 'string' @@ -773,9 +807,9 @@ definitions: type: 'number' example: 12 maxFeePerGas: - type: number + type: 'number' maxPriorityFeePerGas: - type: number + type: 'number' chain: type: 'string' example: 'ethereum' @@ -785,18 +819,21 @@ definitions: connector: type: 'string' example: 'uniswapLP' + decreasePercent: # Cosmos specific + type: 'number' + poolId: # Cosmos specific + type: 'string' + allowedSlippage: # Cosmos specific + type: 'string' LiquidityRemoveResponse: type: 'object' required: - 'network' - 'timestamp' - - 'tokenId' - 'gasPrice' - - 'gasPriceToken' - 'gasLimit' - - 'gasCost' - - 'nonce' + - 'txHash' properties: network: type: 'string' @@ -821,6 +858,26 @@ definitions: txHash: type: 'string' example: '0x0000000000000000000000000000000000000000' + latency: # Cosmos specific + type: 'number' + gasUsed: # Cosmos specific + type: 'string' + gasWanted: # Cosmos specific + type: 'string' + balances: # Cosmos specific + type: 'array' + items: 'object' + required: + - 'amount' + - 'denom' + - 'symbol' + properties: + amount: + type: 'string' + denom: + type: 'string' + symbol: + type: 'string' LiquidityCollectRequest: type: 'object' @@ -887,11 +944,15 @@ definitions: LiquidityPositionRequest: type: 'object' required: - - 'tokenId' + - 'chain' + - 'network' + - 'connector' properties: tokenId: type: 'number' example: 12 + address: # Cosmos specific + type: 'string' chain: type: 'string' example: 'ethereum' @@ -907,16 +968,6 @@ definitions: required: - 'network' - 'timestamp' - - 'tokenId' - - 'token0' - - 'token1' - - 'fee' - - 'lowerPrice' - - 'upperPrice' - - 'amount0' - - 'amount1' - - 'unclaimedToken0' - - 'unclaimedToken1' properties: network: type: 'string' @@ -924,6 +975,9 @@ definitions: timestamp: type: 'integer' example: 1636368085740 + latency: # Cosmos specific + type: 'number' + example: 123 tokenId: type: 'number' example: 12 @@ -954,15 +1008,82 @@ definitions: unclaimedToken1: type: 'string' example: '2' + pools: # Cosmos specific + type: 'array' + items: 'object' + required: + - 'address' + - 'id' + properties: + $typeUrl: + type: 'string' + address: + type: 'string' + example: 'osmo23459697' + id: + type: 'string' + example: 'poolid' + futurePoolGovernor: + type: 'string' + example: 'noidea' + totalShares: + type: 'object' + required: + - 'amount' + - 'denom' + properties: + amount: + type: 'string' + example: 'none' + denom: + type: 'string' + example: 'none' + poolAssets: + type: 'array' + items: 'object' + required: + - 'amount' + - 'denom' + properties: + amount: + type: 'string' + example: 'none' + denom: + type: 'string' + example: 'none' + totalWeight: + type: 'string' + example: 'none' + fees_volume24H: + type: 'number' + example: 1 + fees_spent_7d: + type: 'number' + example: 1 + fees_volume7d: + type: 'number' + example: 1 + myLiquidityShares: + type: 'number' + example: 1 + myLiquidityDollarValue: + type: 'string' + example: '20' + my_bonded_shares: + type: 'string' + example: '20' + denom: + type: 'string' + example: 'none' LiquidityPriceRequest: type: 'object' required: - 'token0' - 'token1' - - 'fee' - - 'period' - - 'interval' + - 'chain' + - 'network' + - 'connector' properties: token0: type: 'string' @@ -979,6 +1100,9 @@ definitions: interval: type: 'number' example: 5 + address: # Cosmos specific + type: 'string' + example: 'osmo123456' chain: type: 'string' example: 'ethereum' @@ -996,9 +1120,6 @@ definitions: - 'timestamp' - 'token0' - 'token1' - - 'fee' - - 'period' - - 'interval' properties: network: type: 'string' @@ -1006,6 +1127,9 @@ definitions: timestamp: type: 'integer' example: 1636368085740 + latency: # Cosmos specific + type: 'number' + example: 123 token0: type: 'string' example: 'DAI' @@ -1024,7 +1148,74 @@ definitions: prices: type: 'object' example: [ '1', '2', '3' ] - + pools: # Cosmos specific + type: 'array' + items: 'object' + required: + - 'address' + - 'id' + properties: + $typeUrl: + type: 'string' + example: '' + address: + type: 'string' + example: 'osmo23459697' + id: + type: 'string' + example: 'poolid' + futurePoolGovernor: + type: 'string' + example: 'noidea' + totalShares: + type: 'object' + required: + - 'amount' + - 'denom' + properties: + amount: + type: 'string' + example: 'none' + denom: + type: 'string' + example: 'none' + poolAssets: + type: 'array' + items: 'object' + required: + - 'amount' + - 'denom' + properties: + amount: + type: 'string' + example: 'none' + denom: + type: 'string' + example: 'none' + totalWeight: + type: 'string' + example: 'none' + fees_volume24H: + type: 'number' + example: 1 + fees_spent_7d: + type: 'number' + example: 1 + fees_volume7d: + type: 'number' + example: 1 + myLiquidityShares: + type: 'number' + example: 1 + myLiquidityDollarValue: + type: 'string' + example: '20' + my_bonded_shares: + type: 'string' + example: '20' + denom: + type: 'string' + example: 'none' PerpPairsRequest: type: 'object' diff --git a/package.json b/package.json index c362effe9b..93be519a2a 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,10 @@ "test:scripts": "jest -i --verbose ./test-scripts/*.test.ts" }, "dependencies": { + "@cosmjs/amino": "^0.32.2", "@cosmjs/proto-signing": "^0.31.1", "@cosmjs/stargate": "^0.31.1", + "@cosmjs/tendermint-rpc": "^0.32.2", "@crocswap/sdk": "^2.4.5", "@ethersproject/abstract-provider": "5.7.0", "@ethersproject/address": "5.7.0", @@ -36,6 +38,7 @@ "@harmony-js/utils": "^0.1.56", "@improbable-eng/grpc-web": "^0.13.0", "@injectivelabs/sdk-ts": "^1.10.58", + "@osmonauts/math": "^1.11.3", "@pancakeswap/sdk": "^4.0.0", "@pancakeswap/smart-router": "^4.2.1", "@pancakeswap/swap-sdk-core": "^1.0.0", @@ -91,6 +94,8 @@ "minimist": "^1.2.6", "morgan": "^1.10.0", "near-api-js": "1.0.0", + "osmo-query": "16.5.2", + "osmojs": "16.5.1", "promise-retry": "^2.0.1", "quickswap-sdk": "^3.0.8", "quipuswap-v3-sdk": "^0.0.7", diff --git a/src/amm/amm.controllers.ts b/src/amm/amm.controllers.ts index a04db850cd..edac86072b 100644 --- a/src/amm/amm.controllers.ts +++ b/src/amm/amm.controllers.ts @@ -81,11 +81,17 @@ import { Algorand } from '../chains/algorand/algorand'; import { Tinyman } from '../connectors/tinyman/tinyman'; import { Plenty } from '../connectors/plenty/plenty'; import { QuipuSwap } from '../connectors/quipuswap/quipuswap'; +import { Osmosis } from '../chains/osmosis/osmosis'; +import { AMOUNT_NOT_SUPPORTED_ERROR_CODE, ENDPOINT_NOT_SUPPORTED_ERROR_MESSAGE, HttpException } from '../services/error-handler'; export async function price(req: PriceRequest): Promise { const chain = await getInitializedChain< - Algorand | Ethereumish | Nearish | Tezosish + Algorand | Ethereumish | Nearish | Tezosish | Osmosis >(req.chain, req.network); + if (chain instanceof Osmosis){ + return chain.controller.price(chain as unknown as Osmosis, req); + } + const connector: Uniswapish | RefAMMish | Tinyman | Plenty | QuipuSwap = await getConnector( req.chain, @@ -109,8 +115,12 @@ export async function price(req: PriceRequest): Promise { export async function trade(req: TradeRequest): Promise { const chain = await getInitializedChain< - Algorand | Ethereumish | Nearish | Tezosish + Algorand | Ethereumish | Nearish | Tezosish | Osmosis >(req.chain, req.network); + if (chain instanceof Osmosis){ + return chain.controller.trade(chain as unknown as Osmosis, req); + } + const connector: Uniswapish | RefAMMish | Tinyman | Plenty | QuipuSwap = await getConnector( req.chain, @@ -135,7 +145,10 @@ export async function trade(req: TradeRequest): Promise { export async function addLiquidity( req: AddLiquidityRequest ): Promise { - const chain = await getInitializedChain(req.chain, req.network); + const chain = await getInitializedChain(req.chain, req.network); + if (chain instanceof Osmosis){ + return chain.controller.addLiquidity(chain as unknown as Osmosis, req); + } const connector: UniswapLPish = await getConnector( req.chain, req.network, @@ -148,7 +161,10 @@ export async function addLiquidity( export async function reduceLiquidity( req: RemoveLiquidityRequest ): Promise { - const chain = await getInitializedChain(req.chain, req.network); + const chain = await getInitializedChain(req.chain, req.network); + if (chain instanceof Osmosis){ + return chain.controller.removeLiquidity(chain as unknown as Osmosis, req); + } const connector: UniswapLPish = await getConnector( req.chain, req.network, @@ -161,7 +177,14 @@ export async function reduceLiquidity( export async function collectFees( req: CollectEarnedFeesRequest ): Promise { - const chain = await getInitializedChain(req.chain, req.network); + const chain = await getInitializedChain(req.chain, req.network); + if (chain instanceof Osmosis){ + throw new HttpException( + 500, + ENDPOINT_NOT_SUPPORTED_ERROR_MESSAGE, + AMOUNT_NOT_SUPPORTED_ERROR_CODE + ); + } const connector: UniswapLPish = await getConnector( req.chain, req.network, @@ -173,7 +196,10 @@ export async function collectFees( export async function positionInfo( req: PositionRequest ): Promise { - const chain = await getInitializedChain(req.chain, req.network); + const chain = await getInitializedChain(req.chain, req.network); + if (chain instanceof Osmosis){ + return chain.controller.poolPositions(chain as unknown as Osmosis, req); + } const connector: UniswapLPish = await getConnector( req.chain, req.network, @@ -185,7 +211,10 @@ export async function positionInfo( export async function poolPrice( req: PoolPriceRequest ): Promise { - const chain = await getInitializedChain(req.chain, req.network); + const chain = await getInitializedChain(req.chain, req.network); + if (chain instanceof Osmosis){ + return chain.controller.poolPrice(chain as unknown as Osmosis, req); + } const connector: UniswapLPish = await getConnector( req.chain, req.network, @@ -198,8 +227,12 @@ export async function estimateGas( req: NetworkSelectionRequest ): Promise { const chain = await getInitializedChain< - Algorand | Ethereumish | Nearish | Tezosish + Algorand | Ethereumish | Nearish | Tezosish | Osmosis >(req.chain, req.network); + if (chain instanceof Osmosis){ + return chain.controller.estimateGas(chain as unknown as Osmosis); + } + const connector: Uniswapish | RefAMMish | Tinyman | Plenty | QuipuSwap = await getConnector( req.chain, diff --git a/src/amm/amm.requests.ts b/src/amm/amm.requests.ts index 5a41ac03fc..e0c72e20d0 100644 --- a/src/amm/amm.requests.ts +++ b/src/amm/amm.requests.ts @@ -1,3 +1,4 @@ +import { CoinAndSymbol, SerializableExtendedPool as CosmosSerializableExtendedPool } from '../chains/osmosis/osmosis.types'; import { PerpPosition } from '../connectors/perp/perp'; import { NetworkSelectionRequest, @@ -29,24 +30,27 @@ export interface PriceResponse { gasPrice: number; gasPriceToken: string; gasLimit: number; - gasCost: string; + gasCost: string; // also gasUsed for Cosmos prices + gasWanted?: string; } export interface PoolPriceRequest extends NetworkSelectionRequest { token0: string; token1: string; - fee: string; - period: number; - interval: number; + address?: string + fee?: string; + period?: number; + interval?: number; } export interface PoolPriceResponse { token0: string; token1: string; - fee: string; - period: number; - interval: number; - prices: string[]; + fee?: string; + period?: number; + interval?: number; + prices?: string[]; + pools?: CosmosSerializableExtendedPool[]; network: string; timestamp: number; latency: number; @@ -71,32 +75,38 @@ export interface TradeResponse { latency: number; base: string; quote: string; - amount: string; + amount: string; // traderequest.amount + finalAmountReceived?: string; // Cosmos rawAmount: string; + finalAmountReceived_basetoken?: string; // Cosmos expectedIn?: string; - expectedOut?: string; - price: string; + expectedOut?: string; // Cosmos: expectedAmountReceived + expectedPrice?: string; // Cosmos + price: string; // Cosmos: finalPrice gasPrice: number; gasPriceToken: string; gasLimit: number; - gasCost: string; + gasWanted?: string; // Cosmos + gasCost: string; // Cosmos: gasUsed nonce?: number; txHash: string | any | undefined; } -export interface AddLiquidityRequest extends NetworkSelectionRequest { +export interface AddLiquidityRequest extends NetworkSelectionRequest { // now also cosmos add swap position OR cosmos add LP position address: string; token0: string; token1: string; amount0: string; amount1: string; - fee: string; - lowerPrice: string; // integer as string - upperPrice: string; // integer as string + fee?: string; + lowerPrice?: string; // integer as string // COSMOS - using this != undefined then call addpositionLP(), else: addposition() + upperPrice?: string; // integer as string tokenId?: number; nonce?: number; maxFeePerGas?: string; maxPriorityFeePerGas?: string; + poolId?: string; // COSMOS: will select one for you if not provided + allowedSlippage?: string; // COSMOS: used to calc TokenMinAmount } export interface AddLiquidityResponse { @@ -106,18 +116,24 @@ export interface AddLiquidityResponse { token0: string; token1: string; fee: string; - tokenId: number; - gasPrice: number; + tokenId?: number; + poolId?: string; // COSMOS + gasPrice: number | string; // COSMOS: string gasPriceToken: string; gasLimit: number; - gasCost: string; + gasCost: string; // gasUsed for Cosmos + gasWanted?: string; nonce: number; txHash: string | undefined; + poolAddress?: string; // Cosmos only + poolShares?: string; // Cosmos only + token0FinalAmount?: string; // Cosmos only + token1FinalAmount?: string; // Cosmos only } export interface CollectEarnedFeesRequest extends NetworkSelectionRequest { address: string; - tokenId: number; + tokenId?: number; nonce?: number; maxFeePerGas?: string; maxPriorityFeePerGas?: string; @@ -125,26 +141,34 @@ export interface CollectEarnedFeesRequest extends NetworkSelectionRequest { export interface RemoveLiquidityRequest extends CollectEarnedFeesRequest { decreasePercent?: number; + poolId?: string; // Cosmos: required + allowedSlippage?: string; } export interface RemoveLiquidityResponse { network: string; timestamp: number; latency: number; - tokenId: number; - gasPrice: number; + tokenId?: number; + gasPrice: number | string; // COSMOS: string gasPriceToken: string; - gasLimit: number; - gasCost: string; - nonce: number; + gasLimit: number | string; + gasCost: string; // gasUsed for Cosmos + nonce?: number; txHash: string | undefined; + gasWanted?: string; + balances?: CoinAndSymbol[]; + poolId?: string; // Cosmos } export interface PositionRequest extends NetworkSelectionRequest { - tokenId: number; + tokenId?: number; + address?: string; + poolId?: string; } export interface PositionResponse extends LPPositionInfo { + pools?: CosmosSerializableExtendedPool[]; network: string; timestamp: number; latency: number; diff --git a/src/amm/amm.validators.ts b/src/amm/amm.validators.ts index 329b5609c2..eb22cf7898 100644 --- a/src/amm/amm.validators.ts +++ b/src/amm/amm.validators.ts @@ -11,11 +11,16 @@ import { validateChain, validateNetwork, validateNonce, - validateAddress, validateMaxFeePerGas, validateMaxPriorityFeePerGas, + isAddress as isEthereumAddress, + invalidAddressError, } from '../chains/ethereum/ethereum.validators'; +import { + isValidCosmosAddress +} from '../chains/cosmos/cosmos.validators'; + import { FeeAmount } from '@uniswap/v3-sdk'; export const invalidConnectorError: string = @@ -63,6 +68,13 @@ export const validateConnector: Validator = mkValidator( (val) => typeof val === 'string' ); +// given a request, look for a key called address that is an Ethereum or Cosmos wallet +export const validateAddress: Validator = mkValidator( + 'address', + invalidAddressError, + (val) => typeof val === 'string' && (isEthereumAddress(val) || isValidCosmosAddress(val)) +); + export const validateQuote: Validator = mkValidator( 'quote', invalidQuoteError, @@ -121,8 +133,7 @@ export const validateFee: Validator = mkValidator( 'fee', invalidFeeTier, (val) => - typeof val === 'string' && - Object.keys(FeeAmount).includes(val.toUpperCase()) + typeof val === 'string' && Object.keys(FeeAmount).includes(val.toUpperCase()) ); export const validateLowerPrice: Validator = mkValidator( @@ -155,6 +166,14 @@ export const validateTokenId: Validator = mkValidator( true ); +export const validatePoolId: Validator = mkValidator( + 'poolId', + invalidTokenIdError, + (val) => + (typeof val === 'string' && BigInt(val) >= 0), + true +); + export const validatePeriod: Validator = mkValidator( 'period', invalidTimeError, @@ -181,7 +200,7 @@ export const validateDecreasePercent: Validator = mkValidator( export const validateAllowedSlippage: Validator = mkValidator( 'allowedSlippage', invalidAllowedSlippageError, - (val) => typeof val === 'string' && isFractionString(val), + (val) => typeof val === 'string' && (isFractionString(val) || val.includes('%')), true ); @@ -293,6 +312,7 @@ export const validateAddLiquidityRequest: RequestValidator = mkRequestValidator( validateNonce, validateMaxFeePerGas, validateMaxPriorityFeePerGas, + validatePoolId, ] ); @@ -325,6 +345,8 @@ export const validatePositionRequest: RequestValidator = mkRequestValidator([ validateChain, validateNetwork, validateTokenId, + validateAddress, + validatePoolId, ]); export const validatePoolPriceRequest: RequestValidator = mkRequestValidator([ diff --git a/src/chains/cosmos/cosmos-base.ts b/src/chains/cosmos/cosmos-base.ts index 11a2f393dc..4b57295b9b 100644 --- a/src/chains/cosmos/cosmos-base.ts +++ b/src/chains/cosmos/cosmos-base.ts @@ -1,12 +1,12 @@ import axios from 'axios'; import { promises as fs } from 'fs'; -import { TokenListType, TokenValue, walletPath } from '../../services/base'; +import { TokenListType, stringInsert, walletPath } from '../../services/base'; import NodeCache from 'node-cache'; import fse from 'fs-extra'; import { ConfigManagerCertPassphrase } from '../../services/config-manager-cert-passphrase'; -import { BigNumber } from 'ethers'; +import { BigNumber } from 'bignumber.js'; import { AccountData, DirectSignResponse } from '@cosmjs/proto-signing'; - +import { Asset, AssetDenomUnit, AssetTrace } from '@chain-registry/types/types/assets' import { IndexedTx, setupIbcExtension } from '@cosmjs/stargate'; import { logger } from '../../services/logger'; @@ -15,16 +15,81 @@ const { DirectSecp256k1Wallet } = require('@cosmjs/proto-signing'); const { StargateClient } = require('@cosmjs/stargate'); const { toBase64, fromBase64, fromHex } = require('@cosmjs/encoding'); const crypto = require('crypto').webcrypto; -export interface Token { - base: string; - address: string; + +import { osmosis } from 'osmojs'; +import { getEIP1559DynamicBaseFee } from '../osmosis/osmosis.prices'; +const { createRPCQueryClient } = osmosis.ClientFactory; + +export class CosmosAsset implements Asset { + decimals: number = 0; + constructor(asset: Asset){ + this.decimals = getExponentForAsset(asset); + this.description = asset.description; + if (asset.address != null){ + this.address = asset.address; + } + this.base = asset.base; + this.name = asset.name; + this.display = asset.display; + this.symbol = asset.symbol; + this.logo_URIs = asset.logo_URIs; + if (asset.denom_units){ + this.denom_units = asset.denom_units; + } + if (asset.coingecko_id){ + this.coingecko_id = asset.coingecko_id; + } + if (asset.keywords){ + this.keywords = asset.keywords; + } + if (asset.traces){ + this.traces = asset.traces; + } + if (asset.ibc){ + this.ibc = asset.ibc; + } + } + description?: string; + type_asset?: string; + address: string = ''; + denom_units: AssetDenomUnit[] = []; + base: string; // this is denom!!! name: string; + display: string; symbol: string; + logo_URIs?: { + png?: string; + svg?: string; + jpeg?: string; + }; + coingecko_id?: string; + keywords?: string[]; + traces?: AssetTrace[]; + ibc?: { + source_channel?: string; + source_denom?: string; + dst_channel?: string; + }; +} + +// a nice way to represent the token value without carrying around as a string +export interface CosmosTokenValue { + value: BigNumber; decimals: number; } +const getExponentForAsset = (asset: Asset): number => { + if (asset && asset.denom_units){ + const unit = asset.denom_units.find(({ denom }) => denom === asset.display); + if (unit){ + return unit.exponent; + } + } + return 0 +}; + export interface CosmosWallet { - privKey: Uint8Array; + privkey: Uint8Array; pubkey: Uint8Array; prefix: 'string'; getAccounts(): [AccountData]; @@ -53,13 +118,38 @@ export type NewBlockHandler = (bn: number) => void; export type NewDebugMsgHandler = (msg: any) => void; + +// convert a BigNumber and the number of decimals into a numeric string. +// this makes it JavaScript compatible while preserving all the data. +export const bigNumberWithDecimalToStr = (n: BigNumber, d: number): string => { + const n_ = n.toString(); + + let zeros = ''; + + if (n_.length <= d) { + zeros = '0'.repeat(d - n_.length + 1); + } + + return stringInsert(n_.split('').reverse().join('') + zeros, '.', d) + .split('') + .reverse() + .join(''); +}; + +// we should turn Token into a string when we return as a value in an API call +export const tokenValueToString = (t: CosmosTokenValue | string): string => { + return typeof t === 'string' + ? t + : bigNumberWithDecimalToStr(t.value, t.decimals); +}; + export class CosmosBase { - private _provider; - protected tokenList: Token[] = []; - private _tokenMap: Record = {}; + public _provider: any = undefined; + protected tokenList: CosmosAsset[] = []; + protected _tokenMap: Record = {}; - private _ready: boolean = false; - private _initialized: Promise = Promise.resolve(false); + public _ready: boolean = false; + public _initialized: Promise = Promise.resolve(false); public chainName; public rpcUrl; @@ -68,20 +158,29 @@ export class CosmosBase { public tokenListType: TokenListType; public cache: NodeCache; + public manualGasPrice: number; + public rpcAddressDynamicBaseFee: string; + public useEIP1559DynamicBaseFeeInsteadOfManualGasPrice: boolean; + constructor( chainName: string, rpcUrl: string, tokenListSource: string, tokenListType: TokenListType, - gasPriceConstant: number + gasPriceConstant: number, // adjustment + useEIP1559DynamicBaseFeeInsteadOfManualGasPrice?: boolean, + rpcAddressDynamicBaseFee?: string, + manualGasPrice?: number ) { - this._provider = StargateClient.connect(rpcUrl); + this.manualGasPrice = manualGasPrice!; this.chainName = chainName; this.rpcUrl = rpcUrl; this.gasPriceConstant = gasPriceConstant; this.tokenListSource = tokenListSource; this.tokenListType = tokenListType; this.cache = new NodeCache({ stdTTL: 3600 }); // set default cache ttl to 1hr + this.useEIP1559DynamicBaseFeeInsteadOfManualGasPrice = useEIP1559DynamicBaseFeeInsteadOfManualGasPrice! + this.rpcAddressDynamicBaseFee = rpcAddressDynamicBaseFee! } ready(): boolean { @@ -95,6 +194,12 @@ export class CosmosBase { async init(): Promise { await this._initialized; // Wait for any previous init() calls to complete if (!this.ready()) { + if (this.chainName == 'osmosis'){ + this._provider = await createRPCQueryClient({rpcEndpoint: this.rpcUrl}); + await this.getLatestBasePrice(); + }else{ + this._provider = StargateClient.connect(this.rpcUrl); + } // If we're not ready, this._initialized will be a Promise that resolves after init() completes this._initialized = (async () => { try { @@ -110,6 +215,18 @@ export class CosmosBase { return; } + async getLatestBasePrice(): Promise { + var eipPrice = this.manualGasPrice; + if (this.useEIP1559DynamicBaseFeeInsteadOfManualGasPrice){ + const eipPrice = await getEIP1559DynamicBaseFee(this.rpcAddressDynamicBaseFee); + if (eipPrice != ''){ + this.manualGasPrice = Number(eipPrice); + } + } + this.manualGasPrice = eipPrice; + return this.manualGasPrice + } + async loadTokens( tokenListSource: string, tokenListType: TokenListType @@ -118,7 +235,7 @@ export class CosmosBase { if (this.tokenList) { this.tokenList.forEach( - (token: Token) => (this._tokenMap[token.symbol] = token) + (token: CosmosAsset) => (this._tokenMap[token.symbol] = token) ); } } @@ -127,25 +244,31 @@ export class CosmosBase { async getTokenList( tokenListSource: string, tokenListType: TokenListType - ): Promise { - let tokens; + ): Promise { + let tokens: CosmosAsset[] = []; + let tokensJson = []; + if (tokenListType === 'URL') { - ({ data: tokens } = await axios.get(tokenListSource)); + ({ data: tokensJson } = await axios.get(tokenListSource)); } else { - ({ tokens } = JSON.parse(await fs.readFile(tokenListSource, 'utf8'))); + ({ tokensJson } = JSON.parse(await fs.readFile(tokenListSource, 'utf8'))); + } + for (var tokenAssetIdx=0; tokenAssetIdx> { - const balances: Record = {}; + async getBalances(wallet: CosmosWallet): Promise> { + const balances: Record = {}; const provider = await this._provider; @@ -332,7 +455,7 @@ export class CosmosBase { // Not all tokens are added in the registry so we use the denom if the token doesn't exist balances[token ? token.symbol : t.denom] = { - value: BigNumber.from(parseInt(t.amount, 10)), + value: new BigNumber(parseInt(t.amount, 10)), decimals: this.getTokenDecimals(token), }; }) @@ -344,7 +467,12 @@ export class CosmosBase { // returns a cosmos tx for a txHash async getTransaction(id: string): Promise { const provider = await this._provider; - const transaction = await provider.getTx(id); + var transaction; + if (this.chainName == 'osmosis'){ + transaction = await provider.cosmos.tx.v1beta1.getTx({hash: id}); + }else{ + transaction = await provider.getTx(id); + } if (!transaction) { throw new Error('Transaction not found'); @@ -353,14 +481,14 @@ export class CosmosBase { return transaction; } - public getTokenBySymbol(tokenSymbol: string): Token | undefined { + public getTokenBySymbol(tokenSymbol: string): CosmosAsset | undefined { return this.tokenList.find( - (token: Token) => token.symbol.toUpperCase() === tokenSymbol.toUpperCase() + (token: CosmosAsset) => token.symbol.toUpperCase() === tokenSymbol.toUpperCase() ); } - public getTokenByBase(base: string): Token | undefined { - return this.tokenList.find((token: Token) => token.base === base); + public getTokenByBase(base: string): CosmosAsset | undefined { + return this.tokenList.find((token: CosmosAsset) => token.base === base); } async getCurrentBlockNumber(): Promise { @@ -368,4 +496,4 @@ export class CosmosBase { return await provider.getHeight(); } -} +} \ No newline at end of file diff --git a/src/chains/cosmos/cosmos.controllers.ts b/src/chains/cosmos/cosmos.controllers.ts index ce4b8c9629..311f867497 100644 --- a/src/chains/cosmos/cosmos.controllers.ts +++ b/src/chains/cosmos/cosmos.controllers.ts @@ -1,6 +1,5 @@ import { Cosmos } from './cosmos'; import { CosmosBalanceRequest, CosmosPollRequest } from './cosmos.requests'; -import { TokenValue, tokenValueToString } from '../../services/base'; import { HttpException, TOKEN_NOT_SUPPORTED_ERROR_CODE, @@ -10,11 +9,12 @@ import { validateCosmosBalanceRequest, validateCosmosPollRequest, } from './cosmos.validators'; +import { CosmosTokenValue, tokenValueToString } from './cosmos-base'; const { decodeTxRaw } = require('@cosmjs/proto-signing'); export const toCosmosBalances = ( - balances: Record, + balances: Record, tokenSymbols: Array ): Record => { const walletBalances: Record = {}; @@ -22,7 +22,7 @@ export const toCosmosBalances = ( tokenSymbols.forEach((symbol) => { let balance = '0.0'; - if (balances[symbol]) { + if (balances[symbol]) {// && !balances[symbol].value.eq(0)) { // is check necessary here or filtered in client? balance = tokenValueToString(balances[symbol]); } diff --git a/src/chains/cosmos/cosmos.validators.ts b/src/chains/cosmos/cosmos.validators.ts index c913931ffd..d0a73d9855 100644 --- a/src/chains/cosmos/cosmos.validators.ts +++ b/src/chains/cosmos/cosmos.validators.ts @@ -7,9 +7,12 @@ import { validateTxHash, } from '../../services/validators'; import { normalizeBech32 } from '@cosmjs/encoding'; +// const { fromHex } = require('@cosmjs/encoding'); export const invalidCosmosAddressError: string = 'The spender param is not a valid Cosmos address. (Bech32 format)'; +// export const invalidCosmosPrivateKeyError: string = + // 'The privateKey param is not a valid Cosmos private key.'; export const isValidCosmosAddress = (str: string): boolean => { try { @@ -20,6 +23,15 @@ export const isValidCosmosAddress = (str: string): boolean => { return false; } }; +// export const isValidCosmosPrivateKey = (str: string): boolean => { +// try { +// fromHex(str); + +// return true; +// } catch (e) { +// return false; +// } +// }; // given a request, look for a key called address that is a Cosmos address export const validatePublicKey: Validator = mkValidator( @@ -34,3 +46,9 @@ export const validateCosmosBalanceRequest: RequestValidator = export const validateCosmosPollRequest: RequestValidator = mkRequestValidator([ validateTxHash, ]); + +// export const validatePrivateKey: Validator = mkValidator( +// 'privateKey', +// invalidCosmosPrivateKeyError, +// (val) => typeof val === 'string' && isValidCosmosPrivateKey(val) +// ); \ No newline at end of file diff --git a/src/chains/osmosis/osmosis.apr.ts b/src/chains/osmosis/osmosis.apr.ts new file mode 100755 index 0000000000..a8af00649e --- /dev/null +++ b/src/chains/osmosis/osmosis.apr.ts @@ -0,0 +1,31 @@ +import { calcPoolAprs as _calcPoolAprs } from '@osmonauts/math'; + +import { CalcPoolAprsParams } from './osmosis.types'; + +// need to pass this tokenList from osmosis.ts... +export const calcPoolAprs = ({ + activeGauges, + pool, + prices, + superfluidPools, + aprSuperfluid, + lockupDurations, + volume7d, + swapFee, + lockup = '14', + includeNonPerpetual = true, +}: CalcPoolAprsParams) => { + return _calcPoolAprs({ + activeGauges, + pool, + assets: [], + prices, + superfluidPools, + aprSuperfluid, + lockupDurations, + volume7d, + swapFee, + lockup, + includeNonPerpetual, + }); +}; diff --git a/src/chains/osmosis/osmosis.config.ts b/src/chains/osmosis/osmosis.config.ts new file mode 100755 index 0000000000..d698e7e000 --- /dev/null +++ b/src/chains/osmosis/osmosis.config.ts @@ -0,0 +1,59 @@ +import { AvailableNetworks } from '../../services/config-manager-types'; +import { ConfigManagerV2 } from '../../services/config-manager-v2'; +import { TokenListType } from '../../services/base'; + +export namespace OsmosisConfig { + export interface NetworkConfig { + chainType: string; + chainId: (network: string) => string; + rpcURL: (network: string) => string; + tokenListType: (network: string) => TokenListType; + tokenListSource: (network: string) => string; + availableNetworks: Array; + tradingTypes: (type: string) => Array; + nativeCurrencySymbol: string; + + feeTier: string; + gasAdjustment: number; + gasLimitTransaction: string; + manualGasPrice: number; + manualGasPriceToken: string; + allowedSlippage: string; + rpcAddressDynamicBaseFee: string; + useEIP1559DynamicBaseFeeInsteadOfManualGasPrice: boolean; + } + + export const config: NetworkConfig = { + chainType: 'osmosis', + chainId: (network: string) => + ConfigManagerV2.getInstance().get(`osmosis.networks.${network}.chainId`), + rpcURL: (network: string) => + ConfigManagerV2.getInstance().get(`osmosis.networks.${network}.nodeURL`), + tokenListType: (network: string) => + ConfigManagerV2.getInstance().get( + `osmosis.networks.${network}.tokenListType` + ), + tokenListSource: (network: string) => + ConfigManagerV2.getInstance().get( + `osmosis.networks.${network}.tokenListSource` + ), + availableNetworks: [ + { + chain: 'osmosis', + networks: ['mainnet', 'testnet'], + }, + ], + tradingTypes: (type: string) => { + return type === 'swap' ? ['AMM_LP'] : ['AMM_LP']; + }, + manualGasPrice: ConfigManagerV2.getInstance().get(`osmosis.manualGasPrice`), + manualGasPriceToken: ConfigManagerV2.getInstance().get(`osmosis.manualGasPriceToken`), + nativeCurrencySymbol: ConfigManagerV2.getInstance().get(`osmosis.nativeCurrencySymbol`), + gasLimitTransaction: ConfigManagerV2.getInstance().get(`osmosis.gasLimitTransaction`), + gasAdjustment: ConfigManagerV2.getInstance().get(`osmosis.gasAdjustment`), + allowedSlippage: ConfigManagerV2.getInstance().get(`osmosis.allowedSlippage`), + feeTier: ConfigManagerV2.getInstance().get(`osmosis.feeTier`), + useEIP1559DynamicBaseFeeInsteadOfManualGasPrice: ConfigManagerV2.getInstance().get(`osmosis.useEIP1559DynamicBaseFeeInsteadOfManualGasPrice`), + rpcAddressDynamicBaseFee: ConfigManagerV2.getInstance().get(`osmosis.rpcAddressDynamicBaseFee`), + }; +} \ No newline at end of file diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts new file mode 100755 index 0000000000..b7b928e798 --- /dev/null +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -0,0 +1,778 @@ + +import { + HttpException, + LOAD_WALLET_ERROR_CODE, + LOAD_WALLET_ERROR_MESSAGE, + PRICE_FAILED_ERROR_CODE, + PRICE_FAILED_ERROR_MESSAGE, + TRADE_FAILED_ERROR_CODE, + TRADE_FAILED_ERROR_MESSAGE, + SWAP_PRICE_EXCEEDS_LIMIT_PRICE_ERROR_CODE, + SWAP_PRICE_EXCEEDS_LIMIT_PRICE_ERROR_MESSAGE, + SWAP_PRICE_LOWER_THAN_LIMIT_PRICE_ERROR_CODE, + SWAP_PRICE_LOWER_THAN_LIMIT_PRICE_ERROR_MESSAGE, + UNKNOWN_ERROR_ERROR_CODE, + UNKNOWN_ERROR_MESSAGE +} from '../../services/error-handler'; +import { CosmosAsset, CosmosWallet } from '../../chains/cosmos/cosmos-base'; +import { AnyTransactionResponse, OsmosisExpectedTrade, TransactionEvent, TransactionEventAttribute, } from './osmosis.types' +import { latency } from '../../services/base'; +import { + CustomTransaction, + Tokenish, +} from '../../services/common-interfaces'; +import { logger } from '../../services/logger'; +import { + EstimateGasResponse, + PriceRequest, + TradeRequest, + AddLiquidityRequest, + AddLiquidityResponse, + PoolPriceRequest, + PoolPriceResponse, + RemoveLiquidityRequest, + RemoveLiquidityResponse, + PositionRequest, + PositionResponse, + TradeResponse, + PriceResponse, +} from '../../amm/amm.requests'; +import { Osmosis } from './osmosis'; + +import BigNumber from 'bignumber.js'; +import { Decimal } from 'decimal.js-light'; +import { CosmosAsset as TokenishCosmosAsset} from '../../chains/cosmos/cosmos-base'; +import { TokensRequest, TokensResponse } from '../../network/network.requests'; +import { TransferRequest, TransferResponse } from '../../services/common-interfaces'; +import { validateCosmosBalanceRequest, validateCosmosPollRequest } from '../cosmos/cosmos.validators'; +import { CosmosBalanceRequest, CosmosPollRequest } from '../cosmos/cosmos.requests'; +import { toCosmosBalances } from '../cosmos/cosmos.controllers'; +import { AllowancesRequest, ApproveRequest, CancelRequest, NonceRequest, NonceResponse } from '../chain.requests'; +import { TOKEN_NOT_SUPPORTED_ERROR_MESSAGE, TOKEN_NOT_SUPPORTED_ERROR_CODE, OUT_OF_GAS_ERROR_MESSAGE, OUT_OF_GAS_ERROR_CODE, INSUFFICIENT_FUNDS_ERROR_MESSAGE, INSUFFICIENT_FUNDS_ERROR_CODE } from '../../services/error-handler'; +const { decodeTxRaw } = require('@cosmjs/proto-signing'); + +const successfulTransaction = 0; +const insufficientFunds = 5; +const outOfGas = 11; + +export interface TradeInfo { + baseToken: TokenishCosmosAsset; + quoteToken: TokenishCosmosAsset; + requestAmount: BigNumber; + expectedTrade: OsmosisExpectedTrade; +} + +export async function getOsmoWallet( + osmosis: Osmosis, + address: string, +): Promise<{ + wallet: CosmosWallet; +}> { + let wallet: CosmosWallet; + try { + wallet = await osmosis.getWallet(address, 'osmosis'); + } catch (err) { + logger.error(`Wallet ${address} not available.`); + throw new HttpException( + 500, + LOAD_WALLET_ERROR_MESSAGE + err, + LOAD_WALLET_ERROR_CODE + ); + } + return { wallet }; +} + +export class OsmosisController { + + static async getTradeInfo( + osmosis: Osmosis, + baseAsset: string, + quoteAsset: string, + baseAmount: Decimal, + tradeSide: string, + ): Promise { + const gasAdjustment = osmosis.gasPriceConstant; // + const feeTier = osmosis.feeTier; // + const allowedSlippage = osmosis.allowedSlippage; // + + const baseToken: Tokenish = osmosis.getTokenBySymbol(baseAsset)!; + const quoteToken: Tokenish = osmosis.getTokenBySymbol(quoteAsset)!; + + if (baseToken == undefined){ + throw new HttpException( + 500, + TOKEN_NOT_SUPPORTED_ERROR_MESSAGE + ' ' + baseAsset, + TOKEN_NOT_SUPPORTED_ERROR_CODE + ); + } + if (quoteToken == undefined){ + throw new HttpException( + 500, + TOKEN_NOT_SUPPORTED_ERROR_MESSAGE + ' ' + quoteAsset, + TOKEN_NOT_SUPPORTED_ERROR_CODE + ); + } + + const requestAmount: BigNumber = BigNumber( + baseAmount.toFixed(baseToken.decimals) + ); + + let expectedTrade: OsmosisExpectedTrade; + expectedTrade = await osmosis.estimateTrade( + quoteToken, + baseToken, + requestAmount, + tradeSide, + allowedSlippage, + feeTier, + gasAdjustment, + ); + + return { + baseToken, + quoteToken, + requestAmount, + expectedTrade, + }; + } + + static async price( + osmosis: Osmosis, + req: PriceRequest + ): Promise { + const startTimestamp: number = Date.now(); + + const gasPrice = osmosis.manualGasPrice; // GAS PRICE PER UNIT OF WORK + const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION + + let tradeInfo: TradeInfo; + try { + tradeInfo = await this.getTradeInfo( + osmosis, + req.base, + req.quote, + new Decimal(req.amount), + req.side, + ); + } catch (e) { + if (e instanceof Error) { + throw new HttpException( + 500, + PRICE_FAILED_ERROR_MESSAGE + e.message, + PRICE_FAILED_ERROR_CODE + ); + } else { + throw new HttpException( + 500, + UNKNOWN_ERROR_MESSAGE + ' Failed to retrive trade info.', + UNKNOWN_ERROR_ERROR_CODE + ); + } + } + + const trade = tradeInfo.expectedTrade; + const expectedAmount = tradeInfo.expectedTrade.expectedAmount; + const tradePrice = trade.executionPrice; + + + return { + network: osmosis.chainName, + timestamp: startTimestamp, + latency: latency(startTimestamp, Date.now()), + base: tradeInfo.baseToken.symbol, + quote: tradeInfo.quoteToken.symbol, + amount: new Decimal(req.amount).toFixed(tradeInfo.baseToken.decimals), + rawAmount: tradeInfo.requestAmount.toString(), + expectedAmount: expectedAmount.toString(), + price: tradePrice.toString(), + gasPrice: Number(gasPrice), + gasLimit: Number(gasLimitTransaction), + gasCost: tradeInfo.expectedTrade.gasUsed, + gasWanted: tradeInfo.expectedTrade.gasWanted, + gasPriceToken: 'uosmo' + }; + } + + static async trade( + osmosis: Osmosis, + req: TradeRequest + ): Promise { + const startTimestamp: number = Date.now(); + + const limitPrice = req.limitPrice; + const { wallet } = + await getOsmoWallet( + osmosis, + req.address, + ); + + let tradeInfo: TradeInfo; + try { + tradeInfo = await this.getTradeInfo( + osmosis, + req.base, + req.quote, + new Decimal(req.amount), + req.side + ); + } catch (e) { + if (e instanceof Error) { + logger.error(`Could not get trade info. ${e.message}`); + throw new HttpException( + 500, + TRADE_FAILED_ERROR_MESSAGE + ' ' + e.message, + TRADE_FAILED_ERROR_CODE + ); + } else { + logger.error('Unknown error trying to get trade info.'); + throw new HttpException( + 500, + UNKNOWN_ERROR_MESSAGE + ' Failed to retrive trade info.', + UNKNOWN_ERROR_ERROR_CODE + ); + } + } + + const price = tradeInfo.expectedTrade.executionPrice; + + const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION + const gasAdjustment = osmosis.gasPriceConstant; // + const feeTier = osmosis.feeTier; // + + if (req.side === 'BUY') { + + if ( + limitPrice && + new Decimal(price.toFixed(8)).gt(new Decimal(limitPrice)) + ) { + logger.error('Swap price exceeded limit price.'); + throw new HttpException( + 500, + SWAP_PRICE_EXCEEDS_LIMIT_PRICE_ERROR_MESSAGE( + price.toFixed(8), + limitPrice + ), + SWAP_PRICE_EXCEEDS_LIMIT_PRICE_ERROR_CODE + ); + } + + } + else { + logger.info( + `Expected execution price is ${price.toFixed(6)}, ` + + `limit price is ${limitPrice}.` + ); + if ( + limitPrice && + new Decimal(price.toFixed(8)).lt(new Decimal(limitPrice)) + ) { + logger.error('Swap price lower than limit price.'); + throw new HttpException( + 500, + SWAP_PRICE_LOWER_THAN_LIMIT_PRICE_ERROR_MESSAGE( + price.toFixed(8), + limitPrice + ), + SWAP_PRICE_LOWER_THAN_LIMIT_PRICE_ERROR_CODE + ); + } + } + + const tx = await osmosis.executeTrade( + wallet, + tradeInfo, + req.address, + req.allowedSlippage, + feeTier, + gasAdjustment, + ); + + const txMessage = 'Trade has been executed. ' + this.validateTxErrors(tx, txMessage); + + var finalAmountReceived_string = ''; + for (var txEvent_idx=0; txEvent_idx { + const startTimestamp: number = Date.now(); + + const { wallet } = + await getOsmoWallet( + osmosis, + req.address, + ); + + const token0: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token0)!; + const token1: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token1)!; + + const gasPrice = osmosis.manualGasPrice; // GAS PRICE PER UNIT OF WORK + const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION + const gasAdjustment = osmosis.gasPriceConstant; // + const feeTier = osmosis.feeTier; // + + const tx = await osmosis.addPosition( + wallet, + req.address, + token0, + token1, + req.amount0, + req.amount1, + req.poolId, + req.allowedSlippage, + feeTier, + gasAdjustment, + ); + + this.validateTxErrors(tx, "Liquidity added. "); + + return { + network: osmosis.chainName, + timestamp: startTimestamp, + latency: latency(startTimestamp, Date.now()), + token0: req.token0, + token1: req.token1, + poolId: tx.poolId, + gasPrice: gasPrice.toString(), + gasLimit: Number(gasLimitTransaction), + gasCost: tx.gasUsed, + gasWanted: tx.gasWanted, + txHash: tx.transactionHash, + poolAddress: tx.poolAddress, + poolShares: tx.poolshares, + token0FinalAmount: tx.token0_finalamount, + token1FinalAmount: tx.token1_finalamount, + nonce: 0, + gasPriceToken: osmosis.manualGasPriceToken, + fee: feeTier, + }; + } + + static async addLiquidityLP( + osmosis: Osmosis, + req: AddLiquidityRequest + ): Promise { + const startTimestamp: number = Date.now(); + + const { wallet } = + await getOsmoWallet( + osmosis, + req.address, + ); + + const token0: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token0)!; + const token1: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token1)!; + + const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION + const gasAdjustment = osmosis.gasPriceConstant; // + const feeTier = osmosis.feeTier; // + + var tx = undefined; + if (req.lowerPrice){ + tx = await osmosis.addPositionLP( + wallet, + token0, + token1, + req, + feeTier, + gasAdjustment, + ); + } else{ + tx = await osmosis.addPosition( + wallet, + req.address, + token0, + token1, + req.amount0, + req.amount1, + req.poolId, + req.allowedSlippage, + feeTier, + gasAdjustment, + ); + } + + this.validateTxErrors(tx, "Liquidity added. "); + + return { + network: osmosis.chainName, + timestamp: startTimestamp, + latency: latency(startTimestamp, Date.now()), + token0: req.token0, + token1: req.token1, + fee: feeTier, + tokenId: Number(tx.poolId), + gasPrice: tx.gasPrice, + gasPriceToken: osmosis.manualGasPriceToken, + gasLimit: Number(gasLimitTransaction), + gasCost: tx.gasUsed, + gasWanted: tx.gasWanted, + txHash: tx.transactionHash, + poolAddress: tx.poolAddress, + poolShares: tx.poolshares, + token0FinalAmount: tx.token0_finalamount, + token1FinalAmount: tx.token1_finalamount, + nonce: 0, + }; + + } + + static async removeLiquidity( + osmosis: Osmosis, + req: RemoveLiquidityRequest + ): Promise { + const startTimestamp: number = Date.now(); + + const { wallet } = + await getOsmoWallet( + osmosis, + req.address, + ); + + const gasPrice = osmosis.manualGasPrice; // GAS PRICE PER UNIT OF WORK + const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION + const gasAdjustment = osmosis.gasPriceConstant; // + const feeTier = osmosis.feeTier; // + + const tx = await osmosis.reducePosition( + wallet, + req.decreasePercent, + req.address, + req.poolId!, + req.allowedSlippage, + feeTier, + gasAdjustment, + ); + + logger.info( + `Liquidity removed, txHash is ${tx.transactionHash}, gasUsed is ${tx.gasUsed}.` + ); + + return { + network: osmosis.chainName, + timestamp: startTimestamp, + latency: latency(startTimestamp, Date.now()), + poolId: req.poolId, + balances: tx.balances, + gasPrice: gasPrice.toString(), + gasLimit: Number(gasLimitTransaction), + gasCost: tx.gasUsed, + gasWanted: tx.gasWanted, + txHash: tx.transactionHash, + gasPriceToken: osmosis.manualGasPriceToken, + }; + } + + // find pools containing both token0, token1 + static async poolPrice( + osmosis: Osmosis, + req: PoolPriceRequest + ): Promise { + const startTimestamp: number = Date.now(); + + const token0: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token0)!; + const token1: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token1)!; + + if (token0 == undefined){ + throw new HttpException( + 500, + TOKEN_NOT_SUPPORTED_ERROR_MESSAGE + ' ' + req.token0, + TOKEN_NOT_SUPPORTED_ERROR_CODE + ); + } + if (token1 == undefined){ + throw new HttpException( + 500, + TOKEN_NOT_SUPPORTED_ERROR_MESSAGE + ' ' + req.token1, + TOKEN_NOT_SUPPORTED_ERROR_CODE + ); + } + + const pools = await osmosis.findPoolsPrices( + token0, + token1, + req.address! + ); + + logger.info( + `Found pools and prices for ${req.token0}, ${req.token1}.` + ); + + return { + network: osmosis.chainName, + timestamp: startTimestamp, + latency: latency(startTimestamp, Date.now()), + token0: req.token0, + token1: req.token1, + pools: pools, //CosmosExtendedPool[]; + }; + } + + // find all pool positions for address or singular poolId if supplied + static async poolPositions( + osmosis: Osmosis, + req: PositionRequest + ): Promise { + const startTimestamp: number = Date.now(); + + const pools = await osmosis.findPoolsPositions( + req.address!, + req.poolId + ); + + if (req.poolId){ + logger.info( + `Found pool positions for ${req.address}, ${req.poolId}` + ); + }else{ + logger.info( + `Found pools positions for ${req.address}.` + ); + } + + + return { + network: osmosis.chainName, + timestamp: startTimestamp, + latency: latency(startTimestamp, Date.now()), + pools: pools, //CosmosExtendedPool[]; + }; + } + + + static async estimateGas( + osmosis: Osmosis, + ): Promise { + + const gasPrice = Number(osmosis.getLatestBasePrice()); // GAS PRICE PER UNIT OF WORK + const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION + + return { + network: osmosis.chainName, + timestamp: Date.now(), + gasPrice, + gasPriceToken: osmosis.manualGasPriceToken, + gasLimit: Number(gasLimitTransaction), + gasCost: '0', + }; + + } + + static async getTokens( + osmosis: Osmosis, + req: TokensRequest + ): Promise { + return await osmosis.getTokens(req); + } + + static async transfer( + osmosis: Osmosis, + req: TransferRequest + ): Promise { + + const { wallet } = + await getOsmoWallet( + osmosis, + req.from, + ); + + const token: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token)!; + + const tx = await osmosis.transfer(wallet, token, req); + + + const txMessage = 'Transfer success. To: ' + req.to + ' From: ' + req.from + ' ' + this.validateTxErrors(tx, txMessage); + if (tx.code == successfulTransaction){ + return 'Transfer success. To: ' + req.to + ' From: ' + req.from + ' Hash: ' + tx.transactionHash + ' gasUsed: ' + tx.gasUsed + ' gasWanted: ' + tx.gasWanted + } + else{ + throw new HttpException( + 500, + UNKNOWN_ERROR_MESSAGE + ' ' + tx.rawLog, + UNKNOWN_ERROR_ERROR_CODE + ); + } + } + + static async balances(osmosis: Osmosis, req: CosmosBalanceRequest) { + validateCosmosBalanceRequest(req); + + const wallet = await osmosis.getWallet(req.address, 'osmo'); + + var tokenSymbols: string[] = []; + // FILTER IF req.tokenSymbols != [] + if (req && req.tokenSymbols && req.tokenSymbols.length > 0){ + tokenSymbols = req.tokenSymbols; + } else{ + const tokenAssets = osmosis.storedTokenList; + tokenAssets.forEach((token: CosmosAsset) => { + tokenSymbols.push(token.symbol); + }); + } + + const balances = await osmosis.getBalances(wallet); + const filteredBalances = toCosmosBalances(balances, tokenSymbols); + + return { + balances: filteredBalances, + }; + } + + static async poll(osmosis: Osmosis, req: CosmosPollRequest) { + validateCosmosPollRequest(req); + + const transaction = await osmosis.getTransaction(req.txHash); + const currentBlock = await osmosis.getCurrentBlockNumber(); + + return { + txHash: req.txHash, + currentBlock, + txBlock: transaction.height, + gasUsed: transaction.gasUsed, + gasWanted: transaction.gasWanted, + txData: decodeTxRaw(transaction.tx), + }; + } + + static async allowances( + osmosis: Osmosis, + req: AllowancesRequest + ){ + if (osmosis || req){} + // Not applicable. + return { + spender: undefined as unknown as string, + approvals: {} as Record, + }; + } + + static async approve( + osmosis: Osmosis, + req: ApproveRequest + ){ + if (osmosis || req){} + // Not applicable. + return { + tokenAddress: undefined as unknown as string, + spender: undefined as unknown as string, + amount: undefined as unknown as string, + nonce: undefined as unknown as number, + approval: undefined as unknown as CustomTransaction, + }; + } + + static async cancel( + osmosis: Osmosis, + req: CancelRequest + ){ + if (osmosis || req){} + // Not applicable. + return { + txHash: undefined as unknown as string, + }; + } + + static async nonce( + osmosis: Osmosis, + req: NonceRequest + ): Promise { + if (osmosis || req){} + // Not applicable. + const nonce = 0; + return { nonce }; + } + + static async nextNonce( + osmosis: Osmosis, + req: NonceRequest + ): Promise { + if (osmosis || req){} + // Not applicable. + const nonce = 0; + return { nonce }; + } + + static validateTxErrors(tx: AnyTransactionResponse, msg: string){ + if (tx.code != successfulTransaction){ + if (tx.code == outOfGas){ + logger.error( + `Failed to execute trade: Out of gas. txHash is ${tx.transactionHash}, gasUsed is ${tx.gasUsed} greater than gasWanted ${tx.gasWanted} . Log: ${tx.rawLog}` + ) + throw new HttpException( + 500, + OUT_OF_GAS_ERROR_MESSAGE + " : " + tx.rawLog, + OUT_OF_GAS_ERROR_CODE + ); + } else if (tx.code == insufficientFunds){ + logger.error( + `Failed to execute trade. Insufficient funds. txHash is ${tx.transactionHash}, gasUsed is ${tx.gasUsed}. Log: ${tx.rawLog}` + ) + throw new HttpException( + 500, + INSUFFICIENT_FUNDS_ERROR_MESSAGE + " : " + tx.rawLog, + INSUFFICIENT_FUNDS_ERROR_CODE + ); + + } else { + logger.error( + `Failed to execute trade. txHash is ${tx.transactionHash}, gasUsed is ${tx.gasUsed}. Log: ${tx.rawLog}` + ) + + throw new HttpException( + 500, + TRADE_FAILED_ERROR_MESSAGE + " : " + tx.rawLog, + TRADE_FAILED_ERROR_CODE + ); + } + } + logger.info( + msg + `txHash is ${tx.transactionHash}, gasUsed is ${tx.gasUsed}.` + ); + } +} \ No newline at end of file diff --git a/src/chains/osmosis/osmosis.lp.utils.ts b/src/chains/osmosis/osmosis.lp.utils.ts new file mode 100755 index 0000000000..dcade9448f --- /dev/null +++ b/src/chains/osmosis/osmosis.lp.utils.ts @@ -0,0 +1,145 @@ +// adapted from utils/pools.ts from createcosmoapp liquidity example + +import BigNumber from 'bignumber.js'; +import { Asset } from '@chain-registry/types'; +import { Pool } from 'osmojs/dist/codegen/osmosis/gamm/pool-models/balancer/balancerPool'; +import { Coin } from 'osmo-query/dist/codegen/cosmos/base/v1beta1/coin'; +import { + calcPoolLiquidity, + getPoolByGammName as _getPoolByGammName, + convertGammTokenToDollarValue, +} from '@osmonauts/math'; + +import { + // AnyPoolType, + PriceHash, + ExtendedPool +} from './osmosis.types'; +import { Fee } from './osmosis.utils'; + +export const getPoolByGammName = (pools: Pool[], gammId: string): Pool => { + return _getPoolByGammName(pools, gammId); +}; + +// '/osmosis.gamm.poolmodels.stableswap.v1beta1.Pool' +// SS pools are handled by neither filter case (out of spec) + +export const filterPoolsSwapAndLP = (assets: Asset[], pools: ExtendedPool[], prices: PriceHash): ExtendedPool[] => { + var poolsOut = pools.filter(({ $typeUrl }) => !$typeUrl?.includes('stableswap')) + + poolsOut = poolsOut.filter((pool) => { + if (pool.poolAssets){ + return pool.poolAssets.every( + (pAsset: { token: { denom: string; }; }) => + prices[pAsset.token.denom] && + !pAsset.token.denom.startsWith('gamm/pool') && + assets.find(({ base }) => base === pAsset.token.denom) + ) + } + else if (pool.token0){ + return prices[pool.token0] && prices[pool.token1] && assets.find(({ base }) => base === pool.token0) && assets.find(({ base }) => base === pool.token1); + } + return false; + }); + + return poolsOut; +} + +export const filterPoolsSwap = (assets: Asset[], pools: ExtendedPool[], prices: PriceHash): ExtendedPool[] => { + return pools + .filter(({ $typeUrl }) => $typeUrl?.includes('gamm.v1beta1')) + .filter(({ poolAssets }) => + poolAssets != undefined && + poolAssets.every( + ({ token }) => + prices[token.denom] && + !token.denom.startsWith('gamm/pool') && + assets.find(({ base }) => base === token.denom) + ) + ); +}; + +export const filterPoolsLP = (assets: Asset[], pools: any[], prices: PriceHash) => { + var poolsOut = pools.filter(({ $typeUrl }) => $typeUrl?.includes('concentratedliquidity')) + poolsOut = poolsOut.filter((pool) => prices[pool.token0] && prices[pool.token1] && assets.find(({ base }) => base === pool.token0) && assets.find(({ base }) => base === pool.token1)); + return poolsOut; +}; + +interface ExtendPoolProps { + pool: ExtendedPool; + fees: Fee[]; + balances: Coin[]; + lockedCoins: Coin[]; + prices: PriceHash; +} + +export const extendPool = (assets: Asset[], { + pool, + fees, + balances, + lockedCoins, + prices, +}: ExtendPoolProps): ExtendedPool => { + var liquidity = 0; + if (pool.poolAssets){ + // if this is NOT a CL pool + liquidity = new BigNumber(calcPoolLiquidity(assets, pool, prices)) + .decimalPlaces(0) + .toNumber(); + } + + const feeData = fees.find((fee) => fee.pool_id === pool.id.toString()); + const volume24H = Math.round(Number(feeData?.volume_24h || 0)); + const volume7d = Math.round(Number(feeData?.volume_7d || 0)); + const fees7D = Math.round(Number(feeData?.fees_spent_7d || 0)); + + var poolDenom = ''; + if (pool.totalShares){ + // also don't exist for CL pools + poolDenom = pool.totalShares?.denom; + } + + const balanceCoin = balances.find(({ denom }) => denom === poolDenom); + const myLiquidity = balanceCoin + ? convertGammTokenToDollarValue(assets, balanceCoin, pool, prices) + : '0'; + + const lockedCoin = lockedCoins.find(({ denom }) => denom === poolDenom); + const bonded = lockedCoin + ? convertGammTokenToDollarValue(assets, lockedCoin, pool, prices) + : '0'; + + return { + ...pool, + liquidity, + volume24H, + fees7D, + volume7d, + myLiquidity, + bonded, + denom: poolDenom, + }; +}; + +// export type ExtendedPool = ReturnType; + +export const descByLiquidity = (pool1: ExtendedPool, pool2: ExtendedPool) => { + return new BigNumber(pool1.liquidity).lt(pool2.liquidity) ? 1 : -1; +}; + +export const descByMyLiquidity = (pool1: ExtendedPool, pool2: ExtendedPool) => { + return new BigNumber(pool1.myLiquidity).lt(pool2.myLiquidity) ? 1 : -1; +}; + +type Item = { + denom: string; + [key: string]: any; +}; + +export const getPoolsByDenom = (allPools: ExtendedPool[], items: Item[]) => { + return items + .filter(({ denom }) => allPools.find(({ denom: d }) => d === denom)) + .map(({ denom }) => { + return allPools.find(({ denom: d }) => d === denom) as ExtendedPool; + }); +}; diff --git a/src/chains/osmosis/osmosis.prices.ts b/src/chains/osmosis/osmosis.prices.ts new file mode 100755 index 0000000000..29e4deab1e --- /dev/null +++ b/src/chains/osmosis/osmosis.prices.ts @@ -0,0 +1,119 @@ +import { Asset } from '@chain-registry/types'; + +import { + PriceHash, +} from '@osmonauts/math/dist/types'; +import { CosmosAsset } from '../cosmos/cosmos-base'; + +type CoinGeckoId = string; +type CoinGeckoUSD = { usd: number }; +type CoinGeckoUSDResponse = Record; + +const getAssetsWithGeckoIds = (assets: Asset[]) => { + return assets.filter((asset) => !!asset?.coingecko_id); +}; + +const getGeckoIds = (assets: Asset[]) => { + return assets.map((asset) => asset.coingecko_id) as string[]; +}; + +const formatPrices = ( + prices: CoinGeckoUSDResponse, + assets: Asset[] +): Record => { + return Object.entries(prices).reduce((priceHash, cur) => { + const key = assets.find((asset) => asset.coingecko_id === cur[0])!.base; + // const key = assets.find((asset) => asset.coingecko_id === cur[0])!.symbol; // hash by symbol + return { ...priceHash, [key]: cur[1].usd }; + }, {}); +}; + +export const getCoinGeckoPrices = async (assets: Asset[]): Promise> => { + const assetsWithGeckoIds = getAssetsWithGeckoIds(assets); + const geckoIds = getGeckoIds(assetsWithGeckoIds); + + const priceData: CoinGeckoUSDResponse | undefined = await getData(geckoIds); + if (priceData){ + return formatPrices(priceData, assetsWithGeckoIds) + } + throw new Error('Osmosis failed to get prices from coingecko.com') +}; + + +const getData = async ( + geckoIds: string[] +): Promise => { + let prices: CoinGeckoUSDResponse; + + const url = `https://api.coingecko.com/api/v3/simple/price?ids=${geckoIds.join()}&vs_currencies=usd`; + try { + const response = await fetch(url); + if (!response.ok) throw Error('Get price error'); + prices = (await response.json()) as CoinGeckoUSDResponse; + return prices; + } catch (err) { + console.error(err); + } + return undefined; +}; + +export const getImperatorPriceHash = async (tokenList?: CosmosAsset[], url: string = 'https://api-osmosis.imperator.co/tokens/v2/all') => { + let prices = []; + + try { + const response = await fetch(url); + if (!response.ok) throw Error('Get price error'); + prices = (await response.json()) as any[]; + } catch (err) { + console.error(err); + } + + var priceHash: PriceHash = {}; + // need to sort from symbol->denom input to make testnet denoms work (prices always come with mainnet denoms) + if (tokenList && tokenList.length>0){ + prices.forEach((element) => { + if (element.symbol){ + var testnet_element = tokenList.find(({symbol}) => symbol==element.symbol); + if (testnet_element){ + priceHash[testnet_element.base] = element.price; + }else{ + priceHash[element.denom] = element.price; + } + }else{ + priceHash[element.denom] = element.price; + } + }); + }else{ + priceHash = prices.reduce( + (prev: any, cur: { denom: any; price: any }) => ({ + ...prev, + [cur.denom]: cur.price, + }), + {} + ); + } + + return priceHash; +}; + +interface baseFee{ + base_fee?: string +} + +export const getEIP1559DynamicBaseFee = async (url: string) => { + var fee: baseFee | undefined = undefined; + + try { + const response = await fetch(url); + if (!response.ok) throw Error('Get base fee error'); + fee = (await response.json()) as baseFee; + } catch (err) { + console.error(err); + } + + if (fee && fee.base_fee){ + var finalFee = Number(fee!.base_fee!).toString(); + return finalFee; + } + return ''; +} \ No newline at end of file diff --git a/src/chains/osmosis/osmosis.swap.ts b/src/chains/osmosis/osmosis.swap.ts new file mode 100644 index 0000000000..8aa66575d1 --- /dev/null +++ b/src/chains/osmosis/osmosis.swap.ts @@ -0,0 +1,231 @@ +// adapted from osmonauts-math swap.ts to use BigNumber to enable .pow(x<1) + +import { Asset } from "@chain-registry/types"; +import { Decimal } from "decimal.js"; +import { BigNumber } from "bignumber.js"; +import { CoinDenom, Trade, PrettyPair } from "@osmonauts/math/dist/types"; +import { symbolToOsmoDenom } from "@osmonauts/math/dist/utils"; +import { SwapAmountInRoute } from "osmojs/dist/codegen/osmosis/poolmanager/v1beta1/swap_route"; +import { Pool } from 'osmojs/dist/codegen/osmosis/gamm/v1beta1/balancerPool'; +import { Coin } from "osmojs/dist/codegen/cosmos/base/v1beta1/coin"; + +export const routesThroughPools = ({ + denom, + trade, + pairs, +}: { + denom: CoinDenom; + trade: Trade; + pairs: PrettyPair[]; +}): SwapAmountInRoute[] => { + const sellPool = pairs.find( + (pair) => + (pair.baseAddress == trade.sell.denom && pair.quoteAddress == denom) || + (pair.quoteAddress == trade.sell.denom && pair.baseAddress == denom) + ); + + const buyPool = pairs.find( + (pair) => + (pair.baseAddress == denom && pair.quoteAddress == trade.buy.denom) || + (pair.quoteAddress == denom && pair.baseAddress == trade.buy.denom) + ); + + if (sellPool && buyPool) { + const routes = [ + { + poolId: BigInt(sellPool.poolId), + tokenOutDenom: denom, + }, + { + poolId: BigInt(buyPool.poolId), + tokenOutDenom: trade.buy.denom, + }, + ]; + + return routes; + } + + return []; +}; + +export const getRoutesForTrade = ( + assets: Asset[], + { + trade, + pairs, + }: { + trade: Trade; + pairs: PrettyPair[]; + } +): SwapAmountInRoute[] => { + const directPool = pairs.find( + (pair) => + (pair.baseAddress == trade.sell.denom && + pair.quoteAddress == trade.buy.denom) || + (pair.quoteAddress == trade.sell.denom && + pair.baseAddress == trade.buy.denom) + ); + + if (directPool) { + return [ + { + poolId: BigInt(directPool.poolId), + tokenOutDenom: trade.buy.denom, + }, + ]; + } + + const osmoRoutes = routesThroughPools({ + denom: "uosmo", + trade, + pairs, + }); + + if (osmoRoutes.length === 2) return osmoRoutes; + + const atomRoutes = routesThroughPools({ + denom: symbolToOsmoDenom(assets, "ATOM"), + trade, + pairs, + }); + + if (atomRoutes.length === 2) return atomRoutes; + + return []; +}; + +export const calcAmountWithSlippage = ( + amount: string, + slippage: number | string +) => { + const remainingPercentage = new BigNumber(100).minus(slippage).div(100); + return new BigNumber(amount).multipliedBy(remainingPercentage).toString(); +}; + +const one = new BigNumber(1); + +const getPoolAsset = (pool: Pool, denom: string) => { + const poolAsset = pool.poolAssets.find( + (asset) => asset?.token && asset.token.denom === denom + ); + if (!poolAsset) { + throw new Error( + `Pool ${pool.id} doesn't have the pool asset for ${denom}` + ); + } + return { denom, weight: poolAsset.weight, amount: poolAsset.token!.amount }; +}; + +export const calcSpotPrice = ( + tokenBalanceIn: BigNumber, + tokenWeightIn: BigNumber, + tokenBalanceOut: BigNumber, + tokenWeightOut: BigNumber, + swapFee: BigNumber +): BigNumber => { + const number = tokenBalanceIn.div(tokenWeightIn); + const denom = tokenBalanceOut.div(tokenWeightOut); + const scale = one.div(one.minus(swapFee)); + + return number.div(denom).multipliedBy(scale); +}; + +export const calcOutGivenIn = ( + tokenBalanceIn: BigNumber, + tokenWeightIn: BigNumber, + tokenBalanceOut: BigNumber, + tokenWeightOut: BigNumber, + tokenAmountIn: BigNumber, + swapFee: BigNumber +): BigNumber => { + const weightRatio = tokenWeightIn.div(tokenWeightOut); + let adjustedIn = one.minus(swapFee); + adjustedIn = tokenAmountIn.multipliedBy(adjustedIn); + const y = tokenBalanceIn.div(tokenBalanceIn.plus(adjustedIn)); + const foo = new BigNumber(new Decimal(y.toString()).pow(new Decimal(weightRatio.toString())).toString()); + const bar = one.minus(foo); + return tokenBalanceOut.multipliedBy(bar); +}; + +export const calcInGivenOut = ( + tokenBalanceIn: BigNumber, + tokenWeightIn: BigNumber, + tokenBalanceOut: BigNumber, + tokenWeightOut: BigNumber, + tokenAmountOut: BigNumber, + swapFee: BigNumber +): BigNumber => { + const weightRatio = tokenWeightOut.div(tokenWeightIn); + const diff = tokenBalanceOut.minus(tokenAmountOut); + const y = tokenBalanceOut.div(diff); + let foo = new BigNumber(new Decimal(y.toString()).pow(new Decimal(weightRatio.toString())).toString()); + foo = foo.minus(one); + const tokenAmountIn = one.minus(swapFee); + return tokenBalanceIn.multipliedBy(foo).div(tokenAmountIn); +}; + +export const calcPriceImpactGivenIn = ( + tokenIn: Coin, + tokenOutDenom: string, + pool: Pool +) => { + const inPoolAsset = getPoolAsset(pool, tokenIn.denom); + const outPoolAsset = getPoolAsset(pool, tokenOutDenom); + + const swapFee = new BigNumber(pool.poolParams?.swapFee || 0).shiftedBy(-18); + + const beforeSpotPriceInOverOut = calcSpotPrice( + new BigNumber(inPoolAsset.amount), + new BigNumber(inPoolAsset.weight), + new BigNumber(outPoolAsset.amount), + new BigNumber(outPoolAsset.weight), + swapFee + ); + + const tokenOutAmount = calcOutGivenIn( + new BigNumber(inPoolAsset.amount), + new BigNumber(inPoolAsset.weight), + new BigNumber(outPoolAsset.amount), + new BigNumber(outPoolAsset.weight), + new BigNumber(tokenIn.amount), + swapFee + ).decimalPlaces(0); + + const effectivePrice = new BigNumber(tokenIn.amount).div(tokenOutAmount); + const priceImpact = effectivePrice.div(beforeSpotPriceInOverOut).minus(one); + + return priceImpact.toString(); +}; + +export const calcPriceImpactGivenOut = ( + tokenOut: Coin, + tokenInDenom: string, + pool: Pool +) => { + const inPoolAsset = getPoolAsset(pool, tokenInDenom); + const outPoolAsset = getPoolAsset(pool, tokenOut.denom); + + const swapFee = new BigNumber(pool.poolParams?.swapFee || 0).shiftedBy(-18); + + const beforeSpotPriceInOverOut = calcSpotPrice( + new BigNumber(inPoolAsset.amount), + new BigNumber(inPoolAsset.weight), + new BigNumber(outPoolAsset.amount), + new BigNumber(outPoolAsset.weight), + swapFee + ); + + const tokenInAmount = calcInGivenOut( + new BigNumber(inPoolAsset.amount), + new BigNumber(inPoolAsset.weight), + new BigNumber(outPoolAsset.amount), + new BigNumber(outPoolAsset.weight), + new BigNumber(tokenOut.amount), + swapFee + ).decimalPlaces(0); + + const effectivePrice = new BigNumber(tokenInAmount).div(tokenOut.amount); + const priceImpact = effectivePrice.div(beforeSpotPriceInOverOut).minus(one); + + return priceImpact.toString(); +}; diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts new file mode 100755 index 0000000000..06d4d59b9e --- /dev/null +++ b/src/chains/osmosis/osmosis.ts @@ -0,0 +1,2011 @@ +// OSMO message composer classes don't quite match up with what the RPC/Go backend actually accepts. + +import { CosmosWallet, CosmosAsset, CosmosTokenValue, CosmosBase } from '../../chains/cosmos/cosmos-base'; +import { OsmosisController } from './osmosis.controllers'; +import BigNumber from 'bignumber.js'; +import { logger } from '../../services/logger'; +import { coin, Coin } from '@cosmjs/amino'; +import { FEES, } from 'osmojs/dist/utils/gas/values' +import { TokenInfo, } from '../../services/base'; + +import { osmosis, cosmos} from 'osmojs'; // getSigningOsmosisClient unused - constructing manually with tendermintclient 37 +import { + CoinGeckoToken, + CoinDenom, + Exponent, + CoinSymbol, + PriceHash, + TransactionEvent, + TransactionEventAttribute, + OsmosisExpectedTrade, + ToLog_OsmosisExpectedTrade, + TransactionResponse, + OsmosisExpectedTradeRoute, + AddPositionTransactionResponse, + ReduceLiquidityTransactionResponse, + SerializableExtendedPool, + ExtendedPool, + CoinAndSymbol, + AnyPoolType +} from './osmosis.types'; + +import { OsmosisConfig } from './osmosis.config'; +import { + getRoutesForTrade, + calcAmountWithSlippage, + calcPriceImpactGivenIn, + calcPriceImpactGivenOut +} from './osmosis.swap'; +import { + convertDollarValueToCoins, + convertDollarValueToShares, + calcShareOutAmount, + makePoolPairs, +} from '@osmonauts/math'; +import type { + PrettyPair, +} from "@osmonauts/math/dist/types"; +import { PoolAsset } from 'osmojs/dist/codegen/osmosis/gamm/pool-models/balancer/balancerPool'; +import { Pool as CLPool } from 'osmo-query/dist/codegen/osmosis/concentrated-liquidity/pool'; +import { TradeInfo } from './osmosis.controllers'; +import { HttpException, TRADE_FAILED_ERROR_CODE, TRADE_FAILED_ERROR_MESSAGE, GAS_LIMIT_EXCEEDED_ERROR_MESSAGE, GAS_LIMIT_EXCEEDED_ERROR_CODE, AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE, AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE } from '../../services/error-handler'; +import { extendPool, filterPoolsSwap, filterPoolsLP, filterPoolsSwapAndLP } from './osmosis.lp.utils'; +import { fetchFees, findTickForPrice } from './osmosis.utils'; +import { getImperatorPriceHash } from './osmosis.prices'; +import { GasPrice, calculateFee, setupIbcExtension, SigningStargateClient, AminoTypes } from '@cosmjs/stargate'; +import { CosmWasmClient } from "@cosmjs/cosmwasm-stargate"; +import { TokensRequest, TokensResponse } from '../../network/network.requests'; +import { Cosmosish, TransferRequest } from '../../services/common-interfaces'; +import { AddLiquidityRequest } from '../../amm/amm.requests'; +import { HttpBatchClient, Tendermint37Client } from '@cosmjs/tendermint-rpc'; +import { GeneratedType, Registry } from "osmojs/node_modules/@cosmjs/proto-signing/build/registry"; + +import { + cosmosAminoConverters, + cosmosProtoRegistry, + cosmwasmAminoConverters, + cosmwasmProtoRegistry, + ibcProtoRegistry, + ibcAminoConverters, + osmosisAminoConverters, + osmosisProtoRegistry +} from 'osmojs'; +const { DirectSecp256k1Wallet } = require('@cosmjs/proto-signing'); +const { + joinPool, + exitPool, + joinSwapExternAmountIn, + swapExactAmountIn, +} = osmosis.gamm.v1beta1.MessageComposer.withTypeUrl; +const { + createPosition +} = osmosis.concentratedliquidity.v1beta1.MessageComposer.withTypeUrl; +const { +send +} = cosmos.bank.v1beta1.MessageComposer.fromPartial; + +const protoRegistry: ReadonlyArray<[string, GeneratedType]> = [ + ...cosmosProtoRegistry, + ...cosmwasmProtoRegistry, + ...ibcProtoRegistry, + ...osmosisProtoRegistry +]; + +const aminoConverters = { + ...cosmosAminoConverters, + ...cosmwasmAminoConverters, + ...ibcAminoConverters, + ...osmosisAminoConverters +}; + +const registry = new Registry(protoRegistry); +const aminoTypes = new AminoTypes(aminoConverters); + +const successfulTransaction = 0; + +export class Osmosis extends CosmosBase implements Cosmosish{ + public controller; + private static _instances: { [name: string]: Osmosis }; + private _gasPrice: number; + private _nativeTokenSymbol: string; + private _chain: string; + private _requestCount: number; + private _metricsLogInterval: number; + private _metricTimer; + private signingClient?: any; + public chainId: string; + public gasLimitEstimate: string; + public readonly feeTier: string; // FEE_VALUES.osmosis[_feeTier] low medium high osmojs/src/utils/gas/values.ts + public allowedSlippage: string; + public manualGasPriceToken: string; + private tendermint37Client?: Tendermint37Client; + private httpBatchClient?: HttpBatchClient; + + private constructor(network: string) { + const config = OsmosisConfig.config; + super( + config.availableNetworks[0].chain, + config.rpcURL(network).toString(), + config.tokenListSource(network), + config.tokenListType(network), + config.gasAdjustment, + config.useEIP1559DynamicBaseFeeInsteadOfManualGasPrice, + config.rpcAddressDynamicBaseFee, + config.manualGasPrice + ) + this._chain = network; + this._nativeTokenSymbol = config.nativeCurrencySymbol; + this.manualGasPriceToken = config.manualGasPriceToken; + + this._gasPrice = Number(this.manualGasPrice) + this.feeTier = config.feeTier; + this.gasLimitEstimate = config.gasLimitTransaction + this.allowedSlippage = config.allowedSlippage + + this.chainId = config.chainId(network); + this.signingClient = undefined; + this.controller = OsmosisController; + + this._requestCount = 0; + this._metricsLogInterval = 300000; // 5 minutes + + this._metricTimer = setInterval( + this.metricLogger.bind(this), + this.metricsLogInterval + ); + } + + public static getInstance(network: string): Osmosis { + if (Osmosis._instances === undefined) { + Osmosis._instances = {}; + } + if (!(network in Osmosis._instances)) { + Osmosis._instances[network] = new Osmosis(network); + } + + return Osmosis._instances[network]; + } + + public static getConnectedInstances(): { [name: string]: Osmosis } { + return Osmosis._instances; + } + + public requestCounter(msg: any): void { + if (msg.action === 'request') this._requestCount += 1; + } + + public metricLogger(): void { + logger.info( + this.requestCount + + ' request(s) sent in last ' + + this.metricsLogInterval / 1000 + + ' seconds.' + ); + this._requestCount = 0; // reset + } + + public get provider() { + return this._provider; + } + + public get gasPrice(): number { + return this._gasPrice; + } + + public get chain(): string { + return this._chain; + } + + public get nativeTokenSymbol(): string { + return this._nativeTokenSymbol; + } + + public get requestCount(): number { + return this._requestCount; + } + + public get metricsLogInterval(): number { + return this._metricsLogInterval; + } + + async getDenomMetadata(provider: any, denom: string): Promise { + return await provider.cosmos.bank.denomMetadata(denom); + } + + async close() { + clearInterval(this._metricTimer); + if (this._chain in Osmosis._instances) { + delete Osmosis._instances[this._chain]; + } + } + + public ready(): boolean { + return this._ready + } + + private async osmosisGetSigningStargateClient( + rpcEndpoint: string, + signer: any, + ){ + this.osmosisGetHttpBatchClient(rpcEndpoint); + await this.osmosisGetTendermint37Client(); + + + // @ts-ignore: + const signingStargateClient = await SigningStargateClient.createWithSigner(this.tendermint37Client!, signer, { + registry: registry, + aminoTypes: aminoTypes + }); + + return signingStargateClient; + } + + private async osmosisGetTendermint37Client() { + this.tendermint37Client = await Tendermint37Client.create( + this.httpBatchClient! + ); + } + + private osmosisGetHttpBatchClient(rpcEndpoint: string) { + this.httpBatchClient = new HttpBatchClient(rpcEndpoint, { + dispatchInterval: 2000, + }); + } + + public getTokenByAddress(address: string): CosmosAsset { + const token = this.tokenList.find((token: CosmosAsset) => token.address === address); + if (!token){ + throw new Error('Osmosis token not found for address: ' + address); + } + return token; + } + public getDenomForCoinGeckoId = ( + coinGeckoId: CoinGeckoToken + ): CoinDenom => { + var asset_found = this.tokenList.find((asset) => asset.coingecko_id === coinGeckoId); + if (asset_found) { + return asset_found.base + } else { + return ''; + } + }; + public osmoDenomToSymbol = (denom: CoinDenom): CoinSymbol => { + const asset = this.getTokenByBase(denom); + const symbol = asset?.symbol; + if (!symbol) { + return denom; + } + return symbol; + }; + public symbolToOsmoDenom = (token: CoinSymbol): CoinDenom => { + const asset = this.tokenList.find(({ symbol }) => symbol === token); + const base = asset?.base; + if (!base) { + console.log(`cannot find base for token ${token}`); + return ''; + } + return base; + }; + + // technically by base + public getExponentByBase = (denom: CoinDenom): Exponent => { + const asset = this.getTokenByBase(denom); + if (asset && asset.denom_units){ + const unit = asset.denom_units.find(({ denom }) => denom === asset.display); + if (unit){ + return unit.exponent; + } + } + return 0 + }; + public noDecimals = (num: number | string) => { + return new BigNumber(num).decimalPlaces(0, BigNumber.ROUND_DOWN).toString(); + }; + public baseUnitsToDollarValue = ( + prices: PriceHash, + symbol: string, + amount: string | number + ) => { + const denom = this.symbolToOsmoDenom(symbol); + return new BigNumber(amount) + .shiftedBy(-this.getExponentByBase(denom)) + .multipliedBy(prices[denom]) + .toString(); + }; + public dollarValueToDenomUnits = ( + prices: PriceHash, + symbol: string, + value: string | number + ) => { + const denom = this.symbolToOsmoDenom(symbol); + return new BigNumber(value) + .dividedBy(prices[denom]) + .shiftedBy(this.getExponentByBase(denom)) + .toString(); + }; + public baseUnitsToDisplayUnits = ( + symbol: string, + amount: string | number + ) => { + const denom = this.symbolToOsmoDenom(symbol); + return new BigNumber(amount).shiftedBy(-this.getExponentByBase(denom)).toString(); + }; + + public isEmptyArray = (arr: any[]) => arr.length === 0; + + async getBalances(wallet: CosmosWallet): Promise> { + const balances: Record = {}; + + const accounts = await wallet.getAccounts(); + + var { address } = accounts[0]; + + var balancesContainer; + balancesContainer = await this._provider.cosmos.bank.v1beta1.allBalances({ + address: address, + pagination: { + key: new Uint8Array(), + offset: BigInt(0), + limit: BigInt(10000), + countTotal: false, + reverse: false, + }, + }) + + const allTokens = balancesContainer.balances + + await Promise.all( + allTokens.map(async (t: { denom: string; amount: string }) => { + let token = this.getTokenByBase(t.denom); + + try{ + if (!token && t.denom.startsWith('ibc/')) { + const ibcHash: string = t.denom.replace('ibc/', ''); + + // Get base denom by IBC hash + if (ibcHash) { + const { denomTrace } = await setupIbcExtension(this._provider).ibc.transfer.denomTrace(ibcHash); + if (denomTrace) { + const { baseDenom } = denomTrace; + token = this.getTokenByBase(baseDenom); + } + } + } + } catch (err) { + //can skip this - will be added by raw denom + } + + // Not all tokens are added in the registry so we use the denom if the token doesn't exist + balances[token ? token.symbol : t.denom] = { + value: new BigNumber(t.amount), + decimals: this.getTokenDecimals(token), + }; + }) + ); + + return balances; + } + /** + * Given the amount of `baseToken` to put into a transaction, calculate the + * amount of `quoteToken` that can be expected from the transaction. + * + * This is typically used for calculating token buy/sell prices. + * + * @param baseToken Token input for the transaction + * @param quoteToken Output from the transaction + * @param amount Amount of `baseToken` to put into the transaction + * @param tradeType "BUY" or "SELL" + * @param allowedSlippage? Allowed slippage eg "1%" + * @param feeTier_input? low/medium/high, overwrites feeTier specified in .yml + * @param gasAdjustment_input? Gas offered multiplier, overwrites gasAdjustment specified in .yml + */ + async estimateTrade( + baseToken: CosmosAsset, + quoteToken: CosmosAsset, + amount: BigNumber, + tradeType: string, + allowedSlippage?: string, + feeTier_input?: string, + gasAdjustment_input?: number, + ): Promise{ + + var slippage = 0; + if (allowedSlippage){ + slippage = Number(allowedSlippage.split('%')[0]); + }else{ + slippage = Number(this.allowedSlippage.split('%')[0]); + } + var feeTier = this.feeTier; + if (feeTier_input){ + feeTier = feeTier_input; + } + var gasAdjustment = this.gasPriceConstant; + if (gasAdjustment_input){ + gasAdjustment = gasAdjustment_input; + } + + if (tradeType == "BUY"){ + //swap base and quotetokens + const realBaseToken = quoteToken; + quoteToken = baseToken; + baseToken = realBaseToken; + } + + logger.info( + `Fetching pair data for ${quoteToken.symbol}-${baseToken.symbol}.` + ); + + var callImperatorWithTokens = undefined + if (this.chain == 'testnet'){ + callImperatorWithTokens = this.tokenList; + } + const [prices, { pools: poolsData }] = await Promise.all([ + getImperatorPriceHash(callImperatorWithTokens), + this._provider.osmosis.gamm.v1beta1.pools({ + pagination: { + key: new Uint8Array(), + offset: BigInt(0), + limit: BigInt(2000), + countTotal: false, + reverse: false, + }, + }) as Promise<{ pools: ExtendedPool[] }>, // ExtendedBalancerPool + ]); + + const pools = filterPoolsSwap(this.tokenList, poolsData, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset + + var pairs: PrettyPair[] = []; + if (!this.isEmptyArray(pools) && !this.isEmptyArray(Object.keys(prices))){ + pairs = makePoolPairs(this.tokenList, pools, prices); + } + + // eg. token=OSMO, token.base=uOSMO, so swap calcs are done in uosmo is + const tokenInAmount = new BigNumber(amount) + .shiftedBy(baseToken.decimals) + .toString(); + + const tokenInDollarValue = new BigNumber(amount || '0').multipliedBy( + prices[baseToken.base] + ); + + const toTokenDollarPrice = prices[quoteToken.base] + var toTokenAmount; + if (toTokenDollarPrice){ + toTokenAmount = tokenInDollarValue.div(toTokenDollarPrice); + }else{ + // no price found for quote token - maybe should throw here but let's see if there's a pool route[] for it + toTokenAmount = 0; + } + + const tokenOutAmount = new BigNumber(toTokenAmount) + .shiftedBy(quoteToken.decimals) + // tokenOut defined by .base (eg. uION) + .toString(); + + var tokenOutAmountAfterSlippage; + if (slippage == 100){ + tokenOutAmountAfterSlippage = '1'; + }else{ + tokenOutAmountAfterSlippage = calcAmountWithSlippage( + tokenOutAmount, + slippage + ); + } + + + const tokenIn = { + denom: baseToken.base, + amount: tokenInAmount, + }; + const tokenOut = { + denom: quoteToken.base, + amount: tokenOutAmountAfterSlippage, + }; + + const routes = getRoutesForTrade(this.tokenList, { // SwapAmountInRoute[] = (poolId, tokenOutDenom)[] + trade: { + sell: { + denom: tokenIn.denom, + amount: tokenIn.amount, + }, + buy: { + denom: tokenOut.denom, + amount: tokenOut.amount, + }, + }, + pairs, + }); + + if (!routes || routes.length === 0 || routes.length > 2) { + logger.info( + `No trade routes found for ${quoteToken.symbol}-${ + baseToken.symbol} ${quoteToken.symbol}-${ + baseToken.symbol}` + ); + throw new Error(`No trade routes found for ${quoteToken.symbol}-${ + baseToken.symbol} ${quoteToken.symbol}-${ + baseToken.symbol}`); + } + + // so far we have pools, routes, and token info... + let route_length_1_pool_swapFee = ''; + // @ts-ignore: leaving some unreads in here in case they want to be delivered later + let priceImpact = ''; + + if (new BigNumber(tokenIn.amount).isEqualTo(0)) { + priceImpact = '0'; + } + else if (routes.length === 1) + { + const route_length_1_pool = pools.find((pool) => pool.id === routes[0].poolId)!; + // @ts-ignore: + priceImpact = calcPriceImpactGivenIn(tokenIn, tokenOut.denom, route_length_1_pool); + route_length_1_pool_swapFee = new BigNumber(route_length_1_pool.poolParams?.swapFee || 0).toString(); // .shiftedBy(-16) shift used in CCA + } + else { + // THIS ASSUMES length == 2 - per CCA/osmosis guys.. + const tokenInRoute = routes.find( + (route) => route.tokenOutDenom !== tokenOut.denom + )!; + const tokenOutRoute = routes.find( + (route) => route.tokenOutDenom === tokenOut.denom + )!; + + const tokenInPool = pools.find( + (pool) => pool.id === tokenInRoute.poolId + )!; + const tokenOutPool = pools.find( + (pool) => pool.id === tokenOutRoute.poolId + )!; + + const priceImpactIn = calcPriceImpactGivenIn( + tokenIn, + tokenInRoute.tokenOutDenom, + // @ts-ignore: + tokenInPool + ); + const priceImpactOut = calcPriceImpactGivenOut( + tokenOut, + tokenOutRoute.tokenOutDenom, + // @ts-ignore: + tokenOutPool + ); + priceImpact = new BigNumber(priceImpactIn) + .plus(priceImpactOut) + .toString(); + } + +// routes.length=1 mean there's just 1 hop - we're always just given one potentially route[] for a trade route request + let swapRoutes: OsmosisExpectedTradeRoute[] = [] + + if (routes.length === 1) { + swapRoutes = routes.map((route) => { + return { + poolId: route.poolId.toString(), + swapFee: route_length_1_pool_swapFee, + baseLogo: baseToken.logo_URIs, + baseSymbol: baseToken.symbol, + quoteLogo: quoteToken.logo_URIs, + quoteSymbol: quoteToken.symbol, + tokenOutDenom: tokenOut.denom, + }; + }); + } else { + let swapFees: BigNumber[] = []; + swapRoutes = routes + .map((route) => { + const pool = pools.find((pool) => pool.id === route.poolId); + let baseAsset: CosmosAsset; + let quoteAsset: CosmosAsset; + if (route.tokenOutDenom !== tokenOut.denom) { + baseAsset = baseToken; + quoteAsset = this.getTokenByBase(route.tokenOutDenom)!; + } else { + const tokenInDenom = pool?.poolAssets.find( + ({ token }) => token!.denom !== tokenOut.denom + )?.token?.denom!; + baseAsset = this.getTokenByBase(tokenInDenom)!; + quoteAsset = quoteToken; + } + const fee = new BigNumber(pool?.poolParams?.swapFee || 0); // .shiftedBy(-16) shift used in CCA + swapFees.push(fee); + return { + poolId: route.poolId.toString(), + swapFee: fee, + baseLogo: baseAsset.logo_URIs, + baseSymbol: baseAsset.symbol, + quoteLogo: quoteAsset.logo_URIs, + quoteSymbol: quoteAsset.symbol, + tokenOutDenom: route.tokenOutDenom, + }; + }) + .map((route) => { + const totalFee = swapFees.reduce( + (total, cur) => total.plus(cur), + new BigNumber(0) + ); + const highestFee = swapFees.sort((a, b) => (a.lt(b) ? 1 : -1))[0]; + const feeRatio = highestFee.div(totalFee); + return { + ...route, + swapFee: route.swapFee.multipliedBy(feeRatio).toString() + '%', + }; + }); + } + + let expectedOutput = tokenOutAmountAfterSlippage; + + // can't simulate here without address/signingclient + let feeObject = FEES.osmosis.swapExactAmountIn(feeTier) + const gasLimitEstimate = new BigNumber(feeObject.gas).multipliedBy(gasAdjustment) + + if (gasLimitEstimate.gt(new BigNumber(this.gasLimitEstimate))){ + throw new HttpException( + 500, + GAS_LIMIT_EXCEEDED_ERROR_MESSAGE + ' Calculated gas: ' + gasLimitEstimate.toString() + ' gasLimitEstimate: ' + this.gasLimitEstimate, + GAS_LIMIT_EXCEEDED_ERROR_CODE + ); + } + + const expectedAmountNum = new BigNumber(expectedOutput) + const tokenInAmountNum = new BigNumber(amount).shiftedBy(baseToken.decimals) + const executionPrice = expectedAmountNum.div(tokenInAmountNum) + + logger.info( + `Best trade for ${quoteToken.address}-${ + baseToken.address + }: ${ToLog_OsmosisExpectedTrade({ gasUsed: '', gasWanted: '', routes: swapRoutes, expectedAmount: expectedOutput, executionPrice: executionPrice, gasLimitEstimate: new BigNumber(gasLimitEstimate), tokenInDenom:tokenIn.denom, tokenInAmount: tokenInAmount, tokenOutDenom:tokenOut.denom, })}` + ); + return { gasUsed: '', gasWanted: '', routes: swapRoutes, expectedAmount: expectedOutput, executionPrice: executionPrice, gasLimitEstimate: new BigNumber(gasLimitEstimate), tokenInDenom:tokenIn.denom, tokenInAmount: tokenInAmount, tokenOutDenom:tokenOut.denom }; // == OsmosisExpectedTrade + } + + + + /** + * Given a wallet and a Cosmosish trade, try to execute it on blockchain. + * + * @param wallet CosmosWallet + * @param trade Expected trade + * @param allowedSlippage? Allowed slippage eg "1%" + * @param feeTier_input? low/medium/high, overwrites feeTier specified in .yml + * @param gasAdjustment_input? Gas offered multiplier, overwrites gasAdjustment specified in .yml + */ + async executeTrade( + wallet: CosmosWallet, + trade: TradeInfo, + address: string, + allowedSlippage?: string, + feeTier_input?: string, + gasAdjustment_input?: number, + ): Promise { + var slippage = 0; + if (allowedSlippage){ + slippage = Number(allowedSlippage.split('%')[0]); + }else{ + slippage = Number(this.allowedSlippage.split('%')[0]); + } + var feeTier = this.feeTier; + if (feeTier_input){ + feeTier = feeTier_input; + } + var gasAdjustment = this.gasPriceConstant; + if (gasAdjustment_input){ + gasAdjustment = gasAdjustment_input; + } + + const keyWallet = await DirectSecp256k1Wallet.fromKey(wallet.privkey, 'osmo') + this.signingClient = await this.osmosisGetSigningStargateClient(this.rpcUrl, keyWallet); + + const routes = trade.expectedTrade.routes; + + var tokenOutMinAmount; + if (slippage == 100){ + tokenOutMinAmount = 1; + }else{ + tokenOutMinAmount = this.noDecimals((Number(trade.expectedTrade.expectedAmount) * (100-slippage))/100) + } + const msg = swapExactAmountIn({ + 'sender': address, + // @ts-ignore: bad osmojs models + 'routes': routes, + 'tokenIn': coin(trade.expectedTrade.tokenInAmount, trade.expectedTrade.tokenInDenom), + 'tokenOutMinAmount': tokenOutMinAmount.toString(), + }); + + var enumFee = FEES.osmosis.swapExactAmountIn(feeTier); + var gasToUse = enumFee.gas; + try{ + const gasEstimation = await this.signingClient.simulate( + address, + [msg], + ); + gasToUse = gasEstimation; + } catch (error1) { + var error = error1 as Error + if (error.message.includes('token is lesser than min amount')){ + throw new HttpException( + 500, + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE + 'tokenOutMinAmount: ' + tokenOutMinAmount.toString(), + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE + ); + } + } + + const gasPrice = await this.getLatestBasePrice(); + const calcedFee = calculateFee( + Math.round(Number(gasToUse) * (gasAdjustment || 1.5)), + GasPrice.fromString(gasPrice.toString() + this.manualGasPriceToken) + ); + + if (new BigNumber(calcedFee.gas).gt(new BigNumber(this.gasLimitEstimate))){ + throw new HttpException( + 500, + GAS_LIMIT_EXCEEDED_ERROR_MESSAGE + ' Calculated gas: ' + new BigNumber(calcedFee.gas).toString() + ' gasLimitEstimate: ' + new BigNumber(this.gasLimitEstimate).toString(), + GAS_LIMIT_EXCEEDED_ERROR_CODE + ); + } + + try { + var res = await this.signingClient.signAndBroadcast(address, [msg], calcedFee); + res.gasPrice = gasPrice + return res; + } catch (error) { + console.debug(error); + } finally { + this.signingClient.disconnect(); + } + + throw new HttpException( + 500, + TRADE_FAILED_ERROR_MESSAGE, + TRADE_FAILED_ERROR_CODE + ); + } + + /** + * Given a 2 token symbols and 1-2 amounts, exchange amounts for pool liquidity shares + * + * @param wallet CosmosWallet + * @param address Wallet address + * @param token0 + * @param token1 + * @param amount0 + * @param amount1 + * @param poolId? Optional string specify poolId instead of search by tokens + * @param allowedSlippage? Allowed slippage eg "1%" + * @param feeTier_input? low/medium/high, overwrites feeTier specified in .yml + * @param gasAdjustment_input? Gas offered multiplier, overwrites gasAdjustment specified in .yml + */ + async addPosition( + wallet: CosmosWallet, + address: string, + token0: CosmosAsset, + token1: CosmosAsset, + amount0: string, + amount1: string, + poolId?: string, + allowedSlippage?: string, + feeTier_input?: string, + gasAdjustment_input?: number, + ): Promise { + + var slippage = 0; + if (allowedSlippage){ + slippage = Number(allowedSlippage.split('%')[0]); + }else{ + slippage = Number(this.allowedSlippage.split('%')[0]); + } + var feeTier = this.feeTier; + if (feeTier_input){ + feeTier = feeTier_input; + } + var gasAdjustment = this.gasPriceConstant; + if (gasAdjustment_input){ + gasAdjustment = gasAdjustment_input; + } + + try { + const keyWallet = await DirectSecp256k1Wallet.fromKey(wallet.privkey, 'osmo') + this.signingClient = await this.osmosisGetSigningStargateClient(this.rpcUrl, keyWallet); + + if (!this.signingClient || !address) { + console.error('stargateClient undefined or address undefined.'); + throw new HttpException( + 500, + "addPosition failed: Can't instantiate signing client.", + TRADE_FAILED_ERROR_CODE + ); + } + + const poolsContainer = await this._provider.osmosis.poolmanager.v1beta1.allPools({}); + const allPoolds: ExtendedPool[] = poolsContainer.pools; + + var callImperatorWithTokens = undefined + if (this.chain == 'testnet'){ + callImperatorWithTokens = this.tokenList; + } + const prices = await getImperatorPriceHash(callImperatorWithTokens); + + const pools = filterPoolsSwap(this.tokenList, allPoolds, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset + + if (!amount0 && !amount1){ + throw new HttpException( + 500, + "addPosition failed: Both token amounts equal to 0.", + TRADE_FAILED_ERROR_CODE + ); + } + + var amount0_bignumber = new BigNumber(0); + var amount1_bignumber = new BigNumber(0); + if (amount0){ + amount0_bignumber = new BigNumber(amount0); + } + if (amount1){ + amount1_bignumber = new BigNumber(amount1); + } + if (amount0_bignumber.isEqualTo(0) && amount1_bignumber.isEqualTo(0)){ + throw new HttpException( + 500, + "addPosition failed: Both token amounts equal to 0.", + TRADE_FAILED_ERROR_CODE + ); + } + + var singleToken_UseWhich: string | null = null; + if (!amount0_bignumber.isEqualTo(0) && amount1_bignumber.isEqualTo(0)){ // only token0 + singleToken_UseWhich = '0'; + } + if (amount0_bignumber.isEqualTo(0) && !amount1_bignumber.isEqualTo(0)){ // only token1 + singleToken_UseWhich = '1'; + } + // NOT CHECKING (local wallet) BALANCES HERE it will bounce back either way + + // now find the poolid for this pair + var foundPools: any[] = []; + pools.forEach(function (cPool) { + var foundToken0 = false; + var foundToken1 = false; + if (cPool.poolAssets){ + for (var poolAsset_idx=0; poolAsset_idx id.toString() == poolId); + }else if (foundPools){ + pool = foundPools.pop(); // this is not selective without poolid input (can be multiple pools per token pair).. though order should cause pool with greatest liquidity to be used + } + + var calcedFee; + if (pool){ + const gasPrice = await this.getLatestBasePrice(); + let msgs = []; + if (singleToken_UseWhich) { // in case 1 of the amounts == 0 + var singleToken_amount = new BigNumber(0); + var singleToken: CosmosAsset | undefined = undefined; + if (singleToken_UseWhich == '0'){ + singleToken_amount = amount0_bignumber; + singleToken = token0; + }else{ + singleToken_amount = amount1_bignumber; + singleToken = token1; + } + const inputCoin = {'denom':singleToken.base, 'amount':singleToken_amount.shiftedBy(this.getExponentByBase(singleToken.base)).toString()}; + + const coinSymbol = singleToken.symbol; + const inputValue = this.baseUnitsToDollarValue( + prices, + coinSymbol, + singleToken_amount.toNumber() + ); + + const coinsNeeded = convertDollarValueToCoins(this.tokenList, inputValue, pool, prices); + const shareOutAmount = calcShareOutAmount(pool, coinsNeeded); + + var finalShareOutAmount; + if (slippage == 100){ + finalShareOutAmount = (new BigNumber(1).integerValue(BigNumber.ROUND_CEIL)); + }else{ + finalShareOutAmount = (new BigNumber(calcAmountWithSlippage(shareOutAmount, slippage)).integerValue(BigNumber.ROUND_CEIL)) + } + + const joinSwapExternAmountInMsg = joinSwapExternAmountIn({ + // @ts-ignore: bad osmojs models + poolId: pool.id.toString(), + sender: address, + tokenIn: inputCoin, + shareOutMinAmount: finalShareOutAmount.toString(), + }); + msgs.push(joinSwapExternAmountInMsg); + + var enumFee = FEES.osmosis.joinSwapExternAmountIn(feeTier); + var gasToUse = enumFee.gas; + try{ + const gasEstimation = await this.signingClient.simulate( + address, + msgs, + ); + gasToUse = gasEstimation; + } catch (error1) { + var error = error1 as Error + if (error.message.includes('token is lesser than min amount')){ + throw new HttpException( + 500, + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE + 'tokenOutMinAmount: ' + finalShareOutAmount.toString(), + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE + ); + } + } + calcedFee = calculateFee( + Math.round(Number(gasToUse) * (gasAdjustment || 1.5)), + GasPrice.fromString(gasPrice.toString() + this.manualGasPriceToken) + ); + + } + else { + var allCoins = []; + allCoins.push({'denom':token0.base, 'amount':new BigNumber(amount0) + .shiftedBy(this.getExponentByBase(token0.base)) + .toString()}); + allCoins.push({'denom':token1.base, 'amount':new BigNumber(amount1) + .shiftedBy(this.getExponentByBase(token1.base)) + .toString()}); + + const shareOutAmount = calcShareOutAmount(pool, allCoins); + const tokenInMaxs = allCoins.map((c: Coin) => { + return coin(c.amount, c.denom); + }); + + var finalShareOutAmount; + if (slippage == 100){ + finalShareOutAmount = (new BigNumber(1).integerValue(BigNumber.ROUND_CEIL)); + }else{ + finalShareOutAmount = (new BigNumber(calcAmountWithSlippage(shareOutAmount, slippage)).integerValue(BigNumber.ROUND_CEIL)) + } + + const joinPoolMsg = joinPool({ + // @ts-ignore: bad osmojs models + poolId: pool.id.toString(), + sender: address, + shareOutAmount: finalShareOutAmount.toString(), + tokenInMaxs, + }); + msgs.push(joinPoolMsg); + + var enumFee = FEES.osmosis.joinPool(feeTier); + var gasToUse = enumFee.gas; + try{ + const gasEstimation = await this.signingClient.simulate( + address, + msgs, + ); + gasToUse = gasEstimation; + } catch (error1) { + var error = error1 as Error + if (error.message.includes('token is lesser than min amount')){ + throw new HttpException( + 500, + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE + 'shareOutAmount: ' + finalShareOutAmount.toString(), + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE + ); + } + } + + calcedFee = calculateFee( + Math.round(Number(gasToUse) * (gasAdjustment || 1.5)), + GasPrice.fromString(gasPrice.toString() + this.manualGasPriceToken) + ); + } + + if (new BigNumber(calcedFee.gas).gt(new BigNumber(this.gasLimitEstimate))){ + throw new HttpException( + 500, + GAS_LIMIT_EXCEEDED_ERROR_MESSAGE + ' Calculated gas: ' + new BigNumber(calcedFee.gas).toString() + ' gasLimitEstimate: ' + new BigNumber(this.gasLimitEstimate).toString(), + GAS_LIMIT_EXCEEDED_ERROR_CODE + ); + } + + var res: AddPositionTransactionResponse = await this.signingClient.signAndBroadcast(address, msgs, calcedFee); + this.signingClient.disconnect(); + + var outbound_coins_string = '' // 990uion,98159uosmo + var outbound_shares_string = '' // 57568515255656500gamm/pool/62 + var token0_finalamount = '0' + var token1_finalamount = '0' + var poolshares = '0' + + if (res?.code !== successfulTransaction){ + res.token0_finalamount = token0_finalamount + res.token1_finalamount = token1_finalamount + res.poolshares = poolshares + res.poolId = pool.id.toString() + res.poolAddress = pool.address + res.gasPrice = gasPrice + return res; + } + + // RETURNED VALUE DISSECTION + // osmo doesnt send back a clear value, we need to discern it from the event logs >.> + + try { + for (var event_idx=0; event_idx attribute_idx){ + outbound_coins_string = event.attributes[attribute_idx+1].value + } + } + else if (attribute.key == 'amount'){ + if (pool.totalShares && pool.totalShares.denom && attribute.value.includes(pool.totalShares.denom)){ + outbound_shares_string = attribute.value; + } + } + } + } + } + if (outbound_coins_string != ''){ + if (outbound_coins_string.includes(',')){ + var coins_string_list = outbound_coins_string.split(','); + for (var coin_string_idx=0; coin_string_idx { + + // in case we need to swap these later + var amount0 = req.amount0; + var amount1 = req.amount1; + + var slippage = 0; + if (req.allowedSlippage){ + slippage = Number(req.allowedSlippage.split('%')[0]); + }else{ + slippage = Number(this.allowedSlippage.split('%')[0]); + } + var feeTier = this.feeTier; + if (feeTier_input){ + feeTier = feeTier_input; + } + var gasAdjustment = this.gasPriceConstant; + if (gasAdjustment_input){ + gasAdjustment = gasAdjustment_input; + } + + try { + const keyWallet = await DirectSecp256k1Wallet.fromKey(wallet.privkey, 'osmo') + this.signingClient = await this.osmosisGetSigningStargateClient(this.rpcUrl, keyWallet); + + if (!this.signingClient || !req.address) { + console.error('stargateClient undefined or address undefined.'); + throw new HttpException( + 500, + "addPosition failed: Can't instantiate signing client.", + TRADE_FAILED_ERROR_CODE + ); + } + + const poolsContainer = await this._provider.osmosis.poolmanager.v1beta1.allPools({}); + const pools: AnyPoolType[] = poolsContainer.pools; + + var callImperatorWithTokens = undefined + if (this.chain == 'testnet'){ + callImperatorWithTokens = this.tokenList; + } + const prices = await getImperatorPriceHash(callImperatorWithTokens); + + const filteredPools: CLPool[] = filterPoolsLP(this.tokenList, pools, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset + + if (!amount0 && !amount1){ + throw new HttpException( + 500, + "addPosition failed: Both token amounts equal to 0.", + TRADE_FAILED_ERROR_CODE + ); + } + + var amount0_bignumber = new BigNumber(0); + var amount1_bignumber = new BigNumber(0); + if (amount0){ + amount0_bignumber = new BigNumber(amount0); + } + if (amount1){ + amount1_bignumber = new BigNumber(amount1); + } + if (amount0_bignumber.isEqualTo(0) && amount1_bignumber.isEqualTo(0)){ + throw new HttpException( + 500, + "addPosition failed: Both token amounts equal to 0.", + TRADE_FAILED_ERROR_CODE + ); + } + + var singleToken_UseWhich: string | null = null; + if (!amount0_bignumber.isEqualTo(0) && amount1_bignumber.isEqualTo(0)){ // only token0 + singleToken_UseWhich = '0'; + } + if (amount0_bignumber.isEqualTo(0) && !amount1_bignumber.isEqualTo(0)){ // only token1 + singleToken_UseWhich = '1'; + } + // NOT CHECKING (local wallet) BALANCES HERE it will bounce back either way + + // now find the poolid for this pair + var foundPools: any[] = []; + filteredPools.forEach(function (cPool) { + var foundToken0 = false; + var foundToken1 = false; + if (cPool.token0 == token0.base || cPool.token1 == token0.base){ + foundToken0 = true; + } + if (cPool.token0 == token1.base || cPool.token1 == token1.base){ + foundToken1 = true; + } + if (foundToken0 && foundToken1){ + foundPools.push(cPool); + } + }); + + var pool; + if (req.poolId){ + pool = filteredPools.find(({id}) => id.toString() == req.poolId); + }else if (foundPools){ + pool = foundPools.pop(); // this is not selective without poolid input (can be multiple pools per token pair).. though order should cause pool with greatest liquidity to be used + } + + var calcedFee; + if (pool){ + + // swap token orders to match pool asset orders + if (pool.token0 == token1.base && pool.token1 == token0.base){ + [token0, token1] = [token1, token0]; + [amount0, amount1] = [amount1, amount0]; + [amount0_bignumber, amount1_bignumber] = [amount1_bignumber, amount0_bignumber]; + if (singleToken_UseWhich){ + if (singleToken_UseWhich == '0'){ + singleToken_UseWhich = '1' + }else{ + singleToken_UseWhich = '0' + } + } + } + + const gasPrice = await this.getLatestBasePrice(); + let msgs = []; + if (singleToken_UseWhich) { // in case 1 of the amounts == 0 + var singleToken_amount = new BigNumber(0); + var singleToken: CosmosAsset | undefined = undefined; + if (singleToken_UseWhich == '0'){ + singleToken_amount = amount0_bignumber; + singleToken = token0; + }else{ + singleToken_amount = amount1_bignumber; + singleToken = token1; + } + const inputCoin = {'denom':singleToken.base, 'amount':singleToken_amount.shiftedBy(this.getExponentByBase(singleToken.base)).toString()}; + + var singleTokenMinAmount; + if (slippage == 100){ + singleTokenMinAmount = '0'; + }else{ + singleTokenMinAmount = singleToken_amount.shiftedBy(this.getExponentByBase(singleToken.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) + } + + const lowerTick = findTickForPrice(req.lowerPrice!, pool.exponentAtPriceOne, pool.tickSpacing, true) + const upperTick = findTickForPrice(req.upperPrice!, pool.exponentAtPriceOne, pool.tickSpacing, false) + + var MsgCreatePosition; + if (singleToken.base == pool.token0){ + // @ts-ignore: bad osmojs models + MsgCreatePosition = createPosition({ + poolId: pool.id.toString(), + sender: req.address, + // @ts-ignore: bad osmojs models + lowerTick: lowerTick, + // @ts-ignore: bad osmojs models + upperTick: upperTick, + tokensProvided: [inputCoin], + tokenMinAmount0: singleTokenMinAmount.toString(), + }) + }else{ + // @ts-ignore: bad osmojs models + MsgCreatePosition = createPosition({ + poolId: pool.id.toString(), + sender: req.address, + // @ts-ignore: bad osmojs models + lowerTick: lowerTick, + // @ts-ignore: bad osmojs models + upperTick: upperTick, + tokensProvided: [inputCoin], + tokenMinAmount1: singleTokenMinAmount.toString(), + }) + } + + msgs.push(MsgCreatePosition); + + var enumFee = FEES.osmosis.joinPool(feeTier); + var gasToUse = enumFee.gas; + try{ + const gasEstimation = await this.signingClient.simulate( + req.address, + msgs, + ); + gasToUse = gasEstimation; + } catch (error1) { + var error = error1 as Error + if (error.message.includes('token is lesser than min amount')){ + throw new HttpException( + 500, + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE + 'tokenMinAmount0: ' + singleTokenMinAmount.toString(), + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE + ); + } + } + calcedFee = calculateFee( + Math.round(Number(gasToUse) * (gasAdjustment || 1.5)), + GasPrice.fromString(gasPrice.toString() + this.manualGasPriceToken) + ); + + } + + else { + var allCoins = []; + allCoins.push({'denom':token0.base, 'amount':new BigNumber(amount0) + .shiftedBy(this.getExponentByBase(token0.base)) + .toString()}); + allCoins.push({'denom':token1.base, 'amount':new BigNumber(amount1) + .shiftedBy(this.getExponentByBase(token1.base)) + .toString()}); + + + const token0_bignumber = new BigNumber(amount0) + const token1_bignumber = new BigNumber(amount1) + + + var tokenMinAmount0; + var tokenMinAmount1; + if (slippage == 100){ + tokenMinAmount0 = '0'; + tokenMinAmount1 = '0'; + }else{ + tokenMinAmount0 = token0_bignumber.shiftedBy(this.getExponentByBase(token0.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) + tokenMinAmount1 = token1_bignumber.shiftedBy(this.getExponentByBase(token1.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) + } + + const lowerTick = findTickForPrice(req.lowerPrice!, pool.exponentAtPriceOne, pool.tickSpacing, true) + const upperTick = findTickForPrice(req.upperPrice!, pool.exponentAtPriceOne, pool.tickSpacing, false) + + const MsgCreatePosition = createPosition({ + poolId: pool.id.toString(), + sender: req.address, + // @ts-ignore: bad osmojs models + lowerTick: lowerTick, + // @ts-ignore: bad osmojs models + upperTick: upperTick, + tokensProvided: allCoins, + tokenMinAmount0: tokenMinAmount0.toString(), + tokenMinAmount1: tokenMinAmount1.toString(), + }) + + msgs.push(MsgCreatePosition); + + var enumFee = FEES.osmosis.joinPool(feeTier); + var gasToUse = enumFee.gas; + try{ + const gasEstimation = await this.signingClient.simulate( + req.address, + msgs, + ); + gasToUse = gasEstimation; + } catch (error1) { + var error = error1 as Error + if (error.message.includes('token is lesser than min amount')){ + throw new HttpException( + 500, + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE + 'Symbol: shareOutAmount ' + token0.symbol + ': ' + tokenMinAmount0.toString() + ' ' + + token1.symbol + ': ' + tokenMinAmount1.toString(), + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE + ); + } + } + + calcedFee = calculateFee( + Math.round(Number(gasToUse) * (gasAdjustment || 1.5)), + GasPrice.fromString(gasPrice.toString() + this.manualGasPriceToken) + ); + } + + if (new BigNumber(calcedFee.gas).gt(new BigNumber(this.gasLimitEstimate))){ + throw new HttpException( + 500, + GAS_LIMIT_EXCEEDED_ERROR_MESSAGE + ' Calculated gas: ' + new BigNumber(calcedFee.gas).toString() + ' gasLimitEstimate: ' + new BigNumber(this.gasLimitEstimate).toString(), + GAS_LIMIT_EXCEEDED_ERROR_CODE + ); + } + + var res: AddPositionTransactionResponse = await this.signingClient.signAndBroadcast(req.address, msgs, calcedFee); + this.signingClient.disconnect(); + + var outbound_coins_string = '' // 990uion,98159uosmo + var outbound_shares_string = '' // 57568515255656500gamm/pool/62 + var token0_finalamount = '0' + var token1_finalamount = '0' + var poolshares = '0' + + if (res?.code !== successfulTransaction){ + res.token0_finalamount = token0_finalamount + res.token1_finalamount = token1_finalamount + res.poolshares = poolshares + res.poolId = pool.id.toString() + res.poolAddress = pool.address + res.gasPrice = gasPrice + return res; + } + + // RETURNED VALUE DISSECTION + // osmo doesnt send back a clear value, we need to discern it from the event logs >.> + + try { + for (var event_idx=0; event_idx attribute_idx){ + outbound_coins_string = event.attributes[attribute_idx+1].value + } + } + else if (attribute.key == 'amount'){ + if (pool.totalShares && pool.totalShares.denom && attribute.value.includes(pool.totalShares.denom)){ + outbound_shares_string = attribute.value; + } + } + } + } + } + if (outbound_coins_string != ''){ + if (outbound_coins_string.includes(',')){ + var coins_string_list = outbound_coins_string.split(','); + for (var coin_string_idx=0; coin_string_idx { + + var slippage = Number(this.allowedSlippage.split('%')[0]); + if (allowedSlippage){ + slippage = Number(allowedSlippage.split('%')[0]); + } + var feeTier = this.feeTier; + if (feeTier_input){ + feeTier = feeTier_input; + } + var gasAdjustment = this.gasPriceConstant; + if (gasAdjustment_input){ + gasAdjustment = gasAdjustment_input; + } + + try { + const keyWallet = await DirectSecp256k1Wallet.fromKey(wallet.privkey, 'osmo') + this.signingClient = await this.osmosisGetSigningStargateClient(this.rpcUrl, keyWallet); + + const balancesContainer = await this._provider.cosmos.bank.v1beta1.allBalances({ + address: address, + pagination: { + key: new Uint8Array(), + offset: BigInt(0), + limit: BigInt(10000), + countTotal: false, + reverse: false, + }, + }) + const balances = balancesContainer.balances + const lockedCoinsContainer = await this._provider.osmosis.lockup.accountLockedCoins({ + owner: address, + }); + const lockedCoins: Coin[] = lockedCoinsContainer.lockedCoins ? lockedCoinsContainer.lockedCoins : [] + + // RETURN TYPES: + // concentrated-liquidity/pool || cosmwasmpool/v1beta1/model/pool || gamm/pool-models/balancer/balancerPool || gamm/pool-models/stableswap/stableswap_pool + const poolsContainer = await this._provider.osmosis.poolmanager.v1beta1.allPools({}); + const pools: ExtendedPool[] = poolsContainer.pools; + + const fees = await fetchFees(); + var callImperatorWithTokens = undefined + if (this.chain == 'testnet'){ + callImperatorWithTokens = this.tokenList; + } + const prices = await getImperatorPriceHash(callImperatorWithTokens); // need to compare these two.. i think formatting is the same? + + // filter for CL + const filteredPools = filterPoolsSwap(this.tokenList, pools, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset + + const extendedPools = filteredPools.map((pool) => + extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) + ); + + const currentPool = extendedPools.filter((pl) => pl.id.toString() == poolId)[0]; + const percent = decreasePercent; // total percent of pool shares + + const myLiquidity = new BigNumber(currentPool.myLiquidity || 0) + .multipliedBy(percent) + .div(100) + .toString(); + + const unbondedShares = convertDollarValueToShares( + this.tokenList, + myLiquidity || 0, + currentPool, + prices + ); + + const myCoins = convertDollarValueToCoins( + this.tokenList, + myLiquidity || 0, + currentPool, + prices + ); + + var coinsNeeded: Coin[] = []; + myCoins.forEach(({ denom, amount }) => { + var amountWithSlippage; + amountWithSlippage = new BigNumber(amount) + .multipliedBy(new BigNumber(100).minus(slippage)) + .div(100) + if (amountWithSlippage.isGreaterThanOrEqualTo(1)){ + coinsNeeded.push({ + denom, + amount: this.noDecimals(amountWithSlippage.toString()), + }); + } + }); + + const shareInAmount = new BigNumber(unbondedShares) + .shiftedBy(18) + .decimalPlaces(0) + .toString(); + + var tokenOutMins = coinsNeeded.map((c: Coin) => { + return coin(c.amount, c.denom); + }); + + if (slippage == 100){ + tokenOutMins = [] + } + + var msgs = [] + const msg = exitPool({ + // @ts-ignore: bad osmojs models + poolId: currentPool.id.toString(), + sender: address, + shareInAmount, + tokenOutMins: tokenOutMins, + }); + msgs.push(msg) + + var enumFee = FEES.osmosis.exitPool(feeTier); + var gasToUse = enumFee.gas; + try{ + const gasEstimation = await this.signingClient.simulate( + address, + msgs, + ); + gasToUse = gasEstimation; + } catch (error1) { + var error = error1 as Error + if (error.message.includes('token is lesser than min amount')){ + var composeTokenOutMins = ''; + for (var idx=0;idx2 assets... + var finalAmountsReceived_string = ''; + var finalBalancesReceived: CoinAndSymbol[] = []; + + if (res?.code !== successfulTransaction){ + res.balances = []; + return res; + } + + try { + for (var txEvent_idx=0; txEvent_idx { + if (coin_string.includes(asset.token.denom)){ + var token = this.getTokenByBase(asset.token.denom); + var amount = (new BigNumber(coin_string.replace(asset.token.denom,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = asset.token.denom + } + finalBalancesReceived.push({base: asset.token.denom, amount:amount, symbol:symbol}) + } + }) + } + }else{ + var coin_string = finalAmountsReceived_string; + currentPool.poolAssets.forEach((asset) => { + if (coin_string.includes(asset.token.denom)){ + var token = this.getTokenByBase(asset.token.denom); + var amount = (new BigNumber(coin_string.replace(asset.token.denom,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = asset.token.denom + } + finalBalancesReceived.push({base: asset.token.denom, amount:amount, symbol:symbol}) + } + }) + } + } + + } catch (error) { + console.debug(error); + } + + res.balances = finalBalancesReceived; + res.gasPrice = gasPrice + return res; + + } catch (error) { + console.debug(error); + } finally { + this.signingClient.disconnect(); + } + throw new HttpException( + 500, + TRADE_FAILED_ERROR_MESSAGE, + TRADE_FAILED_ERROR_CODE + ); + } + + /** + * Returns all pools and their prices for 2 tokens. Address used for balance query. + * + * @param token0 + * @param token1 + * @param address Wallet address + */ + async findPoolsPrices( + token0: CosmosAsset, + token1: CosmosAsset, + address: string, + ): Promise { + + try { + const balancesContainer = await this._provider.cosmos.bank.v1beta1.allBalances({ + address: address, + pagination: { + key: new Uint8Array(), + offset: BigInt(0), + limit: BigInt(10000), + countTotal: false, + reverse: false, + }, + }) + const balances = balancesContainer.balances + const lockedCoinsContainer = await this._provider.osmosis.lockup.accountLockedCoins({ + owner: address, + }); + const lockedCoins: Coin[] = lockedCoinsContainer.lockedCoins ? lockedCoinsContainer.lockedCoins : [] + + // RETURN TYPES: + // concentrated-liquidity/pool || cosmwasmpool/v1beta1/model/pool || gamm/pool-models/balancer/balancerPool || gamm/pool-models/stableswap/stableswap_pool + const poolsContainer = await this._provider.osmosis.poolmanager.v1beta1.allPools({}); + const pools: ExtendedPool[] = poolsContainer.pools; + const fees = await fetchFees(); + var callImperatorWithTokens = undefined + if (this.chain == 'testnet'){ + callImperatorWithTokens = this.tokenList; + } + const prices = await getImperatorPriceHash(callImperatorWithTokens); + + // filter for CL + const filteredPools = filterPoolsSwapAndLP(this.tokenList, pools, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset + + const extendedPools = filteredPools.map((pool) => + extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) + ); + + var returnPools: SerializableExtendedPool[] = []; + extendedPools.forEach(function (cPool) { + var foundToken0 = false; + var foundToken1 = false; + if (cPool.token0){ + if (cPool.token0 == token0.base || cPool.token1 == token0.base){ + foundToken0 = true; + } + if (cPool.token0 == token1.base || cPool.token1 == token1.base){ + foundToken1 = true; + } + } + else if (cPool.poolAssets){ + for (var poolAsset_idx=0; poolAsset_idx { + + try { + const balancesContainer = await this._provider.cosmos.bank.v1beta1.allBalances({ + address: address, + pagination: { + key: new Uint8Array(), + offset: BigInt(0), + limit: BigInt(10000), + countTotal: false, + reverse: false, + }, + }) + const balances = balancesContainer.balances + const lockedCoinsContainer = await this._provider.osmosis.lockup.accountLockedCoins({ + owner: address, + }); + const lockedCoins: Coin[] = lockedCoinsContainer.lockedCoins ? lockedCoinsContainer.lockedCoins : [] + + // RETURN TYPES: + // concentrated-liquidity/pool || cosmwasmpool/v1beta1/model/pool || gamm/pool-models/balancer/balancerPool || gamm/pool-models/stableswap/stableswap_pool + const poolsContainer = await this._provider.osmosis.poolmanager.v1beta1.allPools({}); + const pools: ExtendedPool[] = poolsContainer.pools; + + const fees = await fetchFees(); + var callImperatorWithTokens = undefined + if (this.chain == 'testnet'){ + callImperatorWithTokens = this.tokenList; + } + const prices = await getImperatorPriceHash(callImperatorWithTokens); + + // filter for CL + const filteredPools = filterPoolsSwapAndLP(this.tokenList, pools, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset + + const extendedPools = filteredPools.map((pool) => + extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) + ); + + var returnPools: SerializableExtendedPool[] = []; + extendedPools.forEach(function (cPool) { + if (poolId){ + if (cPool.id.toString() == poolId || cPool.poolId.toString() == poolId){ + returnPools.push(new SerializableExtendedPool(cPool)); + } + }else{ + + if ((cPool.myLiquidity && cPool.myLiquidity != '0') || (cPool.bonded && cPool.bonded != '0')) + { + returnPools.push(new SerializableExtendedPool(cPool)); + } + } + + }); + + return returnPools; + + } catch (error) { + console.debug(error); + } finally { + + } + throw new HttpException( + 500, + TRADE_FAILED_ERROR_MESSAGE, + TRADE_FAILED_ERROR_CODE + ); + } + + + async getCurrentBlockNumber(): Promise{ + const client = await CosmWasmClient + .connect(this.rpcUrl); + const getHeight = await client.getHeight() + return getHeight; + } + + /** + * Transfer tokens + * + * @param wallet + * @param token + * @param req TransferRequest + */ + async transfer( + wallet: CosmosWallet, + token: CosmosAsset, + req: TransferRequest + ): Promise { + + const keyWallet = await DirectSecp256k1Wallet.fromKey(wallet.privkey, 'osmo') + this.signingClient = await this.osmosisGetSigningStargateClient(this.rpcUrl, keyWallet); + + const tokenInAmount = new BigNumber(req.amount) + .shiftedBy(token.decimals) + .toString(); + + const coinIn = { + denom: token.base, + amount: tokenInAmount, + }; + + var coinsList = [] + coinsList.push(coinIn) + const msg = send({ + fromAddress: req.from, + toAddress: req.to, + amount: coinsList + }); + + var gasAdjustment = this.gasPriceConstant; + var feeTier = this.feeTier; + + var enumFee = FEES.osmosis.swapExactAmountIn(feeTier); + var gasToUse = enumFee.gas; + try{ + const gasEstimation = await this.signingClient.simulate( + req.from, + [msg], + ); + gasToUse = gasEstimation; + } catch (error) { + console.debug(error); + } + + const gasPrice = await this.getLatestBasePrice(); + const calcedFee = calculateFee( + Math.round(Number(gasToUse) * (gasAdjustment || 1.5)), + GasPrice.fromString(gasPrice.toString() + this.manualGasPriceToken) + ); + + if (new BigNumber(calcedFee.gas).gt(new BigNumber(this.gasLimitEstimate))){ + throw new HttpException( + 500, + GAS_LIMIT_EXCEEDED_ERROR_MESSAGE + ' Calculated gas: ' + new BigNumber(calcedFee.gas).toString() + ' gasLimitEstimate: ' + new BigNumber(this.gasLimitEstimate).toString(), + GAS_LIMIT_EXCEEDED_ERROR_CODE + ); + } + + var res = await this.signingClient.signAndBroadcast(req.from, [msg], calcedFee); + res.gasPrice = gasPrice + this.signingClient.disconnect(); + return res; + } + + async getTokens(req?: TokensRequest): Promise { + var responseTokens: TokenInfo[] = []; + this.tokenList.forEach(element => { + // FILTER IF req.tokenSymbols != [] + var addToken = true; + if (req && req.tokenSymbols && req.tokenSymbols.length > 0){ + addToken = false; + for (var idx=0; idx any + + +export interface Scenario { + token: CoinBalance; + ratio: string; + symbol: string; + amount: string; + enoughCoinsExist: boolean; + totalDollarValue?: string; +} + +export interface Scenarios { + [key: string]: Scenario[]; +} + +export { + CoinDenom, + Exponent, + CoinSymbol, + PriceHash, + CoinGeckoToken, + CoinGeckoUSD, + CoinGeckoUSDResponse, + CoinValue, + CoinBalance, + PoolAssetPretty, + PoolTokenImage, + PoolPretty, + CalcPoolAprsParams, + Trade, + PrettyPair, +}; + +export type Peroid = '1' | '7' | '14'; + +export type PoolApr = { + [K in Peroid]: ReturnType; // typeof calcPoolAprs +}; + + +export type ExtraPoolProperties = { + fees7D: number; + volume24H: number; + volume7d: number; + liquidity: string | number; + myLiquidity?: string | number; + bonded?: string | number; + apr: PoolApr; +}; + +export interface FetchedData { + pools: Pool[]; + prices: PriceHash; + balances: Coin[]; +} + +export interface SwapOptionType { + /** + * Required. Unique identifier for option. + */ + value: string; + /** + * Display symbol name. + */ + symbol: string; + /** + * Icon display for option. + */ + icon?: { + png?: string; + jpeg?: string; + svg?: string; + }; + /** + * Unit of the chain. + */ + denom: string; + amount: string; + displayAmount: string; + dollarValue: string; + chainName: string; +} + +export interface OsmosisExpectedTrade { + routes: OsmosisExpectedTradeRoute[]; + expectedAmount: string; + executionPrice: BigNumber; + gasLimitEstimate: BigNumber; + tokenInAmount: string; + tokenInDenom: string; + tokenOutDenom: string; + gasUsed: string, + gasWanted: string, +} +export interface OsmosisExpectedTradeRoute { + poolId: string; + swapFee: string; + baseLogo?: { + png?: string; + svg?: string; + jpeg?: string; + }; + baseSymbol: string; + quoteLogo?: { + png?: string; + svg?: string; + jpeg?: string; + }; + quoteSymbol: string; + tokenOutDenom: string; +} + +export interface SwapAmountInRoute { + poolId: bigint ; + tokenOutDenom: string; +} + +export interface OsmosisExpectedTradeSwapOut { + routes: { + poolId: string; + swapFee: string; + baseLogo?: { + png?: string; + svg?: string; + jpeg?: string; + }; + baseSymbol: string; + quoteLogo?: { + png?: string; + svg?: string; + jpeg?: string; + }; + quoteSymbol: string; + tokenInDenom: string; + }[]; + expectedAmount: string; + executionPrice: BigNumber; + gasLimitEstimate: BigNumber; + tokenInDenom: string; + tokenOutDenom: string; +} + +export function ToLog_OsmosisExpectedTrade(trade: OsmosisExpectedTrade){ + var output = '' + trade.routes.forEach((element)=>{ + output += 'poolId: ' + output += element.poolId; + output += ', ' + output += 'swapFee: ' + output += element.swapFee; + output += ', ' + output += 'baseSymbol: ' + output += element.baseSymbol; + output += ', ' + output += 'quoteSymbol: ' + output += element.quoteSymbol; + output += ', ' + }) + output += 'expectedAmount: ' + output += trade.expectedAmount; + output += ', ' + output += 'executionPrice: ' + output += trade.executionPrice.toString(); + output += ', ' + output += 'gasLimitEstimate: ' + output += trade.gasLimitEstimate.toString(); + output += ', ' + return output +} + +export type AnyTransactionResponse = TransactionResponse | ReduceLiquidityTransactionResponse | AddPositionTransactionResponse + +export interface CoinAndSymbol { + base: string; + amount: string; + symbol: string; +} + +export interface ReduceLiquidityTransactionResponse extends TransactionResponse { + balances: CoinAndSymbol[]; + gasPrice: number; +} + +export interface TransactionResponse { + transactionHash: string; + code: number; + events: TransactionEvent[]; + gasUsed: string; + gasWanted: string; + gasPrice: number; + height: number; + rawLog: string; +} + +export interface AddPositionTransactionResponse extends TransactionResponse { + rawLog: string; + poolId: string; + poolAddress: string; + token0_finalamount: string; + token1_finalamount: string; + poolshares: string; + gasPrice: number; +} + +export interface TransactionEvent { + attributes: TransactionEventAttribute[]; + type: string; +} +export interface TransactionEventAttribute { + key: string; + value: string; +} + +export class SerializableExtendedPool { + constructor(input: ExtendedPool) { + this.$typeUrl = input.$typeUrl; + this.address = input.address; + if (input.id){ + this.id = input.id.toString(); + }else{ + this.id = input.poolId!.toString(); + } + this.futurePoolGovernor = input.futurePoolGovernor; + this.totalShares = input.totalShares; + this.token0 = input.token0; + this.token1 = input.token1; + this.poolAssets = input.poolAssets; + this.totalWeight = input.totalWeight; + this.fees_volume24H = input.volume24H; + this.fees_spent_7d = input.fees7D; + this.fees_volume7d = input.volume7d; + this.myLiquidityShares = input.liquidity; + this.myLiquidityDollarValue = input.myLiquidity; + this.my_bonded_shares = input.bonded; + this.denom = input.denom; + } + $typeUrl?: string; + address: string; + id: string; + // poolParams: PoolParams; + futurePoolGovernor?: string; + totalShares?: Coin; + poolAssets?: PoolAsset[]; + totalWeight?: string; + token0?: string; + token1?: string; + + fees_volume24H: number; + fees_spent_7d: number; + fees_volume7d: number; + myLiquidityShares: number; + myLiquidityDollarValue: string; + my_bonded_shares: string; + denom: string; +} + +// token0: string | undefined; +// token1: string | undefined; +// fee: string | undefined; +// lowerPrice: string; +// upperPrice: string; +// amount0: string; +// amount1: string; +// unclaimedToken0: string; +// unclaimedToken1: string; + +export class ExtendedPool { + liquidity: number = 0; + volume24H: number = 0; + fees7D: number = 0; + volume7d: number = 0; + myLiquidity: string = ""; + bonded: string = ""; + denom: string = ""; + $typeUrl?: string | undefined; + address: string = ""; + totalWeight: string = ""; + token0: string = ""; + token1: string = ""; + poolAssets: PoolAsset[] = []; + id: bigint = BigInt(0); + poolId: bigint = BigInt(0); + poolParams: PoolParams = new PoolParams(); + futurePoolGovernor: string = ""; + totalShares: Coin = {'amount':'', 'denom':''}; +} + +class PoolParams{ + swapFee: string = ""; + exitFee: string = ""; + smoothWeightChangeParams: undefined; +} \ No newline at end of file diff --git a/src/chains/osmosis/osmosis.utils.ts b/src/chains/osmosis/osmosis.utils.ts new file mode 100755 index 0000000000..cc90113471 --- /dev/null +++ b/src/chains/osmosis/osmosis.utils.ts @@ -0,0 +1,76 @@ +import BigNumber from 'bignumber.js'; + +export interface Fee { + pool_id: string; + volume_24h: number; + volume_7d: number; + fees_spent_24h: number; + fees_spent_7d: number; + fees_percentage: string; +} + +export const fetchFees = async (): Promise => { + const url = 'https://api-osmosis.imperator.co/fees/v1/pools'; + return fetch(url) + // .then(handleError) + .then((res) => res.json()) + .then((res) => res.data); +}; + +type PoolReward = { + day_usd: number; + month_usd: number; + year_usd: number; +}; + +type Rewards = { + pools: { + [key: number]: PoolReward; + }; + total_day_usd: number; + total_month_usd: number; + total_year_usd: number; +}; + +export const fetchRewards = async (address: string): Promise => { + const url = `https://api-osmosis-chain.imperator.co/lp/v1/rewards/estimation/${address}`; + return fetch(url) + // .then(handleError) + .then((res) => res.json()); +}; + +export function findTickForPrice(desiredPriceString: string, exponentAtPriceOne: number, tickSpacing: number, is_lowerBound: boolean): string{ + var desiredPrice = new BigNumber(desiredPriceString) + var exponent = new BigNumber(exponentAtPriceOne); // -6 + var geoExponentIncrementTicks = new BigNumber(9).multipliedBy(new BigNumber(10).exponentiatedBy(exponent.multipliedBy(-1))) // 9e6 + + var currentPrice = new BigNumber(1) + var ticksPassed = new BigNumber(0) + var currentAddIncrementTicks = new BigNumber(10).exponentiatedBy(exponent) // 10e-6 + var currentAddIncrementTicksPrice = currentAddIncrementTicks.multipliedBy(geoExponentIncrementTicks) // 9 + + ticksPassed = ticksPassed.plus(geoExponentIncrementTicks) // 9e6 + var totalPrice = currentPrice.plus(currentAddIncrementTicksPrice) // 10 + + while (totalPrice.isLessThan(desiredPrice)){ + exponent = exponent.plus(1) + currentAddIncrementTicks = new BigNumber(10).exponentiatedBy(exponent) + currentAddIncrementTicksPrice = currentAddIncrementTicks.multipliedBy(geoExponentIncrementTicks) + ticksPassed = ticksPassed.plus(geoExponentIncrementTicks) + totalPrice = totalPrice.plus(currentAddIncrementTicksPrice) + } + + var ticksToBeFulfilledByExponentAtCurrentTick = (desiredPrice.minus(totalPrice)).dividedBy(currentAddIncrementTicks) + var tickIndex = ticksPassed.plus(ticksToBeFulfilledByExponentAtCurrentTick) + + var returnTick + if (is_lowerBound){ + returnTick = tickIndex.dividedBy(tickSpacing).integerValue(BigNumber.ROUND_DOWN).multipliedBy(tickSpacing) + } + else{ + returnTick = tickIndex.dividedBy(tickSpacing).integerValue(BigNumber.ROUND_CEIL).multipliedBy(tickSpacing) + } + + return returnTick.toString() +} + diff --git a/src/connectors/connectors.routes.ts b/src/connectors/connectors.routes.ts index 6c43afc33a..d36b2163bc 100644 --- a/src/connectors/connectors.routes.ts +++ b/src/connectors/connectors.routes.ts @@ -22,6 +22,7 @@ import { PlentyConfig } from './plenty/plenty.config'; import { XRPLCLOBConfig } from './xrpl/xrpl.clob.config'; import { KujiraConfig } from './kujira/kujira.config'; import { QuipuswapConfig } from './quipuswap/quipuswap.config'; +import { OsmosisConfig } from '../chains/osmosis/osmosis.config'; export namespace ConnectorsRoutes { export const router = Router(); @@ -168,7 +169,13 @@ export namespace ConnectorsRoutes { trading_type: QuipuswapConfig.config.tradingTypes, chain_type: QuipuswapConfig.config.chainType, available_networks: QuipuswapConfig.config.availableNetworks, - } + }, + { + name: 'osmosis', + trading_type: OsmosisConfig.config.tradingTypes('swap'), + chain_type: OsmosisConfig.config.chainType, + available_networks: OsmosisConfig.config.availableNetworks, + }, ], }); }) diff --git a/src/connectors/uniswap/uniswap.controllers.ts b/src/connectors/uniswap/uniswap.controllers.ts index 6dfc303591..5aca4a8c80 100644 --- a/src/connectors/uniswap/uniswap.controllers.ts +++ b/src/connectors/uniswap/uniswap.controllers.ts @@ -399,7 +399,7 @@ export async function addLiquidity( token1, req.amount0, req.amount1, - req.fee.toUpperCase(), + req.fee!.toUpperCase(), Number(req.lowerPrice), Number(req.upperPrice), req.tokenId ? req.tokenId : 0, @@ -420,7 +420,7 @@ export async function addLiquidity( latency: latency(startTimestamp, Date.now()), token0: token0.address, token1: token1.address, - fee: req.fee, + fee: req.fee!, tokenId: req.tokenId ? req.tokenId : 0, gasPrice: gasPrice, gasPriceToken: ethereumish.nativeTokenSymbol, @@ -452,7 +452,7 @@ export async function removeLiquidity( const tx = await uniswapish.reducePosition( wallet, - req.tokenId, + req.tokenId!, req.decreasePercent ? req.decreasePercent : 100, gasLimitTransaction, gasPrice, @@ -501,7 +501,7 @@ export async function collectEarnedFees( const tx: Transaction = ( await uniswapish.collectFees( wallet, - req.tokenId, + req.tokenId!, gasLimitTransaction, gasPrice, req.nonce, @@ -535,7 +535,7 @@ export async function positionInfo( ): Promise { const startTimestamp: number = Date.now(); - const posInfo = await uniswapish.getPosition(req.tokenId); + const posInfo = await uniswapish.getPosition(req.tokenId!); logger.info(`Position info for position ${req.tokenId} retrieved.`); @@ -569,9 +569,9 @@ export async function poolPrice( const prices = await uniswapish.poolPrice( token0, token1, - req.fee.toUpperCase(), - req.period, - req.interval + req.fee!.toUpperCase(), + req.period!, + req.interval! ); return { diff --git a/src/network/network.controllers.ts b/src/network/network.controllers.ts index 75b6702f75..bb4b165158 100644 --- a/src/network/network.controllers.ts +++ b/src/network/network.controllers.ts @@ -19,6 +19,7 @@ import { getInitializedChain, UnsupportedChainException, } from '../services/connection-manager'; +import { Osmosis } from '../chains/osmosis/osmosis'; import { XRPL } from '../chains/xrpl/xrpl'; export async function getStatus( @@ -108,6 +109,11 @@ export async function getStatus( connections = connections.concat( kujiraConnections ? Object.values(kujiraConnections) : [] ); + + const osmosisConnections = Osmosis.getConnectedInstances(); + connections = connections.concat( + osmosisConnections ? Object.values(osmosisConnections) : [] + ); } for (const connection of connections) { diff --git a/src/services/base.ts b/src/services/base.ts index b2049651c3..0019049a8a 100644 --- a/src/services/base.ts +++ b/src/services/base.ts @@ -19,7 +19,7 @@ export interface TokenInfo { } // insert a string into another string at an index -const stringInsert = (str: string, val: string, index: number) => { +export const stringInsert = (str: string, val: string, index: number) => { if (index > 0) { return str.substring(0, index) + val + str.substr(index); } diff --git a/src/services/common-interfaces.ts b/src/services/common-interfaces.ts index 25e8ac78ce..d62a093278 100644 --- a/src/services/common-interfaces.ts +++ b/src/services/common-interfaces.ts @@ -14,7 +14,7 @@ import { providers as XdcProviders, } from 'ethers-xdc'; import { EthereumBase } from '../chains/ethereum/ethereum-base'; -import { CosmosBase } from '../chains/cosmos/cosmos-base'; +import { CosmosAsset, CosmosBase } from '../chains/cosmos/cosmos-base'; import { Provider } from '@ethersproject/abstract-provider'; import { CurrencyAmount, Token, Trade as TradeUniswap } from '@uniswap/sdk'; import { Trade } from '@uniswap/router-sdk'; @@ -127,7 +127,8 @@ export type Tokenish = | PancakeSwapToken | MMFToken | VVSToken - | TokenXsswap; + | TokenXsswap + | CosmosAsset; export type TokenAmountish = MMFTokenAmount | VVSTokenAmount; @@ -200,15 +201,15 @@ export interface ExpectedTrade { } export interface PositionInfo { - token0: string | undefined; - token1: string | undefined; - fee: string | undefined; - lowerPrice: string; - upperPrice: string; - amount0: string; - amount1: string; - unclaimedToken0: string; - unclaimedToken1: string; + token0?: string | undefined; + token1?: string | undefined; + fee?: string | undefined; + lowerPrice?: string; + upperPrice?: string; + amount0?: string; + amount1?: string; + unclaimedToken0?: string; + unclaimedToken1?: string; } export interface Uniswapish { @@ -796,4 +797,16 @@ export interface TransferRequest extends NetworkSelectionRequest { token: string; } -export type TransferResponse = string; +export type TransferResponse = string | FullTransferResponse; + +export interface FullTransferResponse { + network: string; + timestamp: number; + latency: number; + amount: string; + gasPrice: string; + gasLimit: string; + gasUsed: string; + gasWanted: string; + txHash: string; +} \ No newline at end of file diff --git a/src/services/connection-manager.ts b/src/services/connection-manager.ts index f2c1c11b36..493c2a2e71 100644 --- a/src/services/connection-manager.ts +++ b/src/services/connection-manager.ts @@ -6,6 +6,7 @@ import { Harmony } from '../chains/harmony/harmony'; import { Polygon } from '../chains/polygon/polygon'; import { Xdc } from '../chains/xdc/xdc'; import { Tezos } from '../chains/tezos/tezos'; +import { Osmosis } from '../chains/osmosis/osmosis'; import { XRPL, XRPLish } from '../chains/xrpl/xrpl'; import { MadMeerkat } from '../connectors/mad_meerkat/mad_meerkat'; import { Openocean } from '../connectors/openocean/openocean'; @@ -52,7 +53,8 @@ export type ChainUnion = | Xdcish | Tezosish | XRPLish - | Kujira; + | Kujira + | Osmosis;; export type Chain = T extends Algorand ? Algorand @@ -70,6 +72,8 @@ export type Chain = T extends Algorand ? XRPLish : T extends KujiraCLOB ? KujiraCLOB + : T extends Osmosis + ? Osmosis : never; export class UnsupportedChainException extends Error { @@ -121,6 +125,8 @@ export async function getChainInstance( connection = Cronos.getInstance(network); } else if (chain === 'cosmos') { connection = Cosmos.getInstance(network); + } else if (chain === 'osmosis') { + connection = Osmosis.getInstance(network); } else if (chain === 'near') { connection = Near.getInstance(network); } else if (chain === 'binance-smart-chain') { diff --git a/src/services/error-handler.ts b/src/services/error-handler.ts index 24e986db7a..f07e2eb06a 100644 --- a/src/services/error-handler.ts +++ b/src/services/error-handler.ts @@ -104,6 +104,10 @@ export const ACCOUNT_NOT_SPECIFIED_CODE = 1016; export const TRADE_NOT_FOUND_ERROR_CODE = 1017; export const UNKNOWN_ERROR_ERROR_CODE = 1099; export const AMOUNT_NOT_SUPPORTED_ERROR_CODE = 1016; +export const ENDPOINT_NOT_SUPPORTED_ERROR_CODE = 1018; +export const INSUFFICIENT_FUNDS_ERROR_CODE = 1019; +export const GAS_LIMIT_EXCEEDED_ERROR_CODE = 1020; +export const AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE = 1021; export const NETWORK_ERROR_MESSAGE = 'Network error. Please check your node URL, API key, and Internet connection.'; @@ -117,6 +121,10 @@ export const INCOMPLETE_REQUEST_PARAM = 'Incomplete request parameters.'; export const INVALID_NONCE_ERROR_MESSAGE = 'Invalid Nonce provided: '; export const AMOUNT_NOT_SUPPORTED_ERROR_MESSAGE = 'Amount provided in an unexpected format'; +export const ENDPOINT_NOT_SUPPORTED_ERROR_MESSAGE = 'Endpoint not supported by this chain/controller.'; +export const INSUFFICIENT_FUNDS_ERROR_MESSAGE = 'Insufficient funds for transaction.' +export const GAS_LIMIT_EXCEEDED_ERROR_MESSAGE = 'Gas limit exceeded (gasWanted greater than gasLimitEstimate).'; +export const AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE = 'Calculated amount less than min amount provided with slippage. Maybe try increasing slippage. '; export const SWAP_PRICE_EXCEEDS_LIMIT_PRICE_ERROR_MESSAGE = ( price: any, diff --git a/src/services/schema/osmosis-schema.json b/src/services/schema/osmosis-schema.json new file mode 100755 index 0000000000..ebe18b6e56 --- /dev/null +++ b/src/services/schema/osmosis-schema.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "networks": { + "type": "object", + "patternProperties": { + "^\\w+$": { + "type": "object", + "properties": { + "nodeURL": { "type": "string" }, + "tokenListType": { "type": "string" }, + "tokenListSource": { "type": "string" }, + "chainId": { "type": "string" } + }, + "required": ["nodeURL", "tokenListType", "tokenListSource", "chainId"], + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "network": { "type": "string" }, + "nativeCurrencySymbol": { "type": "string" }, + "feeTier": { + "enum": ["low", "medium", "high"] + }, + "gasAdjustment": { "type": "number" }, + "gasLimitTransaction": { "type": "integer" }, + "manualGasPrice": { "type": "number" }, + "manualGasPriceToken": { "type": "string" }, + "allowedSlippage": { "type": "string" }, + "useEIP1559DynamicBaseFeeInsteadOfManualGasPrice": { "type": "boolean" }, + "rpcAddressDynamicBaseFee": { "type": "string" } + }, + "additionalProperties": false +} diff --git a/src/services/wallet/wallet.controllers.ts b/src/services/wallet/wallet.controllers.ts index b666eb6e58..e6c23dbfe0 100644 --- a/src/services/wallet/wallet.controllers.ts +++ b/src/services/wallet/wallet.controllers.ts @@ -34,6 +34,7 @@ import { } from '../connection-manager'; import { Ethereumish, Tezosish } from '../common-interfaces'; import { Algorand } from '../../chains/algorand/algorand'; +import { Osmosis } from '../../chains/osmosis/osmosis'; export function convertXdcAddressToEthAddress(publicKey: string): string { return publicKey.length === 43 && publicKey.slice(0, 3) === 'xdc' @@ -112,6 +113,16 @@ export async function addWallet( req.privateKey, passphrase ); + } else if (connection instanceof Osmosis) { + const wallet = await (connection as Osmosis).getAccountsfromPrivateKey( + req.privateKey, + 'osmo' + ); + address = wallet.address; + encryptedPrivateKey = await (connection as Osmosis).encrypt( + req.privateKey, + passphrase + ); } else if (connection instanceof Near) { address = ( await connection.getWalletFromPrivateKey( diff --git a/src/services/wallet/wallet.validators.ts b/src/services/wallet/wallet.validators.ts index aed3ee0420..9e377b0fc9 100644 --- a/src/services/wallet/wallet.validators.ts +++ b/src/services/wallet/wallet.validators.ts @@ -142,7 +142,7 @@ export const validatePrivateKey: Validator = mkSelectingValidator( ); export const invalidChainError: string = - 'chain must be "ethereum", "avalanche", "near", "harmony", "cosmos", "binance-smart-chain", "kujira"'; + 'chain must be "ethereum", "avalanche", "near", "harmony", "cosmos", "osmosis", "binance-smart-chain", or "kujira"'; export const invalidNetworkError: string = 'expected a string for the network key'; @@ -168,6 +168,7 @@ export const validateChain: Validator = mkValidator( val === 'harmony' || val === 'cronos' || val === 'cosmos' || + val === 'osmosis' || val === 'binance-smart-chain' || val === 'tezos' || val === 'xrpl' || diff --git a/src/templates/osmosis.yml b/src/templates/osmosis.yml new file mode 100755 index 0000000000..5094472c8e --- /dev/null +++ b/src/templates/osmosis.yml @@ -0,0 +1,23 @@ +networks: + mainnet: + nodeURL: https://rpc.osmosis.zone/ + tokenListType: FILE + tokenListSource: /home/gateway/conf/lists/osmosis-1.assetlist.json + chainId: osmosis-1 + testnet: + nodeURL: https://rpc.testnet.osmosis.zone/ + tokenListType: FILE + tokenListSource: /home/gateway/conf/lists/osmo-test-5-assetlist.json + chainId: osmo-test-5 +network: mainnet +nativeCurrencySymbol: OSMO + +feeTier: medium +gasAdjustment: 1.7 +gasLimitTransaction: 2000000 +allowedSlippage: 2% + +manualGasPrice: 0.025 +manualGasPriceToken: uosmo +useEIP1559DynamicBaseFeeInsteadOfManualGasPrice: true +rpcAddressDynamicBaseFee: https://lcd.osmosis.zone/osmosis/txfees/v1beta1/cur_eip_base_fee diff --git a/src/templates/root.yml b/src/templates/root.yml index 1a2f2a51e2..1028546131 100644 --- a/src/templates/root.yml +++ b/src/templates/root.yml @@ -71,7 +71,11 @@ configurations: $namespace cosmos: configurationPath: cosmos.yml schemaPath: cosmos-schema.json - + + $namespace osmosis: + configurationPath: osmosis.yml + schemaPath: osmosis-schema.json + $namespace cronos: configurationPath: cronos.yml schemaPath: ethereum-schema.json diff --git a/test-helpers/curl/curl.sh b/test-helpers/curl/curl.sh index b2bbab5842..999b44ec84 100644 --- a/test-helpers/curl/curl.sh +++ b/test-helpers/curl/curl.sh @@ -7,6 +7,7 @@ # export BSC_ADDRESS='put-your-binance-smart-chain-key-here' # export POLYGON_ADDRESS='' # export KUJIRA_MNEMONIC='put-your-kujira-mnemonic-here' +# export OSMOSIS_ADDRESS='' # -k is --insecure, this disables certificate verification and should only be # used for local development and testing @@ -53,6 +54,12 @@ curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: app curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/cronos_balances.json)" https://localhost:15888/chain/balances | jq +curl -s -X GET -k --key $GATEWAY_KEY --cert $GATEWAY_CERT "https://localhost:15888/chain/status?chain=osmosis&network=testnet" | jq + +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/osmosis_balances.json)" https://localhost:15888/chain/poll | jq + +curl -s -X GET -k --key $GATEWAY_KEY --cert $GATEWAY_CERT "https://localhost:15888/chain/tokens?chain=osmosis&network=testnet" | jq + # Wallet ## add private keys @@ -74,6 +81,8 @@ curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: app curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/add_kujira_key.json)" https://localhost:15888/wallet/add | jq +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/add_osmosis_key.json)" https://localhost:15888/wallet/add | jq + ## read public keys curl -s -X GET -k --key $GATEWAY_KEY --cert $GATEWAY_CERT https://localhost:15888/wallet | jq @@ -97,6 +106,8 @@ curl -s -X DELETE -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: a curl -s -X DELETE -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/remove_xdc_key.json)" https://localhost:15888/wallet/remove | jq +curl -s -X DELETE -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/remove_osmosis_key.json)" https://localhost:15888/wallet/remove | jq + # AMM ## price @@ -123,6 +134,8 @@ curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: app curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/price_tinyman.json)" https://localhost:15888/amm/price | jq +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/price_osmosis.json)" https://localhost:15888/amm/price | jq + ## trade curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/eth_uniswap_trade.json)" https://localhost:15888/amm/trade | jq @@ -147,6 +160,8 @@ curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: app curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/algorand_tinyman_trade.json)" https://localhost:15888/amm/trade | jq +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/osmosis_trade.json)" https://localhost:15888/amm/trade | jq + ## Perp - curie ### Market prices @@ -181,22 +196,32 @@ curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: app curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/eth_uniswap_add_liquidity.json)" https://localhost:15888/amm/liquidity/add | jq +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/osmosis_add_liquidity.json)" https://localhost:15888/amm/liquidity/add | jq + ### remove liquidity curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/eth_uniswap_position.json)" https://localhost:15888/amm/liquidity/remove | jq +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/osmosis_position.json)" https://localhost:15888/amm/liquidity/remove | jq + ### collect fees curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/eth_uniswap_position.json)" https://localhost:15888/amm/liquidity/collect_fees | jq +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/osmosis_position.json)" https://localhost:15888/amm/liquidity/collect_fees | jq + ### get position curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/eth_uniswap_position.json)" https://localhost:15888/amm/liquidity/position | jq +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/osmosis_position.json)" https://localhost:15888/amm/liquidity/position | jq + ### get pool price curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/eth_uniswap_pool_price.json)" https://localhost:15888/amm/liquidity/price | jq +curl -s -X POST -k --key $GATEWAY_KEY --cert $GATEWAY_CERT -H "Content-Type: application/json" -d "$(envsubst < ./requests/osmosis_pool_price.json)" https://localhost:15888/amm/liquidity/price | jq + # EVM ## nonce diff --git a/test-helpers/curl/requests/add_osmosis_key.json b/test-helpers/curl/requests/add_osmosis_key.json new file mode 100644 index 0000000000..fcf481c23f --- /dev/null +++ b/test-helpers/curl/requests/add_osmosis_key.json @@ -0,0 +1,5 @@ +{ + "privateKey": "$OSMOSIS_PRIVATE_KEY", + "chain": "osmosis", + "network": "testnet" +} \ No newline at end of file diff --git a/test-helpers/curl/requests/osmosis_add_liquidity.json b/test-helpers/curl/requests/osmosis_add_liquidity.json new file mode 100644 index 0000000000..c990c6a3f8 --- /dev/null +++ b/test-helpers/curl/requests/osmosis_add_liquidity.json @@ -0,0 +1,13 @@ +{ + "address": "$OSMOSIS_ADDRESS", + "token0": "OSMO", + "token1": "ATOM", + "amount0": "1", + "amount1": "1", + "fee": "LOW", + "lowerPrice": "1", + "upperPrice": "5", + "chain": "osmosis", + "network": "testnet", + "connector": "osmosis" +} \ No newline at end of file diff --git a/test-helpers/curl/requests/osmosis_balances.json b/test-helpers/curl/requests/osmosis_balances.json new file mode 100644 index 0000000000..7f5ef31bc8 --- /dev/null +++ b/test-helpers/curl/requests/osmosis_balances.json @@ -0,0 +1,8 @@ +{ + "chain": "osmosis", + "network": "testnet", + "address": "$OSMOSIS_ADDRESS", + "tokenSymbols": [ + "OSMO" + ] +} \ No newline at end of file diff --git a/test-helpers/curl/requests/osmosis_pool_price.json b/test-helpers/curl/requests/osmosis_pool_price.json new file mode 100644 index 0000000000..0d0938a71c --- /dev/null +++ b/test-helpers/curl/requests/osmosis_pool_price.json @@ -0,0 +1,8 @@ +{ + "token0": "OSMO", + "token1": "ATOM", + "fee": "LOW", + "chain": "osmosis", + "network": "testnet", + "connector": "osmosis" +} \ No newline at end of file diff --git a/test-helpers/curl/requests/osmosis_position.json b/test-helpers/curl/requests/osmosis_position.json new file mode 100644 index 0000000000..02c58a52cb --- /dev/null +++ b/test-helpers/curl/requests/osmosis_position.json @@ -0,0 +1,7 @@ +{ + "address": "$OSMOSIS_ADDRESS", + "tokenId": 2732, + "chain": "osmosis", + "network": "testnet", + "connector": "osmosis" +} \ No newline at end of file diff --git a/test-helpers/curl/requests/osmosis_trade.json b/test-helpers/curl/requests/osmosis_trade.json new file mode 100644 index 0000000000..a3df130c94 --- /dev/null +++ b/test-helpers/curl/requests/osmosis_trade.json @@ -0,0 +1,10 @@ +{ + "address": "$OSMOSIS_ADDRESS", + "quote": "ATOM", + "base": "OSMO", + "amount": "1", + "side": "BUY", + "chain": "osmosis", + "network": "testnet", + "connector": "osmosis" +} \ No newline at end of file diff --git a/test-helpers/curl/requests/price_osmosis.json b/test-helpers/curl/requests/price_osmosis.json new file mode 100644 index 0000000000..eb75e88fdd --- /dev/null +++ b/test-helpers/curl/requests/price_osmosis.json @@ -0,0 +1,9 @@ +{ + "connector": "osmosis", + "chain": "osmosis", + "network": "testnet", + "quote": "ATOM", + "base": "OSMO", + "amount": "1", + "side": "BUY" +} \ No newline at end of file diff --git a/test-helpers/curl/requests/remove_osmosis_key.json b/test-helpers/curl/requests/remove_osmosis_key.json new file mode 100644 index 0000000000..df65570c51 --- /dev/null +++ b/test-helpers/curl/requests/remove_osmosis_key.json @@ -0,0 +1,4 @@ +{ + "address": "$OSMOSIS_ADDRESS", + "chain": "osmosis" +} \ No newline at end of file diff --git a/test/chains/osmosis/osmosis.test.ts b/test/chains/osmosis/osmosis.test.ts new file mode 100755 index 0000000000..fd28a8601f --- /dev/null +++ b/test/chains/osmosis/osmosis.test.ts @@ -0,0 +1,213 @@ +import { patch, unpatch } from '../../services/patch'; +import { Osmosis } from '../../../src/chains/osmosis/osmosis'; +import { ConfigManagerCertPassphrase } from '../../../src/services/config-manager-cert-passphrase'; +import { addWallet, getWallets } from '../../../src/services/wallet/wallet.controllers'; +import Decimal from 'decimal.js-light'; +import { CosmosAsset } from '../../../src/chains/cosmos/cosmos-base'; +import { Side } from '../../../src/amm/amm.requests'; + +const osmosisAddress = 'osmo1gxfandcf6x6y0lv3afv0p4w4akv809ycrly4cs'; +const osmosisPrivateKey = '2e8be986f72f76dba7f8448b2e2342d3297cd628cf08aad9b90098102824f9d5'; // real +const liveAddressNik = 'osmo1mvsg3en5ulpnpd3dset2m86zjpnzp4v4epmjh7' + +jest.setTimeout(300000); // run for 5 mins + +let osmosis: Osmosis; + +beforeAll(async () => { + patch(ConfigManagerCertPassphrase, 'readPassphrase', () => 'macymo'); + osmosis = Osmosis.getInstance('testnet'); + + await osmosis.init(); +}); + +beforeEach(() => { +}); + +afterEach(() => { +}); + +afterAll(async () => { + unpatch(); + await osmosis.close(); +}); + +describe('wallets', () => { + it('add an Osmosmis wallet', async () => { + await addWallet({ + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + }); + + const wallets = await getWallets(); + + const addresses: string[][] = wallets + .filter((wallet) => wallet.chain === 'osmosis') + .map((wallet) => wallet.walletAddresses); + + expect(addresses[0]).toContain(osmosisAddress); + }); +}); + +describe('chain.routes', () => { + + it('getTokens', async () => { + var getTokens = await osmosis.controller.getTokens(osmosis, {tokenSymbols:['OSMO']}); + expect(getTokens.tokens[0].symbol).toEqual('OSMO'); + }); + + it('getTokens All', async () => { + var getTokens = await osmosis.controller.getTokens(osmosis, {}); + expect(getTokens.tokens.length).toEqual(12); + }); + + it('balances OSMO', async () => { + const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress, tokenSymbols:['OSMO']}); + expect(Number(balances.balances['OSMO'])).toBeGreaterThan(0); + }); + + it('balances All', async () => { + const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress, tokenSymbols:['OSMO']}); + expect(Number(balances.balances['OSMO'])).toBeGreaterThan(0); + }); + + it('getWalletFromPrivateKey', async () => { + const walleto = await osmosis.getWalletFromPrivateKey( + osmosisPrivateKey, + 'osmo' + ); + expect(walleto.prefix).toEqual('osmo'); + + const balanceo = await osmosis.getBalances(walleto) + expect(Number(balanceo['OSMO'].value)).toBeGreaterThan(0); + }); + + it('balances All', async () => { + const block = await osmosis.getCurrentBlockNumber(); + expect(block).toBeGreaterThan(0); + }); + + it('getTokenBySymbol', async () => { + var token = osmosis.getTokenBySymbol('ATOM')!; + var token2 = osmosis.getTokenForSymbol('OSMO')!; + expect(token.decimals).toEqual(6); + expect(token2.symbol).toEqual('OSMO'); + }); + + it('transfer', async () => { + var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress, 'to':liveAddressNik, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network':'testnet'}); + expect(transfer).toContain('Transfer success'); + }); + +}); + + +describe('chain.routes - DISABLED', () => { + + it('allowances', async () => { + var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress, 'spender':liveAddressNik, 'tokenSymbols':[], 'chain':'osmosis', 'network':'testnet'}); + expect(allowances.spender).toBeUndefined() + }); + + it('approve', async () => { + var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress, 'spender':liveAddressNik, token:'OSMO', 'chain':'osmosis', 'network':'testnet'}); + expect(approve.spender).toBeUndefined() + }); + + it('cancel', async () => { + var cancel = await osmosis.controller.cancel(osmosis, {'address':osmosisAddress, 'nonce':0, 'chain':'osmosis', 'network':'testnet'}); + expect(cancel.txHash).toBeUndefined() + }); + + it('nextNonce', async () => { + var nextNonce = await osmosis.controller.nextNonce(osmosis, {'address':osmosisAddress, 'chain':'osmosis', 'network':'testnet'}); + expect(nextNonce.nonce).toEqual(0) + }); + + it('nonce', async () => { + var nonce = await osmosis.controller.nonce(osmosis, {'address':osmosisAddress, 'chain':'osmosis', 'network':'testnet'}); + expect(nonce.nonce).toEqual(0) + }); + +}); + + + +describe('controllers - price + trade', () => { + + it('estimateGas', async () => { + var estimateGas = await osmosis.controller.estimateGas(osmosis); + expect(estimateGas.gasPriceToken).toEqual('uosmo'); + }); + + it('getTradeInfo', async () => { + const tradeInfo = await osmosis.controller.getTradeInfo(osmosis, "OSMO", "ION", new Decimal(1.0), "BUY") + expect((tradeInfo.baseToken as CosmosAsset).base).toEqual('uosmo'); + expect(tradeInfo.requestAmount.toNumber()).toEqual(1); + expect(tradeInfo.expectedTrade.routes.length).toBeGreaterThanOrEqual(1); + }); + + it('price', async () => { + // slippage must be high on testnet due to price mismatch with pool ratios + const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':'testnet'}; + const priceResponse1 = await osmosis.controller.price(osmosis, priceRequest1) + expect(priceResponse1.base).toEqual('OSMO') + }); + + it('trade', async () => { + const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; + const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) + expect(tradeResponse.base).toEqual('uosmo') + }); + + it('trade back', async () => { + const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; + const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) + expect(tradeResponse.base).toEqual('uion') + }); + + +}); + + +describe('controllers - CL Pools + Liquidity', () => { + + // best to join pools using one amount == 0 (so input 1 token type at a time) + // adds tend to fail unless amounts input are similar in relative $ value + it('addLiquidity', async () => { + const addLiquidityRequestFunction = {'poolId':'62', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; + var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) + expect(addLiquidityResponse.poolId).toEqual('62') + }); + + it('positionsRequest', async () => { + const positionsRequest1 = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress, + } + var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) + expect(positionsResponse1.pools!.length).toBeGreaterThan(0) + }); + + it('removeLiquidity', async () => { + const removeLiquidityRequest = {'decreasePercent':100, 'poolId':'62', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, 'allowedSlippage':'100%'}; + var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) + expect(removeLiquidityResponse.txHash).toBeDefined(); + }); + + it('poolPrice', async () => { + const poolPriceRequest = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress, + token0: 'OSMO', + token1: 'ATOM', + } + var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) + expect(poolPriceResponse.token0).toEqual('OSMO') + }); + +}); + diff --git a/test/chains/osmosis/osmosis.testnojest.ts b/test/chains/osmosis/osmosis.testnojest.ts new file mode 100644 index 0000000000..b897db1a19 --- /dev/null +++ b/test/chains/osmosis/osmosis.testnojest.ts @@ -0,0 +1,528 @@ +// @ts-nocheck +import fs = require('fs'); +import https = require('https'); +import axios from 'axios'; +import BigNumber from 'bignumber.js'; + +type method = 'GET' | 'POST'; + +const certPath = '/home/vboxuser/hbot/gateway/certs'; + +const httpsAgent = axios.create({ + httpsAgent: new https.Agent({ + ca: fs.readFileSync(certPath.concat('/ca_cert.pem'), { + encoding: 'utf-8', + }), + cert: fs.readFileSync(certPath.concat('/client_cert.pem'), { + encoding: 'utf-8', + }), + key: fs.readFileSync(certPath.concat('/client_key.pem'), { + encoding: 'utf-8', + }), + host: '127.0.0.1', + port: 15888, + requestCert: true, + rejectUnauthorized: false, + }), +}); +const request = async ( + method: method, + path: string, + params: Record +) => { + try { + let response; + const gatewayAddress = 'https://127.0.0.1:15888'; + if (method === 'GET') { + response = await httpsAgent.get(gatewayAddress + path); + } else { + response = await httpsAgent.post(gatewayAddress + path, params); + } + return response.data; + } catch (err) { + console.log(`${method} ${path} - ${err}`); + } +}; + +import { Osmosis } from '../../../src/chains/osmosis/osmosis'; +import { addWallet, getWallets } from '../../../src/services/wallet/wallet.controllers'; +import Decimal from 'decimal.js-light'; +import { Side } from '../../../src/amm/amm.requests'; + +const osmosisAddress_testnet = 'osmo1gxfandcf6x6y0lv3afv0p4w4akv809ycrly4cs'; +const osmosisAddress_mainnet = 'osmo1mvsg3en5ulpnpd3dset2m86zjpnzp4v4epmjh7'; + +const osmosisPrivateKey_testnet = '2e8be986f72f76dba7f8448b2e2342d3297cd628cf08aad9b90098102824f9d5'; // real testnet +const osmosisPrivateKey_mainnet = '8155cee93c2ff619e0943db140a31fe0ab34df8c85fefe114eb2200ef1a017db'; +// const osmosisPrivateKey_mainnet = 'ENTER PRIVATE KEY AND UPDATE osmosisAddress_mainnet'; + +const txHash_mainnet = 'FAEED1587F703D59CC8641D06DF18363E9E960D56F533D1ED75BA186990954D5' +const txHash_testnet = '0BF855ED36FDE2AEBA753A51FA0741A45E2D5CADD0583815559BDB9314F1380C' + +// update this to mainnet if desired to test multi-hop routes +var network = 'testnet' + +var slippage = '100%' +var osmosisAddress_from = osmosisAddress_testnet +var osmosisAddress_to = osmosisAddress_mainnet +var osmosisPrivateKey = osmosisPrivateKey_testnet +if (network == 'mainnet'){ + slippage = '2%' + osmosisAddress_from = osmosisAddress_mainnet + osmosisAddress_to = osmosisAddress_testnet + osmosisPrivateKey = osmosisPrivateKey_mainnet +} + +async function test() { + let osmosis: Osmosis; + + osmosis = Osmosis.getInstance(network); + await osmosis.init(); + + var poolId; + try { + console.debug('addLiquidityResponse'); + const addLiquidityRequestFunction = {'fee': 'high', 'token0':'OSMO', 'token1':'ION', 'amount0':'0.0001', 'amount1':'0', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; //'poolId':'62', + var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) + poolId = addLiquidityResponse.poolId; + console.debug(addLiquidityResponse); + } catch (err) { + console.debug(err); + } + + try { + console.debug('poolPriceResponse'); + const poolPriceRequest = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress_from, + token0: 'OSMO', + token1: 'ATOM', + } + var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) + console.debug(poolPriceResponse); + } catch (err) { + console.debug(err); + } + + try { + console.debug('positionsResponse1'); + const positionsRequest1 = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress_from, + } + var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) + console.debug(positionsResponse1); + } catch (err) { + console.debug(err); + } + + + + // START USUAL TEST RUNS + +// // poll +// try { +// console.debug('poll'); +// const pollRequest = {'txHash':txHash_testnet, 'chain':'osmosis', 'network': network}; +// const pollResponse = await osmosis.controller.poll(osmosis, pollRequest) +// console.debug(pollResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// await addWallet({ +// privateKey: osmosisPrivateKey, +// chain: 'osmosis', +// network: network, +// }); + +// const wallets = await getWallets(); +// console.debug(wallets); + +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('balances OSMO'); +// const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:['OSMO']}); +// console.debug(balances); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('balances All'); +// const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); +// console.debug(balances); +// } catch (err) { +// console.debug(err); +// } + +// // DISABLED ENDPOINTS +// try { +// console.debug('allowances'); +// var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress_to, 'spender':osmosisAddress_from, 'tokenSymbols':[], 'chain':'osmosis', 'network': network}); +// console.debug(allowances); +// console.debug(allowances); +// } catch (err) { +// console.debug(err); +// } +// try { +// console.debug('cancel'); +// var cancel = await osmosis.controller.cancel(osmosis, {'address':osmosisAddress_to, 'nonce':0, 'chain':'osmosis', 'network': network}); +// console.debug(cancel); +// } catch (err) { +// console.debug(err); +// } +// try { +// console.debug('approve'); +// var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress_to, 'spender':osmosisAddress_from, token:'OSMO', 'chain':'osmosis', 'network': network}); +// console.debug(approve); +// } catch (err) { +// console.debug(err); +// } +// // DISABLED ENDPOINTS + +// try { +// console.debug('transfer'); +// var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress_from, 'to':osmosisAddress_to, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network': network}); +// console.debug(transfer); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('getTokens OSMO'); +// var getTokens = await osmosis.controller.getTokens(osmosis, {tokenSymbols:['OSMO']}); +// console.debug(getTokens); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('getTokens All'); +// var getTokens = await osmosis.controller.getTokens(osmosis, {}); +// console.debug(getTokens); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('estimateGas'); +// var estimateGas = await osmosis.controller.estimateGas(osmosis); +// console.debug(estimateGas); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('block'); +// const block = await osmosis.getCurrentBlockNumber(); +// console.debug(block); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('wallet balances All'); +// const walleto = await osmosis.getWalletFromPrivateKey( +// osmosisPrivateKey, +// 'osmo' +// ); +// console.debug(walleto); +// } catch (err) { +// console.debug(err); +// } + + +// try { +// console.debug('get token'); +// var token = osmosis.getTokenBySymbol('ATOM'); +// var token2 = osmosis.getTokenForSymbol('OSMO'); +// console.debug(token); +// console.debug(token2); +// } catch (err) { +// console.debug(err); +// } + + + + +// try { +// console.debug('priceResponse1'); +// const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; +// const priceResponse1 = await osmosis.controller.price(osmosis, priceRequest1) +// console.debug(priceResponse1) +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('priceResponse2'); +// const priceRequest2 = {'quote':'OSMO', 'base':'ION', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; +// const priceResponse2 = await osmosis.controller.price(osmosis, priceRequest2) +// console.debug(priceResponse2) +// } catch (err) { +// console.debug(err); +// } + + +// // trade +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } + +// // trade back +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } + + +// // 3 cycle trade - tests 2-hop trades. ONLY WORKS ON MAINNET +// if (network == 'mainnet'){ +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'JUNO', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'STARS', 'base':'JUNO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'OSMO', 'base':'STARS', 'amount':'0.3', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } +// } + + +// try { +// console.debug('priceResponse3'); +// const priceRequest3 = {'quote':'ATOM', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; +// const priceResponse3 = await osmosis.controller.price(osmosis, priceRequest3) +// console.debug(priceResponse3) +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('tradeInfo'); +// const tradeInfo = await osmosis.controller.getTradeInfo(osmosis, "OSMO", "ION", new Decimal(1.0), "BUY") +// console.debug(tradeInfo); +// } catch (err) { +// console.debug(err); +// } + +// var poolId; +// try { +// console.debug('addLiquidityResponse'); +// const addLiquidityRequestFunction = {'fee': 'high', 'token0':'OSMO', 'token1':'ION', 'amount0':'0.0001', 'amount1':'0', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; //'poolId':'62', +// var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) +// poolId = addLiquidityResponse.poolId; +// console.debug(addLiquidityResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// if (poolId){ +// console.debug('removeLiquidityResponse'); +// const removeLiquidityRequest = {'decreasePercent':100, 'poolId':poolId, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, 'allowedSlippage':slippage}; +// var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) +// console.debug(removeLiquidityResponse); +// } +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('poolPriceResponse'); +// const poolPriceRequest = { +// chain:'osmosis', +// network:'testnet', +// address: osmosisAddress_from, +// token0: 'OSMO', +// token1: 'ATOM', +// } +// var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) +// console.debug(poolPriceResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('positionsResponse1'); +// const positionsRequest1 = { +// chain:'osmosis', +// network:'testnet', +// address: osmosisAddress_from, +// } +// var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) +// console.debug(positionsResponse1); +// } catch (err) { +// console.debug(err); +// } + + +// await osmosis.close(); +// } + +// // BELOW NEEDS TO HAVE GATEWAY RUNNIN SEPARATELY +// async function testViaEndpoints() { +// let osmosis: Osmosis; + +// osmosis = Osmosis.getInstance('testnet'); +// await osmosis.init(); + +// console.debug('starting'); +// console.debug('starting'); +// console.debug('starting'); +// console.debug('starting'); + +// const status = await request('GET', '/chain/status', { +// privateKey: osmosisPrivateKey, +// chain: 'osmosis', +// network: 'testnet', +// }); +// console.debug('status'); +// console.debug(status); + +// const balances = await request('POST', '/chain/balances', { +// privateKey: osmosisPrivateKey, +// address: osmosisAddress_testnet, +// chain: 'osmosis', +// network: 'testnet', +// tokenSymbols: ['OSMO','ATOM','ION'], +// }); +// console.debug('balances'); +// console.debug(balances); + +// const tokensList = await osmosis.controller.getTokens(osmosis,{}) +// console.debug(tokensList); + +// const tokens = await request('GET', '/chain/tokens?chain=osmosis&network=testnet', { +// privateKey: osmosisPrivateKey, +// chain: 'osmosis', +// network: 'testnet', +// query: {chain: 'osmosis', network: 'testnet'}, +// }); +// console.debug('tokens'); +// console.debug(tokens); + + await osmosis.close(); + +} + +async function testViaEndpoints2() { + + const priceRequest = await request('POST', '/amm/price_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + quote: 'ION', + base: 'OSMO', + amount: '0.001', + side: 'BUY', + allowedSlippage: '1%', + }); + console.debug(priceRequest); + + // can specify poolId + const addLiquidityRequest = await request('POST', '/amm/liquidity/add_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + token0: 'ION', + token1: 'OSMO', + amount0: '0.001', + amount1: '0.1', + // poolId: 'X', + }); + console.debug(addLiquidityRequest); + + const removeLiquidityRequest = await request('POST', '/amm/liquidity/remove_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + decreasePercent: 10, + poolId: '62', + }); + console.debug(removeLiquidityRequest); + + const poolPriceRequest = await request('POST', '/amm/liquidity/price_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + token0: 'ION', + token1: 'OSMO', + }); + console.debug(poolPriceRequest); + + + const poolPriceRequestTest = await request('POST', '/amm/liquidity/price_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + token0: 'ATOM', + token1: 'OSMO', + }); + console.debug(poolPriceRequestTest); + + // can specify poolId + const positionsRequest = await request('POST', '/amm/liquidity/positions_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + // poolId: 'X', + }); + console.debug(positionsRequest); + + + + +}; + +if (false){ + testViaEndpoints2(); +} + +test(); diff --git a/yarn.lock b/yarn.lock index ebf49279e2..8b4ff16d68 100644 --- a/yarn.lock +++ b/yarn.lock @@ -214,19 +214,19 @@ semver "^6.3.0" "@babel/core@^7.11.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" - integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.6" + "@babel/helpers" "^7.23.7" "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" + "@babel/traverse" "^7.23.7" "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" @@ -432,13 +432,13 @@ "@babel/traverse" "^7.21.0" "@babel/types" "^7.21.0" -"@babel/helpers@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" - integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" + "@babel/traverse" "^7.23.7" "@babel/types" "^7.23.6" "@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": @@ -629,10 +629,10 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" - integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -677,13 +677,23 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@chain-registry/types@^0.16.0": +"@chain-registry/types@0.16.0", "@chain-registry/types@^0.16.0": version "0.16.0" resolved "https://registry.yarnpkg.com/@chain-registry/types/-/types-0.16.0.tgz#f76409186899a976d33693d7f458c33d71a66730" integrity sha512-4j6vq2Vqn/nF+UBjvRPUVs6eM3+5rJ+dPmEWpd/OoNH3wTy1k6aoilcSTZRR//vGcI5EOVGsxhhJxUzo2qqweA== dependencies: "@babel/runtime" "^7.21.0" +"@chain-registry/utils@1.13.1": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@chain-registry/utils/-/utils-1.13.1.tgz#bee23868e0bdee0533e26fb99276c190916332fd" + integrity sha512-BV8XoZGGlfeF3d5p06y4w2uDggAxtWa5g5zEDRgcyi6V+iJUSlPwu5PL7IKB5qJvAq7J1Vgw8x+Jqj1TVxjpvA== + dependencies: + "@babel/runtime" "^7.21.0" + "@chain-registry/types" "^0.16.0" + bignumber.js "9.1.1" + sha.js "^2.4.11" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -744,6 +754,36 @@ "@cosmjs/math" "0.27.1" "@cosmjs/utils" "0.27.1" +"@cosmjs/amino@0.29.3": + version "0.29.3" + resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.29.3.tgz#5aa338a301ea970a93e15522706615efea507c10" + integrity sha512-BFz1++ERerIggiFc7iGHhGe1CeV3rCv8BvkoBQTBN/ZwzHOaKvqQj8smDlRGlQxX3HWlTwgiLN2A+OB5yX4ZRw== + dependencies: + "@cosmjs/crypto" "^0.29.3" + "@cosmjs/encoding" "^0.29.3" + "@cosmjs/math" "^0.29.3" + "@cosmjs/utils" "^0.29.3" + +"@cosmjs/amino@0.32.2", "@cosmjs/amino@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.2.tgz#ba3cf255e4e6b1ba67461f1ef7b0b8ad3f895da7" + integrity sha512-lcK5RCVm4OfdAooxKcF2+NwaDVVpghOq6o/A40c2mHXDUzUoRZ33VAHjVJ9Me6vOFxshrw/XEFn1f4KObntjYA== + dependencies: + "@cosmjs/crypto" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + +"@cosmjs/amino@^0.29.3", "@cosmjs/amino@^0.29.5": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.29.5.tgz#053b4739a90b15b9e2b781ccd484faf64bd49aec" + integrity sha512-Qo8jpC0BiziTSUqpkNatBcwtKNhCovUnFul9SlT/74JUCdLYaeG5hxr3q1cssQt++l4LvlcpF+OUXL48XjNjLw== + dependencies: + "@cosmjs/crypto" "^0.29.5" + "@cosmjs/encoding" "^0.29.5" + "@cosmjs/math" "^0.29.5" + "@cosmjs/utils" "^0.29.5" + "@cosmjs/amino@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.30.1.tgz#7c18c14627361ba6c88e3495700ceea1f76baace" @@ -797,6 +837,19 @@ ripemd160 "^2.0.2" sha.js "^2.4.11" +"@cosmjs/crypto@^0.29.3", "@cosmjs/crypto@^0.29.5": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.29.5.tgz#ab99fc382b93d8a8db075780cf07487a0f9519fd" + integrity sha512-2bKkaLGictaNL0UipQCL6C1afaisv6k8Wr/GCLx9FqiyFkh9ZgRHDyetD64ZsjnWV/N/D44s/esI+k6oPREaiQ== + dependencies: + "@cosmjs/encoding" "^0.29.5" + "@cosmjs/math" "^0.29.5" + "@cosmjs/utils" "^0.29.5" + "@noble/hashes" "^1" + bn.js "^5.2.0" + elliptic "^6.5.4" + libsodium-wrappers "^0.7.6" + "@cosmjs/crypto@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.30.1.tgz#21e94d5ca8f8ded16eee1389d2639cb5c43c3eb5" @@ -823,6 +876,19 @@ elliptic "^6.5.4" libsodium-wrappers-sumo "^0.7.11" +"@cosmjs/crypto@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.32.2.tgz#8ed255d3d1c1c4d916a1586f8cbc33eaab82f511" + integrity sha512-RuxrYKzhrPF9g6NmU7VEq++Hn1vZJjqqJpZ9Tmw9lOYOV8BUsv+j/0BE86kmWi7xVJ7EwxiuxYsKuM8IR18CIA== + dependencies: + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + "@noble/hashes" "^1" + bn.js "^5.2.0" + elliptic "^6.5.4" + libsodium-wrappers-sumo "^0.7.11" + "@cosmjs/encoding@0.27.1": version "0.27.1" resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.27.1.tgz#3cd5bc0af743485eb2578cdb08cfa84c86d610e1" @@ -832,6 +898,15 @@ bech32 "^1.1.4" readonly-date "^1.0.0" +"@cosmjs/encoding@^0.29.3", "@cosmjs/encoding@^0.29.5": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.29.5.tgz#009a4b1c596cdfd326f30ccfa79f5e56daa264f2" + integrity sha512-G4rGl/Jg4dMCw5u6PEZHZcoHnUBlukZODHbm/wcL4Uu91fkn5jVo5cXXZcvs4VCkArVGrEj/52eUgTZCmOBGWQ== + dependencies: + base64-js "^1.3.0" + bech32 "^1.1.4" + readonly-date "^1.0.0" + "@cosmjs/encoding@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.30.1.tgz#b5c4e0ef7ceb1f2753688eb96400ed70f35c6058" @@ -850,6 +925,23 @@ bech32 "^1.1.4" readonly-date "^1.0.0" +"@cosmjs/encoding@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.2.tgz#8c5c64481a85cd570740c34dccce69d024a29805" + integrity sha512-WX7m1wLpA9V/zH0zRcz4EmgZdAv1F44g4dbXOgNj1eXZw1PIGR12p58OEkLN51Ha3S4DKRtCv5CkhK1KHEvQtg== + dependencies: + base64-js "^1.3.0" + bech32 "^1.1.4" + readonly-date "^1.0.0" + +"@cosmjs/json-rpc@^0.29.5": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.29.5.tgz#5e483a9bd98a6270f935adf0dfd8a1e7eb777fe4" + integrity sha512-C78+X06l+r9xwdM1yFWIpGl03LhB9NdM1xvZpQHwgCOl0Ir/WV8pw48y3Ez2awAoUBRfTeejPe4KvrE6NoIi/w== + dependencies: + "@cosmjs/stream" "^0.29.5" + xstream "^11.14.0" + "@cosmjs/json-rpc@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz#16f21305fc167598c8a23a45549b85106b2372bc" @@ -866,6 +958,14 @@ "@cosmjs/stream" "^0.31.3" xstream "^11.14.0" +"@cosmjs/json-rpc@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.32.2.tgz#f87fab0d6975ed1d1c7daafcf6f1f81e5e296912" + integrity sha512-lan2lOgmz4yVE/HR8eCOSiII/1OudIulk8836koyIDCsPEpt6eKBuctnAD168vABGArKccLAo7Mr2gy9nrKrOQ== + dependencies: + "@cosmjs/stream" "^0.32.2" + xstream "^11.14.0" + "@cosmjs/launchpad@^0.27.1": version "0.27.1" resolved "https://registry.yarnpkg.com/@cosmjs/launchpad/-/launchpad-0.27.1.tgz#b6f1995748be96560f5f01e84d3ff907477dda77" @@ -886,6 +986,13 @@ dependencies: bn.js "^5.2.0" +"@cosmjs/math@^0.29.3", "@cosmjs/math@^0.29.5": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.29.5.tgz#722c96e080d6c2b62215ce9f4c70da7625b241b6" + integrity sha512-2GjKcv+A9f86MAWYLUkjhw1/WpRl2R1BTb3m9qPG7lzMA7ioYff9jY5SPCfafKdxM4TIQGxXQlYGewQL16O68Q== + dependencies: + bn.js "^5.2.0" + "@cosmjs/math@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.30.1.tgz#8b816ef4de5d3afa66cb9fdfb5df2357a7845b8a" @@ -900,6 +1007,51 @@ dependencies: bn.js "^5.2.0" +"@cosmjs/math@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.32.2.tgz#4522312769197e132679e4960862bcec0eed4cb8" + integrity sha512-b8+ruAAY8aKtVKWSft2IvtCVCUH1LigIlf9ALIiY8n9jtM4kMASiaRbQ/27etnSAInV88IaezKK9rQZrtxTjcw== + dependencies: + bn.js "^5.2.0" + +"@cosmjs/proto-signing@0.29.3": + version "0.29.3" + resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.29.3.tgz#fa5ed609ed2a0007d8d5eacbeb1f5a89ba1b77ff" + integrity sha512-Ai3l9THjMOrLJ4Ebn1Dgptwg6W5ZIRJqtnJjijHhGwTVC1WT0WdYU3aMZ7+PwubcA/cA1rH4ZTK7jrfYbra63g== + dependencies: + "@cosmjs/amino" "^0.29.3" + "@cosmjs/crypto" "^0.29.3" + "@cosmjs/encoding" "^0.29.3" + "@cosmjs/math" "^0.29.3" + "@cosmjs/utils" "^0.29.3" + cosmjs-types "^0.5.2" + long "^4.0.0" + +"@cosmjs/proto-signing@0.32.2", "@cosmjs/proto-signing@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.2.tgz#26ed2675978ce24078981f4c15a06c5d6b808f44" + integrity sha512-UV4WwkE3W3G3s7wwU9rizNcUEz2g0W8jQZS5J6/3fiN0mRPwtPKQ6EinPN9ASqcAJ7/VQH4/9EPOw7d6XQGnqw== + dependencies: + "@cosmjs/amino" "^0.32.2" + "@cosmjs/crypto" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + cosmjs-types "^0.9.0" + +"@cosmjs/proto-signing@^0.29.3": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.29.5.tgz#af3b62a46c2c2f1d2327d678b13b7262db1fe87c" + integrity sha512-QRrS7CiKaoETdgIqvi/7JC2qCwCR7lnWaUsTzh/XfRy3McLkEd+cXbKAW3cygykv7IN0VAEIhZd2lyIfT8KwNA== + dependencies: + "@cosmjs/amino" "^0.29.5" + "@cosmjs/crypto" "^0.29.5" + "@cosmjs/encoding" "^0.29.5" + "@cosmjs/math" "^0.29.5" + "@cosmjs/utils" "^0.29.5" + cosmjs-types "^0.5.2" + long "^4.0.0" + "@cosmjs/proto-signing@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.30.1.tgz#f0dda372488df9cd2677150b89b3e9c72b3cb713" @@ -926,6 +1078,16 @@ cosmjs-types "^0.8.0" long "^4.0.0" +"@cosmjs/socket@^0.29.5": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.29.5.tgz#a48df6b4c45dc6a6ef8e47232725dd4aa556ac2d" + integrity sha512-5VYDupIWbIXq3ftPV1LkS5Ya/T7Ol/AzWVhNxZ79hPe/mBfv1bGau/LqIYOm2zxGlgm9hBHOTmWGqNYDwr9LNQ== + dependencies: + "@cosmjs/stream" "^0.29.5" + isomorphic-ws "^4.0.1" + ws "^7" + xstream "^11.14.0" + "@cosmjs/socket@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.30.1.tgz#00b22f4b5e2ab01f4d82ccdb7b2e59536bfe5ce0" @@ -946,6 +1108,50 @@ ws "^7" xstream "^11.14.0" +"@cosmjs/socket@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.32.2.tgz#a66be3863d03bf2d8df0433af476df010ff10e8c" + integrity sha512-Qc8jaw4uSBJm09UwPgkqe3g9TBFx4ZR9HkXpwT6Z9I+6kbLerXPR0Gy3NSJFSUgxIfTpO8O1yqoWAyf0Ay17Mw== + dependencies: + "@cosmjs/stream" "^0.32.2" + isomorphic-ws "^4.0.1" + ws "^7" + xstream "^11.14.0" + +"@cosmjs/stargate@0.29.3": + version "0.29.3" + resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.29.3.tgz#9bd303bfd32a7399a233e662864e7cc32e2607af" + integrity sha512-455TgXStCi6E8KDjnhDAM8wt6aLSjobH4Dixvd7Up1DfCH6UB9NkC/G0fMJANNcNXMaM4wSX14niTXwD1d31BA== + dependencies: + "@confio/ics23" "^0.6.8" + "@cosmjs/amino" "^0.29.3" + "@cosmjs/encoding" "^0.29.3" + "@cosmjs/math" "^0.29.3" + "@cosmjs/proto-signing" "^0.29.3" + "@cosmjs/stream" "^0.29.3" + "@cosmjs/tendermint-rpc" "^0.29.3" + "@cosmjs/utils" "^0.29.3" + cosmjs-types "^0.5.2" + long "^4.0.0" + protobufjs "~6.11.3" + xstream "^11.14.0" + +"@cosmjs/stargate@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.32.2.tgz#73718c5c6a3ae138682ee9987333d911eca22a13" + integrity sha512-AsJa29fT7Jd4xt9Ai+HMqhyj7UQu7fyYKdXj/8+/9PD74xe6lZSYhQPcitUmMLJ1ckKPgXSk5Dd2LbsQT0IhZg== + dependencies: + "@confio/ics23" "^0.6.8" + "@cosmjs/amino" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/proto-signing" "^0.32.2" + "@cosmjs/stream" "^0.32.2" + "@cosmjs/tendermint-rpc" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + cosmjs-types "^0.9.0" + xstream "^11.14.0" + "@cosmjs/stargate@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.30.1.tgz#e1b22e1226cffc6e93914a410755f1f61057ba04" @@ -982,6 +1188,13 @@ protobufjs "~6.11.3" xstream "^11.14.0" +"@cosmjs/stream@^0.29.3", "@cosmjs/stream@^0.29.5": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.29.5.tgz#350981cac496d04939b92ee793b9b19f44bc1d4e" + integrity sha512-TToTDWyH1p05GBtF0Y8jFw2C+4783ueDCmDyxOMM6EU82IqpmIbfwcdMOCAm0JhnyMh+ocdebbFvnX/sGKzRAA== + dependencies: + xstream "^11.14.0" + "@cosmjs/stream@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.30.1.tgz#ba038a2aaf41343696b1e6e759d8e03a9516ec1a" @@ -996,6 +1209,45 @@ dependencies: xstream "^11.14.0" +"@cosmjs/stream@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.32.2.tgz#b1e8f977d25313d659f1aa89ad21614b5391cd93" + integrity sha512-gpCufLfHAD8Zp1ZKge7AHbDf4RA0TZp66wZY6JaQR5bSiEF2Drjtp4mwXZPGejtaUMnaAgff3LrUzPJfKYdQwg== + dependencies: + xstream "^11.14.0" + +"@cosmjs/tendermint-rpc@0.32.2", "@cosmjs/tendermint-rpc@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.2.tgz#c5607b8d472e5bf9fd58d5453db7194f500ccc62" + integrity sha512-DXyJHDmcAfCix4H/7/dKR0UMdshP01KxJOXHdHxBCbLIpck94BsWD3B2ZTXwfA6sv98so9wOzhp7qGQa5malxg== + dependencies: + "@cosmjs/crypto" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/json-rpc" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/socket" "^0.32.2" + "@cosmjs/stream" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + axios "^1.6.0" + readonly-date "^1.0.0" + xstream "^11.14.0" + +"@cosmjs/tendermint-rpc@^0.29.3": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.29.5.tgz#f205c10464212bdf843f91bb2e4a093b618cb5c2" + integrity sha512-ar80twieuAxsy0x2za/aO3kBr2DFPAXDmk2ikDbmkda+qqfXgl35l9CVAAjKRqd9d+cRvbQyb5M4wy6XQpEV6w== + dependencies: + "@cosmjs/crypto" "^0.29.5" + "@cosmjs/encoding" "^0.29.5" + "@cosmjs/json-rpc" "^0.29.5" + "@cosmjs/math" "^0.29.5" + "@cosmjs/socket" "^0.29.5" + "@cosmjs/stream" "^0.29.5" + "@cosmjs/utils" "^0.29.5" + axios "^0.21.2" + readonly-date "^1.0.0" + xstream "^11.14.0" + "@cosmjs/tendermint-rpc@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.30.1.tgz#c16378892ba1ac63f72803fdf7567eab9d4f0aa0" @@ -1033,6 +1285,11 @@ resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.27.1.tgz#1c8efde17256346ef142a3bd15158ee4055470e2" integrity sha512-VG7QPDiMUzVPxRdJahDV8PXxVdnuAHiIuG56hldV4yPnOz/si/DLNd7VAUUA5923b6jS1Hhev0Hr6AhEkcxBMg== +"@cosmjs/utils@^0.29.3", "@cosmjs/utils@^0.29.5": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.29.5.tgz#3fed1b3528ae8c5f1eb5d29b68755bebfd3294ee" + integrity sha512-m7h+RXDUxOzEOGt4P+3OVPX7PuakZT3GBmaM/Y2u+abN3xZkziykD/NvedYFvvCCdQo714XcGl33bwifS9FZPQ== + "@cosmjs/utils@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.30.1.tgz#6d92582341be3c2ec8d82090253cfa4b7f959edb" @@ -1043,6 +1300,26 @@ resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.31.3.tgz#f97bbfda35ad69e80cd5c7fe0a270cbda16db1ed" integrity sha512-VBhAgzrrYdIe0O5IbKRqwszbQa7ZyQLx9nEQuHQ3HUplQW7P44COG/ye2n6AzCudtqxmwdX7nyX8ta1J07GoqA== +"@cosmjs/utils@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.32.2.tgz#324304aa85bfa6f10561cc17781d824d02130897" + integrity sha512-Gg5t+eR7vPJMAmhkFt6CZrzPd0EKpAslWwk5rFVYZpJsM8JG5KT9XQ99hgNM3Ov6ScNoIWbXkpX27F6A9cXR4Q== + +"@cosmology/lcd@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@cosmology/lcd/-/lcd-0.12.0.tgz#a6594fc00a8c84c7341e90840627e62a7e63fd1b" + integrity sha512-f2mcySYO1xdislAhuWtNFmg4q/bzY3Aem2UkDzYzI0ZELVev5i2Pi0bQrYUNTeNg1isAo0Kyrdqj/4YPqEwjGA== + dependencies: + "@babel/runtime" "^7.21.0" + axios "0.27.2" + +"@cosmology/lcd@^0.13.3": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@cosmology/lcd/-/lcd-0.13.3.tgz#4072178cfe979b948ab596c9378b56c4f320d192" + integrity sha512-lihAHCoap0GN/32qcOhiMp6HcoZP8A7GeScZMlmmvBtBk6ocGAStNHjvBR4MayrvyHSCOZCvCAWPh36iFTT8Sw== + dependencies: + axios "1.6.0" + "@crocswap/sdk@^2.4.5": version "2.4.5" resolved "https://registry.yarnpkg.com/@crocswap/sdk/-/sdk-2.4.5.tgz#4a4765af4a16c1af42fcbcc5e540e9dd8793a6c1" @@ -1160,137 +1437,137 @@ "@ethersproject-xdc/abi@file:vendor/@ethersproject-xdc/abi": version "5.7.0" dependencies: - "@ethersproject-xdc/address" "file:vendor/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:vendor/@ethersproject-xdc/constants" - "@ethersproject-xdc/hash" "file:vendor/@ethersproject-xdc/hash" - "@ethersproject-xdc/keccak256" "file:vendor/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/abstract-provider@file:vendor/@ethersproject-xdc/abstract-provider": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:vendor/@ethersproject-xdc/networks" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/transactions" "file:vendor/@ethersproject-xdc/transactions" - "@ethersproject-xdc/web" "file:vendor/@ethersproject-xdc/web" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/web" "@ethersproject-xdc/abstract-signer@file:vendor/@ethersproject-xdc/abstract-signer": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-provider" "file:vendor/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/properties" "@ethersproject-xdc/address@file:vendor/@ethersproject-xdc/address": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:vendor/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/rlp" "file:vendor/@ethersproject-xdc/rlp" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/rlp" "@ethersproject-xdc/base64@file:vendor/@ethersproject-xdc/base64": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-base64-5.7.0-25ef3932-3b41-4a32-83e6-017583bdbdf3-1705725861190/node_modules/@ethersproject-xdc/bytes" "@ethersproject-xdc/basex@file:vendor/@ethersproject-xdc/basex": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-d90b7a18-eddb-494a-802e-dfc1d2939c12-1705725861191/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-d90b7a18-eddb-494a-802e-dfc1d2939c12-1705725861191/node_modules/@ethersproject-xdc/properties" "@ethersproject-xdc/bignumber@file:vendor/@ethersproject-xdc/bignumber": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-aea28333-7b74-45d3-9a53-61f87768db22-1705725861193/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-aea28333-7b74-45d3-9a53-61f87768db22-1705725861193/node_modules/@ethersproject-xdc/logger" bn.js "^5.2.1" "@ethersproject-xdc/bytes@file:vendor/@ethersproject-xdc/bytes": version "5.7.0" dependencies: - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bytes-5.7.0-413d6140-1fae-4924-88a9-dd4fd517bd0f-1705725861192/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/constants@file:vendor/@ethersproject-xdc/constants": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-constants-5.7.0-420dbb15-49c2-4689-9f23-e852c46d289f-1705725861188/node_modules/@ethersproject-xdc/bignumber" "@ethersproject-xdc/contracts@file:vendor/@ethersproject-xdc/contracts": version "5.6.0" dependencies: - "@ethersproject-xdc/abi" "file:vendor/@ethersproject-xdc/abi" - "@ethersproject-xdc/abstract-provider" "file:vendor/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:vendor/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:vendor/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:vendor/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/transactions" "file:vendor/@ethersproject-xdc/transactions" + "@ethersproject-xdc/abi" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/abi" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/transactions" "@ethersproject-xdc/hash@file:vendor/@ethersproject-xdc/hash": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:vendor/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:vendor/@ethersproject-xdc/address" - "@ethersproject-xdc/base64" "file:vendor/@ethersproject-xdc/base64" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:vendor/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/hdnode@file:vendor/@ethersproject-xdc/hdnode": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:vendor/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/basex" "file:vendor/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/pbkdf2" "file:vendor/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/sha2" "file:vendor/@ethersproject-xdc/sha2" - "@ethersproject-xdc/signing-key" "file:vendor/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:vendor/@ethersproject-xdc/transactions" - "@ethersproject-xdc/wordlists" "file:vendor/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/wordlists" "@ethersproject-xdc/json-wallets@file:vendor/@ethersproject-xdc/json-wallets": version "5.6.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:vendor/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:vendor/@ethersproject-xdc/address" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hdnode" "file:vendor/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/keccak256" "file:vendor/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/pbkdf2" "file:vendor/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:vendor/@ethersproject-xdc/random" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:vendor/@ethersproject-xdc/transactions" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/transactions" aes-js "3.0.0" scrypt-js "3.0.1" "@ethersproject-xdc/keccak256@file:vendor/@ethersproject-xdc/keccak256": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-keccak256-5.7.0-353bf255-dadd-4ed6-a57b-e53e45634010-1705725861200/node_modules/@ethersproject-xdc/bytes" js-sha3 "0.8.0" "@ethersproject-xdc/logger@file:vendor/@ethersproject-xdc/logger": @@ -1299,67 +1576,67 @@ "@ethersproject-xdc/networks@file:vendor/@ethersproject-xdc/networks": version "5.7.1" dependencies: - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-networks-5.7.1-44a30ab6-c828-4d55-a76f-c2bbb4c7d941-1705725861193/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/pbkdf2@file:vendor/@ethersproject-xdc/pbkdf2": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/sha2" "file:vendor/@ethersproject-xdc/sha2" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-fc6e8aef-7cb8-464f-a10b-57e8e5e839a9-1705725861194/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-fc6e8aef-7cb8-464f-a10b-57e8e5e839a9-1705725861194/node_modules/@ethersproject-xdc/sha2" "@ethersproject-xdc/properties@file:vendor/@ethersproject-xdc/properties": version "5.7.0" dependencies: - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-properties-5.7.0-42e6a55d-f69a-4a81-98ed-eb3c8176d4c4-1705725861201/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/providers@file:vendor/@ethersproject-xdc/providers": version "5.6.2" dependencies: - "@ethersproject-xdc/abstract-provider" "file:vendor/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:vendor/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:vendor/@ethersproject-xdc/address" - "@ethersproject-xdc/basex" "file:vendor/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:vendor/@ethersproject-xdc/constants" - "@ethersproject-xdc/hash" "file:vendor/@ethersproject-xdc/hash" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:vendor/@ethersproject-xdc/networks" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:vendor/@ethersproject-xdc/random" - "@ethersproject-xdc/rlp" "file:vendor/@ethersproject-xdc/rlp" - "@ethersproject-xdc/sha2" "file:vendor/@ethersproject-xdc/sha2" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:vendor/@ethersproject-xdc/transactions" - "@ethersproject-xdc/web" "file:vendor/@ethersproject-xdc/web" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/web" bech32 "1.1.4" ws "7.4.6" "@ethersproject-xdc/random@file:vendor/@ethersproject-xdc/random": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-random-5.7.0-6d7fbaa1-9a5c-4735-8456-019ecde03a35-1705725861201/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-random-5.7.0-6d7fbaa1-9a5c-4735-8456-019ecde03a35-1705725861201/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/rlp@file:vendor/@ethersproject-xdc/rlp": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-0bd5787d-3447-49bb-991b-441e4c002f33-1705725861202/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-0bd5787d-3447-49bb-991b-441e4c002f33-1705725861202/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/sha2@file:vendor/@ethersproject-xdc/sha2": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-7deeb9d2-1fc3-44a2-9527-839ede1e50e8-1705725861201/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-7deeb9d2-1fc3-44a2-9527-839ede1e50e8-1705725861201/node_modules/@ethersproject-xdc/logger" hash.js "1.1.7" "@ethersproject-xdc/signing-key@file:vendor/@ethersproject-xdc/signing-key": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-a107cf1b-c037-47b2-a9db-a73bee263f68-1705725861202/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-a107cf1b-c037-47b2-a9db-a73bee263f68-1705725861202/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-a107cf1b-c037-47b2-a9db-a73bee263f68-1705725861202/node_modules/@ethersproject-xdc/properties" bn.js "^5.2.1" elliptic "6.5.4" hash.js "1.1.7" @@ -1367,76 +1644,76 @@ "@ethersproject-xdc/solidity@file:vendor/@ethersproject-xdc/solidity": version "5.6.0" dependencies: - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:vendor/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/sha2" "file:vendor/@ethersproject-xdc/sha2" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/strings@file:vendor/@ethersproject-xdc/strings": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:vendor/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fd51339c-2ba3-4df6-8afc-7b6f4a74368f-1705725861204/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fd51339c-2ba3-4df6-8afc-7b6f4a74368f-1705725861204/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fd51339c-2ba3-4df6-8afc-7b6f4a74368f-1705725861204/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/transactions@file:vendor/@ethersproject-xdc/transactions": version "5.7.0" dependencies: - "@ethersproject-xdc/address" "file:vendor/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:vendor/@ethersproject-xdc/constants" - "@ethersproject-xdc/keccak256" "file:vendor/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/rlp" "file:vendor/@ethersproject-xdc/rlp" - "@ethersproject-xdc/signing-key" "file:vendor/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/signing-key" "@ethersproject-xdc/units@file:vendor/@ethersproject-xdc/units": version "5.6.0" dependencies: - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/constants" "file:vendor/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-d7abf608-56ee-4a3a-a19d-5651eadaa4b7-1705725861205/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-d7abf608-56ee-4a3a-a19d-5651eadaa4b7-1705725861205/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-d7abf608-56ee-4a3a-a19d-5651eadaa4b7-1705725861205/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/wallet@file:vendor/@ethersproject-xdc/wallet": version "5.6.0" dependencies: - "@ethersproject-xdc/abstract-provider" "file:vendor/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:vendor/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:vendor/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hash" "file:vendor/@ethersproject-xdc/hash" - "@ethersproject-xdc/hdnode" "file:vendor/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/json-wallets" "file:vendor/@ethersproject-xdc/json-wallets" - "@ethersproject-xdc/keccak256" "file:vendor/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:vendor/@ethersproject-xdc/random" - "@ethersproject-xdc/signing-key" "file:vendor/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/transactions" "file:vendor/@ethersproject-xdc/transactions" - "@ethersproject-xdc/wordlists" "file:vendor/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/json-wallets" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/json-wallets" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/wordlists" "@ethersproject-xdc/web@file:vendor/@ethersproject-xdc/web": version "5.7.1" dependencies: - "@ethersproject-xdc/base64" "file:vendor/@ethersproject-xdc/base64" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" + "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/wordlists@file:vendor/@ethersproject-xdc/wordlists": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hash" "file:vendor/@ethersproject-xdc/hash" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/strings" "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.12", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -2034,12 +2311,12 @@ bn.js "^4.11.8" "@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/config-array@^0.5.0": @@ -2061,10 +2338,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@improbable-eng/grpc-web@^0.13.0": version "0.13.0" @@ -2554,9 +2831,9 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -2874,6 +3151,17 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz#38f4dbab672631034076ccdf2f3201fab1726635" integrity sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA== +"@osmonauts/math@^1.11.3": + version "1.11.3" + resolved "https://registry.yarnpkg.com/@osmonauts/math/-/math-1.11.3.tgz#22b3f60ea4b84e1329661184b28f72eb9b97c8e7" + integrity sha512-cUN42EoTrR55uvbEWMrdstiGq4r6qfwiw0T8SHPW0emBDVe5fnbuvIiUz8qK+e4mzPXQPxbavZSjGugS+NQqsg== + dependencies: + "@chain-registry/types" "0.16.0" + "@chain-registry/utils" "1.13.1" + bignumber.js "9.1.2" + decimal.js-light "^2.5.1" + osmojs "^16.8.3" + "@pancakeswap-libs/pancake-swap-core@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@pancakeswap-libs/pancake-swap-core/-/pancake-swap-core-0.1.0.tgz#6957f1fa02170531a2ffbf95f2c0e145e9d21bc2" @@ -2888,14 +3176,19 @@ resolved "https://registry.yarnpkg.com/@pancakeswap/chains/-/chains-0.3.0.tgz#e509dfd9c8387f76b893e3a0a5b835331752b32c" integrity sha512-a4U8pzfxQsnS0nUpvi8qL2X6l2C/IUTFJcmt3UNAQv2L2CPUSryt1rLarG91O1Bb/UMfv90UCPrXJcHWpaYSMg== -"@pancakeswap/multicall@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@pancakeswap/multicall/-/multicall-3.3.2.tgz#deaf60cfa0c25b76fbbd0c38333cee5b0110849a" - integrity sha512-H4DOyTYEXs49tgR0QrxkjJmDImxSu5rTJyaRc2kEDluU1kDsFffPiX4nrnewEmmvYFxAfin5jn9sp6D7dV7jEg== +"@pancakeswap/chains@0.4.0", "@pancakeswap/chains@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@pancakeswap/chains/-/chains-0.4.0.tgz#60d73e334052fda635fe6bf2b9ff7c1858db2c2b" + integrity sha512-xPx+KFZiXJ1b+JAbnDB1WhSVE2TLtIzDi/IOjuyylYxiiEpnt0oXzjaTpuJe6dkttfW74UqUMpHiODs529gWVw== + +"@pancakeswap/multicall@3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@pancakeswap/multicall/-/multicall-3.4.0.tgz#fa5a3b34b5aa8e7eef9fb6356a8442cef914d804" + integrity sha512-zJZZyoypdDMrD3zk5Gwy41e44DZv3iNTvbmq1VKJtejbLT4RPH0cw10Sr91TVAaioo2LHaHmzjF/p5pR0kML0g== dependencies: - "@pancakeswap/chains" "0.3.0" - "@pancakeswap/sdk" "5.7.3" - viem "1.19.9" + "@pancakeswap/chains" "0.4.0" + "@pancakeswap/sdk" "5.7.5" + viem "1.19.11" "@pancakeswap/sdk@5.1.0": version "5.1.0" @@ -2924,6 +3217,20 @@ toformat "^2.0.0" viem "1.19.9" +"@pancakeswap/sdk@5.7.5": + version "5.7.5" + resolved "https://registry.yarnpkg.com/@pancakeswap/sdk/-/sdk-5.7.5.tgz#0026969ece6ed44f2751ae46dc772178f4c22640" + integrity sha512-eGejDluOMvhgQnCzC1/Dp5XUdSZZb8rO1IdeZRu8EFq2yo3zsSyhRcYxQLcvk5VXfekcXyAx26JKPbVPf0KxqQ== + dependencies: + "@pancakeswap/chains" "^0.4.0" + "@pancakeswap/swap-sdk-core" "1.0.0" + big.js "^5.2.2" + decimal.js-light "^2.5.0" + tiny-invariant "^1.3.0" + tiny-warning "^1.0.3" + toformat "^2.0.0" + viem "1.19.11" + "@pancakeswap/sdk@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@pancakeswap/sdk/-/sdk-4.0.0.tgz#6068bf3c1b031ef13f4b223ee3cbeff7ddbb5d96" @@ -2937,17 +3244,17 @@ toformat "^2.0.0" "@pancakeswap/smart-router@^4.2.1": - version "4.11.1" - resolved "https://registry.yarnpkg.com/@pancakeswap/smart-router/-/smart-router-4.11.1.tgz#e5a1055c5427f0e41bc3de454efd1044e0798826" - integrity sha512-9iqyk+5GaHLB3CqXtCYbJ6OpDfROcI2yukojzXKyngTR6IGfpUGh9Tg2Ggh6TOgwDCEqD3dhDc1BooAvkceOIA== + version "4.14.0" + resolved "https://registry.yarnpkg.com/@pancakeswap/smart-router/-/smart-router-4.14.0.tgz#84d81a8283df9be424b530b20cb3d493de28bed8" + integrity sha512-UOLg1PD04SRO0/32dPDrJ4E+wLvqUGjPewGiD3faDAPNxdXVmf74T5XLD17DSdT6gWXi+Y17QVHrKRT10h3dFQ== dependencies: - "@pancakeswap/chains" "0.3.0" - "@pancakeswap/multicall" "3.3.2" - "@pancakeswap/sdk" "5.7.3" + "@pancakeswap/chains" "0.4.0" + "@pancakeswap/multicall" "3.4.0" + "@pancakeswap/sdk" "5.7.5" "@pancakeswap/swap-sdk-core" "1.0.0" "@pancakeswap/token-lists" "0.0.9" - "@pancakeswap/tokens" "0.5.6" - "@pancakeswap/v3-sdk" "3.7.2" + "@pancakeswap/tokens" "0.6.0" + "@pancakeswap/v3-sdk" "3.7.5" async-retry "^1.3.1" debug "^4.3.4" graphql "^16.8.1" @@ -2956,7 +3263,7 @@ mnemonist "^0.38.3" stats-lite "^2.2.0" tiny-invariant "^1.3.0" - viem "1.19.9" + viem "1.19.11" zod "^3.22.3" "@pancakeswap/swap-sdk-core@1.0.0", "@pancakeswap/swap-sdk-core@^1.0.0": @@ -2997,6 +3304,15 @@ "@pancakeswap/sdk" "5.7.3" "@pancakeswap/token-lists" "0.0.9" +"@pancakeswap/tokens@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@pancakeswap/tokens/-/tokens-0.6.0.tgz#1dfbc7ab86a5888596e95c208aeb7effc4dd07f9" + integrity sha512-dWwVlWCfCFrVUw+AtPVtvYUOZPTzKnp8sCTpQd1OWWaDKCxhILl6QnxMwKS6mW9Kqzpq2hYotEkURzErlAU5Rw== + dependencies: + "@pancakeswap/chains" "0.4.0" + "@pancakeswap/sdk" "5.7.5" + "@pancakeswap/token-lists" "0.0.9" + "@pancakeswap/tokens@^0.1.6": version "0.1.6" resolved "https://registry.yarnpkg.com/@pancakeswap/tokens/-/tokens-0.1.6.tgz#c6f59c246bdc9f37322101acc2be700aee9b584b" @@ -3021,7 +3337,24 @@ "@uniswap/v2-core" "1.0.1" base64-sol "1.0.1" -"@pancakeswap/v3-sdk@3.7.2", "@pancakeswap/v3-sdk@^3.7.0": +"@pancakeswap/v3-sdk@3.7.5": + version "3.7.5" + resolved "https://registry.yarnpkg.com/@pancakeswap/v3-sdk/-/v3-sdk-3.7.5.tgz#09ea132d47212b5a9c548954d36efc89b3e3a218" + integrity sha512-h/nX/MgsvLdvpm0fVjA4FLHzYEI50BxiacwKLvRhEaBHMzHI3OX9DF2gkNgXvJTqNXmX/NDrgFGFTaYNYB8tuQ== + dependencies: + "@pancakeswap/chains" "0.4.0" + "@pancakeswap/sdk" "5.7.5" + "@pancakeswap/swap-sdk-core" "1.0.0" + "@pancakeswap/tokens" "0.6.0" + "@uniswap/v3-staker" "1.0.0" + big.js "^5.2.2" + decimal.js-light "^2.5.0" + tiny-invariant "^1.3.0" + tiny-warning "^1.0.3" + toformat "^2.0.0" + viem "1.19.11" + +"@pancakeswap/v3-sdk@^3.7.0": version "3.7.2" resolved "https://registry.yarnpkg.com/@pancakeswap/v3-sdk/-/v3-sdk-3.7.2.tgz#ce475303802ada6c9b7d6781529b0c23033f638c" integrity sha512-8uSMUaDo69zx+PhODH1TiTdPvuaTlLzyyudpODV8Ig6LKWO2owVIRuhXwQHKXE8N3/0j7JN6ejJrM/sbY3kadA== @@ -5452,6 +5785,14 @@ axios@0.26.0: dependencies: follow-redirects "^1.14.8" +axios@0.27.2, 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.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.4.tgz#6555dd955d2efa9b8f4cb4cb0b3371b7b243537a" @@ -5461,6 +5802,15 @@ axios@1.2.4: form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" + integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.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" @@ -5475,14 +5825,6 @@ axios@^0.26.0: 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.0: version "1.6.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" @@ -5650,11 +5992,16 @@ bigint-mod-arith@^3.1.0: resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz#658e416bc593a463d97b59766226d0a3021a76b1" integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== -bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.1.0: +bignumber.js@9.1.1, bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.1.0: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== +bignumber.js@9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -6177,9 +6524,9 @@ caniuse-lite@^1.0.30001449: integrity sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A== caniuse-lite@^1.0.30001565: - version "1.0.30001570" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz#b4e5c1fa786f733ab78fc70f592df6b3f23244ca" - integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw== + version "1.0.30001579" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz#45c065216110f46d6274311a4b3fcf6278e0852a" + integrity sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA== capability@^0.2.5: version "0.2.5" @@ -6660,6 +7007,14 @@ cors@^2.8.1, cors@^2.8.5: object-assign "^4" vary "^1" +cosmjs-types@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.5.2.tgz#2d42b354946f330dfb5c90a87fdc2a36f97b965d" + integrity sha512-zxCtIJj8v3Di7s39uN4LNcN3HIE1z0B9Z0SPE8ZNQR0oSzsuSe1ACgxoFkvhkS7WBasCAFcglS11G2hyfd5tPg== + dependencies: + long "^4.0.0" + protobufjs "~6.11.2" + cosmjs-types@^0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.7.2.tgz#a757371abd340949c5bd5d49c6f8379ae1ffd7e2" @@ -6676,6 +7031,11 @@ cosmjs-types@^0.8.0: long "^4.0.0" protobufjs "~6.11.2" +cosmjs-types@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.9.0.tgz#c3bc482d28c7dfa25d1445093fdb2d9da1f6cfcc" + integrity sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ== + crc-32@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" @@ -7208,9 +7568,9 @@ electron-to-chromium@^1.4.284: integrity sha512-YyE8+GKyGtPEP1/kpvqsdhD6rA/TP1DUFDN4uiU/YI52NzDxmwHkEb3qjId8hLBa5siJvG0sfC3O66501jMruQ== electron-to-chromium@^1.4.601: - version "1.4.613" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz#529e4fc65576ecfd055d7d4619fade4fac446af2" - integrity sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w== + version "1.4.640" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.640.tgz#76290a36fa4b5f1f4cadaf1fc582478ebb3ac246" + integrity sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA== elliptic@6.3.3: version "6.3.3" @@ -7862,36 +8222,36 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: "ethers-xdc@file:./vendor/ethers-xdc": version "5.7.2" dependencies: - "@ethersproject-xdc/abi" "file:vendor/@ethersproject-xdc/abi" - "@ethersproject-xdc/abstract-provider" "file:vendor/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:vendor/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:vendor/@ethersproject-xdc/address" - "@ethersproject-xdc/base64" "file:vendor/@ethersproject-xdc/base64" - "@ethersproject-xdc/basex" "file:vendor/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:vendor/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:vendor/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:vendor/@ethersproject-xdc/constants" - "@ethersproject-xdc/contracts" "file:vendor/@ethersproject-xdc/contracts" - "@ethersproject-xdc/hash" "file:vendor/@ethersproject-xdc/hash" - "@ethersproject-xdc/hdnode" "file:vendor/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/json-wallets" "file:vendor/@ethersproject-xdc/json-wallets" - "@ethersproject-xdc/keccak256" "file:vendor/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:vendor/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:vendor/@ethersproject-xdc/networks" - "@ethersproject-xdc/pbkdf2" "file:vendor/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:vendor/@ethersproject-xdc/properties" - "@ethersproject-xdc/providers" "file:vendor/@ethersproject-xdc/providers" - "@ethersproject-xdc/random" "file:vendor/@ethersproject-xdc/random" - "@ethersproject-xdc/rlp" "file:vendor/@ethersproject-xdc/rlp" - "@ethersproject-xdc/sha2" "file:vendor/@ethersproject-xdc/sha2" - "@ethersproject-xdc/signing-key" "file:vendor/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/solidity" "file:vendor/@ethersproject-xdc/solidity" - "@ethersproject-xdc/strings" "file:vendor/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:vendor/@ethersproject-xdc/transactions" - "@ethersproject-xdc/units" "file:vendor/@ethersproject-xdc/units" - "@ethersproject-xdc/wallet" "file:vendor/@ethersproject-xdc/wallet" - "@ethersproject-xdc/web" "file:vendor/@ethersproject-xdc/web" - "@ethersproject-xdc/wordlists" "file:vendor/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abi" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/abi" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/contracts" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/contracts" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/json-wallets" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/json-wallets" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/providers" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/providers" + "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/solidity" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/solidity" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/units" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/units" + "@ethersproject-xdc/wallet" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/wallet" + "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/wordlists" ethers@4.0.0-beta.3: version "4.0.0-beta.3" @@ -12047,6 +12407,39 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +osmo-query@16.5.2: + version "16.5.2" + resolved "https://registry.yarnpkg.com/osmo-query/-/osmo-query-16.5.2.tgz#09e6d4bc5b47da5b6ea4fccb0bc3012c69e5eaa0" + integrity sha512-tO10iBjZ4voJ0G9qb1iYY8Mb/SAklqiVAWYfWdGA3PPtHiG48F326hCbUwFrF6tfQrFyBTnFuFZjXyyeZZrOzg== + dependencies: + "@cosmjs/amino" "0.29.3" + "@cosmjs/proto-signing" "0.29.3" + "@cosmjs/stargate" "0.29.3" + "@cosmjs/tendermint-rpc" "^0.29.3" + "@cosmology/lcd" "^0.12.0" + +osmojs@16.5.1: + version "16.5.1" + resolved "https://registry.yarnpkg.com/osmojs/-/osmojs-16.5.1.tgz#38f2fe3cd65dbd4e4b415e9f22f387a24b634155" + integrity sha512-V2Q2yMt7Paax6i+S5Q1l29Km0As/waXKmSVRe8gtd9he42kcbkpwwk/QUCvgS98XsL7Qz+vas2Tca016uBQHTQ== + dependencies: + "@cosmjs/amino" "0.29.3" + "@cosmjs/proto-signing" "0.29.3" + "@cosmjs/stargate" "0.29.3" + "@cosmjs/tendermint-rpc" "^0.29.3" + "@cosmology/lcd" "^0.12.0" + +osmojs@^16.8.3: + version "16.8.3" + resolved "https://registry.yarnpkg.com/osmojs/-/osmojs-16.8.3.tgz#87d14bb41c7088e51253fc30e22df5facecac620" + integrity sha512-uBEuY4WU0bKK6vA4+PB1MZNLusp0DO0tARZunPw4cV9a6on1HFR5JiIrTb89tUe5ZlrLmvNxLQExA3U7r5o5bQ== + dependencies: + "@cosmjs/amino" "0.32.2" + "@cosmjs/proto-signing" "0.32.2" + "@cosmjs/stargate" "0.32.2" + "@cosmjs/tendermint-rpc" "0.32.2" + "@cosmology/lcd" "^0.13.3" + p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" @@ -15004,6 +15397,20 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +viem@1.19.11: + version "1.19.11" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.19.11.tgz#de4ee7537ee036894bd818aa316a8faecaf017e9" + integrity sha512-dbsXEWDBZkByuzJXAs/e01j7dpUJ5ICF5WcyntFwf8Y97n5vnC/91lAleSa6DA5V4WJvYZbhDpYeTctsMAQnhA== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "0.9.8" + isows "1.0.3" + ws "8.13.0" + viem@1.19.9: version "1.19.9" resolved "https://registry.yarnpkg.com/viem/-/viem-1.19.9.tgz#a11f3ad4a3323994ebd2010dbc659d1a2b12e583" @@ -15034,9 +15441,9 @@ viem@^0.3.x: ws "8.12.0" viem@^1.2.9: - version "1.19.15" - resolved "https://registry.yarnpkg.com/viem/-/viem-1.19.15.tgz#0f2307632fa0ef10dfab2d8fdd71fbb842a0a4f5" - integrity sha512-rc87AkyrUUsoOAgMNYP+X/wN4GYwbhP87DkmsqQCYKxxQyzTX0+yliKs6Bxljbjr8ybU72GOb12Oyus6393AjQ== + version "1.21.4" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" + integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From 35262e36450d6a94344137d761cf535fcb92f5c4 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Fri, 26 Jan 2024 13:14:45 -0700 Subject: [PATCH 02/35] fix pool import osmojs --- src/chains/osmosis/osmosis.swap.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chains/osmosis/osmosis.swap.ts b/src/chains/osmosis/osmosis.swap.ts index 8aa66575d1..133f2be465 100644 --- a/src/chains/osmosis/osmosis.swap.ts +++ b/src/chains/osmosis/osmosis.swap.ts @@ -6,7 +6,7 @@ import { BigNumber } from "bignumber.js"; import { CoinDenom, Trade, PrettyPair } from "@osmonauts/math/dist/types"; import { symbolToOsmoDenom } from "@osmonauts/math/dist/utils"; import { SwapAmountInRoute } from "osmojs/dist/codegen/osmosis/poolmanager/v1beta1/swap_route"; -import { Pool } from 'osmojs/dist/codegen/osmosis/gamm/v1beta1/balancerPool'; +import { Pool } from 'osmojs/dist/codegen/osmosis/gamm/pool-models/balancer/balancerPool'; import { Coin } from "osmojs/dist/codegen/cosmos/base/v1beta1/coin"; export const routesThroughPools = ({ From 69c7eaf81ab9315be8b76c7be42f1cf94a41e04b Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Sat, 27 Jan 2024 13:55:32 -0700 Subject: [PATCH 03/35] remove no-jest debug file --- test/chains/osmosis/osmosis.testnojest.ts | 528 ---------------------- 1 file changed, 528 deletions(-) delete mode 100644 test/chains/osmosis/osmosis.testnojest.ts diff --git a/test/chains/osmosis/osmosis.testnojest.ts b/test/chains/osmosis/osmosis.testnojest.ts deleted file mode 100644 index b897db1a19..0000000000 --- a/test/chains/osmosis/osmosis.testnojest.ts +++ /dev/null @@ -1,528 +0,0 @@ -// @ts-nocheck -import fs = require('fs'); -import https = require('https'); -import axios from 'axios'; -import BigNumber from 'bignumber.js'; - -type method = 'GET' | 'POST'; - -const certPath = '/home/vboxuser/hbot/gateway/certs'; - -const httpsAgent = axios.create({ - httpsAgent: new https.Agent({ - ca: fs.readFileSync(certPath.concat('/ca_cert.pem'), { - encoding: 'utf-8', - }), - cert: fs.readFileSync(certPath.concat('/client_cert.pem'), { - encoding: 'utf-8', - }), - key: fs.readFileSync(certPath.concat('/client_key.pem'), { - encoding: 'utf-8', - }), - host: '127.0.0.1', - port: 15888, - requestCert: true, - rejectUnauthorized: false, - }), -}); -const request = async ( - method: method, - path: string, - params: Record -) => { - try { - let response; - const gatewayAddress = 'https://127.0.0.1:15888'; - if (method === 'GET') { - response = await httpsAgent.get(gatewayAddress + path); - } else { - response = await httpsAgent.post(gatewayAddress + path, params); - } - return response.data; - } catch (err) { - console.log(`${method} ${path} - ${err}`); - } -}; - -import { Osmosis } from '../../../src/chains/osmosis/osmosis'; -import { addWallet, getWallets } from '../../../src/services/wallet/wallet.controllers'; -import Decimal from 'decimal.js-light'; -import { Side } from '../../../src/amm/amm.requests'; - -const osmosisAddress_testnet = 'osmo1gxfandcf6x6y0lv3afv0p4w4akv809ycrly4cs'; -const osmosisAddress_mainnet = 'osmo1mvsg3en5ulpnpd3dset2m86zjpnzp4v4epmjh7'; - -const osmosisPrivateKey_testnet = '2e8be986f72f76dba7f8448b2e2342d3297cd628cf08aad9b90098102824f9d5'; // real testnet -const osmosisPrivateKey_mainnet = '8155cee93c2ff619e0943db140a31fe0ab34df8c85fefe114eb2200ef1a017db'; -// const osmosisPrivateKey_mainnet = 'ENTER PRIVATE KEY AND UPDATE osmosisAddress_mainnet'; - -const txHash_mainnet = 'FAEED1587F703D59CC8641D06DF18363E9E960D56F533D1ED75BA186990954D5' -const txHash_testnet = '0BF855ED36FDE2AEBA753A51FA0741A45E2D5CADD0583815559BDB9314F1380C' - -// update this to mainnet if desired to test multi-hop routes -var network = 'testnet' - -var slippage = '100%' -var osmosisAddress_from = osmosisAddress_testnet -var osmosisAddress_to = osmosisAddress_mainnet -var osmosisPrivateKey = osmosisPrivateKey_testnet -if (network == 'mainnet'){ - slippage = '2%' - osmosisAddress_from = osmosisAddress_mainnet - osmosisAddress_to = osmosisAddress_testnet - osmosisPrivateKey = osmosisPrivateKey_mainnet -} - -async function test() { - let osmosis: Osmosis; - - osmosis = Osmosis.getInstance(network); - await osmosis.init(); - - var poolId; - try { - console.debug('addLiquidityResponse'); - const addLiquidityRequestFunction = {'fee': 'high', 'token0':'OSMO', 'token1':'ION', 'amount0':'0.0001', 'amount1':'0', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; //'poolId':'62', - var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) - poolId = addLiquidityResponse.poolId; - console.debug(addLiquidityResponse); - } catch (err) { - console.debug(err); - } - - try { - console.debug('poolPriceResponse'); - const poolPriceRequest = { - chain:'osmosis', - network:'testnet', - address: osmosisAddress_from, - token0: 'OSMO', - token1: 'ATOM', - } - var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) - console.debug(poolPriceResponse); - } catch (err) { - console.debug(err); - } - - try { - console.debug('positionsResponse1'); - const positionsRequest1 = { - chain:'osmosis', - network:'testnet', - address: osmosisAddress_from, - } - var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) - console.debug(positionsResponse1); - } catch (err) { - console.debug(err); - } - - - - // START USUAL TEST RUNS - -// // poll -// try { -// console.debug('poll'); -// const pollRequest = {'txHash':txHash_testnet, 'chain':'osmosis', 'network': network}; -// const pollResponse = await osmosis.controller.poll(osmosis, pollRequest) -// console.debug(pollResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// await addWallet({ -// privateKey: osmosisPrivateKey, -// chain: 'osmosis', -// network: network, -// }); - -// const wallets = await getWallets(); -// console.debug(wallets); - -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('balances OSMO'); -// const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:['OSMO']}); -// console.debug(balances); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('balances All'); -// const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); -// console.debug(balances); -// } catch (err) { -// console.debug(err); -// } - -// // DISABLED ENDPOINTS -// try { -// console.debug('allowances'); -// var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress_to, 'spender':osmosisAddress_from, 'tokenSymbols':[], 'chain':'osmosis', 'network': network}); -// console.debug(allowances); -// console.debug(allowances); -// } catch (err) { -// console.debug(err); -// } -// try { -// console.debug('cancel'); -// var cancel = await osmosis.controller.cancel(osmosis, {'address':osmosisAddress_to, 'nonce':0, 'chain':'osmosis', 'network': network}); -// console.debug(cancel); -// } catch (err) { -// console.debug(err); -// } -// try { -// console.debug('approve'); -// var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress_to, 'spender':osmosisAddress_from, token:'OSMO', 'chain':'osmosis', 'network': network}); -// console.debug(approve); -// } catch (err) { -// console.debug(err); -// } -// // DISABLED ENDPOINTS - -// try { -// console.debug('transfer'); -// var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress_from, 'to':osmosisAddress_to, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network': network}); -// console.debug(transfer); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('getTokens OSMO'); -// var getTokens = await osmosis.controller.getTokens(osmosis, {tokenSymbols:['OSMO']}); -// console.debug(getTokens); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('getTokens All'); -// var getTokens = await osmosis.controller.getTokens(osmosis, {}); -// console.debug(getTokens); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('estimateGas'); -// var estimateGas = await osmosis.controller.estimateGas(osmosis); -// console.debug(estimateGas); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('block'); -// const block = await osmosis.getCurrentBlockNumber(); -// console.debug(block); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('wallet balances All'); -// const walleto = await osmosis.getWalletFromPrivateKey( -// osmosisPrivateKey, -// 'osmo' -// ); -// console.debug(walleto); -// } catch (err) { -// console.debug(err); -// } - - -// try { -// console.debug('get token'); -// var token = osmosis.getTokenBySymbol('ATOM'); -// var token2 = osmosis.getTokenForSymbol('OSMO'); -// console.debug(token); -// console.debug(token2); -// } catch (err) { -// console.debug(err); -// } - - - - -// try { -// console.debug('priceResponse1'); -// const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; -// const priceResponse1 = await osmosis.controller.price(osmosis, priceRequest1) -// console.debug(priceResponse1) -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('priceResponse2'); -// const priceRequest2 = {'quote':'OSMO', 'base':'ION', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; -// const priceResponse2 = await osmosis.controller.price(osmosis, priceRequest2) -// console.debug(priceResponse2) -// } catch (err) { -// console.debug(err); -// } - - -// // trade -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } - -// // trade back -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } - - -// // 3 cycle trade - tests 2-hop trades. ONLY WORKS ON MAINNET -// if (network == 'mainnet'){ -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'JUNO', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'STARS', 'base':'JUNO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'OSMO', 'base':'STARS', 'amount':'0.3', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } -// } - - -// try { -// console.debug('priceResponse3'); -// const priceRequest3 = {'quote':'ATOM', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; -// const priceResponse3 = await osmosis.controller.price(osmosis, priceRequest3) -// console.debug(priceResponse3) -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('tradeInfo'); -// const tradeInfo = await osmosis.controller.getTradeInfo(osmosis, "OSMO", "ION", new Decimal(1.0), "BUY") -// console.debug(tradeInfo); -// } catch (err) { -// console.debug(err); -// } - -// var poolId; -// try { -// console.debug('addLiquidityResponse'); -// const addLiquidityRequestFunction = {'fee': 'high', 'token0':'OSMO', 'token1':'ION', 'amount0':'0.0001', 'amount1':'0', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; //'poolId':'62', -// var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) -// poolId = addLiquidityResponse.poolId; -// console.debug(addLiquidityResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// if (poolId){ -// console.debug('removeLiquidityResponse'); -// const removeLiquidityRequest = {'decreasePercent':100, 'poolId':poolId, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, 'allowedSlippage':slippage}; -// var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) -// console.debug(removeLiquidityResponse); -// } -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('poolPriceResponse'); -// const poolPriceRequest = { -// chain:'osmosis', -// network:'testnet', -// address: osmosisAddress_from, -// token0: 'OSMO', -// token1: 'ATOM', -// } -// var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) -// console.debug(poolPriceResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('positionsResponse1'); -// const positionsRequest1 = { -// chain:'osmosis', -// network:'testnet', -// address: osmosisAddress_from, -// } -// var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) -// console.debug(positionsResponse1); -// } catch (err) { -// console.debug(err); -// } - - -// await osmosis.close(); -// } - -// // BELOW NEEDS TO HAVE GATEWAY RUNNIN SEPARATELY -// async function testViaEndpoints() { -// let osmosis: Osmosis; - -// osmosis = Osmosis.getInstance('testnet'); -// await osmosis.init(); - -// console.debug('starting'); -// console.debug('starting'); -// console.debug('starting'); -// console.debug('starting'); - -// const status = await request('GET', '/chain/status', { -// privateKey: osmosisPrivateKey, -// chain: 'osmosis', -// network: 'testnet', -// }); -// console.debug('status'); -// console.debug(status); - -// const balances = await request('POST', '/chain/balances', { -// privateKey: osmosisPrivateKey, -// address: osmosisAddress_testnet, -// chain: 'osmosis', -// network: 'testnet', -// tokenSymbols: ['OSMO','ATOM','ION'], -// }); -// console.debug('balances'); -// console.debug(balances); - -// const tokensList = await osmosis.controller.getTokens(osmosis,{}) -// console.debug(tokensList); - -// const tokens = await request('GET', '/chain/tokens?chain=osmosis&network=testnet', { -// privateKey: osmosisPrivateKey, -// chain: 'osmosis', -// network: 'testnet', -// query: {chain: 'osmosis', network: 'testnet'}, -// }); -// console.debug('tokens'); -// console.debug(tokens); - - await osmosis.close(); - -} - -async function testViaEndpoints2() { - - const priceRequest = await request('POST', '/amm/price_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - quote: 'ION', - base: 'OSMO', - amount: '0.001', - side: 'BUY', - allowedSlippage: '1%', - }); - console.debug(priceRequest); - - // can specify poolId - const addLiquidityRequest = await request('POST', '/amm/liquidity/add_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - token0: 'ION', - token1: 'OSMO', - amount0: '0.001', - amount1: '0.1', - // poolId: 'X', - }); - console.debug(addLiquidityRequest); - - const removeLiquidityRequest = await request('POST', '/amm/liquidity/remove_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - decreasePercent: 10, - poolId: '62', - }); - console.debug(removeLiquidityRequest); - - const poolPriceRequest = await request('POST', '/amm/liquidity/price_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - token0: 'ION', - token1: 'OSMO', - }); - console.debug(poolPriceRequest); - - - const poolPriceRequestTest = await request('POST', '/amm/liquidity/price_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - token0: 'ATOM', - token1: 'OSMO', - }); - console.debug(poolPriceRequestTest); - - // can specify poolId - const positionsRequest = await request('POST', '/amm/liquidity/positions_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - // poolId: 'X', - }); - console.debug(positionsRequest); - - - - -}; - -if (false){ - testViaEndpoints2(); -} - -test(); From f63303a1b4cbb5c634ef6e5e123ba0bc45018e87 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Sat, 27 Jan 2024 13:58:49 -0700 Subject: [PATCH 04/35] change default pw for cert manager in osmo tests --- test/chains/osmosis/osmosis.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/chains/osmosis/osmosis.test.ts b/test/chains/osmosis/osmosis.test.ts index fd28a8601f..942f510e46 100755 --- a/test/chains/osmosis/osmosis.test.ts +++ b/test/chains/osmosis/osmosis.test.ts @@ -15,7 +15,7 @@ jest.setTimeout(300000); // run for 5 mins let osmosis: Osmosis; beforeAll(async () => { - patch(ConfigManagerCertPassphrase, 'readPassphrase', () => 'macymo'); + patch(ConfigManagerCertPassphrase, 'readPassphrase', () => 'a'); osmosis = Osmosis.getInstance('testnet'); await osmosis.init(); From 21957299350efb6515a332ddcdf487b179a9fe83 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Sat, 27 Jan 2024 14:26:37 -0700 Subject: [PATCH 05/35] re-add osmo assets json files --- .../lists/osmo-test-5-assetlist.json | 508 + src/templates/lists/osmosis-1.assetlist.json | 13338 ++++++++++++++++ 2 files changed, 13846 insertions(+) create mode 100644 src/templates/lists/osmo-test-5-assetlist.json create mode 100644 src/templates/lists/osmosis-1.assetlist.json diff --git a/src/templates/lists/osmo-test-5-assetlist.json b/src/templates/lists/osmo-test-5-assetlist.json new file mode 100644 index 0000000000..bc5a1936f8 --- /dev/null +++ b/src/templates/lists/osmo-test-5-assetlist.json @@ -0,0 +1,508 @@ +{ + "chain_name": "osmosistestnet5", + "assets": [ + { + "description": "The native token of Osmosis", + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0, + "aliases": [] + }, + { + "denom": "osmo", + "exponent": 6, + "aliases": [] + } + ], + "base": "uosmo", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "coingecko_id": "osmosis", + "keywords": [ + "dex", + "staking", + "osmosis-info", + "osmosis-price:ibc/6F34E1BD664C36CE49ACC28E60D62559A5F96C4F9A6CCE4FC5A67B2852E24CFE:5" + ] + }, + { + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "base": "uion", + "name": "Ion", + "display": "ion", + "symbol": "ION", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "coingecko_id": "ion", + "keywords": [ + "memecoin", + "osmosis-info", + "osmosis-price:uosmo:1" + ] + }, + { + "description": "The native staking and governance token of the Theta testnet version of the Cosmos Hub.", + "denom_units": [ + { + "denom": "ibc/A8C2D23A1E6F95DA4E48BA349667E322BD7A6C996D8A4AAE8BA72E190F3D1477", + "exponent": 0, + "aliases": [ + "uatom" + ] + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/A8C2D23A1E6F95DA4E48BA349667E322BD7A6C996D8A4AAE8BA72E190F3D1477", + "name": "Cosmos", + "display": "atom", + "symbol": "ATOM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "cosmoshubtestnet", + "base_denom": "uatom", + "channel_id": "channel-2500" + }, + "chain": { + "channel_id": "channel-12", + "path": "transfer/channel-12/uatom" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:12" + ] + }, + { + "description": "Circle's stablecoin on Axelar", + "denom_units": [ + { + "denom": "ibc/6F34E1BD664C36CE49ACC28E60D62559A5F96C4F9A6CCE4FC5A67B2852E24CFE", + "exponent": 0, + "aliases": [ + "uausdc" + ] + }, + { + "denom": "ausdc", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/6F34E1BD664C36CE49ACC28E60D62559A5F96C4F9A6CCE4FC5A67B2852E24CFE", + "name": "USD Coin", + "display": "ausdc", + "symbol": "aUSDC", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Circle" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereumtestnet", + "base_denom": "0x254d06f33bDc5b8ee05b2ea472107E300226659A" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelartestnet", + "base_denom": "uausdc", + "channel_id": "channel-227" + }, + "chain": { + "channel_id": "channel-3", + "path": "transfer/channel-3/uausdc" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.svg" + }, + "coingecko_id": "usd-coin", + "keywords": [ + "osmosis-info" + ] + }, + { + "description": "The native token of JUNO Chain", + "denom_units": [ + { + "denom": "ibc/8E2FEFCBD754FA3C97411F0126B9EC76191BAA1B3959CB73CECF396A4037BBF0", + "exponent": 0, + "aliases": [ + "ujunox" + ] + }, + { + "denom": "junox", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/8E2FEFCBD754FA3C97411F0126B9EC76191BAA1B3959CB73CECF396A4037BBF0", + "name": "Juno Testnet", + "display": "junox", + "symbol": "JUNOX", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "junotestnet", + "base_denom": "ujunox", + "channel_id": "channel-190" + }, + "chain": { + "channel_id": "channel-1", + "path": "transfer/channel-1/ujunox" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/junotestnet/images/juno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/junotestnet/images/juno.svg" + }, + "coingecko_id": "juno-network", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:3" + ] + }, + { + "description": "The native token of Mars Protocol", + "denom_units": [ + { + "denom": "ibc/2E7368A14AC9AB7870F32CFEA687551C5064FA861868EDF7437BC877358A81F9", + "exponent": 0, + "aliases": [ + "umars" + ] + }, + { + "denom": "mars", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/2E7368A14AC9AB7870F32CFEA687551C5064FA861868EDF7437BC877358A81F9", + "name": "Mars", + "display": "mars", + "symbol": "MARS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "marstestnet", + "base_denom": "umars", + "channel_id": "channel-14" + }, + "chain": { + "channel_id": "channel-24", + "path": "transfer/channel-24/umars" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/mars/images/mars-token.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/mars/images/mars-token.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:10" + ] + }, + { + "description": "USD Coin", + "denom_units": [ + { + "denom": "ibc/40F1B2458AEDA66431F9D44F48413240B8D28C072463E2BF53655728683583E3", + "exponent": 0, + "aliases": [ + "microusdc", + "uusdc" + ] + }, + { + "denom": "usdc", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/40F1B2458AEDA66431F9D44F48413240B8D28C072463E2BF53655728683583E3", + "name": "USD Coin", + "display": "usdc", + "symbol": "USDC", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Circle" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "nobletestnet", + "base_denom": "uusdc", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-123", + "path": "transfer/channel-123/uusdc" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdc.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/6F34E1BD664C36CE49ACC28E60D62559A5F96C4F9A6CCE4FC5A67B2852E24CFE:46" + ] + }, + { + "description": "Akash Token (AKT) is the Akash Network's native utility token, used as the primary means to govern, secure the blockchain, incentivize participants, and provide a default mechanism to store and exchange value.", + "denom_units": [ + { + "denom": "ibc/33C17B7D6A37726CA8DD4A4036198916F79A3A4D661B054AA2E8C92809907C58", + "exponent": 0, + "aliases": [ + "uakt" + ] + }, + { + "denom": "akt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/33C17B7D6A37726CA8DD4A4036198916F79A3A4D661B054AA2E8C92809907C58", + "name": "Akash Network", + "display": "akt", + "symbol": "AKT", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "akashtestnet", + "base_denom": "uakt", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-899", + "path": "transfer/channel-899/uakt" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/akash/images/akt.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/akash/images/akt.svg" + } + }, + { + "description": "The native utility token of the Kaon testnet version of KYVE.", + "denom_units": [ + { + "denom": "ibc/AB8AF05799E299FB5C5C80781DA35887F53E029745D20E5641233DB4E6B28515", + "exponent": 0, + "aliases": [ + "tkyve" + ] + }, + { + "denom": "kyve", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/AB8AF05799E299FB5C5C80781DA35887F53E029745D20E5641233DB4E6B28515", + "name": "KYVE", + "display": "kyve", + "symbol": "KYVE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kyvetestnet", + "base_denom": "tkyve", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-10", + "path": "transfer/channel-10/tkyve" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/kyvetestnet/images/kyve.svg" + }, + "keywords": [ + "osmosis-price:uosmo:4" + ] + }, + { + "description": "QCK - native token of Quicksilver", + "denom_units": [ + { + "denom": "ibc/F37CF69589DE12342758382F8770C0852CD8D2E4519F55166EBDAF472AD667C9", + "exponent": 0, + "aliases": [ + "uqck" + ] + }, + { + "denom": "qck", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "base": "ibc/F37CF69589DE12342758382F8770C0852CD8D2E4519F55166EBDAF472AD667C9", + "name": "Quicksilver", + "display": "qck", + "symbol": "QCK", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "quicksilvertestnet", + "base_denom": "uqck", + "channel_id": "channel-20" + }, + "chain": { + "channel_id": "channel-13", + "path": "transfer/channel-13/uqck" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qck.png" + }, + "coingecko_id": "quicksilver", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:34" + ] + }, + { + "description": "The native token of Chain4Energy", + "denom_units": [ + { + "denom": "ibc/E3D323CB6F427C49E56F913C853A416F6B71BAA9B0164625AD0203266F92B3ED", + "exponent": 0, + "aliases": [ + "uc4e" + ] + }, + { + "denom": "c4e", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/E3D323CB6F427C49E56F913C853A416F6B71BAA9B0164625AD0203266F92B3ED", + "name": "Chain4Energy", + "display": "c4e", + "symbol": "C4E", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "chain4energytestnet", + "base_denom": "uc4e", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-111", + "path": "transfer/channel-111/uc4e" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/chain4energytestnet/images/c4e.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/6F34E1BD664C36CE49ACC28E60D62559A5F96C4F9A6CCE4FC5A67B2852E24CFE:40" + ] + }, + { + "description": "The native staking and governance token of the Composable testnet.", + "denom_units": [ + { + "denom": "ibc/27689601842A99059DFD79EB0A34A089FC2F7337491B5555C176400A8FA7F2A4", + "exponent": 0, + "aliases": [ + "ppica" + ] + }, + { + "denom": "pica", + "exponent": 12 + } + ], + "type_asset": "ics20", + "base": "ibc/27689601842A99059DFD79EB0A34A089FC2F7337491B5555C176400A8FA7F2A4", + "name": "Pica", + "display": "pica", + "symbol": "PICA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "composabletestnet", + "base_denom": "ppica", + "channel_id": "channel-11" + }, + "chain": { + "channel_id": "channel-329", + "path": "transfer/channel-329/ppica" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/composable/images/composable.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/composable/images/composable.svg" + } + } + ] + } \ No newline at end of file diff --git a/src/templates/lists/osmosis-1.assetlist.json b/src/templates/lists/osmosis-1.assetlist.json new file mode 100644 index 0000000000..3cb63efa54 --- /dev/null +++ b/src/templates/lists/osmosis-1.assetlist.json @@ -0,0 +1,13338 @@ +{ + "chain_name": "osmosis", + "assets": [ + { + "description": "The native token of Osmosis", + "denom_units": [ + { + "denom": "uosmo", + "exponent": 0 + }, + { + "denom": "osmo", + "exponent": 6 + } + ], + "base": "uosmo", + "name": "Osmosis", + "display": "osmo", + "symbol": "OSMO", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" + }, + "coingecko_id": "osmosis", + "keywords": [ + "dex", + "staking", + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1221" + ] + }, + { + "denom_units": [ + { + "denom": "uion", + "exponent": 0 + }, + { + "denom": "ion", + "exponent": 6 + } + ], + "base": "uion", + "name": "Ion DAO", + "display": "ion", + "symbol": "ION", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" + }, + "coingecko_id": "ion", + "keywords": [ + "memecoin", + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:2" + ] + }, + { + "description": "Circle's stablecoin on Axelar", + "denom_units": [ + { + "denom": "ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858", + "exponent": 0, + "aliases": [ + "uusdc" + ] + }, + { + "denom": "usdc", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858", + "name": "USD Coin", + "display": "usdc", + "symbol": "USDC.axl", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Circle" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "uusdc", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/uusdc" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/usdc.axl.svg", + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/usdc.axl.png" + }, + "coingecko_id": "axlusdc", + "keywords": [ + "osmosis-main", + "osmosis-info", + "peg:collateralized" + ] + }, + { + "description": "Ethereum (ETH) is a decentralized, open-source blockchain system featuring smart contract functionality. It's the native cryptocurrency of the Ethereum platform, often regarded as the second most popular digital currency after Bitcoin. Ethereum was proposed in late 2013 and development was crowdfunded in 2014, leading to its network going live on 30 July 2015.\n\nETH, as a digital currency, is used for a variety of purposes within the Ethereum ecosystem, including the execution of decentralized smart contracts and as a mode of payment. Unlike Bitcoin, Ethereum was designed to be a platform for applications that can operate without the need for intermediaries, using blockchain technology. This has made Ethereum a leading platform for various applications, including decentralized finance (DeFi), non-fungible tokens (NFTs), and more. Ethereum is constantly evolving, with a significant upgrade termed Ethereum 2.0, which aims to improve its scalability, security, and sustainability.", + "denom_units": [ + { + "denom": "ibc/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5", + "exponent": 0, + "aliases": [ + "weth-wei" + ] + }, + { + "denom": "weth", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5", + "name": "Ether", + "display": "weth", + "symbol": "ETH", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Ethereum" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "weth-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/weth-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/eth-white.png" + }, + "coingecko_id": "ethereum", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1134" + ] + }, + { + "description": "Wrapped Bitcoin on Axelar", + "denom_units": [ + { + "denom": "ibc/D1542AA8762DB13087D8364F3EA6509FD6F009A34F00426AF9E4F9FA85CBBF1F", + "exponent": 0, + "aliases": [ + "wbtc-satoshi" + ] + }, + { + "denom": "wbtc", + "exponent": 8 + } + ], + "type_asset": "ics20", + "base": "ibc/D1542AA8762DB13087D8364F3EA6509FD6F009A34F00426AF9E4F9FA85CBBF1F", + "name": "Wrapped Bitcoin", + "display": "wbtc", + "symbol": "WBTC.axl", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "bitcoin", + "base_denom": "sat" + }, + "provider": "BitGo, Kyber, and Ren" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "wbtc-satoshi", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/wbtc-satoshi" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/wbtc.axl.svg", + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/wbtc.axl.png" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1090" + ] + }, + { + "description": "Tether's USD stablecoin on Axelar", + "denom_units": [ + { + "denom": "ibc/8242AD24008032E457D2E12D46588FD39FB54FB29680C6C7663D296B383C37C4", + "exponent": 0, + "aliases": [ + "uusdt" + ] + }, + { + "denom": "usdt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/8242AD24008032E457D2E12D46588FD39FB54FB29680C6C7663D296B383C37C4", + "name": "Tether USD", + "display": "usdt", + "symbol": "USDT.axl", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Tether" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xdac17f958d2ee523a2206206994597c13d831ec7" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "uusdt", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/uusdt" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/usdt.axl.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB:1150", + "peg:collateralized" + ] + }, + { + "description": "Multi-Collateral Dai, brings a lot of new and exciting features, such as support for new CDP collateral types and Dai Savings Rate.", + "denom_units": [ + { + "denom": "ibc/0CD3A0285E1341859B5E86B6AB7682F023D03E97607CCC1DC95706411D866DF7", + "exponent": 0, + "aliases": [ + "dai-wei" + ] + }, + { + "denom": "dai", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/0CD3A0285E1341859B5E86B6AB7682F023D03E97607CCC1DC95706411D866DF7", + "name": "Dai Stablecoin", + "display": "dai", + "symbol": "DAI", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "MakerDAO" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x6b175474e89094c44da98b954eedeac495271d0f" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "dai-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/dai-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/dai.svg" + }, + "coingecko_id": "dai", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1260", + "peg:collateralized" + ] + }, + { + "description": "Binance USD (BUSD) is a dollar-backed stablecoin issued and custodied by Paxos Trust Company, and regulated by the New York State Department of Financial Services. BUSD is available directly for sale 1:1 with USD on Paxos.com and will be listed for trading on Binance.", + "denom_units": [ + { + "denom": "ibc/6329DD8CF31A334DD5BE3F68C846C9FE313281362B37686A62343BAC1EB1546D", + "exponent": 0, + "aliases": [ + "busd-wei" + ] + }, + { + "denom": "busd", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/6329DD8CF31A334DD5BE3F68C846C9FE313281362B37686A62343BAC1EB1546D", + "name": "Binance USD", + "display": "busd", + "symbol": "BUSD", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Binance" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x4fabb145d64652a948d72533023f6e7a623c7c53" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "busd-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/busd-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/busd.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/busd.svg" + }, + "coingecko_id": "binance-usd", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:877" + ] + }, + { + "description": "The native staking and governance token of the Cosmos Hub.", + "denom_units": [ + { + "denom": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", + "exponent": 0, + "aliases": [ + "uatom" + ] + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", + "name": "Cosmos Hub", + "display": "atom", + "symbol": "ATOM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "cosmoshub", + "base_denom": "uatom", + "channel_id": "channel-141" + }, + "chain": { + "channel_id": "channel-0", + "path": "transfer/channel-0/uatom" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.svg" + }, + "coingecko_id": "cosmos", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1265" + ] + }, + { + "description": "CRO is the native token of the Crypto.org Chain, referred to as Native CRO.", + "denom_units": [ + { + "denom": "ibc/E6931F78057F7CC5DA0FD6CEF82FF39373A6E0452BF1FD76910B93292CF356C1", + "exponent": 0, + "aliases": [ + "basecro" + ] + }, + { + "denom": "cro", + "exponent": 8 + } + ], + "type_asset": "ics20", + "base": "ibc/E6931F78057F7CC5DA0FD6CEF82FF39373A6E0452BF1FD76910B93292CF356C1", + "name": "Cronos POS Chain", + "display": "cro", + "symbol": "CRO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "cryptoorgchain", + "base_denom": "basecro", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-5", + "path": "transfer/channel-5/basecro" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cronos/images/cro.svg" + }, + "coingecko_id": "crypto-com-chain", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:9" + ] + }, + { + "description": "BNB powers the BNB Chain ecosystem and is the native coin of the BNB Beacon Chain and BNB Smart Chain.", + "denom_units": [ + { + "denom": "ibc/F4A070A6D78496D53127EA85C094A9EC87DFC1F36071B8CCDDBD020F933D213D", + "exponent": 0, + "aliases": [ + "wbnb-wei" + ] + }, + { + "denom": "wbnb", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/F4A070A6D78496D53127EA85C094A9EC87DFC1F36071B8CCDDBD020F933D213D", + "name": "Binance Coin", + "display": "wbnb", + "symbol": "BNB", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "binancesmartchain", + "base_denom": "wei" + }, + "chain": { + "contract": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" + }, + "provider": "Binance" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "binancesmartchain", + "base_denom": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "wbnb-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/wbnb-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/binancesmartchain/images/bnb.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/binancesmartchain/images/bnb.svg" + }, + "coingecko_id": "binancecoin", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:840" + ] + }, + { + "description": "Polygon (formerly Matic) Network brings massive scale to Ethereum using an adapted version of Plasma with PoS based side chains. Polygon is a well-structured, easy-to-use platform for Ethereum scaling and infrastructure development.", + "denom_units": [ + { + "denom": "ibc/AB589511ED0DD5FA56171A39978AFBF1371DB986EC1C3526CE138A16377E39BB", + "exponent": 0, + "aliases": [ + "wmatic-wei" + ] + }, + { + "denom": "wmatic", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/AB589511ED0DD5FA56171A39978AFBF1371DB986EC1C3526CE138A16377E39BB", + "name": "Polygon", + "display": "wmatic", + "symbol": "MATIC", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "polygon", + "base_denom": "wei" + }, + "provider": "Polygon" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "polygon", + "base_denom": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "wmatic-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/wmatic-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/polygon/images/matic-purple.png" + }, + "coingecko_id": "matic-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:789" + ] + }, + { + "description": "AVAX is the native token of Avalanche. It is a hard-capped, scarce asset that is used to pay for fees, secure the platform through staking, and provide a basic unit of account between the multiple subnets created on Avalanche.", + "denom_units": [ + { + "denom": "ibc/6F62F01D913E3FFE472A38C78235B8F021B511BC6596ADFF02615C8F83D3B373", + "exponent": 0, + "aliases": [ + "wavax-wei" + ] + }, + { + "denom": "avax", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/6F62F01D913E3FFE472A38C78235B8F021B511BC6596ADFF02615C8F83D3B373", + "name": "Avalanche", + "display": "avax", + "symbol": "AVAX", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "avalanche", + "base_denom": "wei" + }, + "provider": "Avalanche" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "avalanche", + "base_denom": "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "wavax-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/wavax-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/avalanche/images/avax.png" + }, + "coingecko_id": "avalanche-2", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:899" + ] + }, + { + "description": "The native staking token of Terra Classic.", + "denom_units": [ + { + "denom": "ibc/0EF15DF2F02480ADE0BB6E85D9EBB5DAEA2836D3860E9F97F9AADE4F57A31AA0", + "exponent": 0, + "aliases": [ + "microluna", + "uluna" + ] + }, + { + "denom": "mluna", + "exponent": 3, + "aliases": [ + "milliluna" + ] + }, + { + "denom": "luna", + "exponent": 6, + "aliases": [ + "lunc" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/0EF15DF2F02480ADE0BB6E85D9EBB5DAEA2836D3860E9F97F9AADE4F57A31AA0", + "name": "Luna Classic", + "display": "luna", + "symbol": "LUNC", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "terra", + "base_denom": "uluna", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-72", + "path": "transfer/channel-72/uluna" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra/images/luna.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra/images/luna.svg" + }, + "coingecko_id": "terra-luna", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:800" + ] + }, + { + "description": "The native token of JUNO Chain", + "denom_units": [ + { + "denom": "ibc/46B44899322F3CD854D2D46DEEF881958467CDD4B3B10086DA49296BBED94BED", + "exponent": 0, + "aliases": [ + "ujuno" + ] + }, + { + "denom": "juno", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/46B44899322F3CD854D2D46DEEF881958467CDD4B3B10086DA49296BBED94BED", + "name": "Juno", + "display": "juno", + "symbol": "JUNO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "juno", + "base_denom": "ujuno", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-42", + "path": "transfer/channel-42/ujuno" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/juno.svg" + }, + "coingecko_id": "juno-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:497" + ] + }, + { + "description": "Wrapped Polkadot on Axelar", + "denom_units": [ + { + "denom": "ibc/3FF92D26B407FD61AE95D975712A7C319CDE28DE4D80BDC9978D935932B991D7", + "exponent": 0, + "aliases": [ + "dot-planck" + ] + }, + { + "denom": "dot", + "exponent": 10 + } + ], + "type_asset": "ics20", + "base": "ibc/3FF92D26B407FD61AE95D975712A7C319CDE28DE4D80BDC9978D935932B991D7", + "name": "Wrapped Polkadot", + "display": "dot", + "symbol": "DOT.axl", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "polkadot", + "base_denom": "Planck" + }, + "provider": "Polkadot Parachain" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "moonbeam", + "base_denom": "0xffffffff1fcacbd218edc0eba20fc2308c778080" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "dot-planck", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/dot-planck" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/dot.axl.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1091" + ] + }, + { + "description": "The native EVM, governance and staking token of the Evmos Hub", + "denom_units": [ + { + "denom": "ibc/6AE98883D4D5D5FF9E50D7130F1305DA2FFA0C652D1DD9C123657C6B4EB2DF8A", + "exponent": 0, + "aliases": [ + "aevmos" + ] + }, + { + "denom": "evmos", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/6AE98883D4D5D5FF9E50D7130F1305DA2FFA0C652D1DD9C123657C6B4EB2DF8A", + "name": "Evmos", + "display": "evmos", + "symbol": "EVMOS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "evmos", + "base_denom": "aevmos", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-204", + "path": "transfer/channel-204/aevmos" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.svg" + }, + "coingecko_id": "evmos", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:722" + ] + }, + { + "description": "The native staking and governance token of Kava", + "denom_units": [ + { + "denom": "ibc/57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205", + "exponent": 0, + "aliases": [ + "ukava" + ] + }, + { + "denom": "kava", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205", + "name": "Kava", + "display": "kava", + "symbol": "KAVA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kava", + "base_denom": "ukava", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-143", + "path": "transfer/channel-143/ukava" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/kava.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/kava.svg" + }, + "coingecko_id": "kava", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1105" + ] + }, + { + "description": "The native token of Secret Network", + "denom_units": [ + { + "denom": "ibc/0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A", + "exponent": 0, + "aliases": [ + "uscrt" + ] + }, + { + "denom": "scrt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A", + "name": "Secret Network", + "display": "scrt", + "symbol": "SCRT", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "uscrt", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-88", + "path": "transfer/channel-88/uscrt" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/scrt.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/scrt.svg" + }, + "coingecko_id": "secret", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:584" + ] + }, + { + "description": "The USD stablecoin of Terra Classic.", + "denom_units": [ + { + "denom": "ibc/BE1BB42D4BE3C30D50B68D7C41DB4DFCE9678E8EF8C539F6E6A9345048894FCC", + "exponent": 0, + "aliases": [ + "microusd", + "uusd" + ] + }, + { + "denom": "musd", + "exponent": 3, + "aliases": [ + "milliusd" + ] + }, + { + "denom": "ust", + "exponent": 6, + "aliases": [ + "ustc" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/BE1BB42D4BE3C30D50B68D7C41DB4DFCE9678E8EF8C539F6E6A9345048894FCC", + "name": "TerraClassicUSD", + "display": "ust", + "symbol": "USTC", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "terra", + "base_denom": "uusd", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-72", + "path": "transfer/channel-72/uusd" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra/images/ust.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra/images/ust.svg" + }, + "coingecko_id": "terrausd", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:560", + "peg:algorithmic" + ] + }, + { + "description": "The native token of Stargaze", + "denom_units": [ + { + "denom": "ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4", + "exponent": 0, + "aliases": [ + "ustars" + ] + }, + { + "denom": "stars", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4", + "name": "Stargaze", + "display": "stars", + "symbol": "STARS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "stargaze", + "base_denom": "ustars", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-75", + "path": "transfer/channel-75/ustars" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/stars.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/stars.svg" + }, + "coingecko_id": "stargaze", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1096" + ] + }, + { + "description": "The native token of Chihuahua Chain", + "denom_units": [ + { + "denom": "ibc/B9E0A1A524E98BB407D3CED8720EFEFD186002F90C1B1B7964811DD0CCC12228", + "exponent": 0, + "aliases": [ + "uhuahua" + ] + }, + { + "denom": "huahua", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/B9E0A1A524E98BB407D3CED8720EFEFD186002F90C1B1B7964811DD0CCC12228", + "name": "Chihuahua", + "display": "huahua", + "symbol": "HUAHUA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "chihuahua", + "base_denom": "uhuahua", + "channel_id": "channel-7" + }, + "chain": { + "channel_id": "channel-113", + "path": "transfer/channel-113/uhuahua" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/chihuahua/images/huahua.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/chihuahua/images/huahua.svg" + }, + "coingecko_id": "chihuahua-token", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1111" + ] + }, + { + "description": "The XPRT token is primarily a governance token for the Persistence chain.", + "denom_units": [ + { + "denom": "ibc/A0CC0CF735BFB30E730C70019D4218A1244FF383503FF7579C9201AB93CA9293", + "exponent": 0, + "aliases": [ + "uxprt" + ] + }, + { + "denom": "xprt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/A0CC0CF735BFB30E730C70019D4218A1244FF383503FF7579C9201AB93CA9293", + "name": "Persistence", + "display": "xprt", + "symbol": "XPRT", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "persistence", + "base_denom": "uxprt", + "channel_id": "channel-6" + }, + "chain": { + "channel_id": "channel-4", + "path": "transfer/channel-4/uxprt" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/xprt.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/xprt.svg" + }, + "coingecko_id": "persistence", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1101" + ] + }, + { + "description": "pSTAKE is a liquid staking protocol unlocking the liquidity of staked assets. Stakers of PoS tokens can stake their assets while maintaining the liquidity of these assets. Users earn staking rewards + receive 1:1 pegged staked representative tokens which can be used to generate additional yield.", + "denom_units": [ + { + "denom": "ibc/8061A06D3BD4D52C4A28FFECF7150D370393AF0BA661C3776C54FF32836C3961", + "exponent": 0, + "aliases": [ + "gravity0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006", + "0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006", + "ibc/A6E3AF63B3C906416A9AF7A556C59EA4BD50E617EFFE6299B99700CCB780E444" + ] + }, + { + "denom": "pstake", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/8061A06D3BD4D52C4A28FFECF7150D370393AF0BA661C3776C54FF32836C3961", + "name": "pSTAKE Finance", + "display": "pstake", + "symbol": "PSTAKE", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "persistence", + "base_denom": "uxprt" + }, + "provider": "Persistence" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006" + }, + "provider": "Gravity Bridge" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gravitybridge", + "base_denom": "gravity0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006", + "channel_id": "channel-24" + }, + "chain": { + "channel_id": "channel-38", + "path": "transfer/channel-38/gravity0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006" + } + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "persistence", + "base_denom": "ibc/A6E3AF63B3C906416A9AF7A556C59EA4BD50E617EFFE6299B99700CCB780E444", + "channel_id": "channel-6" + }, + "chain": { + "channel_id": "channel-4", + "path": "transfer/channel-4/transfer/channel-38/gravity0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/pstake.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/pstake.svg" + }, + "coingecko_id": "pstake-finance", + "keywords": [ + "canon", + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:648" + ] + }, + { + "description": "Akash Token (AKT) is the Akash Network's native utility token, used as the primary means to govern, secure the blockchain, incentivize participants, and provide a default mechanism to store and exchange value.", + "denom_units": [ + { + "denom": "ibc/1480B8FD20AD5FCAE81EA87584D269547DD4D436843C1D20F15E00EB64743EF4", + "exponent": 0, + "aliases": [ + "uakt" + ] + }, + { + "denom": "akt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/1480B8FD20AD5FCAE81EA87584D269547DD4D436843C1D20F15E00EB64743EF4", + "name": "Akash", + "display": "akt", + "symbol": "AKT", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "akash", + "base_denom": "uakt", + "channel_id": "channel-9" + }, + "chain": { + "channel_id": "channel-1", + "path": "transfer/channel-1/uakt" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/akash/images/akt.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/akash/images/akt.svg" + }, + "coingecko_id": "akash-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1093" + ] + }, + { + "description": "REGEN coin is the token for the Regen Network Platform", + "denom_units": [ + { + "denom": "ibc/1DCC8A6CB5689018431323953344A9F6CC4D0BFB261E88C9F7777372C10CD076", + "exponent": 0, + "aliases": [ + "uregen" + ] + }, + { + "denom": "regen", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/1DCC8A6CB5689018431323953344A9F6CC4D0BFB261E88C9F7777372C10CD076", + "name": "Regen", + "display": "regen", + "symbol": "REGEN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "regen", + "base_denom": "uregen", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-8", + "path": "transfer/channel-8/uregen" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/regen/images/regen.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/regen/images/regen.svg" + }, + "coingecko_id": "regen", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:42" + ] + }, + { + "description": "DVPN is the native token of the Sentinel Hub.", + "denom_units": [ + { + "denom": "ibc/9712DBB13B9631EDFA9BF61B55F1B2D290B2ADB67E3A4EB3A875F3B6081B3B84", + "exponent": 0, + "aliases": [ + "udvpn" + ] + }, + { + "denom": "dvpn", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/9712DBB13B9631EDFA9BF61B55F1B2D290B2ADB67E3A4EB3A875F3B6081B3B84", + "name": "Sentinel", + "display": "dvpn", + "symbol": "DVPN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "sentinel", + "base_denom": "udvpn", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-2", + "path": "transfer/channel-2/udvpn" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sentinel/images/dvpn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sentinel/images/dvpn.svg" + }, + "coingecko_id": "sentinel", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:6" + ] + }, + { + "description": "The IRIS token is the native governance token for the IrisNet chain.", + "denom_units": [ + { + "denom": "ibc/7C4D60AA95E5A7558B0A364860979CA34B7FF8AAF255B87AF9E879374470CEC0", + "exponent": 0, + "aliases": [ + "uiris" + ] + }, + { + "denom": "iris", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/7C4D60AA95E5A7558B0A364860979CA34B7FF8AAF255B87AF9E879374470CEC0", + "name": "IRISnet", + "display": "iris", + "symbol": "IRIS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "irisnet", + "base_denom": "uiris", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-6", + "path": "transfer/channel-6/uiris" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/irisnet/images/iris.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/irisnet/images/iris.svg" + }, + "coingecko_id": "iris-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1106" + ] + }, + { + "description": "IOV coin is the token for the Starname (IOV) Asset Name Service", + "denom_units": [ + { + "denom": "ibc/52B1AA623B34EB78FD767CEA69E8D7FA6C9CFE1FBF49C5406268FD325E2CC2AC", + "exponent": 0, + "aliases": [ + "uiov" + ] + }, + { + "denom": "iov", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/52B1AA623B34EB78FD767CEA69E8D7FA6C9CFE1FBF49C5406268FD325E2CC2AC", + "name": "Starname", + "display": "iov", + "symbol": "IOV", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "starname", + "base_denom": "uiov", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-15", + "path": "transfer/channel-15/uiov" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/starname/images/iov.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/starname/images/iov.svg" + }, + "coingecko_id": "starname", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:197" + ] + }, + { + "description": "e-Money NGM staking token. In addition to earning staking rewards the token is bought back and burned based on e-Money stablecoin inflation.", + "denom_units": [ + { + "denom": "ibc/1DC495FCEFDA068A3820F903EDBD78B942FBD204D7E93D3BA2B432E9669D1A59", + "exponent": 0, + "aliases": [ + "ungm" + ] + }, + { + "denom": "ngm", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/1DC495FCEFDA068A3820F903EDBD78B942FBD204D7E93D3BA2B432E9669D1A59", + "name": "e-Money", + "display": "ngm", + "symbol": "NGM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "emoney", + "base_denom": "ungm", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-37", + "path": "transfer/channel-37/ungm" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/emoney/images/ngm.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/emoney/images/ngm.svg" + }, + "coingecko_id": "e-money", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:463" + ] + }, + { + "description": "e-Money EUR stablecoin. Audited and backed by fiat EUR deposits and government bonds.", + "denom_units": [ + { + "denom": "ibc/5973C068568365FFF40DEDCF1A1CB7582B6116B731CD31A12231AE25E20B871F", + "exponent": 0, + "aliases": [ + "eeur" + ] + }, + { + "denom": "eur", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/5973C068568365FFF40DEDCF1A1CB7582B6116B731CD31A12231AE25E20B871F", + "name": "e-Money EUR", + "display": "eur", + "symbol": "EEUR", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "emoney", + "base_denom": "eeur", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-37", + "path": "transfer/channel-37/eeur" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/emoney/images/eeur.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/emoney/images/eeur.svg" + }, + "coingecko_id": "e-money-eur", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:481" + ] + }, + { + "description": "LIKE is the native staking and governance token of LikeCoin chain, a Decentralized Publishing Infrastructure to empower content ownership, authenticity, and provenance.", + "denom_units": [ + { + "denom": "ibc/9989AD6CCA39D1131523DB0617B50F6442081162294B4795E26746292467B525", + "exponent": 0, + "aliases": [ + "nanolike" + ] + }, + { + "denom": "like", + "exponent": 9 + } + ], + "type_asset": "ics20", + "base": "ibc/9989AD6CCA39D1131523DB0617B50F6442081162294B4795E26746292467B525", + "name": "LikeCoin", + "display": "like", + "symbol": "LIKE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "likecoin", + "base_denom": "nanolike", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-53", + "path": "transfer/channel-53/nanolike" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/likecoin/images/like.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/likecoin/images/like.svg" + }, + "coingecko_id": "likecoin", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:553" + ] + }, + { + "description": "The native token of IXO Chain", + "denom_units": [ + { + "denom": "ibc/F3FF7A84A73B62921538642F9797C423D2B4C4ACB3C7FCFFCE7F12AA69909C4B", + "exponent": 0, + "aliases": [ + "uixo" + ] + }, + { + "denom": "ixo", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/F3FF7A84A73B62921538642F9797C423D2B4C4ACB3C7FCFFCE7F12AA69909C4B", + "name": "ixo", + "display": "ixo", + "symbol": "IXO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "impacthub", + "base_denom": "uixo", + "channel_id": "channel-4" + }, + "chain": { + "channel_id": "channel-38", + "path": "transfer/channel-38/uixo" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/impacthub/images/ixo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/impacthub/images/ixo.svg" + }, + "coingecko_id": "ixo", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:558" + ] + }, + { + "description": "The BCNA coin is the transactional token within the BitCanna network, serving the legal cannabis industry through its payment network, supply chain and trust network.", + "denom_units": [ + { + "denom": "ibc/D805F1DA50D31B96E4282C1D4181EDDFB1A44A598BFF5666F4B43E4B8BEA95A5", + "exponent": 0, + "aliases": [ + "ubcna" + ] + }, + { + "denom": "bcna", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/D805F1DA50D31B96E4282C1D4181EDDFB1A44A598BFF5666F4B43E4B8BEA95A5", + "name": "BitCanna", + "display": "bcna", + "symbol": "BCNA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bitcanna", + "base_denom": "ubcna", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-51", + "path": "transfer/channel-51/ubcna" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bitcanna/images/bcna.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bitcanna/images/bcna.svg" + }, + "coingecko_id": "bitcanna", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:571" + ] + }, + { + "description": "BitSong Native Token", + "denom_units": [ + { + "denom": "ibc/4E5444C35610CC76FC94E7F7886B93121175C28262DDFDDE6F84E82BF2425452", + "exponent": 0, + "aliases": [ + "ubtsg" + ] + }, + { + "denom": "btsg", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/4E5444C35610CC76FC94E7F7886B93121175C28262DDFDDE6F84E82BF2425452", + "name": "BitSong", + "display": "btsg", + "symbol": "BTSG", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bitsong", + "base_denom": "ubtsg", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-73", + "path": "transfer/channel-73/ubtsg" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bitsong/images/btsg.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bitsong/images/btsg.svg" + }, + "coingecko_id": "bitsong", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1109" + ] + }, + { + "description": "The native token of Ki Chain", + "denom_units": [ + { + "denom": "ibc/B547DC9B897E7C3AA5B824696110B8E3D2C31E3ED3F02FF363DCBAD82457E07E", + "exponent": 0, + "aliases": [ + "uxki" + ] + }, + { + "denom": "xki", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/B547DC9B897E7C3AA5B824696110B8E3D2C31E3ED3F02FF363DCBAD82457E07E", + "name": "Ki", + "display": "xki", + "symbol": "XKI", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kichain", + "base_denom": "uxki", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-77", + "path": "transfer/channel-77/uxki" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kichain/images/xki.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kichain/images/xki.svg" + }, + "coingecko_id": "ki", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:577" + ] + }, + { + "description": "Panacea is a public blockchain launched by MediBloc, which is the key infrastructure for reinventing the patient-centered healthcare data ecosystem", + "denom_units": [ + { + "denom": "ibc/3BCCC93AD5DF58D11A6F8A05FA8BC801CBA0BA61A981F57E91B8B598BF8061CB", + "exponent": 0, + "aliases": [ + "umed" + ] + }, + { + "denom": "med", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/3BCCC93AD5DF58D11A6F8A05FA8BC801CBA0BA61A981F57E91B8B598BF8061CB", + "name": "Medibloc", + "display": "med", + "symbol": "MED", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "panacea", + "base_denom": "umed", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-82", + "path": "transfer/channel-82/umed" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/panacea/images/med.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/panacea/images/med.svg" + }, + "coingecko_id": "medibloc", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:586" + ] + }, + { + "description": "The staking token of Bostrom", + "denom_units": [ + { + "denom": "ibc/FE2CD1E6828EC0FAB8AF39BAC45BC25B965BA67CCBC50C13A14BD610B0D1E2C4", + "exponent": 0, + "aliases": [ + "boot", + "boot" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/FE2CD1E6828EC0FAB8AF39BAC45BC25B965BA67CCBC50C13A14BD610B0D1E2C4", + "name": "bostrom", + "display": "boot", + "symbol": "BOOT", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bostrom", + "base_denom": "boot", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-95", + "path": "transfer/channel-95/boot" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/boot.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/boot.svg" + }, + "coingecko_id": "bostrom", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/75345531D87BD90BF108BE7240BD721CB2CB0A1F16D4EBA71B09EC3C43E15C8F:1306" + ] + }, + { + "description": "Native Token of Comdex Protocol", + "denom_units": [ + { + "denom": "ibc/EA3E1640F9B1532AB129A571203A0B9F789A7F14BB66E350DCBFA18E1A1931F0", + "exponent": 0, + "aliases": [ + "ucmdx" + ] + }, + { + "denom": "cmdx", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/EA3E1640F9B1532AB129A571203A0B9F789A7F14BB66E350DCBFA18E1A1931F0", + "name": "Comdex", + "display": "cmdx", + "symbol": "CMDX", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "comdex", + "base_denom": "ucmdx", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-87", + "path": "transfer/channel-87/ucmdx" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/comdex/images/cmdx.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/comdex/images/cmdx.svg" + }, + "coingecko_id": "comdex", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:601" + ] + }, + { + "description": "Native token for the cheqd network", + "denom_units": [ + { + "denom": "ibc/7A08C6F11EF0F59EB841B9F788A87EC9F2361C7D9703157EC13D940DC53031FA", + "exponent": 0, + "aliases": [ + "ncheq" + ] + }, + { + "denom": "cheq", + "exponent": 9 + } + ], + "type_asset": "ics20", + "base": "ibc/7A08C6F11EF0F59EB841B9F788A87EC9F2361C7D9703157EC13D940DC53031FA", + "name": "Cheqd", + "display": "cheq", + "symbol": "CHEQ", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "cheqd", + "base_denom": "ncheq", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-108", + "path": "transfer/channel-108/ncheq" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cheqd/images/cheq.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cheqd/images/cheq.svg" + }, + "coingecko_id": "cheqd-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1273" + ] + }, + { + "description": "Native token of the Lum Network", + "denom_units": [ + { + "denom": "ibc/8A34AF0C1943FD0DFCDE9ADBF0B2C9959C45E87E6088EA2FC6ADACD59261B8A2", + "exponent": 0, + "aliases": [ + "ulum" + ] + }, + { + "denom": "lum", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/8A34AF0C1943FD0DFCDE9ADBF0B2C9959C45E87E6088EA2FC6ADACD59261B8A2", + "name": "Lum Network", + "display": "lum", + "symbol": "LUM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "lumnetwork", + "base_denom": "ulum", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-115", + "path": "transfer/channel-115/ulum" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/lumnetwork/images/lum.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/lumnetwork/images/lum.svg" + }, + "coingecko_id": "lum-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:608" + ] + }, + { + "description": "The native token of Vidulum", + "denom_units": [ + { + "denom": "ibc/E7B35499CFBEB0FF5778127ABA4FB2C4B79A6B8D3D831D4379C4048C238796BD", + "exponent": 0, + "aliases": [ + "uvdl" + ] + }, + { + "denom": "vdl", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/E7B35499CFBEB0FF5778127ABA4FB2C4B79A6B8D3D831D4379C4048C238796BD", + "name": "Vidulum", + "display": "vdl", + "symbol": "VDL", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "vidulum", + "base_denom": "uvdl", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-124", + "path": "transfer/channel-124/uvdl" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/vidulum/images/vdl.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/vidulum/images/vdl.svg" + }, + "coingecko_id": "vidulum", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:613" + ] + }, + { + "description": "The native token of Desmos", + "denom_units": [ + { + "denom": "ibc/EA4C0A9F72E2CEDF10D0E7A9A6A22954DB3444910DB5BE980DF59B05A46DAD1C", + "exponent": 0, + "aliases": [ + "udsm" + ] + }, + { + "denom": "dsm", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/EA4C0A9F72E2CEDF10D0E7A9A6A22954DB3444910DB5BE980DF59B05A46DAD1C", + "name": "Desmos", + "display": "dsm", + "symbol": "DSM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "desmos", + "base_denom": "udsm", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-135", + "path": "transfer/channel-135/udsm" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/desmos/images/dsm.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/desmos/images/dsm.svg" + }, + "coingecko_id": "desmos", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:619" + ] + }, + { + "description": "Native token of Dig Chain", + "denom_units": [ + { + "denom": "ibc/307E5C96C8F60D1CBEE269A9A86C0834E1DB06F2B3788AE4F716EDB97A48B97D", + "exponent": 0, + "aliases": [ + "udig" + ] + }, + { + "denom": "dig", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/307E5C96C8F60D1CBEE269A9A86C0834E1DB06F2B3788AE4F716EDB97A48B97D", + "name": "Dig Chain", + "display": "dig", + "symbol": "DIG", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "dig", + "base_denom": "udig", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-128", + "path": "transfer/channel-128/udig" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/dig/images/dig.png" + }, + "coingecko_id": "dig-chain", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:621", + "osmosis-unstable" + ] + }, + { + "description": "Somm Token (SOMM) is the native staking token of the Sommelier Chain", + "denom_units": [ + { + "denom": "ibc/9BBA9A1C257E971E38C1422780CE6F0B0686F0A3085E2D61118D904BFE0F5F5E", + "exponent": 0, + "aliases": [ + "microsomm", + "usomm" + ] + }, + { + "denom": "msomm", + "exponent": 3, + "aliases": [ + "millisomm" + ] + }, + { + "denom": "somm", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/9BBA9A1C257E971E38C1422780CE6F0B0686F0A3085E2D61118D904BFE0F5F5E", + "name": "Sommelier", + "display": "somm", + "symbol": "SOMM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "sommelier", + "base_denom": "usomm", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-165", + "path": "transfer/channel-165/usomm" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sommelier/images/somm.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sommelier/images/somm.svg" + }, + "coingecko_id": "sommelier", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1372" + ] + }, + { + "description": "The native token of BandChain", + "denom_units": [ + { + "denom": "ibc/F867AE2112EFE646EC71A25CD2DFABB8927126AC1E19F1BBF0FF693A4ECA05DE", + "exponent": 0, + "aliases": [ + "uband" + ] + }, + { + "denom": "band", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/F867AE2112EFE646EC71A25CD2DFABB8927126AC1E19F1BBF0FF693A4ECA05DE", + "name": "Band Protocol", + "display": "band", + "symbol": "BAND", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bandchain", + "base_denom": "uband", + "channel_id": "channel-83" + }, + "chain": { + "channel_id": "channel-148", + "path": "transfer/channel-148/uband" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bandchain/images/band.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bandchain/images/band.svg" + }, + "coingecko_id": "band-protocol", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:626" + ] + }, + { + "description": "The native token of Konstellation Network", + "denom_units": [ + { + "denom": "ibc/346786EA82F41FE55FAD14BF69AD8BA9B36985406E43F3CB23E6C45A285A9593", + "exponent": 0, + "aliases": [ + "udarc" + ] + }, + { + "denom": "darc", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/346786EA82F41FE55FAD14BF69AD8BA9B36985406E43F3CB23E6C45A285A9593", + "name": "Konstellation", + "display": "darc", + "symbol": "DARC", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "konstellation", + "base_denom": "udarc", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-171", + "path": "transfer/channel-171/udarc" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/konstellation/images/darc.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/konstellation/images/darc.svg" + }, + "coingecko_id": "darcmatter-coin", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:637" + ] + }, + { + "description": "The native token of Umee", + "denom_units": [ + { + "denom": "ibc/67795E528DF67C5606FC20F824EA39A6EF55BA133F4DC79C90A8C47A0901E17C", + "exponent": 0, + "aliases": [ + "uumee" + ] + }, + { + "denom": "umee", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/67795E528DF67C5606FC20F824EA39A6EF55BA133F4DC79C90A8C47A0901E17C", + "name": "Umee", + "display": "umee", + "symbol": "UMEE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "umee", + "base_denom": "uumee", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-184", + "path": "transfer/channel-184/uumee" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/umee/images/umee.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/umee/images/umee.svg" + }, + "coingecko_id": "umee", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1110" + ] + }, + { + "description": "The native token of Gravity Bridge", + "denom_units": [ + { + "denom": "ibc/E97634A40119F1898989C2A23224ED83FDD0A57EA46B3A094E287288D1672B44", + "exponent": 0, + "aliases": [ + "ugraviton" + ] + }, + { + "denom": "graviton", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/E97634A40119F1898989C2A23224ED83FDD0A57EA46B3A094E287288D1672B44", + "name": "Gravity Bridge", + "display": "graviton", + "symbol": "GRAV", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "gravitybridge", + "base_denom": "ugraviton", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-144", + "path": "transfer/channel-144/ugraviton" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/gravitybridge/images/grav.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/gravitybridge/images/grav.svg" + }, + "coingecko_id": "graviton", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1113" + ] + }, + { + "description": "The native token of Decentr", + "denom_units": [ + { + "denom": "ibc/9BCB27203424535B6230D594553F1659C77EC173E36D9CF4759E7186EE747E84", + "exponent": 0, + "aliases": [ + "udec" + ] + }, + { + "denom": "dec", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/9BCB27203424535B6230D594553F1659C77EC173E36D9CF4759E7186EE747E84", + "name": "Decentr", + "display": "dec", + "symbol": "DEC", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "decentr", + "base_denom": "udec", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-181", + "path": "transfer/channel-181/udec" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/decentr/images/dec.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/decentr/images/dec.svg" + }, + "coingecko_id": "decentr", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:644" + ] + }, + { + "description": "The native token cw20 for Marble DAO on Juno Chain", + "denom_units": [ + { + "denom": "ibc/F6B691D5F7126579DDC87357B09D653B47FDCE0A3383FF33C8D8B544FE29A8A6", + "exponent": 0, + "aliases": [ + "cw20:juno1g2g7ucurum66d42g8k5twk34yegdq8c82858gz0tq2fc75zy7khssgnhjl" + ] + }, + { + "denom": "marble", + "exponent": 3 + } + ], + "type_asset": "ics20", + "address": "juno1g2g7ucurum66d42g8k5twk34yegdq8c82858gz0tq2fc75zy7khssgnhjl", + "base": "ibc/F6B691D5F7126579DDC87357B09D653B47FDCE0A3383FF33C8D8B544FE29A8A6", + "name": "Marble", + "display": "marble", + "symbol": "MARBLE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1g2g7ucurum66d42g8k5twk34yegdq8c82858gz0tq2fc75zy7khssgnhjl", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1g2g7ucurum66d42g8k5twk34yegdq8c82858gz0tq2fc75zy7khssgnhjl" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/marble.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/marble.svg" + }, + "coingecko_id": "marble", + "keywords": [ + "osmosis-price:uosmo:649" + ] + }, + { + "description": "The native governance token of Carbon", + "denom_units": [ + { + "denom": "ibc/8FEFAE6AECF6E2A255585617F781F35A8D5709A545A804482A261C0C9548A9D3", + "exponent": 0, + "aliases": [ + "swth" + ] + }, + { + "denom": "dswth", + "exponent": 8, + "aliases": [ + "SWTH" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/8FEFAE6AECF6E2A255585617F781F35A8D5709A545A804482A261C0C9548A9D3", + "name": "Carbon", + "display": "dswth", + "symbol": "SWTH", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "carbon", + "base_denom": "swth", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-188", + "path": "transfer/channel-188/swth" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/carbon/images/swth.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/carbon/images/swth.svg" + }, + "coingecko_id": "switcheo", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:651" + ] + }, + { + "description": "The native token of Cerberus Chain", + "denom_units": [ + { + "denom": "ibc/41999DF04D9441DAC0DF5D8291DF4333FBCBA810FFD63FDCE34FDF41EF37B6F7", + "exponent": 0, + "aliases": [ + "ucrbrus" + ] + }, + { + "denom": "crbrus", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/41999DF04D9441DAC0DF5D8291DF4333FBCBA810FFD63FDCE34FDF41EF37B6F7", + "name": "Cerberus", + "display": "crbrus", + "symbol": "CRBRUS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "cerberus", + "base_denom": "ucrbrus", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-212", + "path": "transfer/channel-212/ucrbrus" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cerberus/images/crbrus.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cerberus/images/crbrus.svg" + }, + "coingecko_id": "cerberus-2", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:662", + "osmosis-unstable" + ] + }, + { + "description": "The native staking and governance token of the Fetch Hub.", + "denom_units": [ + { + "denom": "ibc/5D1F516200EE8C6B2354102143B78A2DEDA25EDE771AC0F8DC3C1837C8FD4447", + "exponent": 0, + "aliases": [ + "afet" + ] + }, + { + "denom": "fet", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/5D1F516200EE8C6B2354102143B78A2DEDA25EDE771AC0F8DC3C1837C8FD4447", + "name": "Fetch.ai", + "display": "fet", + "symbol": "FET", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "fetchhub", + "base_denom": "afet", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-229", + "path": "transfer/channel-229/afet" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/fetchhub/images/fet.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/fetchhub/images/fet.svg" + }, + "coingecko_id": "fetch-ai", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:681" + ] + }, + { + "description": "The native token of Asset Mantle", + "denom_units": [ + { + "denom": "ibc/CBA34207E969623D95D057D9B11B0C8B32B89A71F170577D982FDDE623813FFC", + "exponent": 0, + "aliases": [ + "umntl" + ] + }, + { + "denom": "mntl", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/CBA34207E969623D95D057D9B11B0C8B32B89A71F170577D982FDDE623813FFC", + "name": "AssetMantle", + "display": "mntl", + "symbol": "MNTL", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "assetmantle", + "base_denom": "umntl", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-232", + "path": "transfer/channel-232/umntl" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/assetmantle/images/mntl.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/assetmantle/images/mntl.svg" + }, + "coingecko_id": "assetmantle", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:686" + ] + }, + { + "description": "The native token cw20 for Neta on Juno Chain", + "denom_units": [ + { + "denom": "ibc/297C64CC42B5A8D8F82FE2EBE208A6FE8F94B86037FA28C4529A23701C228F7A", + "exponent": 0, + "aliases": [ + "cw20:juno168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8s4j5awr" + ] + }, + { + "denom": "neta", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8s4j5awr", + "base": "ibc/297C64CC42B5A8D8F82FE2EBE208A6FE8F94B86037FA28C4529A23701C228F7A", + "name": "Neta", + "display": "neta", + "symbol": "NETA", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8s4j5awr", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8s4j5awr" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/neta.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/neta.svg" + }, + "coingecko_id": "neta", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:631" + ] + }, + { + "description": "The INJ token is the native governance token for the Injective chain.", + "denom_units": [ + { + "denom": "ibc/64BA6E31FE887D66C6F8F31C7B1A80C7CA179239677B4088BB55F5EA07DBE273", + "exponent": 0, + "aliases": [ + "inj" + ] + }, + { + "denom": "INJ", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/64BA6E31FE887D66C6F8F31C7B1A80C7CA179239677B4088BB55F5EA07DBE273", + "name": "Injective", + "display": "INJ", + "symbol": "INJ", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "injective", + "base_denom": "inj", + "channel_id": "channel-8" + }, + "chain": { + "channel_id": "channel-122", + "path": "transfer/channel-122/inj" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.svg" + }, + "coingecko_id": "injective-protocol", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1319" + ] + }, + { + "description": "The KRW stablecoin of Terra Classic.", + "denom_units": [ + { + "denom": "ibc/204A582244FC241613DBB50B04D1D454116C58C4AF7866C186AA0D6EEAD42780", + "exponent": 0, + "aliases": [ + "microkrw", + "ukrw" + ] + }, + { + "denom": "mkrw", + "exponent": 3, + "aliases": [ + "millikrw" + ] + }, + { + "denom": "krt", + "exponent": 6, + "aliases": [ + "krtc" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/204A582244FC241613DBB50B04D1D454116C58C4AF7866C186AA0D6EEAD42780", + "name": "TerraClassicKRW", + "display": "krt", + "symbol": "KRTC", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "terra", + "base_denom": "ukrw", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-72", + "path": "transfer/channel-72/ukrw" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra/images/krt.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra/images/krt.svg" + }, + "coingecko_id": "terrakrw", + "keywords": [ + "osmosis-price:ibc/BE1BB42D4BE3C30D50B68D7C41DB4DFCE9678E8EF8C539F6E6A9345048894FCC:581", + "peg:algorithmic" + ] + }, + { + "description": "TICK coin is the token for the Microtick Price Discovery & Oracle App", + "denom_units": [ + { + "denom": "ibc/655BCEF3CDEBE32863FF281DBBE3B06160339E9897DC9C9C9821932A5F8BA6F8", + "exponent": 0, + "aliases": [ + "utick" + ] + }, + { + "denom": "tick", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/655BCEF3CDEBE32863FF281DBBE3B06160339E9897DC9C9C9821932A5F8BA6F8", + "name": "Microtick", + "display": "tick", + "symbol": "TICK", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "microtick", + "base_denom": "utick", + "channel_id": "channel-16" + }, + "chain": { + "channel_id": "channel-39", + "path": "transfer/channel-39/utick" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/microtick/images/tick.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/microtick/images/tick.svg" + }, + "coingecko_id": "microtick", + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:547", + "osmosis-unstable" + ] + }, + { + "description": "Rowan Token (ROWAN) is the Sifchain Network's native utility token, used as the primary means to govern, provide liquidity, secure the blockchain, incentivize participants, and provide a default mechanism to store and exchange value.", + "denom_units": [ + { + "denom": "ibc/8318FD63C42203D16DDCAF49FE10E8590669B3219A3E87676AC9DA50722687FB", + "exponent": 0, + "aliases": [ + "rowan" + ] + }, + { + "denom": "ROWAN", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/8318FD63C42203D16DDCAF49FE10E8590669B3219A3E87676AC9DA50722687FB", + "name": "Sifchain", + "display": "ROWAN", + "symbol": "ROWAN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "sifchain", + "base_denom": "rowan", + "channel_id": "channel-17" + }, + "chain": { + "channel_id": "channel-47", + "path": "transfer/channel-47/rowan" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sifchain/images/rowan.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sifchain/images/rowan.svg" + }, + "coingecko_id": "sifchain", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:629", + "osmosis-unstable" + ] + }, + { + "description": "The native token of Shentu", + "denom_units": [ + { + "denom": "ibc/7ED954CFFFC06EE8419387F3FC688837FF64EF264DE14219935F724EEEDBF8D3", + "exponent": 0, + "aliases": [ + "uctk" + ] + }, + { + "denom": "ctk", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/7ED954CFFFC06EE8419387F3FC688837FF64EF264DE14219935F724EEEDBF8D3", + "name": "Shentu", + "display": "ctk", + "symbol": "CTK", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "shentu", + "base_denom": "uctk", + "channel_id": "channel-8" + }, + "chain": { + "channel_id": "channel-146", + "path": "transfer/channel-146/uctk" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/shentu/images/ctk.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/shentu/images/ctk.svg" + }, + "coingecko_id": "certik", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1020" + ] + }, + { + "description": "Hope Galaxy is an NFT collection based on its own native Token $HOPE, a cw20 token on Juno chain.", + "denom_units": [ + { + "denom": "ibc/C2A2E9CA95DDD4828B75124B5E27B8401C7D8493BC48353D418CBFC04565899B", + "exponent": 0, + "aliases": [ + "cw20:juno1re3x67ppxap48ygndmrc7har2cnc7tcxtm9nplcas4v0gc3wnmvs3s807z" + ] + }, + { + "denom": "hope", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1re3x67ppxap48ygndmrc7har2cnc7tcxtm9nplcas4v0gc3wnmvs3s807z", + "base": "ibc/C2A2E9CA95DDD4828B75124B5E27B8401C7D8493BC48353D418CBFC04565899B", + "name": "Hope Galaxy", + "display": "hope", + "symbol": "HOPE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1re3x67ppxap48ygndmrc7har2cnc7tcxtm9nplcas4v0gc3wnmvs3s807z", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1re3x67ppxap48ygndmrc7har2cnc7tcxtm9nplcas4v0gc3wnmvs3s807z" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/hope.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/hope.svg" + }, + "coingecko_id": "hope-galaxy", + "keywords": [ + "osmosis-price:uosmo:653" + ] + }, + { + "description": "Racoon aims to simplify accessibility to AI, NFTs and Gambling on the Cosmos Ecosystem", + "denom_units": [ + { + "denom": "ibc/6BDB4C8CCD45033F9604E4B93ED395008A753E01EECD6992E7D1EA23D9D3B788", + "exponent": 0, + "aliases": [ + "cw20:juno1r4pzw8f9z0sypct5l9j906d47z998ulwvhvqe5xdwgy8wf84583sxwh0pa" + ] + }, + { + "denom": "rac", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1r4pzw8f9z0sypct5l9j906d47z998ulwvhvqe5xdwgy8wf84583sxwh0pa", + "base": "ibc/6BDB4C8CCD45033F9604E4B93ED395008A753E01EECD6992E7D1EA23D9D3B788", + "name": "Racoon", + "display": "rac", + "symbol": "juno.RAC", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1r4pzw8f9z0sypct5l9j906d47z998ulwvhvqe5xdwgy8wf84583sxwh0pa", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1r4pzw8f9z0sypct5l9j906d47z998ulwvhvqe5xdwgy8wf84583sxwh0pa" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/rac.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/rac.svg" + }, + "coingecko_id": "racoon", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:669" + ] + }, + { + "description": "Frax is a fractional-algorithmic stablecoin protocol. It aims to provide a highly scalable, decentralized, algorithmic money in place of fixed-supply assets like BTC. Additionally, FXS is the value accrual and governance token of the entire Frax ecosystem.", + "denom_units": [ + { + "denom": "ibc/0E43EDE2E2A3AFA36D0CD38BDDC0B49FECA64FA426A82E102F304E430ECF46EE", + "exponent": 0, + "aliases": [ + "frax-wei" + ] + }, + { + "denom": "frax", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/0E43EDE2E2A3AFA36D0CD38BDDC0B49FECA64FA426A82E102F304E430ECF46EE", + "name": "Frax", + "display": "frax", + "symbol": "FRAX", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Frax Protocol" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x853d955acef822db058eb8505911ed77f175b99e" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "frax-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/frax-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/frax.svg" + }, + "coingecko_id": "frax", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:679", + "peg:hybrid" + ] + }, + { + "description": "Gravity Bridge WBTC", + "denom_units": [ + { + "denom": "ibc/C9B0D48FD2C5B91135F118FF2484551888966590D7BDC20F6A87308DBA670796", + "exponent": 0, + "aliases": [ + "gravity0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599" + ] + }, + { + "denom": "gwbtc", + "exponent": 8 + } + ], + "type_asset": "ics20", + "base": "ibc/C9B0D48FD2C5B91135F118FF2484551888966590D7BDC20F6A87308DBA670796", + "name": "Wrapped Bitcoin (Gravity Bridge)", + "display": "gwbtc", + "symbol": "WBTC.grv", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "bitcoin", + "base_denom": "sat" + }, + "provider": "BitGo, Kyber, and Ren" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599" + }, + "provider": "Gravity Bridge" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gravitybridge", + "base_denom": "gravity0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-144", + "path": "transfer/channel-144/gravity0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/wbtc.grv.svg" + }, + "keywords": [ + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:694" + ] + }, + { + "description": "Gravity Bridge WETH", + "denom_units": [ + { + "denom": "ibc/65381C5F3FD21442283D56925E62EA524DED8B6927F0FF94E21E0020954C40B5", + "exponent": 0, + "aliases": [ + "gravity0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" + ] + }, + { + "denom": "gweth", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/65381C5F3FD21442283D56925E62EA524DED8B6927F0FF94E21E0020954C40B5", + "name": "Ether (Gravity Bridge)", + "display": "gweth", + "symbol": "WETH.grv", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Ethereum" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + }, + "provider": "Gravity Bridge" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gravitybridge", + "base_denom": "gravity0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-144", + "path": "transfer/channel-144/gravity0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/weth.grv.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5:1297" + ] + }, + { + "description": "Gravity Bridge USDC", + "denom_units": [ + { + "denom": "ibc/9F9B07EF9AD291167CF5700628145DE1DEB777C2CFC7907553B24446515F6D0E", + "exponent": 0, + "aliases": [ + "gravity0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + ] + }, + { + "denom": "gusdc", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/9F9B07EF9AD291167CF5700628145DE1DEB777C2CFC7907553B24446515F6D0E", + "name": "USD Coin (Gravity Bridge)", + "display": "gusdc", + "symbol": "USDC.grv", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Circle" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + }, + "provider": "Gravity Bridge" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gravitybridge", + "base_denom": "gravity0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-144", + "path": "transfer/channel-144/gravity0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/usdc.grv.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:872", + "peg:collateralized" + ] + }, + { + "description": "Gravity Bridge DAI", + "denom_units": [ + { + "denom": "ibc/F292A17CF920E3462C816CBE6B042E779F676CAB59096904C4C1C966413E3DF5", + "exponent": 0, + "aliases": [ + "gravity0x6B175474E89094C44Da98b954EedeAC495271d0F" + ] + }, + { + "denom": "gdai", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/F292A17CF920E3462C816CBE6B042E779F676CAB59096904C4C1C966413E3DF5", + "name": "DAI Stablecoin (Gravity Bridge)", + "display": "gdai", + "symbol": "DAI.grv", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "MakerDAO" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x6b175474e89094c44da98b954eedeac495271d0f" + }, + "provider": "Gravity Bridge" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gravitybridge", + "base_denom": "gravity0x6B175474E89094C44Da98b954EedeAC495271d0F", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-144", + "path": "transfer/channel-144/gravity0x6B175474E89094C44Da98b954EedeAC495271d0F" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/dai.grv.svg" + }, + "keywords": [ + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:702", + "peg:collateralized" + ] + }, + { + "description": "Gravity Bridge USDT", + "denom_units": [ + { + "denom": "ibc/71B441E27F1BBB44DD0891BCD370C2794D404D60A4FFE5AECCD9B1E28BC89805", + "exponent": 0, + "aliases": [ + "gravity0xdAC17F958D2ee523a2206206994597C13D831ec7" + ] + }, + { + "denom": "gusdt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/71B441E27F1BBB44DD0891BCD370C2794D404D60A4FFE5AECCD9B1E28BC89805", + "name": "Tether USD (Gravity Bridge)", + "display": "gusdt", + "symbol": "USDT.grv", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Tether" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xdac17f958d2ee523a2206206994597c13d831ec7" + }, + "provider": "Gravity Bridge" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gravitybridge", + "base_denom": "gravity0xdAC17F958D2ee523a2206206994597C13D831ec7", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-144", + "path": "transfer/channel-144/gravity0xdAC17F958D2ee523a2206206994597C13D831ec7" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/usdt.grv.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:818", + "peg:collateralized" + ] + }, + { + "description": "The native token of Marble DEX on Juno Chain", + "denom_units": [ + { + "denom": "ibc/DB9755CB6FE55192948AE074D18FA815E1429D3D374D5BDA8D89623C6CF235C3", + "exponent": 0, + "aliases": [ + "cw20:juno1y9rf7ql6ffwkv02hsgd4yruz23pn4w97p75e2slsnkm0mnamhzysvqnxaq" + ] + }, + { + "denom": "block", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1y9rf7ql6ffwkv02hsgd4yruz23pn4w97p75e2slsnkm0mnamhzysvqnxaq", + "base": "ibc/DB9755CB6FE55192948AE074D18FA815E1429D3D374D5BDA8D89623C6CF235C3", + "name": "Block", + "display": "block", + "symbol": "BLOCK", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1y9rf7ql6ffwkv02hsgd4yruz23pn4w97p75e2slsnkm0mnamhzysvqnxaq", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1y9rf7ql6ffwkv02hsgd4yruz23pn4w97p75e2slsnkm0mnamhzysvqnxaq" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/block.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/block.svg" + }, + "keywords": [ + "osmosis-price:uosmo:691" + ] + }, + { + "description": "Hash is the staking token of the Provenance Blockchain", + "denom_units": [ + { + "denom": "ibc/CE5BFF1D9BADA03BB5CCA5F56939392A761B53A10FBD03B37506669C3218D3B2", + "exponent": 0, + "aliases": [ + "nhash" + ] + }, + { + "denom": "hash", + "exponent": 9 + } + ], + "type_asset": "ics20", + "base": "ibc/CE5BFF1D9BADA03BB5CCA5F56939392A761B53A10FBD03B37506669C3218D3B2", + "name": "Provenance", + "display": "hash", + "symbol": "HASH", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "provenance", + "base_denom": "nhash", + "channel_id": "channel-7" + }, + "chain": { + "channel_id": "channel-222", + "path": "transfer/channel-222/nhash" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/provenance/images/prov.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/provenance/images/prov.svg" + }, + "coingecko_id": "provenance-blockchain", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:693" + ] + }, + { + "description": "GLX is the staking token of the Galaxy Chain", + "denom_units": [ + { + "denom": "ibc/F49DE040EBA5AB2FAD5F660C2A1DDF98A68470FAE82229818BE775EBF3EE79F2", + "exponent": 0, + "aliases": [ + "uglx" + ] + }, + { + "denom": "glx", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/F49DE040EBA5AB2FAD5F660C2A1DDF98A68470FAE82229818BE775EBF3EE79F2", + "name": "Galaxy", + "display": "glx", + "symbol": "GLX", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "galaxy", + "base_denom": "uglx", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-236", + "path": "transfer/channel-236/uglx" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/galaxy/images/glx.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/galaxy/images/glx.svg" + }, + "keywords": [ + "osmosis-price:uosmo:697" + ] + }, + { + "description": "The DAO token to build consensus among Hong Kong People", + "denom_units": [ + { + "denom": "ibc/52E12CF5CA2BB903D84F5298B4BFD725D66CAB95E09AA4FC75B2904CA5485FEB", + "exponent": 0, + "aliases": [ + "dhk", + "cw20:juno1tdjwrqmnztn2j3sj2ln9xnyps5hs48q3ddwjrz7jpv6mskappjys5czd49" + ] + } + ], + "type_asset": "ics20", + "address": "juno1tdjwrqmnztn2j3sj2ln9xnyps5hs48q3ddwjrz7jpv6mskappjys5czd49", + "base": "ibc/52E12CF5CA2BB903D84F5298B4BFD725D66CAB95E09AA4FC75B2904CA5485FEB", + "name": "DHK", + "display": "dhk", + "symbol": "DHK", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1tdjwrqmnztn2j3sj2ln9xnyps5hs48q3ddwjrz7jpv6mskappjys5czd49", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1tdjwrqmnztn2j3sj2ln9xnyps5hs48q3ddwjrz7jpv6mskappjys5czd49" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/dhk.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/dhk.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:695" + ] + }, + { + "description": "Token governance for Junoswap", + "denom_units": [ + { + "denom": "ibc/00B6E60AD3D65CBEF5579AC8AF609527C0B57535B6E32D96C80A735344FD9DCC", + "exponent": 0, + "aliases": [ + "cw20:juno15u3dt79t6sxxa3x3kpkhzsy56edaa5a66wvt3kxmukqjz2sx0hes5sn38g" + ] + }, + { + "denom": "raw", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno15u3dt79t6sxxa3x3kpkhzsy56edaa5a66wvt3kxmukqjz2sx0hes5sn38g", + "base": "ibc/00B6E60AD3D65CBEF5579AC8AF609527C0B57535B6E32D96C80A735344FD9DCC", + "name": "JunoSwap", + "display": "raw", + "symbol": "RAW", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno15u3dt79t6sxxa3x3kpkhzsy56edaa5a66wvt3kxmukqjz2sx0hes5sn38g", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno15u3dt79t6sxxa3x3kpkhzsy56edaa5a66wvt3kxmukqjz2sx0hes5sn38g" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/raw.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/raw.svg" + }, + "coingecko_id": "junoswap-raw-dao", + "keywords": [ + "osmosis-main", + "osmosis-price:uosmo:700" + ] + }, + { + "description": "MEME Token (MEME) is the native staking token of the MEME Chain", + "denom_units": [ + { + "denom": "ibc/67C89B8B0A70C08F093C909A4DD996DD10E0494C87E28FD9A551697BF173D4CA", + "exponent": 0, + "aliases": [ + "umeme" + ] + }, + { + "denom": "meme", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/67C89B8B0A70C08F093C909A4DD996DD10E0494C87E28FD9A551697BF173D4CA", + "name": "MEME", + "display": "meme", + "symbol": "MEME", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "meme", + "base_denom": "umeme", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-238", + "path": "transfer/channel-238/umeme" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/meme/images/meme.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/meme/images/meme.svg" + }, + "coingecko_id": "meme-network", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:701" + ] + }, + { + "description": "Profit sharing token for Another.Software validator. Hold and receive dividends from Another.Software validator commissions!", + "denom_units": [ + { + "denom": "ibc/AA1C80225BCA7B32ED1FC6ABF8B8E899BEB48ECDB4B417FD69873C6D715F97E7", + "exponent": 0, + "aliases": [ + "cw20:juno17wzaxtfdw5em7lc94yed4ylgjme63eh73lm3lutp2rhcxttyvpwsypjm4w" + ] + }, + { + "denom": "asvt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno17wzaxtfdw5em7lc94yed4ylgjme63eh73lm3lutp2rhcxttyvpwsypjm4w", + "base": "ibc/AA1C80225BCA7B32ED1FC6ABF8B8E899BEB48ECDB4B417FD69873C6D715F97E7", + "name": "Another.Software Validator Token", + "display": "asvt", + "symbol": "ASVT", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno17wzaxtfdw5em7lc94yed4ylgjme63eh73lm3lutp2rhcxttyvpwsypjm4w", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno17wzaxtfdw5em7lc94yed4ylgjme63eh73lm3lutp2rhcxttyvpwsypjm4w" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/asvt.png" + }, + "keywords": [ + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:771" + ] + }, + { + "description": "DAO dedicated to building tools on the Juno Network", + "denom_units": [ + { + "denom": "ibc/0CB9DB3441D0D50F35699DEE22B9C965487E83FB2D9F483D1CC5CA34E856C484", + "exponent": 0, + "aliases": [ + "cw20:juno1n7n7d5088qlzlj37e9mgmkhx6dfgtvt02hqxq66lcap4dxnzdhwqfmgng3" + ] + }, + { + "denom": "joe", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1n7n7d5088qlzlj37e9mgmkhx6dfgtvt02hqxq66lcap4dxnzdhwqfmgng3", + "base": "ibc/0CB9DB3441D0D50F35699DEE22B9C965487E83FB2D9F483D1CC5CA34E856C484", + "name": "JoeDAO", + "display": "joe", + "symbol": "JOE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1n7n7d5088qlzlj37e9mgmkhx6dfgtvt02hqxq66lcap4dxnzdhwqfmgng3", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1n7n7d5088qlzlj37e9mgmkhx6dfgtvt02hqxq66lcap4dxnzdhwqfmgng3" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/joe.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:718" + ] + }, + { + "description": "The native staking token of Terra.", + "denom_units": [ + { + "denom": "ibc/785AFEC6B3741100D15E7AF01374E3C4C36F24888E96479B1C33F5C71F364EF9", + "exponent": 0, + "aliases": [ + "uluna" + ] + }, + { + "denom": "luna", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/785AFEC6B3741100D15E7AF01374E3C4C36F24888E96479B1C33F5C71F364EF9", + "name": "Luna", + "display": "luna", + "symbol": "LUNA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "terra2", + "base_denom": "uluna", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-251", + "path": "transfer/channel-251/uluna" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/luna.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/luna.svg" + }, + "coingecko_id": "terra-luna-2", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB:1163" + ] + }, + { + "description": "Native token of Rizon Chain", + "denom_units": [ + { + "denom": "ibc/2716E3F2E146664BEFA9217F1A03BFCEDBCD5178B3C71CACB1A0D7584451D219", + "exponent": 0, + "aliases": [ + "uatolo" + ] + }, + { + "denom": "atolo", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/2716E3F2E146664BEFA9217F1A03BFCEDBCD5178B3C71CACB1A0D7584451D219", + "name": "Rizon", + "display": "atolo", + "symbol": "ATOLO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "rizon", + "base_denom": "uatolo", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-221", + "path": "transfer/channel-221/uatolo" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/rizon/images/atolo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/rizon/images/atolo.svg" + }, + "coingecko_id": "rizon", + "keywords": [ + "osmosis-price:uosmo:729" + ] + }, + { + "description": "Governance token of Kava Lend Protocol", + "denom_units": [ + { + "denom": "ibc/D6C28E07F7343360AC41E15DDD44D79701DDCA2E0C2C41279739C8D4AE5264BC", + "exponent": 0, + "aliases": [ + "hard" + ] + }, + { + "denom": "HARD", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/D6C28E07F7343360AC41E15DDD44D79701DDCA2E0C2C41279739C8D4AE5264BC", + "name": "Kava Hard", + "display": "HARD", + "symbol": "HARD", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kava", + "base_denom": "hard", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-143", + "path": "transfer/channel-143/hard" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/hard.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/hard.svg" + }, + "coingecko_id": "kava-lend" + }, + { + "description": "Governance token of Kava Swap Protocol", + "denom_units": [ + { + "denom": "ibc/70CF1A54E23EA4E480DEDA9E12082D3FD5684C3483CBDCE190C5C807227688C5", + "exponent": 0, + "aliases": [ + "swp" + ] + }, + { + "denom": "SWP", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/70CF1A54E23EA4E480DEDA9E12082D3FD5684C3483CBDCE190C5C807227688C5", + "name": "Kava Swap", + "display": "SWP", + "symbol": "SWP", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kava", + "base_denom": "swp", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-143", + "path": "transfer/channel-143/swp" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/swp.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/swp.svg" + }, + "coingecko_id": "kava-swap" + }, + { + "description": "A blockchain-based middleware, acting as a bridge between cryptocurrency smart contracts, data feeds, APIs and traditional bank account payments.", + "denom_units": [ + { + "denom": "ibc/D3327A763C23F01EC43D1F0DB3CEFEC390C362569B6FD191F40A5192F8960049", + "exponent": 0, + "aliases": [ + "link-wei" + ] + }, + { + "denom": "link", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/D3327A763C23F01EC43D1F0DB3CEFEC390C362569B6FD191F40A5192F8960049", + "name": "Chainlink", + "display": "link", + "symbol": "LINK", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x514910771af9ca656af840dff83e8264ecf986ca" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "link-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/link-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/link.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/link.svg" + }, + "coingecko_id": "chainlink", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:731" + ] + }, + { + "description": "L1 coin is the GenesisL1 blockchain utility, governance and EVM token", + "denom_units": [ + { + "denom": "ibc/F16FDC11A7662B86BC0B9CE61871CBACF7C20606F95E86260FD38915184B75B4", + "exponent": 0, + "aliases": [ + "el1" + ] + }, + { + "denom": "l1", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/F16FDC11A7662B86BC0B9CE61871CBACF7C20606F95E86260FD38915184B75B4", + "name": "GenesisL1", + "display": "l1", + "symbol": "L1", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "genesisl1", + "base_denom": "el1", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-253", + "path": "transfer/channel-253/el1" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/genesisl1/images/l1.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/genesisl1/images/l1.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:732" + ] + }, + { + "description": "Aave is an Open Source and Non-Custodial protocol to earn interest on deposits & borrow assets. It also features access to highly innovative flash loans, which let developers borrow instantly and easily; no collateral needed. With 16 different assets, 5 of which are stablecoins.", + "denom_units": [ + { + "denom": "ibc/384E5DD50BDE042E1AAF51F312B55F08F95BC985C503880189258B4D9374CBBE", + "exponent": 0, + "aliases": [ + "aave-wei" + ] + }, + { + "denom": "aave", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/384E5DD50BDE042E1AAF51F312B55F08F95BC985C503880189258B4D9374CBBE", + "name": "Aave", + "display": "aave", + "symbol": "AAVE", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "aave-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/aave-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/aave.svg" + }, + "coingecko_id": "aave", + "keywords": [ + "osmosis-unlisted" + ] + }, + { + "description": "ApeCoin found new expression in web3 through art, gaming, entertainment, and events. APE is a token made to support what’s next, controlled, and built on by the community. It will serve as a decentralized protocol layer for community-led initiatives that drive culture forward into the metaverse.", + "denom_units": [ + { + "denom": "ibc/F83CC6471DA4D4B508F437244F10B9E4C68975344E551A2DEB6B8617AB08F0D4", + "exponent": 0, + "aliases": [ + "ape-wei" + ] + }, + { + "denom": "ape", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/F83CC6471DA4D4B508F437244F10B9E4C68975344E551A2DEB6B8617AB08F0D4", + "name": "ApeCoin", + "display": "ape", + "symbol": "APE", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x4d224452801aced8b2f0aebe155379bb5d594381" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "ape-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/ape-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/ape.svg" + }, + "coingecko_id": "apecoin", + "keywords": [ + "osmosis-unlisted" + ] + }, + { + "description": "Maker is a Decentralized Autonomous Organization that creates and insures the dai stablecoin on the Ethereum blockchain", + "denom_units": [ + { + "denom": "ibc/D27DDDF34BB47E5D5A570742CC667DE53277867116CCCA341F27785E899A70F3", + "exponent": 0, + "aliases": [ + "mkr-wei" + ] + }, + { + "denom": "mkr", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/D27DDDF34BB47E5D5A570742CC667DE53277867116CCCA341F27785E899A70F3", + "name": "Maker", + "display": "mkr", + "symbol": "MKR", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "mkr-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/mkr-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/mkr.svg" + }, + "coingecko_id": "maker", + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/0CD3A0285E1341859B5E86B6AB7682F023D03E97607CCC1DC95706411D866DF7:734" + ] + }, + { + "description": "RAI is a non-pegged, ETH-backed stable asset. It is useful as more 'stable' collateral for other DeFi protocols (compared to ETH or BTC) or as a stable asset with an embedded interest rate.", + "denom_units": [ + { + "denom": "ibc/BD796662F8825327D41C96355DF62045A5BA225BAE31C0A86289B9D88ED3F44E", + "exponent": 0, + "aliases": [ + "rai-wei" + ] + }, + { + "denom": "rai", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/BD796662F8825327D41C96355DF62045A5BA225BAE31C0A86289B9D88ED3F44E", + "name": "Rai Reflex Index", + "display": "rai", + "symbol": "RAI", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "RAI Finance" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x03ab458634910aad20ef5f1c8ee96f1d6ac54919" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "rai-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/rai-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/rai.svg" + }, + "coingecko_id": "rai", + "keywords": [ + "osmosis-unlisted" + ] + }, + { + "description": "SHIBA INU is a 100% decentralized community experiment with it claims that 1/2 the tokens have been sent to Vitalik and the other half were locked to a Uniswap pool and the keys burned.", + "denom_units": [ + { + "denom": "ibc/19305E20681911F14D1FB275E538CDE524C3BF88CF9AE5D5F78F4D4DA05E85B2", + "exponent": 0, + "aliases": [ + "shib-wei" + ] + }, + { + "denom": "shib", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/19305E20681911F14D1FB275E538CDE524C3BF88CF9AE5D5F78F4D4DA05E85B2", + "name": "Shiba Inu", + "display": "shib", + "symbol": "SHIB", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "shib-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/shib-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/shib.svg" + }, + "coingecko_id": "shiba-inu", + "keywords": [ + "osmosis-price:uosmo:880", + "osmosis-unlisted" + ] + }, + { + "description": "The native staking and governance token of the Kujira chain.", + "denom_units": [ + { + "denom": "ibc/BB6BCDB515050BAE97516111873CCD7BCF1FD0CCB723CC12F3C4F704D6C646CE", + "exponent": 0, + "aliases": [ + "ukuji" + ] + }, + { + "denom": "kuji", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/BB6BCDB515050BAE97516111873CCD7BCF1FD0CCB723CC12F3C4F704D6C646CE", + "name": "Kujira", + "display": "kuji", + "symbol": "KUJI", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kujira", + "base_denom": "ukuji", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-259", + "path": "transfer/channel-259/ukuji" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/kuji.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/kuji.svg" + }, + "coingecko_id": "kujira", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB:1161" + ] + }, + { + "description": "The native token of Tgrade", + "denom_units": [ + { + "denom": "ibc/1E09CB0F506ACF12FDE4683FB6B34DA62FB4BE122641E0D93AAF98A87675676C", + "exponent": 0, + "aliases": [ + "utgd" + ] + }, + { + "denom": "tgd", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/1E09CB0F506ACF12FDE4683FB6B34DA62FB4BE122641E0D93AAF98A87675676C", + "name": "Tgrade", + "display": "tgd", + "symbol": "TGD", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "tgrade", + "base_denom": "utgd", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-263", + "path": "transfer/channel-263/utgd" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/tgrade/images/tgrade-symbol-gradient.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/tgrade/images/tgrade-symbol-gradient.svg" + }, + "coingecko_id": "tgrade", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:769" + ] + }, + { + "description": "Echelon - a scalable EVM on Cosmos, built on Proof-of-Stake with fast-finality that prioritizes interoperability and novel economics", + "denom_units": [ + { + "denom": "ibc/47EE224A9B33CF0ABEAC82106E52F0F6E8D8CEC5BA80B9D9A6F55172CBB0177D", + "exponent": 0, + "aliases": [ + "aechelon" + ] + }, + { + "denom": "echelon", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/47EE224A9B33CF0ABEAC82106E52F0F6E8D8CEC5BA80B9D9A6F55172CBB0177D", + "name": "Echelon", + "display": "echelon", + "symbol": "ECH", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "echelon", + "base_denom": "aechelon", + "channel_id": "channel-11" + }, + "chain": { + "channel_id": "channel-403", + "path": "transfer/channel-403/aechelon" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/echelon/images/ech.svg" + }, + "coingecko_id": "echelon", + "keywords": [ + "osmosis-price:uosmo:848" + ] + }, + { + "description": "Staking and governance token for ODIN Protocol", + "denom_units": [ + { + "denom": "ibc/C360EF34A86D334F625E4CBB7DA3223AEA97174B61F35BB3758081A8160F7D9B", + "exponent": 0, + "aliases": [ + "loki" + ] + }, + { + "denom": "odin", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/C360EF34A86D334F625E4CBB7DA3223AEA97174B61F35BB3758081A8160F7D9B", + "name": "Odin Protocol", + "display": "odin", + "symbol": "ODIN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "odin", + "base_denom": "loki", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-258", + "path": "transfer/channel-258/loki" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/odin.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/odin.svg" + }, + "coingecko_id": "odin-protocol", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:777" + ] + }, + { + "description": "GEO token for ODIN Protocol", + "denom_units": [ + { + "denom": "ibc/9B6FBABA36BB4A3BF127AE5E96B572A5197FD9F3111D895D8919B07BC290764A", + "exponent": 0, + "aliases": [ + "mGeo" + ] + }, + { + "denom": "geo", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/9B6FBABA36BB4A3BF127AE5E96B572A5197FD9F3111D895D8919B07BC290764A", + "name": "GEO", + "display": "geo", + "symbol": "GEO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "odin", + "base_denom": "mGeo", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-258", + "path": "transfer/channel-258/mGeo" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/geo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/geo.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:787" + ] + }, + { + "description": "O9W token for ODIN Protocol", + "denom_units": [ + { + "denom": "ibc/0CD46223FEABD2AEAAAF1F057D01E63BCA79B7D4BD6B68F1EB973A987344695D", + "exponent": 0, + "aliases": [ + "mO9W" + ] + }, + { + "denom": "O9W", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/0CD46223FEABD2AEAAAF1F057D01E63BCA79B7D4BD6B68F1EB973A987344695D", + "name": "O9W", + "display": "O9W", + "symbol": "O9W", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "odin", + "base_denom": "mO9W", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-258", + "path": "transfer/channel-258/mO9W" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/o9w.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/o9w.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:805" + ] + }, + { + "description": "ELEVENPARIS loyalty token on KiChain", + "denom_units": [ + { + "denom": "ibc/AD185F62399F770CCCE8A36A180A77879FF6C26A0398BD3D2A74E087B0BFA121", + "exponent": 0, + "aliases": [ + "cw20:ki1dt3lk455ed360pna38fkhqn0p8y44qndsr77qu73ghyaz2zv4whq83mwdy" + ] + }, + { + "denom": "lvn", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "ki1dt3lk455ed360pna38fkhqn0p8y44qndsr77qu73ghyaz2zv4whq83mwdy", + "base": "ibc/AD185F62399F770CCCE8A36A180A77879FF6C26A0398BD3D2A74E087B0BFA121", + "name": "LVN", + "display": "lvn", + "symbol": "kichain.LVN", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "kichain", + "base_denom": "cw20:ki1dt3lk455ed360pna38fkhqn0p8y44qndsr77qu73ghyaz2zv4whq83mwdy", + "port": "wasm.ki1hzz0s0ucrhdp6tue2lxk3c03nj6f60qy463we7lgx0wudd72ctmsd9kgha", + "channel_id": "channel-18" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-261", + "path": "transfer/channel-261/cw20:ki1dt3lk455ed360pna38fkhqn0p8y44qndsr77qu73ghyaz2zv4whq83mwdy" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kichain/images/lvn.png" + }, + "coingecko_id": "lvn", + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/B547DC9B897E7C3AA5B824696110B8E3D2C31E3ED3F02FF363DCBAD82457E07E:772" + ] + }, + { + "description": "Glimmer (GLMR) is the utility token of the Moonbeam Network, Moonbeam’s primary deployment on the Polkadot network that serves as a developer-friendly parachain.", + "denom_units": [ + { + "denom": "ibc/1E26DB0E5122AED464D98462BD384FCCB595732A66B3970AE6CE0B58BAE0FC49", + "exponent": 0, + "aliases": [ + "wglmr-wei" + ] + }, + { + "denom": "wglmr", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/1E26DB0E5122AED464D98462BD384FCCB595732A66B3970AE6CE0B58BAE0FC49", + "name": "Moonbeam", + "display": "wglmr", + "symbol": "GLMR", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "moonbeam", + "base_denom": "Wei" + }, + "provider": "Moonbeam" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "moonbeam", + "base_denom": "0xacc15dc74880c9944775448304b263d191c6077f" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "wglmr-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/wglmr-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/moonbeam/images/glmr.svg" + }, + "coingecko_id": "moonbeam", + "keywords": [ + "osmosis-price:uosmo:825" + ] + }, + { + "description": "DeFi gaming platform built on Juno", + "denom_units": [ + { + "denom": "ibc/52C57FCA7D6854AA178E7A183DDBE4EF322B904B1D719FC485F6FFBC1F72A19E", + "exponent": 0, + "aliases": [ + "cw20:juno1j0a9ymgngasfn3l5me8qpd53l5zlm9wurfdk7r65s5mg6tkxal3qpgf5se" + ] + }, + { + "denom": "glto", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1j0a9ymgngasfn3l5me8qpd53l5zlm9wurfdk7r65s5mg6tkxal3qpgf5se", + "base": "ibc/52C57FCA7D6854AA178E7A183DDBE4EF322B904B1D719FC485F6FFBC1F72A19E", + "name": "Gelotto", + "display": "glto", + "symbol": "GLTO", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1j0a9ymgngasfn3l5me8qpd53l5zlm9wurfdk7r65s5mg6tkxal3qpgf5se", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1j0a9ymgngasfn3l5me8qpd53l5zlm9wurfdk7r65s5mg6tkxal3qpgf5se" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/glto.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/glto.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:778" + ] + }, + { + "description": "Gelotto Year 1 Grand Prize Token", + "denom_units": [ + { + "denom": "ibc/7C781B4C2082CD62129A972D47486D78EC17155C299270E3C89348EA026BEAF8", + "exponent": 0, + "aliases": [ + "cw20:juno1gz8cf86zr4vw9cjcyyv432vgdaecvr9n254d3uwwkx9rermekddsxzageh" + ] + }, + { + "denom": "gkey", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1gz8cf86zr4vw9cjcyyv432vgdaecvr9n254d3uwwkx9rermekddsxzageh", + "base": "ibc/7C781B4C2082CD62129A972D47486D78EC17155C299270E3C89348EA026BEAF8", + "name": "GKey", + "display": "gkey", + "symbol": "GKEY", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1gz8cf86zr4vw9cjcyyv432vgdaecvr9n254d3uwwkx9rermekddsxzageh", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1gz8cf86zr4vw9cjcyyv432vgdaecvr9n254d3uwwkx9rermekddsxzageh" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/gkey.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/gkey.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:790" + ] + }, + { + "description": "The native token of Crescent", + "denom_units": [ + { + "denom": "ibc/5A7C219BA5F7582B99629BA3B2A01A61BFDA0F6FD1FE95B5366F7334C4BC0580", + "exponent": 0, + "aliases": [ + "ucre" + ] + }, + { + "denom": "cre", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/5A7C219BA5F7582B99629BA3B2A01A61BFDA0F6FD1FE95B5366F7334C4BC0580", + "name": "Crescent", + "display": "cre", + "symbol": "CRE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "crescent", + "base_denom": "ucre", + "channel_id": "channel-9" + }, + "chain": { + "channel_id": "channel-297", + "path": "transfer/channel-297/ucre" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/crescent/images/cre.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/crescent/images/cre.svg" + }, + "coingecko_id": "crescent-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:786" + ] + }, + { + "description": "The native token of LumenX Network", + "denom_units": [ + { + "denom": "ibc/FFA652599C77E853F017193E36B5AB2D4D9AFC4B54721A74904F80C9236BF3B7", + "exponent": 0, + "aliases": [ + "ulumen" + ] + }, + { + "denom": "lumen", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/FFA652599C77E853F017193E36B5AB2D4D9AFC4B54721A74904F80C9236BF3B7", + "name": "LumenX", + "display": "lumen", + "symbol": "LUMEN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "lumenx", + "base_denom": "ulumen", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-286", + "path": "transfer/channel-286/ulumen" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/lumenx/images/lumen.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/lumenx/images/lumen.svg" + }, + "keywords": [ + "osmosis-price:uosmo:788", + "osmosis-unstable" + ] + }, + { + "description": "The native token of Oraichain", + "denom_units": [ + { + "denom": "ibc/161D7D62BAB3B9C39003334F1671208F43C06B643CC9EDBBE82B64793C857F1D", + "exponent": 0, + "aliases": [ + "orai" + ] + }, + { + "denom": "ORAI", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/161D7D62BAB3B9C39003334F1671208F43C06B643CC9EDBBE82B64793C857F1D", + "name": "Oraichain", + "display": "ORAI", + "symbol": "ORAI", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "oraichain", + "base_denom": "orai", + "channel_id": "channel-13" + }, + "chain": { + "channel_id": "channel-216", + "path": "transfer/channel-216/orai" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/oraichain/images/orai-white.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/oraichain/images/orai-white.svg" + }, + "coingecko_id": "oraichain-token", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:799" + ] + }, + { + "description": "The native token of the Cudos blockchain", + "denom_units": [ + { + "denom": "ibc/E09ED39F390EC51FA9F3F69BEA08B5BBE6A48B3057B2B1C3467FAAE9E58B021B", + "exponent": 0, + "aliases": [ + "attocudos", + "acudos" + ] + }, + { + "denom": "cudos", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/E09ED39F390EC51FA9F3F69BEA08B5BBE6A48B3057B2B1C3467FAAE9E58B021B", + "name": "Cudos", + "display": "cudos", + "symbol": "CUDOS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "cudos", + "base_denom": "acudos", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-298", + "path": "transfer/channel-298/acudos" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cudos/images/cudos.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cudos/images/cudos.svg" + }, + "coingecko_id": "cudos", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:796" + ] + }, + { + "description": "The native stablecoin of Kava", + "denom_units": [ + { + "denom": "ibc/C78F65E1648A3DFE0BAEB6C4CDA69CC2A75437F1793C0E6386DFDA26393790AE", + "exponent": 0, + "aliases": [ + "usdx" + ] + }, + { + "denom": "USDX", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/C78F65E1648A3DFE0BAEB6C4CDA69CC2A75437F1793C0E6386DFDA26393790AE", + "name": "Kava USDX", + "display": "USDX", + "symbol": "USDX", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kava", + "base_denom": "usdx", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-143", + "path": "transfer/channel-143/usdx" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/usdx.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/usdx.svg" + }, + "coingecko_id": "usdx", + "keywords": [ + "osmosis-price:uosmo:1390" + ] + }, + { + "description": "BLD is the token used to secure the Agoric chain through staking and to backstop Inter Protocol.", + "denom_units": [ + { + "denom": "ibc/2DA9C149E9AD2BD27FEFA635458FB37093C256C1A940392634A16BEA45262604", + "exponent": 0, + "aliases": [ + "ubld" + ] + }, + { + "denom": "bld", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/2DA9C149E9AD2BD27FEFA635458FB37093C256C1A940392634A16BEA45262604", + "name": "Agoric", + "display": "bld", + "symbol": "BLD", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "agoric", + "base_denom": "ubld", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-320", + "path": "transfer/channel-320/ubld" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.svg" + }, + "coingecko_id": "agoric", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1104" + ] + }, + { + "description": "IST is the stable token used by the Agoric chain for execution fees and commerce.", + "denom_units": [ + { + "denom": "ibc/92BE0717F4678905E53F4E45B2DED18BC0CB97BF1F8B6A25AFEDF3D5A879B4D5", + "exponent": 0, + "aliases": [ + "uist" + ] + }, + { + "denom": "ist", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/92BE0717F4678905E53F4E45B2DED18BC0CB97BF1F8B6A25AFEDF3D5A879B4D5", + "name": "Inter Stable Token", + "display": "ist", + "symbol": "IST", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "agoric", + "base_denom": "uist", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-320", + "path": "transfer/channel-320/uist" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/ist.svg" + }, + "coingecko_id": "inter-stable-token", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1224" + ] + }, + { + "description": "Staking derivative seJUNO for staked JUNO", + "denom_units": [ + { + "denom": "ibc/C6B6BFCB6EE49A7CAB1A7E7B021DE35B99D525AC660844952F0F6C78DCB2A57B", + "exponent": 0, + "aliases": [ + "cw20:juno1dd0k0um5rqncfueza62w9sentdfh3ec4nw4aq4lk5hkjl63vljqscth9gv" + ] + }, + { + "denom": "sejuno", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1dd0k0um5rqncfueza62w9sentdfh3ec4nw4aq4lk5hkjl63vljqscth9gv", + "base": "ibc/C6B6BFCB6EE49A7CAB1A7E7B021DE35B99D525AC660844952F0F6C78DCB2A57B", + "name": "StakeEasy seJUNO", + "display": "sejuno", + "symbol": "SEJUNO", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1dd0k0um5rqncfueza62w9sentdfh3ec4nw4aq4lk5hkjl63vljqscth9gv", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1dd0k0um5rqncfueza62w9sentdfh3ec4nw4aq4lk5hkjl63vljqscth9gv" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/sejuno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/sejuno.svg" + }, + "coingecko_id": "stakeeasy-juno-derivative", + "keywords": [ + "osmosis-price:ibc/46B44899322F3CD854D2D46DEEF881958467CDD4B3B10086DA49296BBED94BED:807" + ] + }, + { + "description": "Staking derivative bJUNO for staked JUNO", + "denom_units": [ + { + "denom": "ibc/C2DF5C3949CA835B221C575625991F09BAB4E48FB9C11A4EE357194F736111E3", + "exponent": 0, + "aliases": [ + "cw20:juno1wwnhkagvcd3tjz6f8vsdsw5plqnw8qy2aj3rrhqr2axvktzv9q2qz8jxn3" + ] + }, + { + "denom": "bjuno", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1wwnhkagvcd3tjz6f8vsdsw5plqnw8qy2aj3rrhqr2axvktzv9q2qz8jxn3", + "base": "ibc/C2DF5C3949CA835B221C575625991F09BAB4E48FB9C11A4EE357194F736111E3", + "name": "StakeEasy bJUNO", + "display": "bjuno", + "symbol": "BJUNO", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1wwnhkagvcd3tjz6f8vsdsw5plqnw8qy2aj3rrhqr2axvktzv9q2qz8jxn3", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1wwnhkagvcd3tjz6f8vsdsw5plqnw8qy2aj3rrhqr2axvktzv9q2qz8jxn3" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/bjuno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/bjuno.svg" + }, + "coingecko_id": "stakeeasy-bjuno" + }, + { + "description": "The native token of Stride", + "denom_units": [ + { + "denom": "ibc/A8CA5EE328FA10C9519DF6057DA1F69682D28F7D0F5CCC7ECB72E3DCA2D157A4", + "exponent": 0, + "aliases": [ + "ustrd" + ] + }, + { + "denom": "strd", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/A8CA5EE328FA10C9519DF6057DA1F69682D28F7D0F5CCC7ECB72E3DCA2D157A4", + "name": "Stride", + "display": "strd", + "symbol": "STRD", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "ustrd", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/ustrd" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/strd.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/strd.svg" + }, + "coingecko_id": "stride", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1098" + ] + }, + { + "description": "The native staking and governance token of the Cosmos Hub.", + "denom_units": [ + { + "denom": "ibc/C140AFD542AE77BD7DCC83F13FDD8C5E5BB8C4929785E6EC2F4C636F98F17901", + "exponent": 0, + "aliases": [ + "stuatom" + ] + }, + { + "denom": "statom", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/C140AFD542AE77BD7DCC83F13FDD8C5E5BB8C4929785E6EC2F4C636F98F17901", + "name": "Stride Staked ATOM", + "display": "statom", + "symbol": "stATOM", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "cosmoshub", + "base_denom": "uatom" + }, + "provider": "Stride" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "stuatom", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/stuatom" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/statom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/statom.svg" + }, + "coingecko_id": "stride-staked-atom", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:1136" + ] + }, + { + "description": "The native token of Stargaze", + "denom_units": [ + { + "denom": "ibc/5DD1F95ED336014D00CE2520977EC71566D282F9749170ADC83A392E0EA7426A", + "exponent": 0, + "aliases": [ + "stustars" + ] + }, + { + "denom": "ststars", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/5DD1F95ED336014D00CE2520977EC71566D282F9749170ADC83A392E0EA7426A", + "name": "Stride Staked STARS", + "display": "ststars", + "symbol": "stSTARS", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "stargaze", + "base_denom": "ustars" + }, + "provider": "Stride" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "stustars", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/stustars" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/ststars.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/ststars.svg" + }, + "coingecko_id": "stride-staked-stars", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4:1397" + ] + }, + { + "description": "Solarbank DAO Governance Token for speeding up the shift to renewable and green energy", + "denom_units": [ + { + "denom": "ibc/C3FC4DED273E7D1DD2E7BAA3317EC9A53CD3252B577AA33DC00D9DF2BDF3ED5C", + "exponent": 0, + "aliases": [ + "cw20:juno159q8t5g02744lxq8lfmcn6f78qqulq9wn3y9w7lxjgkz4e0a6kvsfvapse" + ] + }, + { + "denom": "solar", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno159q8t5g02744lxq8lfmcn6f78qqulq9wn3y9w7lxjgkz4e0a6kvsfvapse", + "base": "ibc/C3FC4DED273E7D1DD2E7BAA3317EC9A53CD3252B577AA33DC00D9DF2BDF3ED5C", + "name": "Solarbank DAO", + "display": "solar", + "symbol": "SOLAR", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno159q8t5g02744lxq8lfmcn6f78qqulq9wn3y9w7lxjgkz4e0a6kvsfvapse", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno159q8t5g02744lxq8lfmcn6f78qqulq9wn3y9w7lxjgkz4e0a6kvsfvapse" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/solar.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/solar.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:941" + ] + }, + { + "description": "StakeEasy governance token", + "denom_units": [ + { + "denom": "ibc/18A676A074F73B9B42DA4F9DFC8E5AEF334C9A6636DDEC8D34682F52F1DECDF6", + "exponent": 0, + "aliases": [ + "cw20:juno19rqljkh95gh40s7qdx40ksx3zq5tm4qsmsrdz9smw668x9zdr3lqtg33mf" + ] + }, + { + "denom": "seasy", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno19rqljkh95gh40s7qdx40ksx3zq5tm4qsmsrdz9smw668x9zdr3lqtg33mf", + "base": "ibc/18A676A074F73B9B42DA4F9DFC8E5AEF334C9A6636DDEC8D34682F52F1DECDF6", + "name": "StakeEasy SEASY", + "display": "seasy", + "symbol": "SEASY", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno19rqljkh95gh40s7qdx40ksx3zq5tm4qsmsrdz9smw668x9zdr3lqtg33mf", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno19rqljkh95gh40s7qdx40ksx3zq5tm4qsmsrdz9smw668x9zdr3lqtg33mf" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/seasy.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/seasy.svg" + }, + "keywords": [ + "osmosis-price:uosmo:808" + ] + }, + { + "description": "The native token of Axelar", + "denom_units": [ + { + "denom": "ibc/903A61A498756EA560B85A85132D3AEE21B5DEDD41213725D22ABF276EA6945E", + "exponent": 0, + "aliases": [ + "uaxl" + ] + }, + { + "denom": "axl", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/903A61A498756EA560B85A85132D3AEE21B5DEDD41213725D22ABF276EA6945E", + "name": "Axelar", + "display": "axl", + "symbol": "AXL", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "uaxl", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/uaxl" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/axl.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/axl.svg" + }, + "coingecko_id": "axelar", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:812" + ] + }, + { + "description": "REBUS, the native coin of the Rebus chain.", + "denom_units": [ + { + "denom": "ibc/A1AC7F9EE2F643A68E3A35BCEB22040120BEA4059773BB56985C76BDFEBC71D9", + "exponent": 0, + "aliases": [ + "arebus" + ] + }, + { + "denom": "rebus", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/A1AC7F9EE2F643A68E3A35BCEB22040120BEA4059773BB56985C76BDFEBC71D9", + "name": "Rebus", + "display": "rebus", + "symbol": "REBUS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "rebus", + "base_denom": "arebus", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-355", + "path": "transfer/channel-355/arebus" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/rebus/images/rebus.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/rebus/images/rebus.svg" + }, + "coingecko_id": "rebus", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:813" + ] + }, + { + "description": "The native token of Teritori", + "denom_units": [ + { + "denom": "ibc/EB7FB9C8B425F289B63703413327C2051030E848CE4EAAEA2E51199D6D39D3EC", + "exponent": 0, + "aliases": [ + "utori" + ] + }, + { + "denom": "tori", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/EB7FB9C8B425F289B63703413327C2051030E848CE4EAAEA2E51199D6D39D3EC", + "name": "Teritori", + "display": "tori", + "symbol": "TORI", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "teritori", + "base_denom": "utori", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-362", + "path": "transfer/channel-362/utori" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/teritori/images/utori.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/teritori/images/utori.svg" + }, + "coingecko_id": "teritori", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:816" + ] + }, + { + "description": "The native token of JUNO Chain", + "denom_units": [ + { + "denom": "ibc/84502A75BCA4A5F68D464C00B3F610CE2585847D59B52E5FFB7C3C9D2DDCD3FE", + "exponent": 0, + "aliases": [ + "stujuno" + ] + }, + { + "denom": "stjuno", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/84502A75BCA4A5F68D464C00B3F610CE2585847D59B52E5FFB7C3C9D2DDCD3FE", + "name": "Stride Staked JUNO", + "display": "stjuno", + "symbol": "stJUNO", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "juno", + "base_denom": "ujuno" + }, + "provider": "Stride" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "stujuno", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/stujuno" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stjuno.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stjuno.svg" + }, + "coingecko_id": "stride-staked-juno", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/46B44899322F3CD854D2D46DEEF881958467CDD4B3B10086DA49296BBED94BED:817" + ] + }, + { + "description": "The native token of Osmosis", + "denom_units": [ + { + "denom": "ibc/D176154B0C63D1F9C6DCFB4F70349EBF2E2B5A87A05902F57A6AE92B863E9AEC", + "exponent": 0, + "aliases": [ + "stuosmo" + ] + }, + { + "denom": "stosmo", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/D176154B0C63D1F9C6DCFB4F70349EBF2E2B5A87A05902F57A6AE92B863E9AEC", + "name": "Stride Staked OSMO", + "display": "stosmo", + "symbol": "stOSMO", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "osmosis", + "base_denom": "uosmo" + }, + "provider": "Stride" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "stuosmo", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/stuosmo" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stosmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stosmo.svg" + }, + "coingecko_id": "stride-staked-osmo", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1252" + ] + }, + { + "description": "The native token cw20 for MuseDAO on Juno Chain", + "denom_units": [ + { + "denom": "ibc/6B982170CE024689E8DD0E7555B129B488005130D4EDA426733D552D10B36D8F", + "exponent": 0, + "aliases": [ + "cw20:juno1p8x807f6h222ur0vssqy3qk6mcpa40gw2pchquz5atl935t7kvyq894ne3" + ] + }, + { + "denom": "muse", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1p8x807f6h222ur0vssqy3qk6mcpa40gw2pchquz5atl935t7kvyq894ne3", + "base": "ibc/6B982170CE024689E8DD0E7555B129B488005130D4EDA426733D552D10B36D8F", + "name": "MuseDAO", + "display": "muse", + "symbol": "MUSE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1p8x807f6h222ur0vssqy3qk6mcpa40gw2pchquz5atl935t7kvyq894ne3", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1p8x807f6h222ur0vssqy3qk6mcpa40gw2pchquz5atl935t7kvyq894ne3" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/muse.png" + } + }, + { + "description": "The native token of Lambda", + "denom_units": [ + { + "denom": "ibc/80825E8F04B12D914ABEADB1F4D39C04755B12C8402F6876EE3168450C0A90BB", + "exponent": 0, + "aliases": [ + "ulamb" + ] + }, + { + "denom": "lamb", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/80825E8F04B12D914ABEADB1F4D39C04755B12C8402F6876EE3168450C0A90BB", + "name": "Lambda", + "display": "lamb", + "symbol": "LAMB", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "lambda", + "base_denom": "ulamb", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-378", + "path": "transfer/channel-378/ulamb" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/lambda/images/lambda.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/lambda/images/lambda.svg" + }, + "coingecko_id": "lambda", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:826" + ] + }, + { + "description": "The native over-collateralized stablecoin from the Kujira chain.", + "denom_units": [ + { + "denom": "ibc/44492EAB24B72E3FB59B9FA619A22337FB74F95D8808FE6BC78CC0E6C18DC2EC", + "exponent": 0, + "aliases": [ + "factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk" + ] + }, + { + "denom": "usk", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/44492EAB24B72E3FB59B9FA619A22337FB74F95D8808FE6BC78CC0E6C18DC2EC", + "name": "USK", + "display": "usk", + "symbol": "USK", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kujira", + "base_denom": "factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-259", + "path": "transfer/channel-259/factory:kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7:uusk" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/usk.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/usk.svg" + }, + "coingecko_id": "usk", + "keywords": [ + "osmosis-main", + "osmosis-price:uosmo:827" + ] + }, + { + "description": "Staking and governance coin for the Unification Blockchain", + "denom_units": [ + { + "denom": "ibc/608EF5C0CE64FEA097500DB39657BDD36CA708CC5DCC2E250A024B6981DD36BC", + "exponent": 0, + "aliases": [ + "nund" + ] + }, + { + "denom": "FUND", + "exponent": 9 + } + ], + "type_asset": "ics20", + "base": "ibc/608EF5C0CE64FEA097500DB39657BDD36CA708CC5DCC2E250A024B6981DD36BC", + "name": "Unification", + "display": "FUND", + "symbol": "FUND", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "unification", + "base_denom": "nund", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-382", + "path": "transfer/channel-382/nund" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/unification/images/fund.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/unification/images/fund.svg" + }, + "coingecko_id": "unification", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1240" + ] + }, + { + "description": "The native staking and governance token of Jackal.", + "denom_units": [ + { + "denom": "ibc/8E697BDABE97ACE8773C6DF7402B2D1D5104DD1EEABE12608E3469B7F64C15BA", + "exponent": 0, + "aliases": [ + "ujkl" + ] + }, + { + "denom": "jkl", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/8E697BDABE97ACE8773C6DF7402B2D1D5104DD1EEABE12608E3469B7F64C15BA", + "name": "Jackal", + "display": "jkl", + "symbol": "JKL", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "jackal", + "base_denom": "ujkl", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-412", + "path": "transfer/channel-412/ujkl" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/jackal/images/jkl.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/jackal/images/jkl.svg" + }, + "coingecko_id": "jackal-protocol", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:832" + ] + }, + { + "description": "The native token cw20 for Alter on Secret Network", + "denom_units": [ + { + "denom": "ibc/A6383B6CF5EA23E067666C06BC34E2A96869927BD9744DC0C1643E589C710AA3", + "exponent": 0, + "aliases": [ + "cw20:secret12rcvz0umvk875kd6a803txhtlu7y0pnd73kcej" + ] + }, + { + "denom": "alter", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/A6383B6CF5EA23E067666C06BC34E2A96869927BD9744DC0C1643E589C710AA3", + "name": "Alter", + "display": "alter", + "symbol": "ALTER", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "cw20:secret12rcvz0umvk875kd6a803txhtlu7y0pnd73kcej", + "port": "wasm.secret1tqmms5awftpuhalcv5h5mg76fa0tkdz4jv9ex4", + "channel_id": "channel-44" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-476", + "path": "transfer/channel-476/cw20:secret12rcvz0umvk875kd6a803txhtlu7y0pnd73kcej" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/alter.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/alter.svg" + }, + "coingecko_id": "alter", + "keywords": [ + "osmosis-price:uosmo:845" + ] + }, + { + "description": "The native token cw20 for Button on Secret Network", + "denom_units": [ + { + "denom": "ibc/1FBA9E763B8679BEF7BAAAF2D16BCA78C3B297D226C3F31312C769D7B8F992D8", + "exponent": 0, + "aliases": [ + "cw20:secret1yxcexylwyxlq58umhgsjgstgcg2a0ytfy4d9lt" + ] + }, + { + "denom": "butt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "secret1yxcexylwyxlq58umhgsjgstgcg2a0ytfy4d9lt", + "base": "ibc/1FBA9E763B8679BEF7BAAAF2D16BCA78C3B297D226C3F31312C769D7B8F992D8", + "name": "Button", + "display": "butt", + "symbol": "BUTT", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "cw20:secret1yxcexylwyxlq58umhgsjgstgcg2a0ytfy4d9lt", + "port": "wasm.secret1tqmms5awftpuhalcv5h5mg76fa0tkdz4jv9ex4", + "channel_id": "channel-44" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-476", + "path": "transfer/channel-476/cw20:secret1yxcexylwyxlq58umhgsjgstgcg2a0ytfy4d9lt" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/butt.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/butt.svg" + }, + "coingecko_id": "buttcoin-2", + "keywords": [ + "osmosis-price:uosmo:985" + ] + }, + { + "description": "The native token cw20 for Shade on Secret Network", + "denom_units": [ + { + "denom": "ibc/71055835C7639739EAE03AACD1324FE162DBA41D09F197CB72D966D014225B1C", + "exponent": 0, + "aliases": [ + "cw20:secret1qfql357amn448duf5gvp9gr48sxx9tsnhupu3d" + ] + }, + { + "denom": "shd", + "exponent": 8 + } + ], + "type_asset": "ics20", + "address": "secret1qfql357amn448duf5gvp9gr48sxx9tsnhupu3d", + "base": "ibc/71055835C7639739EAE03AACD1324FE162DBA41D09F197CB72D966D014225B1C", + "name": "Shade (old)", + "display": "shd", + "symbol": "SHD(old)", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "cw20:secret1qfql357amn448duf5gvp9gr48sxx9tsnhupu3d", + "port": "wasm.secret1tqmms5awftpuhalcv5h5mg76fa0tkdz4jv9ex4", + "channel_id": "channel-44" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-476", + "path": "transfer/channel-476/cw20:secret1qfql357amn448duf5gvp9gr48sxx9tsnhupu3d" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/shdold.svg" + }, + "keywords": [ + "osmosis-price:uosmo:846" + ] + }, + { + "description": "The native token cw20 for SIENNA on Secret Network", + "denom_units": [ + { + "denom": "ibc/9A8A93D04917A149C8AC7C16D3DA8F470D59E8D867499C4DA97450E1D7363213", + "exponent": 0, + "aliases": [ + "cw20:secret1rgm2m5t530tdzyd99775n6vzumxa5luxcllml4" + ] + }, + { + "denom": "sienna", + "exponent": 18 + } + ], + "type_asset": "ics20", + "address": "secret1rgm2m5t530tdzyd99775n6vzumxa5luxcllml4", + "base": "ibc/9A8A93D04917A149C8AC7C16D3DA8F470D59E8D867499C4DA97450E1D7363213", + "name": "SIENNA", + "display": "sienna", + "symbol": "SIENNA", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "cw20:secret1rgm2m5t530tdzyd99775n6vzumxa5luxcllml4", + "port": "wasm.secret1tqmms5awftpuhalcv5h5mg76fa0tkdz4jv9ex4", + "channel_id": "channel-44" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-476", + "path": "transfer/channel-476/cw20:secret1rgm2m5t530tdzyd99775n6vzumxa5luxcllml4" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/sienna.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/sienna.svg" + }, + "coingecko_id": "sienna", + "keywords": [ + "osmosis-price:uosmo:853" + ] + }, + { + "description": "The native token cw20 for SCRT Staking Derivatives on Secret Network", + "denom_units": [ + { + "denom": "ibc/D0E5BF2940FB58D9B283A339032DE88111407AAD7D94A7F1F3EB78874F8616D4", + "exponent": 0, + "aliases": [ + "cw20:secret1k6u0cy4feepm6pehnz804zmwakuwdapm69tuc4" + ] + }, + { + "denom": "stkd-scrt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "secret1k6u0cy4feepm6pehnz804zmwakuwdapm69tuc4", + "base": "ibc/D0E5BF2940FB58D9B283A339032DE88111407AAD7D94A7F1F3EB78874F8616D4", + "name": "SCRT Staking Derivatives", + "display": "stkd-scrt", + "symbol": "stkd-SCRT", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "cw20:secret1k6u0cy4feepm6pehnz804zmwakuwdapm69tuc4", + "port": "wasm.secret1tqmms5awftpuhalcv5h5mg76fa0tkdz4jv9ex4", + "channel_id": "channel-44" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-476", + "path": "transfer/channel-476/cw20:secret1k6u0cy4feepm6pehnz804zmwakuwdapm69tuc4" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/stkd-scrt.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/stkd-scrt.svg" + }, + "coingecko_id": "stkd-scrt", + "keywords": [ + "osmosis-price:ibc/0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A:854" + ] + }, + { + "description": "BeeZee native blockchain", + "denom_units": [ + { + "denom": "ibc/C822645522FC3EECF817609AA38C24B64D04F5C267A23BCCF8F2E3BC5755FA88", + "exponent": 0, + "aliases": [ + "ubze" + ] + }, + { + "denom": "bze", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/C822645522FC3EECF817609AA38C24B64D04F5C267A23BCCF8F2E3BC5755FA88", + "name": "BeeZee", + "display": "bze", + "symbol": "BZE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "beezee", + "base_denom": "ubze", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-340", + "path": "transfer/channel-340/ubze" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/beezee/images/bze.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/beezee/images/bze.svg" + }, + "coingecko_id": "bzedge", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:856" + ] + }, + { + "description": "The native token cw20 for Fanfury on Juno Chain", + "denom_units": [ + { + "denom": "ibc/7CE5F388D661D82A0774E47B5129DA51CC7129BD1A70B5FA6BCEBB5B0A2FAEAF", + "exponent": 0, + "aliases": [ + "cw20:juno1cltgm8v842gu54srmejewghnd6uqa26lzkpa635wzra9m9xuudkqa2gtcz" + ] + }, + { + "denom": "fury", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1cltgm8v842gu54srmejewghnd6uqa26lzkpa635wzra9m9xuudkqa2gtcz", + "base": "ibc/7CE5F388D661D82A0774E47B5129DA51CC7129BD1A70B5FA6BCEBB5B0A2FAEAF", + "name": "Fanfury", + "display": "fury", + "symbol": "FURY", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1cltgm8v842gu54srmejewghnd6uqa26lzkpa635wzra9m9xuudkqa2gtcz", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1cltgm8v842gu54srmejewghnd6uqa26lzkpa635wzra9m9xuudkqa2gtcz" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/fanfury.png" + }, + "coingecko_id": "fanfury" + }, + { + "description": "The native EVM, governance and staking token of the Acrechain", + "denom_units": [ + { + "denom": "ibc/BB936517F7E5D77A63E0ADB05217A6608B0C4CF8FBA7EA2F4BAE4107A7238F06", + "exponent": 0, + "aliases": [ + "aacre" + ] + }, + { + "denom": "acre", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/BB936517F7E5D77A63E0ADB05217A6608B0C4CF8FBA7EA2F4BAE4107A7238F06", + "name": "Acrechain", + "display": "acre", + "symbol": "ACRE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "acrechain", + "base_denom": "aacre", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-490", + "path": "transfer/channel-490/aacre" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/acrechain/images/acre.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/acrechain/images/acre.svg" + }, + "coingecko_id": "arable-protocol", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:858" + ] + }, + { + "description": "Stable Token of Harbor protocol on Comdex network", + "denom_units": [ + { + "denom": "ibc/23CA6C8D1AB2145DD13EB1E089A2E3F960DC298B468CCE034E19E5A78B61136E", + "exponent": 0, + "aliases": [ + "ucmst" + ] + }, + { + "denom": "cmst", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/23CA6C8D1AB2145DD13EB1E089A2E3F960DC298B468CCE034E19E5A78B61136E", + "name": "CMST", + "display": "cmst", + "symbol": "CMST", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "comdex", + "base_denom": "ucmst", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-87", + "path": "transfer/channel-87/ucmst" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/comdex/images/cmst.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/comdex/images/cmst.svg" + }, + "coingecko_id": "composite", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:857", + "peg:collateralized" + ] + }, + { + "description": "The native EVM, governance and staking token of the Imversed", + "denom_units": [ + { + "denom": "ibc/92B223EBFA74DB99BEA92B23DEAA6050734FEEAABB84689CB8E1AE8F9C9F9AF4", + "exponent": 0, + "aliases": [ + "aimv" + ] + }, + { + "denom": "imv", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/92B223EBFA74DB99BEA92B23DEAA6050734FEEAABB84689CB8E1AE8F9C9F9AF4", + "name": "Imversed", + "display": "imv", + "symbol": "IMV", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "imversed", + "base_denom": "aimv", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-517", + "path": "transfer/channel-517/aimv" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/imversed/images/imversed.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/imversed/images/imversed.svg" + }, + "coingecko_id": "imv", + "keywords": [ + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:866" + ] + }, + { + "description": "The native token of Medas Digital Network", + "denom_units": [ + { + "denom": "ibc/01E94A5FF29B8DDEFC86F412CC3927F7330E9B523CC63A6194B1108F5276025C", + "exponent": 0, + "aliases": [ + "umedas" + ] + }, + { + "denom": "medas", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/01E94A5FF29B8DDEFC86F412CC3927F7330E9B523CC63A6194B1108F5276025C", + "name": "Medas Digital Network", + "display": "medas", + "symbol": "MEDAS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "medasdigital", + "base_denom": "umedas", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-519", + "path": "transfer/channel-519/umedas" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/medasdigital/images/medas.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/medasdigital/images/medas.svg" + }, + "keywords": [ + "medas", + "osmosis-info", + "osmosis-price:ibc/41999DF04D9441DAC0DF5D8291DF4333FBCBA810FFD63FDCE34FDF41EF37B6F7:1329" + ] + }, + { + "description": "The native token cw20 for PHMN on Juno Chain", + "denom_units": [ + { + "denom": "ibc/D3B574938631B0A1BA704879020C696E514CFADAA7643CDE4BD5EB010BDE327B", + "exponent": 0, + "aliases": [ + "cw20:juno1rws84uz7969aaa7pej303udhlkt3j9ca0l3egpcae98jwak9quzq8szn2l" + ] + }, + { + "denom": "phmn", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1rws84uz7969aaa7pej303udhlkt3j9ca0l3egpcae98jwak9quzq8szn2l", + "base": "ibc/D3B574938631B0A1BA704879020C696E514CFADAA7643CDE4BD5EB010BDE327B", + "name": "POSTHUMAN", + "display": "phmn", + "symbol": "PHMN", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1rws84uz7969aaa7pej303udhlkt3j9ca0l3egpcae98jwak9quzq8szn2l", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1rws84uz7969aaa7pej303udhlkt3j9ca0l3egpcae98jwak9quzq8szn2l" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/phmn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/phmn.svg" + }, + "coingecko_id": "posthuman", + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:1255" + ] + }, + { + "description": "The native token cw20 for Amber on Secret Network", + "denom_units": [ + { + "denom": "ibc/18A1B70E3205A48DE8590C0D11030E7146CDBF1048789261D53FFFD7527F8B55", + "exponent": 0, + "aliases": [ + "cw20:secret1s09x2xvfd2lp2skgzm29w2xtena7s8fq98v852" + ] + }, + { + "denom": "amber", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "secret1s09x2xvfd2lp2skgzm29w2xtena7s8fq98v852", + "base": "ibc/18A1B70E3205A48DE8590C0D11030E7146CDBF1048789261D53FFFD7527F8B55", + "name": "Amber", + "display": "amber", + "symbol": "AMBER", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "cw20:secret1s09x2xvfd2lp2skgzm29w2xtena7s8fq98v852", + "port": "wasm.secret1tqmms5awftpuhalcv5h5mg76fa0tkdz4jv9ex4", + "channel_id": "channel-44" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-476", + "path": "transfer/channel-476/cw20:secret1s09x2xvfd2lp2skgzm29w2xtena7s8fq98v852" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/amber.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/amber.svg" + }, + "keywords": [ + "osmosis-price:uosmo:984" + ] + }, + { + "description": "The native token of Onomy Protocol", + "denom_units": [ + { + "denom": "ibc/B9606D347599F0F2FDF82BA3EE339000673B7D274EA50F59494DC51EFCD42163", + "exponent": 0, + "aliases": [ + "anom" + ] + }, + { + "denom": "nom", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/B9606D347599F0F2FDF82BA3EE339000673B7D274EA50F59494DC51EFCD42163", + "name": "Onomy", + "display": "nom", + "symbol": "NOM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "onomy", + "base_denom": "anom", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-525", + "path": "transfer/channel-525/anom" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/onomy/images/nom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/onomy/images/nom.svg" + }, + "coingecko_id": "onomy-protocol", + "keywords": [ + "dex", + "stablecoin", + "bridge", + "staking", + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:882" + ] + }, + { + "description": "PSTAKE Liquid-Staked ATOM", + "denom_units": [ + { + "denom": "ibc/CAA179E40F0266B0B29FB5EAA288FB9212E628822265D4141EBD1C47C3CBFCBC", + "exponent": 0, + "aliases": [ + "stk/uatom" + ] + }, + { + "denom": "stkatom", + "exponent": 6, + "aliases": [ + "stk/atom" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/CAA179E40F0266B0B29FB5EAA288FB9212E628822265D4141EBD1C47C3CBFCBC", + "name": "PSTAKE staked ATOM", + "display": "stkatom", + "symbol": "stkATOM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "persistence", + "base_denom": "stk/uatom", + "channel_id": "channel-6" + }, + "chain": { + "channel_id": "channel-4", + "path": "transfer/channel-4/stk/uatom" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkatom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkatom.svg" + }, + "coingecko_id": "stkatom", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:886" + ] + }, + { + "description": "The native staking and governance token of the Dyson Protocol", + "denom_units": [ + { + "denom": "ibc/E27CD305D33F150369AB526AEB6646A76EC3FFB1A6CA58A663B5DE657A89D55D", + "exponent": 0, + "aliases": [ + "dys" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/E27CD305D33F150369AB526AEB6646A76EC3FFB1A6CA58A663B5DE657A89D55D", + "name": "Dyson Protocol", + "display": "dys", + "symbol": "DYS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "dyson", + "base_denom": "dys", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-526", + "path": "transfer/channel-526/dys" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/dyson/images/dys.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/dyson/images/dys.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/D1542AA8762DB13087D8364F3EA6509FD6F009A34F00426AF9E4F9FA85CBBF1F:950" + ] + }, + { + "description": "The native token cw20 for Hopers on Juno Chain", + "denom_units": [ + { + "denom": "ibc/D3ADAF73F84CDF205BCB72C142FDAEEA2C612AB853CEE6D6C06F184FA38B1099", + "exponent": 0, + "aliases": [ + "cw20:juno1u45shlp0q4gcckvsj06ss4xuvsu0z24a0d0vr9ce6r24pht4e5xq7q995n" + ] + }, + { + "denom": "hopers", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1u45shlp0q4gcckvsj06ss4xuvsu0z24a0d0vr9ce6r24pht4e5xq7q995n", + "base": "ibc/D3ADAF73F84CDF205BCB72C142FDAEEA2C612AB853CEE6D6C06F184FA38B1099", + "name": "Hopers", + "display": "hopers", + "symbol": "HOPERS", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1u45shlp0q4gcckvsj06ss4xuvsu0z24a0d0vr9ce6r24pht4e5xq7q995n", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1u45shlp0q4gcckvsj06ss4xuvsu0z24a0d0vr9ce6r24pht4e5xq7q995n" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/hopers.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/hopers.svg" + }, + "coingecko_id": "hopers-io ", + "keywords": [ + "osmosis-price:uosmo:894" + ] + }, + { + "description": "Overcollateralized stable coin for Arable derivatives v1", + "denom_units": [ + { + "denom": "ibc/5D270A584B1078FBE07D14570ED5E88EC1FEDA8518B76C322606291E6FD8286F", + "exponent": 0, + "aliases": [ + "erc20/0x2Cbea61fdfDFA520Ee99700F104D5b75ADf50B0c" + ] + }, + { + "denom": "arusd", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/5D270A584B1078FBE07D14570ED5E88EC1FEDA8518B76C322606291E6FD8286F", + "name": "Arable USD", + "display": "arusd", + "symbol": "arUSD", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "acrechain", + "base_denom": "erc20/0x2Cbea61fdfDFA520Ee99700F104D5b75ADf50B0c", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-490", + "path": "transfer/channel-490/erc20/0x2Cbea61fdfDFA520Ee99700F104D5b75ADf50B0c" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/acrechain/images/arusd.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/acrechain/images/arusd.svg" + }, + "coingecko_id": "arable-usd", + "keywords": [ + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:895" + ] + }, + { + "description": "The native EVM, governance and staking token of the Planq Network", + "denom_units": [ + { + "denom": "ibc/B1E0166EA0D759FDF4B207D1F5F12210D8BFE36F2345CEFC76948CE2B36DFBAF", + "exponent": 0, + "aliases": [ + "aplanq" + ] + }, + { + "denom": "planq", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/B1E0166EA0D759FDF4B207D1F5F12210D8BFE36F2345CEFC76948CE2B36DFBAF", + "name": "Planq", + "display": "planq", + "symbol": "PLQ", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "planq", + "base_denom": "aplanq", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-492", + "path": "transfer/channel-492/aplanq" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/planq/images/planq.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/planq/images/planq.svg" + }, + "coingecko_id": "planq", + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1218" + ] + }, + { + "description": "Fantom's native utility token — FTM — powers the entire Fantom blockchain ecosystem. FTM tokens are used for staking, governance, payments, and fees on the network.", + "denom_units": [ + { + "denom": "ibc/5E2DFDF1734137302129EA1C1BA21A580F96F778D4F021815EA4F6DB378DA1A4", + "exponent": 0, + "aliases": [ + "wftm-wei" + ] + }, + { + "denom": "ftm", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/5E2DFDF1734137302129EA1C1BA21A580F96F778D4F021815EA4F6DB378DA1A4", + "name": "Fantom", + "display": "ftm", + "symbol": "FTM", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "fantom", + "base_denom": "wei" + }, + "chain": { + "contract": "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83" + }, + "provider": "Fantom" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "fantom", + "base_denom": "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "wftm-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/wftm-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/fantom/images/ftm.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/fantom/images/ftm.svg" + }, + "coingecko_id": "fantom", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:900" + ] + }, + { + "description": "Canto is a Layer-1 blockchain built to deliver on the promise of DeFi", + "denom_units": [ + { + "denom": "ibc/47CAF2DB8C016FAC960F33BC492FD8E454593B65CC59D70FA9D9F30424F9C32F", + "exponent": 0, + "aliases": [ + "acanto" + ] + }, + { + "denom": "canto", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/47CAF2DB8C016FAC960F33BC492FD8E454593B65CC59D70FA9D9F30424F9C32F", + "name": "Canto", + "display": "canto", + "symbol": "CANTO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "canto", + "base_denom": "acanto", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-550", + "path": "transfer/channel-550/acanto" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/canto/images/canto.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/canto/images/canto.svg" + }, + "coingecko_id": "canto", + "keywords": [ + "osmosis-main", + "osmosis-price:uosmo:901" + ] + }, + { + "description": "Quicksilver Liquid Staked STARS", + "denom_units": [ + { + "denom": "ibc/46C83BB054E12E189882B5284542DB605D94C99827E367C9192CF0579CD5BC83", + "exponent": 0, + "aliases": [ + "uqstars" + ] + }, + { + "denom": "qstars", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "base": "ibc/46C83BB054E12E189882B5284542DB605D94C99827E367C9192CF0579CD5BC83", + "name": "Quicksilver Liquid Staked STARS", + "display": "qstars", + "symbol": "qSTARS", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "stargaze", + "base_denom": "ustars" + }, + "provider": "Quicksilver" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "quicksilver", + "base_denom": "uqstars", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-522", + "path": "transfer/channel-522/uqstars" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qstars.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qstars.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4:903" + ] + }, + { + "description": "WYND DAO Governance Token", + "denom_units": [ + { + "denom": "ibc/2FBAC4BF296D7844796844B35978E5899984BA5A6314B2DD8F83C215550010B3", + "exponent": 0, + "aliases": [ + "cw20:juno1mkw83sv6c7sjdvsaplrzc8yaes9l42p4mhy0ssuxjnyzl87c9eps7ce3m9" + ] + }, + { + "denom": "wynd", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1mkw83sv6c7sjdvsaplrzc8yaes9l42p4mhy0ssuxjnyzl87c9eps7ce3m9", + "base": "ibc/2FBAC4BF296D7844796844B35978E5899984BA5A6314B2DD8F83C215550010B3", + "name": "Wynd DAO Governance Token", + "display": "wynd", + "symbol": "WYND", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1mkw83sv6c7sjdvsaplrzc8yaes9l42p4mhy0ssuxjnyzl87c9eps7ce3m9", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1mkw83sv6c7sjdvsaplrzc8yaes9l42p4mhy0ssuxjnyzl87c9eps7ce3m9" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/wynd.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/wynd.svg" + }, + "coingecko_id": "wynd", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:902" + ] + }, + { + "description": "USDC is a fully collateralized US Dollar stablecoin developed by CENTRE, the open source project with Circle being the first of several forthcoming issuers.", + "denom_units": [ + { + "denom": "ibc/231FD77ECCB2DB916D314019DA30FE013202833386B1908A191D16989AD80B5A", + "exponent": 0, + "aliases": [ + "polygon-uusdc" + ] + }, + { + "denom": "polygon-usdc", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/231FD77ECCB2DB916D314019DA30FE013202833386B1908A191D16989AD80B5A", + "name": "USD Coin (Polygon)", + "display": "polygon-usdc", + "symbol": "polygon.USDC", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Circle" + }, + { + "type": "additional-mintage", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + }, + "provider": "Circle" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "polygon", + "base_denom": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "polygon-uusdc", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/polygon-uusdc" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/polygon.usdc.svg" + }, + "coingecko_id": "usd-coin", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:938", + "peg:collateralized" + ] + }, + { + "description": "USDC is a fully collateralized US Dollar stablecoin developed by CENTRE, the open source project with Circle being the first of several forthcoming issuers.", + "denom_units": [ + { + "denom": "ibc/F17C9CA112815613C5B6771047A093054F837C3020CBA59DFFD9D780A8B2984C", + "exponent": 0, + "aliases": [ + "avalanche-uusdc" + ] + }, + { + "denom": "avalanche-usdc", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/F17C9CA112815613C5B6771047A093054F837C3020CBA59DFFD9D780A8B2984C", + "name": "USD Coin (Avalanche)", + "display": "avalanche-usdc", + "symbol": "avalanche.USDC", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Circle" + }, + { + "type": "additional-mintage", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + }, + "provider": "Circle" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "avalanche", + "base_denom": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "avalanche-uusdc", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/avalanche-uusdc" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/avalanche.usdc.svg" + }, + "coingecko_id": "usd-coin", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:938", + "peg:collateralized" + ] + }, + { + "description": "Mars protocol token", + "denom_units": [ + { + "denom": "ibc/573FCD90FACEE750F55A8864EF7D38265F07E5A9273FA0E8DAFD39951332B580", + "exponent": 0, + "aliases": [ + "umars" + ] + }, + { + "denom": "mars", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/573FCD90FACEE750F55A8864EF7D38265F07E5A9273FA0E8DAFD39951332B580", + "name": "Mars Hub", + "display": "mars", + "symbol": "MARS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "mars", + "base_denom": "umars", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-557", + "path": "transfer/channel-557/umars" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/mars/images/mars-token.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/mars/images/mars-token.svg" + }, + "coingecko_id": "mars-protocol-a7fcbcfb-fd61-4017-92f0-7ee9f9cc6da3", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1099" + ] + }, + { + "description": "Ciento Exchange Token", + "denom_units": [ + { + "denom": "ibc/D38BB3DD46864694F009AF01DA5A815B3A875F8CC52FF5679BFFCC35DC7451D5", + "exponent": 0, + "aliases": [ + "erc20/0xAE6D3334989a22A65228732446731438672418F2" + ] + }, + { + "denom": "cnto", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/D38BB3DD46864694F009AF01DA5A815B3A875F8CC52FF5679BFFCC35DC7451D5", + "name": "Ciento Token", + "display": "cnto", + "symbol": "CNTO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "acrechain", + "base_denom": "erc20/0xAE6D3334989a22A65228732446731438672418F2", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-490", + "path": "transfer/channel-490/erc20/0xAE6D3334989a22A65228732446731438672418F2" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/acrechain/images/cnto.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/acrechain/images/cnto.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:909" + ] + }, + { + "description": "The native staking token of Terra.", + "denom_units": [ + { + "denom": "ibc/C491E7582E94AE921F6A029790083CDE1106C28F3F6C4AD7F1340544C13EC372", + "exponent": 0, + "aliases": [ + "stuluna" + ] + }, + { + "denom": "stluna", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/C491E7582E94AE921F6A029790083CDE1106C28F3F6C4AD7F1340544C13EC372", + "name": "Stride Staked LUNA", + "display": "stluna", + "symbol": "stLUNA", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "terra2", + "base_denom": "uluna" + }, + "provider": "Stride" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "stuluna", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/stuluna" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stluna.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stluna.svg" + }, + "coingecko_id": "stride-staked-luna", + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/785AFEC6B3741100D15E7AF01374E3C4C36F24888E96479B1C33F5C71F364EF9:913" + ] + }, + { + "denom_units": [ + { + "denom": "ibc/C5579A9595790017C600DD726276D978B9BF314CF82406CE342720A9C7911A01", + "exponent": 0, + "aliases": [ + "staevmos" + ] + }, + { + "denom": "stevmos", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/C5579A9595790017C600DD726276D978B9BF314CF82406CE342720A9C7911A01", + "name": "Stride Staked EVMOS", + "display": "stevmos", + "symbol": "stEVMOS", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "evmos", + "base_denom": "uaevmos" + }, + "provider": "Stride" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "staevmos", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/staevmos" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stevmos.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stevmos.svg" + }, + "coingecko_id": "stride-staked-evmos", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/6AE98883D4D5D5FF9E50D7130F1305DA2FFA0C652D1DD9C123657C6B4EB2DF8A:922" + ] + }, + { + "description": "nRide Token", + "denom_units": [ + { + "denom": "ibc/E750D31033DC1CF4A044C3AA0A8117401316DC918FBEBC4E3D34F91B09D5F54C", + "exponent": 0, + "aliases": [ + "cw20:juno1qmlchtmjpvu0cr7u0tad2pq8838h6farrrjzp39eqa9xswg7teussrswlq" + ] + }, + { + "denom": "nride", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1qmlchtmjpvu0cr7u0tad2pq8838h6farrrjzp39eqa9xswg7teussrswlq", + "base": "ibc/E750D31033DC1CF4A044C3AA0A8117401316DC918FBEBC4E3D34F91B09D5F54C", + "name": "nRide Token", + "display": "nride", + "symbol": "NRIDE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1qmlchtmjpvu0cr7u0tad2pq8838h6farrrjzp39eqa9xswg7teussrswlq", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1qmlchtmjpvu0cr7u0tad2pq8838h6farrrjzp39eqa9xswg7teussrswlq" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/nride.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/nride.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:924" + ] + }, + { + "description": "The native staking token of 8ball.", + "denom_units": [ + { + "denom": "ibc/8BE73A810E22F80E5E850531A688600D63AE7392E7C2770AE758CAA4FD921B7F", + "exponent": 0, + "aliases": [ + "uebl" + ] + }, + { + "denom": "ebl", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/8BE73A810E22F80E5E850531A688600D63AE7392E7C2770AE758CAA4FD921B7F", + "name": "8ball", + "display": "ebl", + "symbol": "EBL", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "8ball", + "base_denom": "uebl", + "channel_id": "channel-16" + }, + "chain": { + "channel_id": "channel-641", + "path": "transfer/channel-641/uebl" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/8ball/images/8ball.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/8ball/images/8ball.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:935" + ] + }, + { + "description": "Quicksilver Liquid Staked ATOM", + "denom_units": [ + { + "denom": "ibc/FA602364BEC305A696CBDF987058E99D8B479F0318E47314C49173E8838C5BAC", + "exponent": 0, + "aliases": [ + "uqatom" + ] + }, + { + "denom": "qatom", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "base": "ibc/FA602364BEC305A696CBDF987058E99D8B479F0318E47314C49173E8838C5BAC", + "name": "Quicksilver Liquid Staked ATOM", + "display": "qatom", + "symbol": "qATOM", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "cosmoshub", + "base_denom": "uatom" + }, + "provider": "Quicksilver" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "quicksilver", + "base_denom": "uqatom", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-522", + "path": "transfer/channel-522/uqatom" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qatom.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qatom.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:944" + ] + }, + { + "description": "Governance Token of Harbor protocol on Comdex network", + "denom_units": [ + { + "denom": "ibc/AD4DEA52408EA07C0C9E19444EC8DA84A274A70AD2687A710EFDDEB28BB2986A", + "exponent": 0, + "aliases": [ + "uharbor" + ] + }, + { + "denom": "harbor", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/AD4DEA52408EA07C0C9E19444EC8DA84A274A70AD2687A710EFDDEB28BB2986A", + "name": "Harbor", + "display": "harbor", + "symbol": "HARBOR", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "comdex", + "base_denom": "uharbor", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-87", + "path": "transfer/channel-87/uharbor" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/comdex/images/harbor.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/comdex/images/harbor.svg" + }, + "coingecko_id": "harbor-2", + "keywords": [ + "osmosis-price:uosmo:967" + ] + }, + { + "description": "Quicksilver Liquid Staked REGEN", + "denom_units": [ + { + "denom": "ibc/79A676508A2ECA1021EDDC7BB9CF70CEEC9514C478DA526A5A8B3E78506C2206", + "exponent": 0, + "aliases": [ + "uqregen" + ] + }, + { + "denom": "qregen", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "base": "ibc/79A676508A2ECA1021EDDC7BB9CF70CEEC9514C478DA526A5A8B3E78506C2206", + "name": "Quicksilver Liquid Staked Regen", + "display": "qregen", + "symbol": "qREGEN", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "regen", + "base_denom": "uregen" + }, + "provider": "Quicksilver" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "quicksilver", + "base_denom": "uqregen", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-522", + "path": "transfer/channel-522/uqregen" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qregen.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qregen.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/1DCC8A6CB5689018431323953344A9F6CC4D0BFB261E88C9F7777372C10CD076:948" + ] + }, + { + "description": "Inspired by Bonk. A community project to celebrate the settlers of JunoNetwork.", + "denom_units": [ + { + "denom": "ibc/4F24D904BAB5FFBD3524F2DE3EC3C7A9E687A2408D9A985E57B356D9FA9201C6", + "exponent": 0, + "aliases": [ + "cw20:juno1u8cr3hcjvfkzxcaacv9q75uw9hwjmn8pucc93pmy6yvkzz79kh3qncca8x" + ] + }, + { + "denom": "fox", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1u8cr3hcjvfkzxcaacv9q75uw9hwjmn8pucc93pmy6yvkzz79kh3qncca8x", + "base": "ibc/4F24D904BAB5FFBD3524F2DE3EC3C7A9E687A2408D9A985E57B356D9FA9201C6", + "name": "Juno Fox", + "display": "fox", + "symbol": "FOX", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1u8cr3hcjvfkzxcaacv9q75uw9hwjmn8pucc93pmy6yvkzz79kh3qncca8x", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1u8cr3hcjvfkzxcaacv9q75uw9hwjmn8pucc93pmy6yvkzz79kh3qncca8x" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/fox.png" + }, + "keywords": [ + "osmosis-price:uosmo:949" + ] + }, + { + "description": "QCK - native token of Quicksilver", + "denom_units": [ + { + "denom": "ibc/635CB83EF1DFE598B10A3E90485306FD0D47D34217A4BE5FD9977FA010A5367D", + "exponent": 0, + "aliases": [ + "uqck" + ] + }, + { + "denom": "qck", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "base": "ibc/635CB83EF1DFE598B10A3E90485306FD0D47D34217A4BE5FD9977FA010A5367D", + "name": "Quicksilver", + "display": "qck", + "symbol": "QCK", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "quicksilver", + "base_denom": "uqck", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-522", + "path": "transfer/channel-522/uqck" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qck.png" + }, + "coingecko_id": "quicksilver", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:952" + ] + }, + { + "description": "The native token of Arkhadian", + "denom_units": [ + { + "denom": "ibc/0F91EE8B98AAE3CF393D94CD7F89A10F8D7758C5EC707E721899DFE65C164C28", + "exponent": 0, + "aliases": [ + "arkh" + ] + }, + { + "denom": "ARKH", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/0F91EE8B98AAE3CF393D94CD7F89A10F8D7758C5EC707E721899DFE65C164C28", + "name": "Arkhadian", + "display": "ARKH", + "symbol": "ARKH", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "arkh", + "base_denom": "arkh", + "channel_id": "channel-12" + }, + "chain": { + "channel_id": "channel-648", + "path": "transfer/channel-648/arkh" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/arkh/images/arkh.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/arkh/images/arkh.svg" + }, + "keywords": [ + "osmosis-price:uosmo:954", + "osmosis-unstable" + ] + }, + { + "description": "Quicksilver Liquid Staked OSMO", + "denom_units": [ + { + "denom": "ibc/42D24879D4569CE6477B7E88206ADBFE47C222C6CAD51A54083E4A72594269FC", + "exponent": 0, + "aliases": [ + "uqosmo" + ] + }, + { + "denom": "qosmo", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "base": "ibc/42D24879D4569CE6477B7E88206ADBFE47C222C6CAD51A54083E4A72594269FC", + "name": "Quicksilver Liquid Staked OSMO", + "display": "qosmo", + "symbol": "qOSMO", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "osmosis", + "base_denom": "uosmo" + }, + "provider": "Quicksilver" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "quicksilver", + "base_denom": "uqosmo", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-522", + "path": "transfer/channel-522/uqosmo" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qosmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qosmo.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:956" + ] + }, + { + "description": "Frienzies are an IBC token redeemable exclusively for a physical asset issued by the Noble entity.", + "denom_units": [ + { + "denom": "ibc/7FA7EC64490E3BDE5A1A28CBE73CC0AD22522794957BC891C46321E3A6074DB9", + "exponent": 0, + "aliases": [ + "microfrienzies", + "ufrienzies" + ] + }, + { + "denom": "frienzies", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/7FA7EC64490E3BDE5A1A28CBE73CC0AD22522794957BC891C46321E3A6074DB9", + "name": "Frienzies", + "display": "frienzies", + "symbol": "FRNZ", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "noble", + "base_denom": "ufrienzies", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-750", + "path": "transfer/channel-750/ufrienzies" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/frnz.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/frnz.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:1012" + ] + }, + { + "description": "The native token of Migaloo Chain", + "denom_units": [ + { + "denom": "ibc/EDD6F0D66BCD49C1084FB2C35353B4ACD7B9191117CE63671B61320548F7C89D", + "exponent": 0, + "aliases": [ + "uwhale" + ] + }, + { + "denom": "whale", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/EDD6F0D66BCD49C1084FB2C35353B4ACD7B9191117CE63671B61320548F7C89D", + "name": "Migaloo", + "display": "whale", + "symbol": "WHALE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "migaloo", + "base_denom": "uwhale", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-642", + "path": "transfer/channel-642/uwhale" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/white-whale.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/white-whale.svg" + }, + "coingecko_id": "white-whale", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1318" + ] + }, + { + "description": "Evmos Guardians governance token.", + "denom_units": [ + { + "denom": "ibc/BAC9C6998F1F5C316D3353622EAEDAF8BD00FAABEB374FECDF8C9BC475172CFA", + "exponent": 0, + "aliases": [ + "cw20:juno1xekkh27punj0uxruv3gvuydyt856fax0nu750xns99t2qcxp7xmsqwhfma" + ] + }, + { + "denom": "grdn", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1xekkh27punj0uxruv3gvuydyt856fax0nu750xns99t2qcxp7xmsqwhfma", + "base": "ibc/BAC9C6998F1F5C316D3353622EAEDAF8BD00FAABEB374FECDF8C9BC475172CFA", + "name": "Guardian", + "display": "grdn", + "symbol": "GRDN", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1xekkh27punj0uxruv3gvuydyt856fax0nu750xns99t2qcxp7xmsqwhfma", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1xekkh27punj0uxruv3gvuydyt856fax0nu750xns99t2qcxp7xmsqwhfma" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/guardian.png" + }, + "keywords": [ + "osmosis-price:uosmo:959" + ] + }, + { + "description": "Mini Punks Token", + "denom_units": [ + { + "denom": "ibc/DC0D3303BBE739E073224D0314385B88B247F56D71D726A91414CCA244FFFE7E", + "exponent": 0, + "aliases": [ + "cw20:juno166heaxlyntd33a5euh4rrz26svhean4klzw594esmd02l4atan6sazy2my" + ] + }, + { + "denom": "mnpu", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno166heaxlyntd33a5euh4rrz26svhean4klzw594esmd02l4atan6sazy2my", + "base": "ibc/DC0D3303BBE739E073224D0314385B88B247F56D71D726A91414CCA244FFFE7E", + "name": "Mini Punks", + "display": "mnpu", + "symbol": "MNPU", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno166heaxlyntd33a5euh4rrz26svhean4klzw594esmd02l4atan6sazy2my", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno166heaxlyntd33a5euh4rrz26svhean4klzw594esmd02l4atan6sazy2my" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/mnpu.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/mnpu.svg" + }, + "keywords": [ + "osmosis-price:uosmo:961" + ] + }, + { + "description": "Shiba Cosmos", + "denom_units": [ + { + "denom": "ibc/447A0DCE83691056289503DDAB8EB08E52E167A73629F2ACC59F056B92F51CE8", + "exponent": 0, + "aliases": [ + "cw20:juno1x5qt47rw84c4k6xvvywtrd40p8gxjt8wnmlahlqg07qevah3f8lqwxfs7z" + ] + }, + { + "denom": "shibac", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1x5qt47rw84c4k6xvvywtrd40p8gxjt8wnmlahlqg07qevah3f8lqwxfs7z", + "base": "ibc/447A0DCE83691056289503DDAB8EB08E52E167A73629F2ACC59F056B92F51CE8", + "name": "ShibaCosmos", + "display": "shibac", + "symbol": "SHIBAC", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1x5qt47rw84c4k6xvvywtrd40p8gxjt8wnmlahlqg07qevah3f8lqwxfs7z", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1x5qt47rw84c4k6xvvywtrd40p8gxjt8wnmlahlqg07qevah3f8lqwxfs7z" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/shibacosmos.png" + }, + "keywords": [ + "osmosis-price:uosmo:962" + ] + }, + { + "description": "Sikoba Governance Token", + "denom_units": [ + { + "denom": "ibc/71066B030D8FC6479E638580E1BA9C44925E8C1F6E45036669D22017CFDC8C5E", + "exponent": 0, + "aliases": [ + "cw20:juno1qqwf3lkfjhp77yja7gmg3y95pda0e5xctqrdhf3wvwdd79flagvqfgrgxp" + ] + }, + { + "denom": "sikoba", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1qqwf3lkfjhp77yja7gmg3y95pda0e5xctqrdhf3wvwdd79flagvqfgrgxp", + "base": "ibc/71066B030D8FC6479E638580E1BA9C44925E8C1F6E45036669D22017CFDC8C5E", + "name": "Sikoba Token", + "display": "sikoba", + "symbol": "SKOJ", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1qqwf3lkfjhp77yja7gmg3y95pda0e5xctqrdhf3wvwdd79flagvqfgrgxp", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1qqwf3lkfjhp77yja7gmg3y95pda0e5xctqrdhf3wvwdd79flagvqfgrgxp" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/sikoba.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/sikoba.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:964" + ] + }, + { + "description": "Nature Carbon Ton (NCT) is a carbon token standard backed 1:1 by carbon credits issued by Verra, a global leader in the voluntary carbon market. NCT credits on Regen Network have been tokenized by Toucan.earth.", + "denom_units": [ + { + "denom": "ibc/A76EB6ECF4E3E2D4A23C526FD1B48FDD42F171B206C9D2758EF778A7826ADD68", + "exponent": 0, + "aliases": [ + "eco.uC.NCT" + ] + }, + { + "denom": "nct", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/A76EB6ECF4E3E2D4A23C526FD1B48FDD42F171B206C9D2758EF778A7826ADD68", + "name": "Nature Carbon Ton", + "display": "nct", + "symbol": "NCT", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "regen", + "base_denom": "eco.uC.NCT", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-8", + "path": "transfer/channel-8/eco.uC.NCT" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/regen/images/nct.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/regen/images/nct.svg" + }, + "coingecko_id": "toucan-protocol-nature-carbon-tonne", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/1DCC8A6CB5689018431323953344A9F6CC4D0BFB261E88C9F7777372C10CD076:972" + ] + }, + { + "description": "Celestims", + "denom_units": [ + { + "denom": "ibc/0E4FA664327BD40B32803EE84A77F145834C0281B7F82B65521333B3669FA0BA", + "exponent": 0, + "aliases": [ + "cw20:juno1ngww7zxak55fql42wmyqrr4rhzpne24hhs4p3w4cwhcdgqgr3hxsmzl9zg" + ] + }, + { + "denom": "clst", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1ngww7zxak55fql42wmyqrr4rhzpne24hhs4p3w4cwhcdgqgr3hxsmzl9zg", + "base": "ibc/0E4FA664327BD40B32803EE84A77F145834C0281B7F82B65521333B3669FA0BA", + "name": "Celestims", + "display": "clst", + "symbol": "CLST", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1ngww7zxak55fql42wmyqrr4rhzpne24hhs4p3w4cwhcdgqgr3hxsmzl9zg", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1ngww7zxak55fql42wmyqrr4rhzpne24hhs4p3w4cwhcdgqgr3hxsmzl9zg" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/celestims.png" + }, + "keywords": [ + "osmosis-price:uosmo:974" + ] + }, + { + "description": "The First Doge on Osmosis", + "denom_units": [ + { + "denom": "ibc/8AEEA9B9304392070F72611076C0E328CE3F2DECA1E18557E36F9DB4F09C0156", + "exponent": 0, + "aliases": [ + "cw20:juno1ytymtllllsp3hfmndvcp802p2xmy5s8m59ufel8xv9ahyxyfs4hs4kd4je" + ] + }, + { + "denom": "osdoge", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1ytymtllllsp3hfmndvcp802p2xmy5s8m59ufel8xv9ahyxyfs4hs4kd4je", + "base": "ibc/8AEEA9B9304392070F72611076C0E328CE3F2DECA1E18557E36F9DB4F09C0156", + "name": "Osmosis Doge", + "display": "osdoge", + "symbol": "OSDOGE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1ytymtllllsp3hfmndvcp802p2xmy5s8m59ufel8xv9ahyxyfs4hs4kd4je", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1ytymtllllsp3hfmndvcp802p2xmy5s8m59ufel8xv9ahyxyfs4hs4kd4je" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/osdoge.png" + }, + "keywords": [ + "osmosis-price:uosmo:975" + ] + }, + { + "description": "Apemos", + "denom_units": [ + { + "denom": "ibc/1EB03F13F29FEA73444586FC4E88A8C14ACE9291501E9658E3BEF951EA4AC85D", + "exponent": 0, + "aliases": [ + "cw20:juno1jrr0tuuzxrrwcg6hgeqhw5wqpck2y55734e7zcrp745aardlp0qqg8jz06" + ] + }, + { + "denom": "apemos", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1jrr0tuuzxrrwcg6hgeqhw5wqpck2y55734e7zcrp745aardlp0qqg8jz06", + "base": "ibc/1EB03F13F29FEA73444586FC4E88A8C14ACE9291501E9658E3BEF951EA4AC85D", + "name": "Apemos", + "display": "apemos", + "symbol": "APEMOS", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1jrr0tuuzxrrwcg6hgeqhw5wqpck2y55734e7zcrp745aardlp0qqg8jz06", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1jrr0tuuzxrrwcg6hgeqhw5wqpck2y55734e7zcrp745aardlp0qqg8jz06" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/apemos.png" + }, + "keywords": [ + "osmosis-price:uosmo:977" + ] + }, + { + "description": "Evmos Guardians' Invaders DAO token.", + "denom_units": [ + { + "denom": "ibc/3DB1721541C94AD19D7735FECED74C227E13F925BDB814392980B40A19C1ED54", + "exponent": 0, + "aliases": [ + "cw20:juno1jwdy7v4egw36pd84aeks3ww6n8k7zhsumd4ac8q5lts83ppxueus4626e8" + ] + }, + { + "denom": "invdrs", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1jwdy7v4egw36pd84aeks3ww6n8k7zhsumd4ac8q5lts83ppxueus4626e8", + "base": "ibc/3DB1721541C94AD19D7735FECED74C227E13F925BDB814392980B40A19C1ED54", + "name": "Invaders", + "display": "invdrs", + "symbol": "INVDRS", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1jwdy7v4egw36pd84aeks3ww6n8k7zhsumd4ac8q5lts83ppxueus4626e8", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1jwdy7v4egw36pd84aeks3ww6n8k7zhsumd4ac8q5lts83ppxueus4626e8" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/invdrs.png" + }, + "keywords": [ + "osmosis-price:uosmo:969" + ] + }, + { + "description": "Doge Apr", + "denom_units": [ + { + "denom": "ibc/04BE4E9C825ED781F9684A1226114BB49607500CAD855F1E3FEEC18532297250", + "exponent": 0, + "aliases": [ + "cw20:juno1k2ruzzvvwwtwny6gq6kcwyfhkzahaunp685wmz4hafplduekj98q9hgs6d" + ] + }, + { + "denom": "doga", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1k2ruzzvvwwtwny6gq6kcwyfhkzahaunp685wmz4hafplduekj98q9hgs6d", + "base": "ibc/04BE4E9C825ED781F9684A1226114BB49607500CAD855F1E3FEEC18532297250", + "name": "Doge Apr", + "display": "doga", + "symbol": "DOGA", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1k2ruzzvvwwtwny6gq6kcwyfhkzahaunp685wmz4hafplduekj98q9hgs6d", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1k2ruzzvvwwtwny6gq6kcwyfhkzahaunp685wmz4hafplduekj98q9hgs6d" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/doga.png" + }, + "keywords": [ + "osmosis-price:uosmo:978" + ] + }, + { + "description": "Catmos", + "denom_units": [ + { + "denom": "ibc/F4A07138CAEF0BFB4889E03C44C57956A48631061F1C8AB80421C1F229C1B835", + "exponent": 0, + "aliases": [ + "cw20:juno1f5datjdse3mdgrapwuzs3prl7pvxxht48ns6calnn0t77v2s9l8s0qu488" + ] + }, + { + "denom": "catmos", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1f5datjdse3mdgrapwuzs3prl7pvxxht48ns6calnn0t77v2s9l8s0qu488", + "base": "ibc/F4A07138CAEF0BFB4889E03C44C57956A48631061F1C8AB80421C1F229C1B835", + "name": "Catmos", + "display": "catmos", + "symbol": "CATMOS", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1f5datjdse3mdgrapwuzs3prl7pvxxht48ns6calnn0t77v2s9l8s0qu488", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1f5datjdse3mdgrapwuzs3prl7pvxxht48ns6calnn0t77v2s9l8s0qu488" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/catmos.png" + }, + "keywords": [ + "osmosis-price:uosmo:981" + ] + }, + { + "description": "Social Impact DAO providing showers, meals, and vehicles to the homeless", + "denom_units": [ + { + "denom": "ibc/56B988C4D934FB7503F5EA9B440C75D489C8AD5D193715B477BEC4F84B8BBA2A", + "exponent": 0, + "aliases": [ + "cw20:juno1j4ux0f6gt7e82z7jdpm25v4g2gts880ap64rdwa49989wzhd0dfqed6vqm" + ] + }, + { + "denom": "summit", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1j4ux0f6gt7e82z7jdpm25v4g2gts880ap64rdwa49989wzhd0dfqed6vqm", + "base": "ibc/56B988C4D934FB7503F5EA9B440C75D489C8AD5D193715B477BEC4F84B8BBA2A", + "name": "Summit", + "display": "summit", + "symbol": "SUMMIT", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1j4ux0f6gt7e82z7jdpm25v4g2gts880ap64rdwa49989wzhd0dfqed6vqm", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1j4ux0f6gt7e82z7jdpm25v4g2gts880ap64rdwa49989wzhd0dfqed6vqm" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/summit.png" + }, + "keywords": [ + "osmosis-price:uosmo:982" + ] + }, + { + "description": "The native staking token of OmniFlix Hub.", + "denom_units": [ + { + "denom": "ibc/CEE970BB3D26F4B907097B6B660489F13F3B0DA765B83CC7D9A0BC0CE220FA6F", + "exponent": 0, + "aliases": [ + "uflix" + ] + }, + { + "denom": "flix", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/CEE970BB3D26F4B907097B6B660489F13F3B0DA765B83CC7D9A0BC0CE220FA6F", + "name": "OmniFlix", + "display": "flix", + "symbol": "FLIX", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "omniflixhub", + "base_denom": "uflix", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-199", + "path": "transfer/channel-199/uflix" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/omniflixhub/images/flix.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/omniflixhub/images/flix.svg" + }, + "coingecko_id": "omniflix-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:992" + ] + }, + { + "description": "Spacer", + "denom_units": [ + { + "denom": "ibc/7A496DB7C2277D4B74EC4428DDB5AC8A62816FBD0DEBE1CFE094935D746BE19C", + "exponent": 0, + "aliases": [ + "cw20:juno1dyyf7pxeassxvftf570krv7fdf5r8e4r04mp99h0mllsqzp3rs4q7y8yqg" + ] + }, + { + "denom": "spacer", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1dyyf7pxeassxvftf570krv7fdf5r8e4r04mp99h0mllsqzp3rs4q7y8yqg", + "base": "ibc/7A496DB7C2277D4B74EC4428DDB5AC8A62816FBD0DEBE1CFE094935D746BE19C", + "name": "Spacer", + "display": "spacer", + "symbol": "SPACER", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1dyyf7pxeassxvftf570krv7fdf5r8e4r04mp99h0mllsqzp3rs4q7y8yqg", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1dyyf7pxeassxvftf570krv7fdf5r8e4r04mp99h0mllsqzp3rs4q7y8yqg" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/spacer.png" + }, + "keywords": [ + "osmosis-price:uosmo:993" + ] + }, + { + "description": "Light: LumenX community DAO treasury token", + "denom_units": [ + { + "denom": "ibc/3DC08BDF2689978DBCEE28C7ADC2932AA658B2F64B372760FBC5A0058669AD29", + "exponent": 0, + "aliases": [ + "cw20:juno1dpany8c0lj526lsa02sldv7shzvnw5dt5ues72rk35hd69rrydxqeraz8l" + ] + }, + { + "denom": "light", + "exponent": 9 + } + ], + "type_asset": "ics20", + "address": "juno1dpany8c0lj526lsa02sldv7shzvnw5dt5ues72rk35hd69rrydxqeraz8l", + "base": "ibc/3DC08BDF2689978DBCEE28C7ADC2932AA658B2F64B372760FBC5A0058669AD29", + "name": "LIGHT", + "display": "light", + "symbol": "LIGHT", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1dpany8c0lj526lsa02sldv7shzvnw5dt5ues72rk35hd69rrydxqeraz8l", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1dpany8c0lj526lsa02sldv7shzvnw5dt5ues72rk35hd69rrydxqeraz8l" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/light.png" + }, + "keywords": [ + "osmosis-price:uosmo:1009" + ] + }, + { + "description": "The native token cw20 for Silk on Secret Network", + "denom_units": [ + { + "denom": "ibc/8A025A1E70101E39DE0C0F153E582A30806D3DA16795F6D868A3AA247D2DEDF7", + "exponent": 0, + "aliases": [ + "cw20:secret1fl449muk5yq8dlad7a22nje4p5d2pnsgymhjfd" + ] + }, + { + "denom": "silk", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "secret1fl449muk5yq8dlad7a22nje4p5d2pnsgymhjfd", + "base": "ibc/8A025A1E70101E39DE0C0F153E582A30806D3DA16795F6D868A3AA247D2DEDF7", + "name": "Silk", + "display": "silk", + "symbol": "SILK", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "cw20:secret1fl449muk5yq8dlad7a22nje4p5d2pnsgymhjfd", + "port": "wasm.secret1tqmms5awftpuhalcv5h5mg76fa0tkdz4jv9ex4", + "channel_id": "channel-44" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-476", + "path": "transfer/channel-476/cw20:secret1fl449muk5yq8dlad7a22nje4p5d2pnsgymhjfd" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/silk.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/silk.svg" + }, + "coingecko_id": "silk-bcec1136-561c-4706-a42c-8b67d0d7f7d2", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1358" + ] + }, + { + "description": "Mille: the 1000th token on osmosis", + "denom_units": [ + { + "denom": "ibc/912275A63A565BFD80734AEDFFB540132C51E446EAC41483B26EDE8A557C71CF", + "exponent": 0, + "aliases": [ + "cw20:juno1llg7q2d5dqlrqzh5dxv8c7kzzjszld34s5vktqmlmaaxqjssz43sxyhq0d" + ] + }, + { + "denom": "mile", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1llg7q2d5dqlrqzh5dxv8c7kzzjszld34s5vktqmlmaaxqjssz43sxyhq0d", + "base": "ibc/912275A63A565BFD80734AEDFFB540132C51E446EAC41483B26EDE8A557C71CF", + "name": "Mille", + "display": "mile", + "symbol": "MILE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1llg7q2d5dqlrqzh5dxv8c7kzzjszld34s5vktqmlmaaxqjssz43sxyhq0d", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1llg7q2d5dqlrqzh5dxv8c7kzzjszld34s5vktqmlmaaxqjssz43sxyhq0d" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/mille.png" + }, + "keywords": [ + "osmosis-price:uosmo:1000" + ] + }, + { + "description": "Social Impact DAO dedicated to combatting food insecurity and malnutrition", + "denom_units": [ + { + "denom": "ibc/980A2748F37C938AD129B92A51E2ABA8CFFC6862ADD61EC1B291125535DBE30B", + "exponent": 0, + "aliases": [ + "cw20:juno13ca2g36ng6etcfhr9qxx352uw2n5e92np54thfkm3w3nzlhsgvwsjaqlyq" + ] + }, + { + "denom": "manna", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno13ca2g36ng6etcfhr9qxx352uw2n5e92np54thfkm3w3nzlhsgvwsjaqlyq", + "base": "ibc/980A2748F37C938AD129B92A51E2ABA8CFFC6862ADD61EC1B291125535DBE30B", + "name": "Manna", + "display": "manna", + "symbol": "MANNA", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno13ca2g36ng6etcfhr9qxx352uw2n5e92np54thfkm3w3nzlhsgvwsjaqlyq", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno13ca2g36ng6etcfhr9qxx352uw2n5e92np54thfkm3w3nzlhsgvwsjaqlyq" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/manna.png" + }, + "keywords": [ + "osmosis-price:uosmo:997" + ] + }, + { + "description": "Filecoin is a decentralized storage network designed to turn cloud storage into an algorithmic market. The network facilitates open markets for storing and retrieving data, where users pay to store their files on storage miners. Filecoin is built on top of the InterPlanetary File System (IPFS), a peer-to-peer storage network. Filecoin aims to store data in a decentralized manner, unlike traditional cloud storage providers.\n\nParticipants in the Filecoin network are incentivized to act honestly and store as much data as possible because they earn the Filecoin cryptocurrency (FIL) in exchange for their storage services. This setup ensures the integrity and accessibility of data stored. Filecoin's model allows for a variety of storage options, including long-term archival storage and more rapid retrieval services, making it a versatile solution for decentralized data storage. The project, developed by Protocol Labs, also focuses on ensuring that data is stored reliably and efficiently.", + "denom_units": [ + { + "denom": "ibc/18FB5C09D9D2371F659D4846A956FA56225E377EE3C3652A2BF3542BF809159D", + "exponent": 0, + "aliases": [ + "wfil-wei" + ] + }, + { + "denom": "fil", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/18FB5C09D9D2371F659D4846A956FA56225E377EE3C3652A2BF3542BF809159D", + "name": "Filecoin", + "display": "fil", + "symbol": "FIL", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "filecoin", + "base_denom": "attoFIL" + }, + "provider": "Filecoin" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "filecoin", + "base_denom": "0x60E1773636CF5E4A227d9AC24F20fEca034ee25A" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "wfil-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/wfil-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/filecoin/images/fil.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/filecoin/images/fil.svg" + }, + "coingecko_id": "filecoin", + "keywords": [ + "osmosis-main", + "osmosis-price:uosmo:1006" + ] + }, + { + "description": "Void", + "denom_units": [ + { + "denom": "ibc/593F820ECE676A3E0890C734EC4F3A8DE16EC10A54EEDFA8BDFEB40EEA903960", + "exponent": 0, + "aliases": [ + "cw20:juno1lpvx3mv2a6ddzfjc7zzz2v2cm5gqgqf0hx67hc5p5qwn7hz4cdjsnznhu8" + ] + }, + { + "denom": "void", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1lpvx3mv2a6ddzfjc7zzz2v2cm5gqgqf0hx67hc5p5qwn7hz4cdjsnznhu8", + "base": "ibc/593F820ECE676A3E0890C734EC4F3A8DE16EC10A54EEDFA8BDFEB40EEA903960", + "name": "Void", + "display": "void", + "symbol": "VOID", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1lpvx3mv2a6ddzfjc7zzz2v2cm5gqgqf0hx67hc5p5qwn7hz4cdjsnznhu8", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1lpvx3mv2a6ddzfjc7zzz2v2cm5gqgqf0hx67hc5p5qwn7hz4cdjsnznhu8" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/void.png" + }, + "keywords": [ + "osmosis-price:uosmo:1003" + ] + }, + { + "description": "The native token cw20 for Shade on Secret Network", + "denom_units": [ + { + "denom": "ibc/0B3D528E74E3DEAADF8A68F393887AC7E06028904D02173561B0D27F6E751D0A", + "exponent": 0, + "aliases": [ + "cw20:secret153wu605vvp934xhd4k9dtd640zsep5jkesstdm" + ] + }, + { + "denom": "shd", + "exponent": 8 + } + ], + "type_asset": "ics20", + "address": "secret153wu605vvp934xhd4k9dtd640zsep5jkesstdm", + "base": "ibc/0B3D528E74E3DEAADF8A68F393887AC7E06028904D02173561B0D27F6E751D0A", + "name": "Shade", + "display": "shd", + "symbol": "SHD", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "secretnetwork", + "base_denom": "cw20:secret153wu605vvp934xhd4k9dtd640zsep5jkesstdm", + "port": "wasm.secret1tqmms5awftpuhalcv5h5mg76fa0tkdz4jv9ex4", + "channel_id": "channel-44" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-476", + "path": "transfer/channel-476/cw20:secret153wu605vvp934xhd4k9dtd640zsep5jkesstdm" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/shd.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/shd.svg" + }, + "coingecko_id": "shade-protocol", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB:1170" + ] + }, + { + "description": "The native token of Bluzelle", + "denom_units": [ + { + "denom": "ibc/63CDD51098FD99E04E5F5610A3882CBE7614C441607BA6FCD7F3A3C1CD5325F8", + "exponent": 0, + "aliases": [ + "ubnt" + ] + }, + { + "denom": "bnt", + "exponent": 6, + "aliases": [ + "blz" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/63CDD51098FD99E04E5F5610A3882CBE7614C441607BA6FCD7F3A3C1CD5325F8", + "name": "Bluzelle", + "display": "bnt", + "symbol": "BLZ", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bluzelle", + "base_denom": "ubnt", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-763", + "path": "transfer/channel-763/ubnt" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bluzelle/images/bluzelle.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bluzelle/images/bluzelle.svg" + }, + "coingecko_id": "bluzelle", + "keywords": [ + "bluzelle", + "game", + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:1007" + ] + }, + { + "description": "Native token of Arbitrum", + "denom_units": [ + { + "denom": "ibc/10E5E5B06D78FFBB61FD9F89209DEE5FD4446ED0550CBB8E3747DA79E10D9DC6", + "exponent": 0, + "aliases": [ + "arb-wei" + ] + }, + { + "denom": "arb", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/10E5E5B06D78FFBB61FD9F89209DEE5FD4446ED0550CBB8E3747DA79E10D9DC6", + "name": "Arbitrum", + "display": "arb", + "symbol": "ARB", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "arbitrum", + "base_denom": "0x912CE59144191C1204E64559FE8253a0e49E6548" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "arb-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/arb-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/arbitrum/images/arb.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/arbitrum/images/arb.svg" + }, + "coingecko_id": "arbitrum", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1011" + ] + }, + { + "description": "Silica", + "denom_units": [ + { + "denom": "ibc/5164ECF584AD7DC27DA9E6A89E75DAB0F7C4FCB0A624B69215B8BC6A2C40CD07", + "exponent": 0, + "aliases": [ + "cw20:juno10vgf2u03ufcf25tspgn05l7j3tfg0j63ljgpffy98t697m5r5hmqaw95ux" + ] + }, + { + "denom": "silica", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno10vgf2u03ufcf25tspgn05l7j3tfg0j63ljgpffy98t697m5r5hmqaw95ux", + "base": "ibc/5164ECF584AD7DC27DA9E6A89E75DAB0F7C4FCB0A624B69215B8BC6A2C40CD07", + "name": "Silica", + "display": "silica", + "symbol": "SLCA", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno10vgf2u03ufcf25tspgn05l7j3tfg0j63ljgpffy98t697m5r5hmqaw95ux", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno10vgf2u03ufcf25tspgn05l7j3tfg0j63ljgpffy98t697m5r5hmqaw95ux" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/silica.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/D1542AA8762DB13087D8364F3EA6509FD6F009A34F00426AF9E4F9FA85CBBF1F:1023" + ] + }, + { + "description": "Pepec", + "denom_units": [ + { + "denom": "ibc/C00B17F74C94449A62935B4C886E6F0F643249A270DEF269D53CE6741ECCDB93", + "exponent": 0, + "aliases": [ + "cw20:juno1epxnvge53c4hkcmqzlxryw5fp7eae2utyk6ehjcfpwajwp48km3sgxsh9k" + ] + }, + { + "denom": "pepec", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1epxnvge53c4hkcmqzlxryw5fp7eae2utyk6ehjcfpwajwp48km3sgxsh9k", + "base": "ibc/C00B17F74C94449A62935B4C886E6F0F643249A270DEF269D53CE6741ECCDB93", + "name": "Pepec", + "display": "pepec", + "symbol": "PEPEC", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1epxnvge53c4hkcmqzlxryw5fp7eae2utyk6ehjcfpwajwp48km3sgxsh9k", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1epxnvge53c4hkcmqzlxryw5fp7eae2utyk6ehjcfpwajwp48km3sgxsh9k" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/pepec.png" + }, + "keywords": [ + "osmosis-price:uosmo:1016" + ] + }, + { + "denom_units": [ + { + "denom": "ibc/E47F4E97C534C95B942729E1B25DBDE111EA791411CFF100515050BEA0AC0C6B", + "exponent": 0, + "aliases": [ + "0x6982508145454Ce325dDbE47a25d4ec3d2311933", + "pepe-wei" + ] + }, + { + "denom": "pepe", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/E47F4E97C534C95B942729E1B25DBDE111EA791411CFF100515050BEA0AC0C6B", + "name": "Pepe", + "display": "pepe", + "symbol": "PEPE", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x6982508145454Ce325dDbE47a25d4ec3d2311933" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "pepe-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/pepe-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/pepe.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/pepe.svg" + }, + "coingecko_id": "pepe", + "keywords": [ + "osmosis-main", + "osmosis-price:uosmo:1018" + ] + }, + { + "denom_units": [ + { + "denom": "factory/osmo14klwqgkmackvx2tqa0trtg69dmy0nrg4ntq4gjgw2za4734r5seqjqm4gm/uibcx", + "exponent": 0 + }, + { + "denom": "ibcx", + "exponent": 6 + } + ], + "address": "osmo14klwqgkmackvx2tqa0trtg69dmy0nrg4ntq4gjgw2za4734r5seqjqm4gm", + "base": "factory/osmo14klwqgkmackvx2tqa0trtg69dmy0nrg4ntq4gjgw2za4734r5seqjqm4gm/uibcx", + "name": "IBC Index", + "display": "ibcx", + "symbol": "IBCX", + "traces": [], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ibcx.svg" + }, + "coingecko_id": "ibc-index", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D3B574938631B0A1BA704879020C696E514CFADAA7643CDE4BD5EB010BDE327B:1254" + ] + }, + { + "description": "Coinbase Wrapped Staked ETH (“cbETH”) is a utility token and liquid representation of ETH staked through Coinbase. cbETH gives customers the option to sell, transfer, or otherwise use their staked ETH in dapps while it remains locked by the Ethereum protocol.", + "denom_units": [ + { + "denom": "ibc/4D7A6F2A7744B1534C984A21F9EDFFF8809FC71A9E9243FFB702073E7FCA513A", + "exponent": 0, + "aliases": [ + "0xbe9895146f7af43049ca1c1ae358b0541ea49704", + "cbeth-wei" + ] + }, + { + "denom": "cbeth", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/4D7A6F2A7744B1534C984A21F9EDFFF8809FC71A9E9243FFB702073E7FCA513A", + "name": "Coinbase Wrapped Staked ETH", + "display": "cbeth", + "symbol": "cbETH", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Coinbase" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xbe9895146f7af43049ca1c1ae358b0541ea49704" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "cbeth-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/cbeth-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/cbeth.png" + }, + "coingecko_id": "coinbase-wrapped-staked-eth", + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/B2BD584CD2A0A9CE53D4449667E26160C7D44A9C41AF50F602C201E5B3CCA46C:1030" + ] + }, + { + "description": "Rocket Pool is a decentralised Ethereum Proof of Stake pool.", + "denom_units": [ + { + "denom": "ibc/E610B83FD5544E00A8A1967A2EB3BEF25F1A8CFE8650FE247A8BD4ECA9DC9222", + "exponent": 0, + "aliases": [ + "0xae78736cd615f374d3085123a210448e74fc6393", + "reth-wei" + ] + }, + { + "denom": "reth", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/E610B83FD5544E00A8A1967A2EB3BEF25F1A8CFE8650FE247A8BD4ECA9DC9222", + "name": "Rocket Pool Ether", + "display": "reth", + "symbol": "rETH", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Rocket Pool" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xae78736cd615f374d3085123a210448e74fc6393" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "reth-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/reth-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/reth.png" + }, + "coingecko_id": "rocket-pool-eth", + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/B2BD584CD2A0A9CE53D4449667E26160C7D44A9C41AF50F602C201E5B3CCA46C:1030" + ] + }, + { + "description": "sfrxETH is the version of frxETH which accrues staking yield. All profit generated from Frax Ether validators is distributed to sfrxETH holders. By exchanging frxETH for sfrxETH, one become's eligible for staking yield, which is redeemed upon converting sfrxETH back to frxETH.", + "denom_units": [ + { + "denom": "ibc/81F578C39006EB4B27FFFA9460954527910D73390991B379C03B18934D272F46", + "exponent": 0, + "aliases": [ + "0xac3e018457b222d93114458476f3e3416abbe38f", + "sfrxeth-wei" + ] + }, + { + "denom": "sfrxeth", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/81F578C39006EB4B27FFFA9460954527910D73390991B379C03B18934D272F46", + "name": "Staked Frax Ether", + "display": "sfrxeth", + "symbol": "sfrxETH", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Frax" + }, + { + "type": "wrapped", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x5e8422345238f34275888049021821e8e08caa1f" + }, + "provider": "Frax" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xac3e018457b222d93114458476f3e3416abbe38f" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "sfrxeth-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/sfrxeth-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/sfrxeth.svg" + }, + "coingecko_id": "staked-frax-ether", + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/B2BD584CD2A0A9CE53D4449667E26160C7D44A9C41AF50F602C201E5B3CCA46C:1030" + ] + }, + { + "description": "wstETH is a wrapped version of stETH. As some DeFi protocols require a constant balance mechanism for tokens, wstETH keeps your balance of stETH fixed and uses an underlying share system to reflect your earned staking rewards.", + "denom_units": [ + { + "denom": "ibc/B2BD584CD2A0A9CE53D4449667E26160C7D44A9C41AF50F602C201E5B3CCA46C", + "exponent": 0, + "aliases": [ + "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0", + "wsteth-wei" + ] + }, + { + "denom": "wsteth", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/B2BD584CD2A0A9CE53D4449667E26160C7D44A9C41AF50F602C201E5B3CCA46C", + "name": "Wrapped Lido Staked Ether", + "display": "wsteth", + "symbol": "wstETH.axl", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Lido" + }, + { + "type": "wrapped", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84" + }, + "provider": "Lido" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "wsteth-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/wsteth-wei" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/wstETH.axl.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5:1024" + ] + }, + { + "description": "The native token of Gitopia", + "denom_units": [ + { + "denom": "ibc/B1C1806A540B3E165A2D42222C59946FB85BA325596FC85662D7047649F419F3", + "exponent": 0, + "aliases": [ + "ulore" + ] + }, + { + "denom": "LORE", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/B1C1806A540B3E165A2D42222C59946FB85BA325596FC85662D7047649F419F3", + "name": "Gitopia", + "display": "LORE", + "symbol": "LORE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "gitopia", + "base_denom": "ulore", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-781", + "path": "transfer/channel-781/ulore" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/gitopia/images/lore.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/gitopia/images/lore.svg" + }, + "coingecko_id": "gitopia", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1036" + ] + }, + { + "description": "Lion DAO is a community DAO that lives on the Terra blockchain with the mission to reactivate the LUNAtic community and showcase Terra protocols & tooling", + "denom_units": [ + { + "denom": "ibc/98BCD43F190C6960D0005BC46BB765C827403A361C9C03C2FF694150A30284B0", + "exponent": 0, + "aliases": [ + "cw20:terra1lxx40s29qvkrcj8fsa3yzyehy7w50umdvvnls2r830rys6lu2zns63eelv" + ] + }, + { + "denom": "roar", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "terra1lxx40s29qvkrcj8fsa3yzyehy7w50umdvvnls2r830rys6lu2zns63eelv", + "base": "ibc/98BCD43F190C6960D0005BC46BB765C827403A361C9C03C2FF694150A30284B0", + "name": "Lion DAO", + "display": "roar", + "symbol": "ROAR", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "terra2", + "base_denom": "cw20:terra1lxx40s29qvkrcj8fsa3yzyehy7w50umdvvnls2r830rys6lu2zns63eelv", + "port": "wasm.terra1e0mrzy8077druuu42vs0hu7ugguade0cj65dgtauyaw4gsl4kv0qtdf2au", + "channel_id": "channel-26" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-341", + "path": "transfer/channel-341/cw20:terra1lxx40s29qvkrcj8fsa3yzyehy7w50umdvvnls2r830rys6lu2zns63eelv" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/roar.png" + }, + "coingecko_id": "lion-dao", + "keywords": [ + "osmosis-main", + "osmosis-price:uosmo:1043" + ] + }, + { + "description": "The native token of Umee", + "denom_units": [ + { + "denom": "ibc/02F196DA6FD0917DD5FEA249EE61880F4D941EE9059E7964C5C9B50AF103800F", + "exponent": 0, + "aliases": [ + "stuumee" + ] + }, + { + "denom": "stumee", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/02F196DA6FD0917DD5FEA249EE61880F4D941EE9059E7964C5C9B50AF103800F", + "name": "Stride Staked UMEE", + "display": "stumee", + "symbol": "stUMEE", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "umee", + "base_denom": "uumee" + }, + "provider": "Stride" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "stuumee", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/stuumee" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stumee.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stumee.svg" + }, + "coingecko_id": "stride-staked-umee", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/67795E528DF67C5606FC20F824EA39A6EF55BA133F4DC79C90A8C47A0901E17C:1035" + ] + }, + { + "denom_units": [ + { + "denom": "factory/osmo1xqw2sl9zk8a6pch0csaw78n4swg5ws8t62wc5qta4gnjxfqg6v2qcs243k/stuibcx", + "exponent": 0 + }, + { + "denom": "stibcx", + "exponent": 6 + } + ], + "address": "osmo1xqw2sl9zk8a6pch0csaw78n4swg5ws8t62wc5qta4gnjxfqg6v2qcs243k", + "base": "factory/osmo1xqw2sl9zk8a6pch0csaw78n4swg5ws8t62wc5qta4gnjxfqg6v2qcs243k/stuibcx", + "name": "Staked IBCX", + "display": "stibcx", + "symbol": "stIBCX", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/stibcx.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/stibcx.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1107" + ] + }, + { + "description": "The native token of Nolus chain", + "denom_units": [ + { + "denom": "ibc/D9AFCECDD361D38302AA66EB3BAC23B95234832C51D12489DC451FA2B7C72782", + "exponent": 0, + "aliases": [ + "unls" + ] + }, + { + "denom": "nls", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/D9AFCECDD361D38302AA66EB3BAC23B95234832C51D12489DC451FA2B7C72782", + "name": "Nolus", + "display": "nls", + "symbol": "NLS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "nolus", + "base_denom": "unls", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-783", + "path": "transfer/channel-783/unls" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nolus/images/nolus.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nolus/images/nolus.svg" + }, + "coingecko_id": "nolus", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:1041" + ] + }, + { + "description": "Lion Cub DAO is a useless meme community DAO on Terra", + "denom_units": [ + { + "denom": "ibc/6F18EFEBF1688AA77F7EAC17065609494DC1BA12AFC78E9AEC832AF70A11BEF3", + "exponent": 0, + "aliases": [ + "cw20:terra1lalvk0r6nhruel7fvzdppk3tup3mh5j4d4eadrqzfhle4zrf52as58hh9t" + ] + }, + { + "denom": "cub", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "terra1lalvk0r6nhruel7fvzdppk3tup3mh5j4d4eadrqzfhle4zrf52as58hh9t", + "base": "ibc/6F18EFEBF1688AA77F7EAC17065609494DC1BA12AFC78E9AEC832AF70A11BEF3", + "name": "Lion Cub DAO", + "display": "cub", + "symbol": "CUB", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "terra2", + "base_denom": "cw20:terra1lalvk0r6nhruel7fvzdppk3tup3mh5j4d4eadrqzfhle4zrf52as58hh9t", + "port": "wasm.terra1e0mrzy8077druuu42vs0hu7ugguade0cj65dgtauyaw4gsl4kv0qtdf2au", + "channel_id": "channel-26" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-341", + "path": "transfer/channel-341/cw20:terra1lalvk0r6nhruel7fvzdppk3tup3mh5j4d4eadrqzfhle4zrf52as58hh9t" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/cub.png" + }, + "keywords": [ + "osmosis-price:ibc/785AFEC6B3741100D15E7AF01374E3C4C36F24888E96479B1C33F5C71F364EF9:1072" + ] + }, + { + "description": "BLUE CUB DAO is a community DAO on Terra", + "denom_units": [ + { + "denom": "ibc/DA961FE314B009C38595FFE3AF41225D8894D663B8C3F6650DCB5B6F8435592E", + "exponent": 0, + "aliases": [ + "cw20:terra1gwrz9xzhqsygyr5asrgyq3pu0ewpn00mv2zenu86yvx2nlwpe8lqppv584" + ] + }, + { + "denom": "blue", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "terra1gwrz9xzhqsygyr5asrgyq3pu0ewpn00mv2zenu86yvx2nlwpe8lqppv584", + "base": "ibc/DA961FE314B009C38595FFE3AF41225D8894D663B8C3F6650DCB5B6F8435592E", + "name": "BLUE CUB DAO", + "display": "blue", + "symbol": "BLUE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "terra2", + "base_denom": "cw20:terra1gwrz9xzhqsygyr5asrgyq3pu0ewpn00mv2zenu86yvx2nlwpe8lqppv584", + "port": "wasm.terra1e0mrzy8077druuu42vs0hu7ugguade0cj65dgtauyaw4gsl4kv0qtdf2au", + "channel_id": "channel-26" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-341", + "path": "transfer/channel-341/cw20:terra1gwrz9xzhqsygyr5asrgyq3pu0ewpn00mv2zenu86yvx2nlwpe8lqppv584" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/blue.png" + }, + "keywords": [ + "osmosis-price:ibc/785AFEC6B3741100D15E7AF01374E3C4C36F24888E96479B1C33F5C71F364EF9:1073" + ] + }, + { + "description": "The native token of Neutron chain.", + "denom_units": [ + { + "denom": "ibc/126DA09104B71B164883842B769C0E9EC1486C0887D27A9999E395C2C8FB5682", + "exponent": 0, + "aliases": [ + "untrn" + ] + }, + { + "denom": "ntrn", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/126DA09104B71B164883842B769C0E9EC1486C0887D27A9999E395C2C8FB5682", + "name": "Neutron", + "display": "ntrn", + "symbol": "NTRN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "neutron", + "base_denom": "untrn", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-874", + "path": "transfer/channel-874/untrn" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.svg" + }, + "coingecko_id": "neutron-3", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1324" + ] + }, + { + "description": "An innovative DAO dedicated to housing the most vulnerable", + "denom_units": [ + { + "denom": "ibc/2F5C084037D951B24D100F15CC013A131DF786DCE1B1DBDC48F018A9B9A138DE", + "exponent": 0, + "aliases": [ + "cw20:juno1ju8k8sqwsqu5k6umrypmtyqu2wqcpnrkf4w4mntvl0javt4nma7s8lzgss" + ] + }, + { + "denom": "casa", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1ju8k8sqwsqu5k6umrypmtyqu2wqcpnrkf4w4mntvl0javt4nma7s8lzgss", + "base": "ibc/2F5C084037D951B24D100F15CC013A131DF786DCE1B1DBDC48F018A9B9A138DE", + "name": "Casa", + "display": "casa", + "symbol": "CASA", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1ju8k8sqwsqu5k6umrypmtyqu2wqcpnrkf4w4mntvl0javt4nma7s8lzgss", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1ju8k8sqwsqu5k6umrypmtyqu2wqcpnrkf4w4mntvl0javt4nma7s8lzgss" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/casa.png" + }, + "keywords": [ + "osmosis-price:uosmo:1028" + ] + }, + { + "description": "The native staking and governance token of Composable.", + "denom_units": [ + { + "denom": "ibc/56D7C03B8F6A07AD322EEE1BEF3AE996E09D1C1E34C27CF37E0D4A0AC5972516", + "exponent": 0, + "aliases": [ + "ppica" + ] + }, + { + "denom": "pica", + "exponent": 12 + } + ], + "type_asset": "ics20", + "base": "ibc/56D7C03B8F6A07AD322EEE1BEF3AE996E09D1C1E34C27CF37E0D4A0AC5972516", + "name": "Composable", + "display": "pica", + "symbol": "PICA", + "traces": [ + { + "type": "additional-mintage", + "counterparty": { + "chain_name": "picasso", + "base_denom": "ppica" + }, + "provider": "Composable Finance" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "composable", + "base_denom": "ppica", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-1279", + "path": "transfer/channel-1279/ppica" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/composable/images/pica.svg" + }, + "coingecko_id": "picasso", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1057" + ] + }, + { + "description": "The native fee, governance, staking, and bonding token of the Polkadot platform.", + "denom_units": [ + { + "denom": "ibc/6727B2F071643B3841BD535ECDD4ED9CAE52ABDD0DCD07C3630811A7A37B215C", + "exponent": 0, + "aliases": [ + "4", + "ibc/EE9046745AEC0E8302CB7ED9D5AD67F528FB3B7AE044B247FB0FB293DBDA35E9" + ] + }, + { + "denom": "ksm", + "exponent": 12 + } + ], + "type_asset": "ics20", + "base": "ibc/6727B2F071643B3841BD535ECDD4ED9CAE52ABDD0DCD07C3630811A7A37B215C", + "name": "Kusama", + "display": "ksm", + "symbol": "KSM", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "kusama", + "base_denom": "Planck" + }, + "provider": "Kusama Parachain" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "picasso", + "base_denom": "4", + "channel_id": "channel-17" + }, + "chain": { + "channel_id": "channel-2", + "path": "transfer/channel-2/4" + } + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "composable", + "base_denom": "ibc/EE9046745AEC0E8302CB7ED9D5AD67F528FB3B7AE044B247FB0FB293DBDA35E9", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-1279", + "path": "transfer/channel-1279/transfer/channel-2/4" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/kusama/images/ksm.svg" + }, + "coingecko_id": "kusama", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1151" + ] + }, + { + "description": "The native fee, governance, staking, and bonding token of the Polkadot platform.", + "denom_units": [ + { + "denom": "ibc/6B2B19D874851F631FF0AF82C38A20D4B82F438C7A22F41EDA33568345397244", + "exponent": 0, + "aliases": [ + "79228162514264337593543950342", + "ibc/3CC19CEC7E5A3E90E78A5A9ECC5A0E2F8F826A375CF1E096F4515CF09DA3E366" + ] + }, + { + "denom": "dot", + "exponent": 10 + } + ], + "type_asset": "ics20", + "base": "ibc/6B2B19D874851F631FF0AF82C38A20D4B82F438C7A22F41EDA33568345397244", + "name": "Polkadot", + "display": "dot", + "symbol": "DOT", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "polkadot", + "base_denom": "Planck" + }, + "provider": "Polkadot Relay" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "composablepolkadot", + "base_denom": "79228162514264337593543950342", + "channel_id": "channel-15" + }, + "chain": { + "channel_id": "channel-15", + "path": "transfer/channel-15/79228162514264337593543950342" + } + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "picasso", + "base_denom": "79228162514264337593543950342", + "channel_id": "channel-17" + }, + "chain": { + "channel_id": "channel-2", + "path": "transfer/channel-2/transfer/channel-15/79228162514264337593543950342" + } + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "composable", + "base_denom": "ibc/3CC19CEC7E5A3E90E78A5A9ECC5A0E2F8F826A375CF1E096F4515CF09DA3E366", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-1279", + "path": "transfer/channel-1279/transfer/channel-2/transfer/channel-15/79228162514264337593543950342" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/polkadot/images/dot.svg" + }, + "coingecko_id": "polkadot", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1145" + ] + }, + { + "description": "The native token of Quasar", + "denom_units": [ + { + "denom": "ibc/1B708808D372E959CD4839C594960309283424C775F4A038AAEBE7F83A988477", + "exponent": 0, + "aliases": [ + "uqsr" + ] + }, + { + "denom": "qsr", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "base": "ibc/1B708808D372E959CD4839C594960309283424C775F4A038AAEBE7F83A988477", + "name": "Quasar", + "display": "qsr", + "symbol": "QSR", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "quasar", + "base_denom": "uqsr", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-688", + "path": "transfer/channel-688/uqsr" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quasar/images/quasar.png" + }, + "coingecko_id": "quasar-2", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1314" + ] + }, + { + "description": "The native token of Archway network", + "denom_units": [ + { + "denom": "ibc/23AB778D694C1ECFC59B91D8C399C115CC53B0BD1C61020D8E19519F002BDD85", + "exponent": 0, + "aliases": [ + "aarch" + ] + }, + { + "denom": "uarch", + "exponent": 12 + }, + { + "denom": "arch", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/23AB778D694C1ECFC59B91D8C399C115CC53B0BD1C61020D8E19519F002BDD85", + "name": "Archway", + "display": "arch", + "symbol": "ARCH", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "archway", + "base_denom": "aarch", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-1429", + "path": "transfer/channel-1429/aarch" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/archway/images/archway.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/archway/images/archway.svg" + }, + "coingecko_id": "archway", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1375" + ] + }, + { + "description": "The native staking and governance token of Empower.", + "denom_units": [ + { + "denom": "ibc/DD3938D8131F41994C1F01F4EB5233DEE9A0A5B787545B9A07A321925655BF38", + "exponent": 0, + "aliases": [ + "umpwr" + ] + }, + { + "denom": "mpwr", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/DD3938D8131F41994C1F01F4EB5233DEE9A0A5B787545B9A07A321925655BF38", + "name": "EmpowerChain", + "display": "mpwr", + "symbol": "MPWR", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "empowerchain", + "base_denom": "umpwr", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-1411", + "path": "transfer/channel-1411/umpwr" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/empowerchain/images/mpwr.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1065" + ] + }, + { + "description": "A revolutionary DAO created to bring clean drinking water to men, women, and children worldwide. We hope you join us on our journey!", + "denom_units": [ + { + "denom": "ibc/AABCB14ACAFD53A5C455BAC01EA0CA5AE18714895846681A52BFF1E3B960B44E", + "exponent": 0, + "aliases": [ + "cw20:juno1m4h8q4p305wgy7vkux0w6e5ylhqll3s6pmadhxkhqtuwd5wlxhxs8xklsw" + ] + }, + { + "denom": "watr", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1m4h8q4p305wgy7vkux0w6e5ylhqll3s6pmadhxkhqtuwd5wlxhxs8xklsw", + "base": "ibc/AABCB14ACAFD53A5C455BAC01EA0CA5AE18714895846681A52BFF1E3B960B44E", + "name": "WATR", + "display": "watr", + "symbol": "WATR", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1m4h8q4p305wgy7vkux0w6e5ylhqll3s6pmadhxkhqtuwd5wlxhxs8xklsw", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1m4h8q4p305wgy7vkux0w6e5ylhqll3s6pmadhxkhqtuwd5wlxhxs8xklsw" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/watr.png" + }, + "keywords": [ + "osmosis-price:uosmo:1071" + ] + }, + { + "description": "The native utility token of the KYVE network.", + "denom_units": [ + { + "denom": "ibc/613BF0BF2F2146AE9941E923725745E931676B2C14E9768CD609FA0849B2AE13", + "exponent": 0, + "aliases": [ + "ukyve" + ] + }, + { + "denom": "kyve", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/613BF0BF2F2146AE9941E923725745E931676B2C14E9768CD609FA0849B2AE13", + "name": "KYVE", + "display": "kyve", + "symbol": "KYVE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kyve", + "base_denom": "ukyve", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-767", + "path": "transfer/channel-767/ukyve" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kyve/images/kyve-token.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kyve/images/kyve-token.svg" + }, + "coingecko_id": "kyve-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1075" + ] + }, + { + "description": "Tether gives you the joint benefits of open blockchain technology and traditional currency by converting your cash into a stable digital currency equivalent.", + "denom_units": [ + { + "denom": "ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB", + "exponent": 0, + "aliases": [ + "erc20/tether/usdt" + ] + }, + { + "denom": "usdt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB", + "name": "Tether USD", + "display": "usdt", + "symbol": "USDT", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Tether" + }, + { + "type": "additional-mintage", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xdac17f958d2ee523a2206206994597c13d831ec7" + }, + "provider": "Tether" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "kava", + "base_denom": "erc20/tether/usdt", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-143", + "path": "transfer/channel-143/erc20/tether/usdt" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdt.svg" + }, + "coingecko_id": "tether", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1220", + "peg:collateralized" + ] + }, + { + "description": "ERIS liquid staked OSMO", + "denom_units": [ + { + "denom": "factory/osmo1dv8wz09tckslr2wy5z86r46dxvegylhpt97r9yd6qc3kyc6tv42qa89dr9/ampOSMO", + "exponent": 0 + }, + { + "denom": "ampOSMO", + "exponent": 6 + } + ], + "address": "osmo1dv8wz09tckslr2wy5z86r46dxvegylhpt97r9yd6qc3kyc6tv42qa89dr9", + "base": "factory/osmo1dv8wz09tckslr2wy5z86r46dxvegylhpt97r9yd6qc3kyc6tv42qa89dr9/ampOSMO", + "name": "ERIS Amplified OSMO", + "display": "ampOSMO", + "symbol": "ampOSMO", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/amposmo.png" + }, + "keywords": [ + "osmosis-main", + "osmosis-price:uosmo:1067" + ] + }, + { + "description": "The native staking token of Sei.", + "denom_units": [ + { + "denom": "ibc/71F11BC0AF8E526B80E44172EBA9D3F0A8E03950BB882325435691EBC9450B1D", + "exponent": 0, + "aliases": [ + "usei" + ] + }, + { + "denom": "sei", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/71F11BC0AF8E526B80E44172EBA9D3F0A8E03950BB882325435691EBC9450B1D", + "name": "Sei", + "display": "sei", + "symbol": "SEI", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "sei", + "base_denom": "usei", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-782", + "path": "transfer/channel-782/usei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/sei.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/sei.svg" + }, + "coingecko_id": "sei-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1114" + ] + }, + { + "description": "Quicksilver Liquid Staked SOMM", + "denom_units": [ + { + "denom": "ibc/EAF76AD1EEF7B16D167D87711FB26ABE881AC7D9F7E6D0CF313D5FA530417208", + "exponent": 0, + "aliases": [ + "uqsomm" + ] + }, + { + "denom": "qsomm", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "base": "ibc/EAF76AD1EEF7B16D167D87711FB26ABE881AC7D9F7E6D0CF313D5FA530417208", + "name": "Quicksilver Liquid Staked SOMM", + "display": "qsomm", + "symbol": "qSOMM", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "sommelier", + "base_denom": "usomm" + }, + "provider": "Quicksilver" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "quicksilver", + "base_denom": "uqsomm", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-522", + "path": "transfer/channel-522/uqsomm" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qsomm.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/quicksilver/images/qsomm.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/9BBA9A1C257E971E38C1422780CE6F0B0686F0A3085E2D61118D904BFE0F5F5E:1087" + ] + }, + { + "description": "The native staking and governance token of the Passage chain.", + "denom_units": [ + { + "denom": "ibc/208B2F137CDE510B44C41947C045CFDC27F996A9D990EA64460BDD5B3DBEB2ED", + "exponent": 0, + "aliases": [ + "upasg" + ] + }, + { + "denom": "pasg", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/208B2F137CDE510B44C41947C045CFDC27F996A9D990EA64460BDD5B3DBEB2ED", + "name": "Passage", + "display": "pasg", + "symbol": "PASG", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "passage", + "base_denom": "upasg", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-2494", + "path": "transfer/channel-2494/upasg" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/passage/images/pasg.png" + }, + "coingecko_id": "passage", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:1137" + ] + }, + { + "description": "Somm Token (SOMM) is the native staking token of the Sommelier Chain", + "denom_units": [ + { + "denom": "ibc/5A0060579D24FBE5268BEA74C3281E7FE533D361C41A99307B4998FEC611E46B", + "exponent": 0, + "aliases": [ + "stusomm" + ] + }, + { + "denom": "stsomm", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/5A0060579D24FBE5268BEA74C3281E7FE533D361C41A99307B4998FEC611E46B", + "name": "Stride Staked SOMM", + "display": "stsomm", + "symbol": "stSOMM", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "sommelier", + "base_denom": "usomm" + }, + "provider": "Stride" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stride", + "base_denom": "stusomm", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-326", + "path": "transfer/channel-326/stusomm" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stsomm.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stsomm.svg" + }, + "coingecko_id": "stride-staked-sommelier", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/9BBA9A1C257E971E38C1422780CE6F0B0686F0A3085E2D61118D904BFE0F5F5E:1120" + ] + }, + { + "description": "Solana (SOL) is the native asset of the Solana blockchain.", + "denom_units": [ + { + "denom": "ibc/1E43D59E565D41FB4E54CA639B838FFD5BCFC20003D330A56CB1396231AA1CBA", + "exponent": 0, + "aliases": [ + "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8sYgCzLRJC3J7qPn2bNbx6PiGcarhyx8rBhVaNnfvHCA" + ] + }, + { + "denom": "wormhole/8sYgCzLRJC3J7qPn2bNbx6PiGcarhyx8rBhVaNnfvHCA/8", + "exponent": 8, + "aliases": [] + } + ], + "type_asset": "ics20", + "address": "wormhole1wn625s4jcmvk0szpl85rj5azkfc6suyvf75q6vrddscjdphtve8sca0pvl", + "base": "ibc/1E43D59E565D41FB4E54CA639B838FFD5BCFC20003D330A56CB1396231AA1CBA", + "name": "Solana", + "display": "wormhole/8sYgCzLRJC3J7qPn2bNbx6PiGcarhyx8rBhVaNnfvHCA/8", + "symbol": "SOL", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "solana", + "base_denom": "Lamport" + }, + "provider": "Solana" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "solana", + "base_denom": "So11111111111111111111111111111111111111112" + }, + "provider": "Wormhole" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gateway", + "base_denom": "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8sYgCzLRJC3J7qPn2bNbx6PiGcarhyx8rBhVaNnfvHCA", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-2186", + "path": "transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8sYgCzLRJC3J7qPn2bNbx6PiGcarhyx8rBhVaNnfvHCA" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/solana/images/sol.svg" + }, + "coingecko_id": "solana", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1294" + ] + }, + { + "description": "The Official Bonk Inu token", + "denom_units": [ + { + "denom": "ibc/CA3733CB0071F480FAE8EF0D9C3D47A49C6589144620A642BBE0D59A293D110E", + "exponent": 0, + "aliases": [ + "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/95mnwzvJZJ3fKz77xfGN2nR5to9pZmH8YNvaxgLgw5AR" + ] + }, + { + "denom": "wormhole/95mnwzvJZJ3fKz77xfGN2nR5to9pZmH8YNvaxgLgw5AR/5", + "exponent": 5, + "aliases": [] + } + ], + "type_asset": "ics20", + "address": "wormhole10qt8wg0n7z740ssvf3urmvgtjhxpyp74hxqvqt7z226gykuus7eq9mpu8u", + "base": "ibc/CA3733CB0071F480FAE8EF0D9C3D47A49C6589144620A642BBE0D59A293D110E", + "name": "Bonk", + "display": "wormhole/95mnwzvJZJ3fKz77xfGN2nR5to9pZmH8YNvaxgLgw5AR/5", + "symbol": "BONK", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "solana", + "base_denom": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263" + }, + "provider": "Wormhole" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gateway", + "base_denom": "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/95mnwzvJZJ3fKz77xfGN2nR5to9pZmH8YNvaxgLgw5AR", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-2186", + "path": "transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/95mnwzvJZJ3fKz77xfGN2nR5to9pZmH8YNvaxgLgw5AR" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/solana/images/bonk.png" + }, + "coingecko_id": "bonk", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB:1129" + ] + }, + { + "description": "Tether USD (Wormhole), USDT, factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8iuAc6DSeLvi2JDUtwJxLytsZT8R19itXebZsNReLLNi", + "denom_units": [ + { + "denom": "ibc/2108F2D81CBE328F371AD0CEF56691B18A86E08C3651504E42487D9EE92DDE9C", + "exponent": 0, + "aliases": [ + "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8iuAc6DSeLvi2JDUtwJxLytsZT8R19itXebZsNReLLNi" + ] + }, + { + "denom": "wormhole/8iuAc6DSeLvi2JDUtwJxLytsZT8R19itXebZsNReLLNi/6", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "address": "wormhole1w27ekqvvtzfanfxnkw4jx2f8gdfeqwd3drkee3e64xat6phwjg0savgmhw", + "base": "ibc/2108F2D81CBE328F371AD0CEF56691B18A86E08C3651504E42487D9EE92DDE9C", + "name": "Tether USD (Wormhole)", + "display": "wormhole/8iuAc6DSeLvi2JDUtwJxLytsZT8R19itXebZsNReLLNi/6", + "symbol": "USDT.wh", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Tether" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xdac17f958d2ee523a2206206994597c13d831ec7" + }, + "provider": "Wormhole" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gateway", + "base_denom": "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8iuAc6DSeLvi2JDUtwJxLytsZT8R19itXebZsNReLLNi", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-2186", + "path": "transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8iuAc6DSeLvi2JDUtwJxLytsZT8R19itXebZsNReLLNi" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/usdt.hole.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB:1131" + ] + }, + { + "description": "Sui’s native asset is called SUI.", + "denom_units": [ + { + "denom": "ibc/B1C287C2701774522570010EEBCD864BCB7AB714711B3AA218699FDD75E832F5", + "exponent": 0, + "aliases": [ + "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/46YEtoSN1AcwgGSRoWruoS6bnVh8XpMp5aQTpKohCJYh" + ] + }, + { + "denom": "wormhole/46YEtoSN1AcwgGSRoWruoS6bnVh8XpMp5aQTpKohCJYh/8", + "exponent": 8, + "aliases": [] + } + ], + "type_asset": "ics20", + "address": "wormhole19hlynxzedrlqv99v6qscww7d3crhl86qtd0vprpltg5g9xx6jk9q6ya33y", + "base": "ibc/B1C287C2701774522570010EEBCD864BCB7AB714711B3AA218699FDD75E832F5", + "name": "Sui", + "display": "wormhole/46YEtoSN1AcwgGSRoWruoS6bnVh8XpMp5aQTpKohCJYh/8", + "symbol": "SUI", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "sui", + "base_denom": "0x2::sui::SUI" + }, + "provider": "Wormhole" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gateway", + "base_denom": "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/46YEtoSN1AcwgGSRoWruoS6bnVh8XpMp5aQTpKohCJYh", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-2186", + "path": "transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/46YEtoSN1AcwgGSRoWruoS6bnVh8XpMp5aQTpKohCJYh" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/sui/images/sui.svg" + }, + "coingecko_id": "sui", + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB:1127" + ] + }, + { + "description": "Aptos token (APT) is the Aptos blockchain native token used for paying network and transaction fees.", + "denom_units": [ + { + "denom": "ibc/A4D176906C1646949574B48C1928D475F2DF56DE0AC04E1C99B08F90BC21ABDE", + "exponent": 0, + "aliases": [ + "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5wS2fGojbL9RhGEAeQBdkHPUAciYDxjDTMYvdf9aDn2r" + ] + }, + { + "denom": "wormhole/5wS2fGojbL9RhGEAeQBdkHPUAciYDxjDTMYvdf9aDn2r/8", + "exponent": 8, + "aliases": [] + } + ], + "type_asset": "ics20", + "address": "wormhole1f9sxjn0qu8xylcpzlvnhrefnatndqxnrajfrnr5h97hegnmsdqhsh6juc0", + "base": "ibc/A4D176906C1646949574B48C1928D475F2DF56DE0AC04E1C99B08F90BC21ABDE", + "name": "Aptos Coin", + "display": "wormhole/5wS2fGojbL9RhGEAeQBdkHPUAciYDxjDTMYvdf9aDn2r/8", + "symbol": "APT", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "aptos", + "base_denom": "0x1::aptos_coin::AptosCoin" + }, + "provider": "Wormhole" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gateway", + "base_denom": "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5wS2fGojbL9RhGEAeQBdkHPUAciYDxjDTMYvdf9aDn2r", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-2186", + "path": "transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5wS2fGojbL9RhGEAeQBdkHPUAciYDxjDTMYvdf9aDn2r" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/aptos/images/apt-dm.svg" + }, + "coingecko_id": "aptos", + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB:1125" + ] + }, + { + "description": "MantaDAO Governance Token", + "denom_units": [ + { + "denom": "ibc/51D893F870B7675E507E91DA8DB0B22EA66333207E4F5C0708757F08EE059B0B", + "exponent": 0, + "aliases": [ + "factory/kujira1643jxg8wasy5cfcn7xm8rd742yeazcksqlg4d7/umnta" + ] + }, + { + "denom": "mnta", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/51D893F870B7675E507E91DA8DB0B22EA66333207E4F5C0708757F08EE059B0B", + "name": "MantaDAO", + "display": "mnta", + "symbol": "MNTA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kujira", + "base_denom": "factory/kujira1643jxg8wasy5cfcn7xm8rd742yeazcksqlg4d7/umnta", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-259", + "path": "transfer/channel-259/factory:kujira1643jxg8wasy5cfcn7xm8rd742yeazcksqlg4d7:umnta" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/mnta.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/mnta.svg" + }, + "coingecko_id": "mantadao", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1215" + ] + }, + { + "denom_units": [ + { + "denom": "ibc/D69F6D787EC649F4E998161A9F0646F4C2DCC64748A2AB982F14CAFBA7CC0EC9", + "exponent": 0, + "aliases": [ + "factory/juno1u805lv20qc6jy7c3ttre7nct6uyl20pfky5r7e/DGL" + ] + }, + { + "denom": "dgl", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1u805lv20qc6jy7c3ttre7nct6uyl20pfky5r7e", + "base": "ibc/D69F6D787EC649F4E998161A9F0646F4C2DCC64748A2AB982F14CAFBA7CC0EC9", + "name": "Licorice", + "display": "dgl", + "symbol": "DGL", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "juno", + "base_denom": "factory/juno1u805lv20qc6jy7c3ttre7nct6uyl20pfky5r7e/DGL", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-42", + "path": "transfer/channel-42/factory/juno1u805lv20qc6jy7c3ttre7nct6uyl20pfky5r7e/DGL" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/dgl.png" + }, + "keywords": [ + "osmosis-price:uosmo:1143" + ] + }, + { + "description": "USD Coin (Wormhole), USDC, factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/GGh9Ufn1SeDGrhzEkMyRKt5568VbbxZK2yvWNsd6PbXt", + "denom_units": [ + { + "denom": "ibc/6B99DB46AA9FF47162148C1726866919E44A6A5E0274B90912FD17E19A337695", + "exponent": 0, + "aliases": [ + "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/GGh9Ufn1SeDGrhzEkMyRKt5568VbbxZK2yvWNsd6PbXt" + ] + }, + { + "denom": "wormhole/GGh9Ufn1SeDGrhzEkMyRKt5568VbbxZK2yvWNsd6PbXt/6", + "exponent": 6, + "aliases": [] + } + ], + "type_asset": "ics20", + "address": "wormhole1utjx3594tlvfw4375esgu72wa4sdgf0q7x4ye27husf5kvuzp5rsr72gdq", + "base": "ibc/6B99DB46AA9FF47162148C1726866919E44A6A5E0274B90912FD17E19A337695", + "name": "USD Coin (Wormhole)", + "display": "wormhole/GGh9Ufn1SeDGrhzEkMyRKt5568VbbxZK2yvWNsd6PbXt/6", + "symbol": "USDC.wh", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Circle" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + }, + "provider": "Wormhole" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gateway", + "base_denom": "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/GGh9Ufn1SeDGrhzEkMyRKt5568VbbxZK2yvWNsd6PbXt", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-2186", + "path": "transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/GGh9Ufn1SeDGrhzEkMyRKt5568VbbxZK2yvWNsd6PbXt" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/usdc.hole.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1216" + ] + }, + { + "description": "Wrapped Ether (Wormhole), WETH, factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5BWqpR48Lubd55szM5i62zK7TFkddckhbT48yy6mNbDp", + "denom_units": [ + { + "denom": "ibc/62F82550D0B96522361C89B0DA1119DE262FBDFB25E5502BC5101B5C0D0DBAAC", + "exponent": 0, + "aliases": [ + "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5BWqpR48Lubd55szM5i62zK7TFkddckhbT48yy6mNbDp" + ] + }, + { + "denom": "wormhole/5BWqpR48Lubd55szM5i62zK7TFkddckhbT48yy6mNbDp/8", + "exponent": 8, + "aliases": [] + } + ], + "type_asset": "ics20", + "address": "wormhole18csycs4vm6varkp00apuqlsm7v4twg8jsljk8wfdd7cghr7g4rtslwqndm", + "base": "ibc/62F82550D0B96522361C89B0DA1119DE262FBDFB25E5502BC5101B5C0D0DBAAC", + "name": "Wrapped Ether (Wormhole)", + "display": "wormhole/5BWqpR48Lubd55szM5i62zK7TFkddckhbT48yy6mNbDp/8", + "symbol": "wETH.wh", + "traces": [ + { + "type": "wrapped", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Ethereum" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + }, + "provider": "Wormhole" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gateway", + "base_denom": "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5BWqpR48Lubd55szM5i62zK7TFkddckhbT48yy6mNbDp", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-2186", + "path": "transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/5BWqpR48Lubd55szM5i62zK7TFkddckhbT48yy6mNbDp" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/weth.hole.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5:1214" + ] + }, + { + "description": "USDC is a fully collateralized US Dollar stablecoin developed by CENTRE, the open source project with Circle being the first of several forthcoming issuers.", + "denom_units": [ + { + "denom": "ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4", + "exponent": 0, + "aliases": [ + "microusdc", + "uusdc" + ] + }, + { + "denom": "usdc", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4", + "name": "USD Coin", + "display": "usdc", + "symbol": "USDC", + "traces": [ + { + "type": "synthetic", + "counterparty": { + "chain_name": "forex", + "base_denom": "USD" + }, + "provider": "Circle" + }, + { + "type": "additional-mintage", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + }, + "provider": "Circle" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "noble", + "base_denom": "uusdc", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-750", + "path": "transfer/channel-750/uusdc" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdc.svg" + }, + "coingecko_id": "usd-coin", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:1223" + ] + }, + { + "description": "Maximize ETH yield through leveraged staking across Aave, Compound and Morpho and liquidity provision of ETH liquid staking tokens on Uniswap V3.", + "denom_units": [ + { + "denom": "ibc/FBB3FEF80ED2344D821D4F95C31DBFD33E4E31D5324CAD94EF756E67B749F668", + "exponent": 0, + "aliases": [ + "0xb5b29320d2Dde5BA5BAFA1EbcD270052070483ec", + "yieldeth-wei" + ] + }, + { + "denom": "YieldETH", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/FBB3FEF80ED2344D821D4F95C31DBFD33E4E31D5324CAD94EF756E67B749F668", + "name": "Real Yield ETH", + "display": "YieldETH", + "symbol": "YieldETH", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Seven Seas & DeFine Logic Labs" + }, + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xb5b29320d2Dde5BA5BAFA1EbcD270052070483ec" + }, + "provider": "Axelar" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "axelar", + "base_denom": "yieldeth-wei", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-208", + "path": "transfer/channel-208/yieldeth-wei" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/yieldeth.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/yieldeth.svg" + }, + "coingecko_id": "yieldeth-sommelier", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5:1213" + ] + }, + { + "description": "The native staking token of XPLA.", + "denom_units": [ + { + "denom": "ibc/95C9B5870F95E21A242E6AF9ADCB1F212EE4A8855087226C36FBE43FC41A77B8", + "exponent": 0, + "aliases": [ + "axpla" + ] + }, + { + "denom": "xpla", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/95C9B5870F95E21A242E6AF9ADCB1F212EE4A8855087226C36FBE43FC41A77B8", + "name": "XPLA", + "display": "xpla", + "symbol": "XPLA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "xpla", + "base_denom": "axpla", + "channel_id": "channel-9" + }, + "chain": { + "channel_id": "channel-1634", + "path": "transfer/channel-1634/axpla" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/xpla/images/xpla.svg" + }, + "coingecko_id": "xpla", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1173" + ] + }, + { + "description": "OIN Token ($OIN) is a groundbreaking digital asset developed on the $SEI Blockchain. It transcends being merely a cryptocurrency; $OIN stands as a robust store of value, symbolizing the future of decentralized finance and its potential to reshape the crypto landscape.", + "denom_units": [ + { + "denom": "ibc/98B3DBF1FA79C4C14CC5F08F62ACD5498560FCB515F677526FD200D54EA048B6", + "exponent": 0, + "aliases": [ + "factory/sei1thgp6wamxwqt7rthfkeehktmq0ujh5kspluw6w/OIN" + ] + }, + { + "denom": "oin", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "sei1thgp6wamxwqt7rthfkeehktmq0ujh5kspluw6w", + "base": "ibc/98B3DBF1FA79C4C14CC5F08F62ACD5498560FCB515F677526FD200D54EA048B6", + "name": "OIN STORE OF VALUE", + "display": "oin", + "symbol": "OIN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "sei", + "base_denom": "factory/sei1thgp6wamxwqt7rthfkeehktmq0ujh5kspluw6w/OIN", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-782", + "path": "transfer/channel-782/factory/sei1thgp6wamxwqt7rthfkeehktmq0ujh5kspluw6w/OIN" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png" + }, + "keywords": [ + "osmosis-price:uosmo:1210" + ] + }, + { + "description": "The token of Neokingdom DAO.", + "denom_units": [ + { + "denom": "ibc/DEE262653B9DE39BCEF0493D47E0DFC4FE62F7F046CF38B9FDEFEBE98D149A71", + "exponent": 0, + "aliases": [ + "erc20/0x655ecB57432CC1370f65e5dc2309588b71b473A9" + ] + }, + { + "denom": "neok", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/DEE262653B9DE39BCEF0493D47E0DFC4FE62F7F046CF38B9FDEFEBE98D149A71", + "name": "Neokingdom DAO", + "display": "neok", + "symbol": "NEOK", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "evmos", + "base_denom": "erc20/0x655ecB57432CC1370f65e5dc2309588b71b473A9", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-204", + "path": "transfer/channel-204/erc20/0x655ecB57432CC1370f65e5dc2309588b71b473A9" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/neok.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/neok.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1121" + ] + }, + { + "description": "The native currency of the Realio Network.", + "denom_units": [ + { + "denom": "ibc/1CDF9C7D073DD59ED06F15DB08CC0901F2A24759BE70463570E8896F9A444ADF", + "exponent": 0, + "aliases": [ + "ario" + ] + }, + { + "denom": "rio", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/1CDF9C7D073DD59ED06F15DB08CC0901F2A24759BE70463570E8896F9A444ADF", + "name": "Realio Network", + "display": "rio", + "symbol": "RIO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "realio", + "base_denom": "ario", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-1424", + "path": "transfer/channel-1424/ario" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/realio/images/rio.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/realio/images/rio.svg" + }, + "coingecko_id": "realio-network", + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:1180" + ] + }, + { + "description": "Membrane's CDP-style stablecoin called CDT", + "denom_units": [ + { + "denom": "factory/osmo1s794h9rxggytja3a4pmwul53u98k06zy2qtrdvjnfuxruh7s8yjs6cyxgd/ucdt", + "exponent": 0 + }, + { + "denom": "cdt", + "exponent": 6 + } + ], + "base": "factory/osmo1s794h9rxggytja3a4pmwul53u98k06zy2qtrdvjnfuxruh7s8yjs6cyxgd/ucdt", + "name": "CDT Stablecoin", + "display": "cdt", + "symbol": "CDT", + "traces": [], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/CDT.svg" + }, + "coingecko_id": "collateralized-debt-token", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1268" + ] + }, + { + "description": "Membrane's protocol token", + "denom_units": [ + { + "denom": "factory/osmo1s794h9rxggytja3a4pmwul53u98k06zy2qtrdvjnfuxruh7s8yjs6cyxgd/umbrn", + "exponent": 0 + }, + { + "denom": "mbrn", + "exponent": 6 + } + ], + "base": "factory/osmo1s794h9rxggytja3a4pmwul53u98k06zy2qtrdvjnfuxruh7s8yjs6cyxgd/umbrn", + "name": "Membrane", + "display": "mbrn", + "symbol": "MBRN", + "traces": [], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/MBRN.svg" + }, + "coingecko_id": "membrane", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1225" + ] + }, + { + "description": "The native token of SGE Network", + "denom_units": [ + { + "denom": "ibc/A1830DECC0B742F0B2044FF74BE727B5CF92C9A28A9235C3BACE4D24A23504FA", + "exponent": 0, + "aliases": [ + "usge" + ] + }, + { + "denom": "sge", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/A1830DECC0B742F0B2044FF74BE727B5CF92C9A28A9235C3BACE4D24A23504FA", + "name": "SGE", + "display": "sge", + "symbol": "SGE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "sge", + "base_denom": "usge", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-5485", + "path": "transfer/channel-5485/usge" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sge/images/sge.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sge/images/sge.svg" + }, + "coingecko_id": "six-sigma", + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:1233" + ] + }, + { + "description": "The native staking and governance token of the StaFi Hub.", + "denom_units": [ + { + "denom": "ibc/01D2F0C4739C871BFBEE7E786709E6904A55559DC1483DD92ED392EF12247862", + "exponent": 0, + "aliases": [ + "ufis" + ] + }, + { + "denom": "fis", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/01D2F0C4739C871BFBEE7E786709E6904A55559DC1483DD92ED392EF12247862", + "name": "StaFi Hub", + "display": "fis", + "symbol": "FIS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "stafihub", + "base_denom": "ufis", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-5413", + "path": "transfer/channel-5413/ufis" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stafihub/images/fis.svg" + }, + "coingecko_id": "stafi", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:1230" + ] + }, + { + "description": "A liquid staking representation of staked ATOMs", + "denom_units": [ + { + "denom": "ibc/B66CE615C600ED0A8B5AF425ECFE0D57BE2377587F66C45934A76886F34DC9B7", + "exponent": 0, + "aliases": [ + "uratom" + ] + }, + { + "denom": "ratom", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/B66CE615C600ED0A8B5AF425ECFE0D57BE2377587F66C45934A76886F34DC9B7", + "name": "rATOM", + "display": "ratom", + "symbol": "rATOM", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "cosmoshub", + "base_denom": "uatom" + }, + "provider": "StaFiHub" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "stafihub", + "base_denom": "uratom", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-5413", + "path": "transfer/channel-5413/uratom" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stafihub/images/ratom.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:1227" + ] + }, + { + "description": "The native token of ohhNFT.", + "denom_units": [ + { + "denom": "ibc/CFF40564FDA3E958D9904B8B479124987901168494655D9CC6B7C0EC0416020B", + "exponent": 0, + "aliases": [ + "factory/stars16da2uus9zrsy83h23ur42v3lglg5rmyrpqnju4/dust" + ] + }, + { + "denom": "strdst", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/CFF40564FDA3E958D9904B8B479124987901168494655D9CC6B7C0EC0416020B", + "name": "Stardust STRDST", + "display": "strdst", + "symbol": "STRDST", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "stargaze", + "base_denom": "factory/stars16da2uus9zrsy83h23ur42v3lglg5rmyrpqnju4/dust", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-75", + "path": "transfer/channel-75/factory/stars16da2uus9zrsy83h23ur42v3lglg5rmyrpqnju4/dust" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/dust.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/dust.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1234" + ] + }, + { + "description": "The native staking and governance token of the Theta testnet version of the Dora Vota.", + "denom_units": [ + { + "denom": "ibc/672406ADE4EDFD8C5EA7A0D0DD0C37E431DA7BD8393A15CD2CFDE3364917EB2A", + "exponent": 0, + "aliases": [ + "peaka" + ] + }, + { + "denom": "DORA", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/672406ADE4EDFD8C5EA7A0D0DD0C37E431DA7BD8393A15CD2CFDE3364917EB2A", + "name": "Dora Vota", + "display": "DORA", + "symbol": "DORA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "doravota", + "base_denom": "peaka", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-2694", + "path": "transfer/channel-2694/peaka" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/doravota/images/dora.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1239" + ] + }, + { + "description": "The native token of Coreum", + "denom_units": [ + { + "denom": "ibc/F3166F4D31D6BA1EC6C9F5536F5DDDD4CC93DBA430F7419E7CDC41C497944A65", + "exponent": 0, + "aliases": [ + "ucore" + ] + }, + { + "denom": "core", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/F3166F4D31D6BA1EC6C9F5536F5DDDD4CC93DBA430F7419E7CDC41C497944A65", + "name": "Coreum", + "display": "core", + "symbol": "COREUM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "coreum", + "base_denom": "ucore", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-2188", + "path": "transfer/channel-2188/ucore" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/coreum/images/coreum.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/coreum/images/coreum.svg" + }, + "coingecko_id": "coreum", + "keywords": [ + "dex", + "staking", + "wasm", + "assets", + "nft", + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1244" + ] + }, + { + "denom_units": [ + { + "denom": "ibc/D79E7D83AB399BFFF93433E54FAA480C191248FC556924A2A8351AE2638B3877", + "exponent": 0, + "aliases": [ + "utia" + ] + }, + { + "denom": "tia", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/D79E7D83AB399BFFF93433E54FAA480C191248FC556924A2A8351AE2638B3877", + "name": "Celestia", + "display": "tia", + "symbol": "TIA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "celestia", + "base_denom": "utia", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-6994", + "path": "transfer/channel-6994/utia" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/celestia/images/celestia.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/celestia/images/celestia.svg" + }, + "coingecko_id": "celestia", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1248" + ] + }, + { + "description": "The native staking token of dYdX Protocol.", + "denom_units": [ + { + "denom": "ibc/831F0B1BBB1D08A2B75311892876D71565478C532967545476DF4C2D7492E48C", + "exponent": 0, + "aliases": [ + "adydx" + ] + }, + { + "denom": "dydx", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/831F0B1BBB1D08A2B75311892876D71565478C532967545476DF4C2D7492E48C", + "name": "dYdX Protocol", + "display": "dydx", + "symbol": "DYDX", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "dydx", + "base_denom": "adydx", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-6787", + "path": "transfer/channel-6787/adydx" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/dydx/images/dydx-circle.svg" + }, + "coingecko_id": "dydx", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1246" + ] + }, + { + "description": "The native staking token of the Function X", + "denom_units": [ + { + "denom": "ibc/2B30802A0B03F91E4E16D6175C9B70F2911377C1CAE9E50FF011C821465463F9", + "exponent": 0, + "aliases": [ + "FX" + ] + }, + { + "denom": "WFX", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/2B30802A0B03F91E4E16D6175C9B70F2911377C1CAE9E50FF011C821465463F9", + "name": "f(x)Core", + "display": "WFX", + "symbol": "FX", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "fxcore", + "base_denom": "FX", + "channel_id": "channel-19" + }, + "chain": { + "channel_id": "channel-2716", + "path": "transfer/channel-2716/FX" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/fxcore/images/fx.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/fxcore/images/fx.svg" + }, + "coingecko_id": "fx-coin", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1241" + ] + }, + { + "description": "Bitcoin. On Cosmos.", + "denom_units": [ + { + "denom": "ibc/75345531D87BD90BF108BE7240BD721CB2CB0A1F16D4EBA71B09EC3C43E15C8F", + "exponent": 0, + "aliases": [ + "usat" + ] + }, + { + "denom": "nbtc", + "exponent": 14 + } + ], + "type_asset": "ics20", + "base": "ibc/75345531D87BD90BF108BE7240BD721CB2CB0A1F16D4EBA71B09EC3C43E15C8F", + "name": "Nomic Bitcoin", + "display": "nbtc", + "symbol": "nBTC", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "bitcoin", + "base_denom": "sat" + }, + "provider": "Nomic" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "nomic", + "base_denom": "usat", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-6897", + "path": "transfer/channel-6897/usat" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nomic/images/nbtc.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nomic/images/nbtc.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1253" + ] + }, + { + "description": "The native token of Nois", + "denom_units": [ + { + "denom": "ibc/6928AFA9EA721938FED13B051F9DBF1272B16393D20C49EA5E4901BB76D94A90", + "exponent": 0, + "aliases": [ + "unois" + ] + }, + { + "denom": "nois", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/6928AFA9EA721938FED13B051F9DBF1272B16393D20C49EA5E4901BB76D94A90", + "name": "Nois", + "display": "nois", + "symbol": "NOIS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "nois", + "base_denom": "unois", + "channel_id": "channel-37" + }, + "chain": { + "channel_id": "channel-8277", + "path": "transfer/channel-8277/unois" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nois/images/nois.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nois/images/nois.svg" + }, + "keywords": [ + "nois", + "randomness", + "drand", + "wasm", + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1305" + ] + }, + { + "description": "Margined Power Token sqOSMO", + "denom_units": [ + { + "denom": "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/squosmo", + "exponent": 0 + }, + { + "denom": "sqosmo", + "exponent": 6 + } + ], + "base": "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/squosmo", + "name": "OSMO Squared", + "display": "sqosmo", + "symbol": "sqOSMO", + "traces": [], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqosmo.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1267" + ] + }, + { + "description": "The Revenue & Governance token of Unstake.fi", + "denom_units": [ + { + "denom": "ibc/F74225B0AFD2F675AF56E9BE3F235486BCDE5C5E09AA88A97AFD2E052ABFE04C", + "exponent": 0, + "aliases": [ + "factory/kujira1aaudpfr9y23lt9d45hrmskphpdfaq9ajxd3ukh/unstk" + ] + }, + { + "denom": "nstk", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/F74225B0AFD2F675AF56E9BE3F235486BCDE5C5E09AA88A97AFD2E052ABFE04C", + "name": "Unstake Fi", + "display": "nstk", + "symbol": "NSTK", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "kujira", + "base_denom": "factory/kujira1aaudpfr9y23lt9d45hrmskphpdfaq9ajxd3ukh/unstk", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-259", + "path": "transfer/channel-259/factory:kujira1aaudpfr9y23lt9d45hrmskphpdfaq9ajxd3ukh:unstk" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/nstk.svg" + }, + "coingecko_id": "unstake-fi", + "keywords": [ + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1312" + ] + }, + { + "description": "ohhNFT LP token.", + "denom_units": [ + { + "denom": "ibc/71DAA4CAFA4FE2F9803ABA0696BA5FC0EFC14305A2EA8B4E01880DB851B1EC02", + "exponent": 0, + "aliases": [ + "factory/stars16da2uus9zrsy83h23ur42v3lglg5rmyrpqnju4/uBRNCH" + ] + }, + { + "denom": "BRNCH", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/71DAA4CAFA4FE2F9803ABA0696BA5FC0EFC14305A2EA8B4E01880DB851B1EC02", + "name": "Branch", + "display": "BRNCH", + "symbol": "BRNCH", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "stargaze", + "base_denom": "factory/stars16da2uus9zrsy83h23ur42v3lglg5rmyrpqnju4/uBRNCH", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-75", + "path": "transfer/channel-75/factory/stars16da2uus9zrsy83h23ur42v3lglg5rmyrpqnju4/uBRNCH" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/brnch.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/brnch.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/CFF40564FDA3E958D9904B8B479124987901168494655D9CC6B7C0EC0416020B:1288" + ] + }, + { + "description": "wstETH is a wrapped version of stETH. As some DeFi protocols require a constant balance mechanism for tokens, wstETH keeps your balance of stETH fixed and uses an underlying share system to reflect your earned staking rewards.", + "denom_units": [ + { + "denom": "ibc/2F21E6D4271DE3F561F20A02CD541DAF7405B1E9CB3B9B07E3C2AC7D8A4338A5", + "exponent": 0, + "aliases": [ + "factory/neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry/wstETH" + ] + }, + { + "denom": "wstETH", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/2F21E6D4271DE3F561F20A02CD541DAF7405B1E9CB3B9B07E3C2AC7D8A4338A5", + "name": "Wrapped Lido Staked Ether", + "display": "wstETH", + "symbol": "wstETH", + "traces": [ + { + "type": "liquid-stake", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "wei" + }, + "provider": "Lido" + }, + { + "type": "wrapped", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84" + }, + "provider": "Lido" + }, + { + "type": "additional-mintage", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0" + }, + "provider": "Lido" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "neutron", + "base_denom": "factory/neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry/wstETH", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-874", + "path": "transfer/channel-874/factory/neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry/wstETH" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wsteth.svg" + }, + "coingecko_id": "wrapped-steth", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/EA1D43981D5C9A1C4AAEA9C23BB1D4FA126BA9BC7020A25E0AE4AA841EA25DC5:1292" + ] + }, + { + "description": "Margined Power Token sqATOM", + "denom_units": [ + { + "denom": "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqatom", + "exponent": 0 + }, + { + "denom": "sqatom", + "exponent": 6 + } + ], + "base": "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqatom", + "name": "ATOM Squared", + "display": "sqatom", + "symbol": "sqATOM", + "traces": [], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqatom.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:1299" + ] + }, + { + "description": "Margined Power Token sqBTC", + "denom_units": [ + { + "denom": "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqbtc", + "exponent": 0 + }, + { + "denom": "sqbtc", + "exponent": 6 + } + ], + "base": "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqbtc", + "name": "BTC Squared", + "display": "sqbtc", + "symbol": "sqBTC", + "traces": [], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqbtc.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-unlisted" + ] + }, + { + "description": "QWOYN is the native governance token for Qwoyn Network", + "denom_units": [ + { + "denom": "ibc/09FAF1E04435E14C68DE7AB0D03C521C92975C792DB12B2EA390BAA2E06B3F3D", + "exponent": 0, + "aliases": [ + "uqwoyn" + ] + }, + { + "denom": "qwoyn", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/09FAF1E04435E14C68DE7AB0D03C521C92975C792DB12B2EA390BAA2E06B3F3D", + "name": "Qwoyn", + "display": "qwoyn", + "symbol": "QWOYN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "qwoyn", + "base_denom": "uqwoyn", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-880", + "path": "transfer/channel-880/uqwoyn" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/qwoyn/images/qwoyn.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:1295" + ] + }, + { + "description": "The liquid staking token of Bostrom", + "denom_units": [ + { + "denom": "ibc/4F3B0EC2FE2D370D10C3671A1B7B06D2A964C721470C305CBB846ED60E6CAA20", + "exponent": 0, + "aliases": [ + "hydrogen", + "hydrogen" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/4F3B0EC2FE2D370D10C3671A1B7B06D2A964C721470C305CBB846ED60E6CAA20", + "name": "Bostrom Hydrogen", + "display": "hydrogen", + "symbol": "HYDROGEN", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bostrom", + "base_denom": "hydrogen", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-95", + "path": "transfer/channel-95/hydrogen" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/hydrogen.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/hydrogen.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1302" + ] + }, + { + "description": "The staking token of Cyber", + "denom_units": [ + { + "denom": "ibc/BCDB35B7390806F35E716D275E1E017999F8281A81B6F128F087EF34D1DFA761", + "exponent": 0, + "aliases": [ + "tocyb", + "tocyb" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/BCDB35B7390806F35E716D275E1E017999F8281A81B6F128F087EF34D1DFA761", + "name": "Bostrom Tocyb", + "display": "tocyb", + "symbol": "TOCYB", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bostrom", + "base_denom": "tocyb", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-95", + "path": "transfer/channel-95/tocyb" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/tocyb.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/tocyb.svg" + }, + "keywords": [ + "osmosis-price:ibc/4F3B0EC2FE2D370D10C3671A1B7B06D2A964C721470C305CBB846ED60E6CAA20:1310" + ] + }, + { + "description": "The resource token of Bostrom", + "denom_units": [ + { + "denom": "ibc/D3A1900B2B520E45608B5671ADA461E1109628E89B4289099557C6D3996F7DAA", + "exponent": 0, + "aliases": [ + "millivolt", + "millivolt" + ] + }, + { + "denom": "volt", + "exponent": 3, + "aliases": [ + "volt" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/D3A1900B2B520E45608B5671ADA461E1109628E89B4289099557C6D3996F7DAA", + "name": "Bostrom Volt", + "display": "volt", + "symbol": "V", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bostrom", + "base_denom": "millivolt", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-95", + "path": "transfer/channel-95/millivolt" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/volt.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/volt.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1304" + ] + }, + { + "description": "The resource token of Bostrom", + "denom_units": [ + { + "denom": "ibc/020F5162B7BC40656FC5432622647091F00D53E82EE8D21757B43D3282F25424", + "exponent": 0, + "aliases": [ + "milliampere", + "milliampere" + ] + }, + { + "denom": "ampere", + "exponent": 3, + "aliases": [ + "ampere" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/020F5162B7BC40656FC5432622647091F00D53E82EE8D21757B43D3282F25424", + "name": "Bostrom Ampere", + "display": "ampere", + "symbol": "A", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "bostrom", + "base_denom": "milliampere", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-95", + "path": "transfer/channel-95/milliampere" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/ampere.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/bostrom/images/ampere.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1303" + ] + }, + { + "description": "The native token of SOURCE Chain", + "denom_units": [ + { + "denom": "ibc/E7905742CE2EA4EA5D592527DC89220C59B617DE803939FE7293805A64B484D7", + "exponent": 0, + "aliases": [ + "usource" + ] + }, + { + "denom": "source", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/E7905742CE2EA4EA5D592527DC89220C59B617DE803939FE7293805A64B484D7", + "name": "Source", + "display": "source", + "symbol": "SOURCE", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "source", + "base_denom": "usource", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-8945", + "path": "transfer/channel-8945/usource" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/source/images/source.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/source/images/source.svg" + }, + "coingecko_id": "source", + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:1311" + ] + }, + { + "description": "Pyth is a protocol that allows market participants to publish pricing information on-chain for others to use. The protocol is an interaction between three parties:\n-Publishers submit pricing information to Pyth's oracle program. Pyth has multiple data publishers for every product to improve the accuracy and robustness of the system.\n-Pyth's oracle program combines publishers' data to produce a single aggregate price and confidence interval.\nConsumers read the price information produced by the oracle program.\n\nPyth's oracle program runs simultaneously on both Solana mainnet and Pythnet. Each instance of the program is responsible for its own set of price feeds. Solana Price Feeds are available for use by Solana protocols. In this case, since the oracle program itself runs on Solana, the resulting prices are immediately available to consumers without requiring any additional work. Pythnet Price Feeds are available on 12+ blockchains. The prices constructed on Pythnet are transferred cross-chain to reach consumers on these blockchains.\n\nIn both cases, the critical component of the system is the oracle program that combines the data from each individual publisher. This program maintains a number of different Solana accounts that list the products on Pyth and their current price data. Publishers publish their price and confidence by interacting with the oracle program on every slot. The program stores this information in its accounts. The first price update in a slot additionally triggers price aggregation, which combines the price data from the previous slot into a single aggregate price and confidence interval. This aggregate price is written to the Solana account where it is readable by other on-chain programs and available for transmission to other blockchains.", + "denom_units": [ + { + "denom": "ibc/E42006ED917C769EDE1B474650EEA6BFE3F97958912B9206DD7010A28D01D9D5", + "exponent": 0, + "aliases": [ + "HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3", + "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/B8ohBnfisop27exk2gtNABJyYjLwQA7ogrp5uNzvZCoy" + ] + }, + { + "denom": "wormhole/B8ohBnfisop27exk2gtNABJyYjLwQA7ogrp5uNzvZCoy/6", + "exponent": 6, + "aliases": [ + "pyth" + ] + } + ], + "type_asset": "ics20", + "address": "wormhole1utjx3594tlvfw4375esgu72wa4sdgf0q7x4ye27husf5kvuzp5rsr72gdq", + "base": "ibc/E42006ED917C769EDE1B474650EEA6BFE3F97958912B9206DD7010A28D01D9D5", + "name": "Pyth Network", + "display": "wormhole/B8ohBnfisop27exk2gtNABJyYjLwQA7ogrp5uNzvZCoy/6", + "symbol": "PYTH", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "solana", + "base_denom": "HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3" + }, + "provider": "Wormhole" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gateway", + "base_denom": "factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/B8ohBnfisop27exk2gtNABJyYjLwQA7ogrp5uNzvZCoy", + "channel_id": "channel-3" + }, + "chain": { + "channel_id": "channel-2186", + "path": "transfer/channel-2186/factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/B8ohBnfisop27exk2gtNABJyYjLwQA7ogrp5uNzvZCoy" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/solana/images/pyth.svg" + }, + "coingecko_id": "pyth-network", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1315" + ] + }, + { + "description": "PSTAKE Liquid-Staked OSMO", + "denom_units": [ + { + "denom": "ibc/ECBE78BF7677320A93E7BA1761D144BCBF0CBC247C290C049655E106FE5DC68E", + "exponent": 0, + "aliases": [ + "stk/uosmo" + ] + }, + { + "denom": "stkosmo", + "exponent": 6, + "aliases": [ + "stk/osmo" + ] + } + ], + "type_asset": "ics20", + "base": "ibc/ECBE78BF7677320A93E7BA1761D144BCBF0CBC247C290C049655E106FE5DC68E", + "name": "PSTAKE staked OSMO", + "display": "stkosmo", + "symbol": "stkOSMO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "persistence", + "base_denom": "stk/uosmo", + "channel_id": "channel-6" + }, + "chain": { + "channel_id": "channel-4", + "path": "transfer/channel-4/stk/uosmo" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkosmo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkosmo.svg" + }, + "coingecko_id": "pstake-staked-osmo", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1323" + ] + }, + { + "description": "Levana native token", + "denom_units": [ + { + "denom": "factory/osmo1mlng7pz4pnyxtpq0akfwall37czyk9lukaucsrn30ameplhhshtqdvfm5c/ulvn", + "exponent": 0 + }, + { + "denom": "lvn", + "exponent": 6 + } + ], + "base": "factory/osmo1mlng7pz4pnyxtpq0akfwall37czyk9lukaucsrn30ameplhhshtqdvfm5c/ulvn", + "name": "Levana", + "display": "lvn", + "symbol": "LVN", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/levana.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/levana.svg" + }, + "coingecko_id": "levana-protocol", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1337" + ] + }, + { + "description": "Puppy", + "denom_units": [ + { + "denom": "ibc/46AC07DBFF1352EC94AF5BD4D23740D92D9803A6B41F6E213E77F3A1143FB963", + "exponent": 0, + "aliases": [ + "cw20:chihuahua1yl8z39ugle8s02fpwkhh293509q5xcpalmdzc4amvchz8nkexrmsy95gef" + ] + }, + { + "denom": "puppy", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "chihuahua1yl8z39ugle8s02fpwkhh293509q5xcpalmdzc4amvchz8nkexrmsy95gef", + "base": "ibc/46AC07DBFF1352EC94AF5BD4D23740D92D9803A6B41F6E213E77F3A1143FB963", + "name": "Puppy", + "display": "puppy", + "symbol": "PUPPY", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "chihuahua", + "base_denom": "cw20:chihuahua1yl8z39ugle8s02fpwkhh293509q5xcpalmdzc4amvchz8nkexrmsy95gef", + "port": "wasm.chihuahua1jwkag4yvhyj9fuddtkygvavya8hmdjuzmgxwg9vp3lw9twv6lrcq9mgl52", + "channel_id": "channel-73" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-11348", + "path": "transfer/channel-11348/cw20:chihuahua1yl8z39ugle8s02fpwkhh293509q5xcpalmdzc4amvchz8nkexrmsy95gef" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/chihuahua/images/puppyhuahua_logo.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1332" + ] + }, + { + "description": "The cutest NEWT token on Neutron chain.", + "denom_units": [ + { + "denom": "ibc/BF685448E564B5A4AC8F6E0493A0B979D0E0BF5EC11F7E15D25A0A2160C944DD", + "exponent": 0, + "aliases": [ + "unewt", + "factory/neutron1p8d89wvxyjcnawmgw72klknr3lg9gwwl6ypxda/newt" + ] + }, + { + "denom": "newt", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/BF685448E564B5A4AC8F6E0493A0B979D0E0BF5EC11F7E15D25A0A2160C944DD", + "name": "Newt", + "display": "newt", + "symbol": "NEWT", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "neutron", + "base_denom": "factory/neutron1p8d89wvxyjcnawmgw72klknr3lg9gwwl6ypxda/newt", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-874", + "path": "transfer/channel-874/factory/neutron1p8d89wvxyjcnawmgw72klknr3lg9gwwl6ypxda/newt" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/newt.png" + }, + "coingecko_id": "newt", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1334" + ] + }, + { + "description": "MilkyWay's liquid staked TIA", + "denom_units": [ + { + "denom": "factory/osmo1f5vfcph2dvfeqcqkhetwv75fda69z7e5c2dldm3kvgj23crkv6wqcn47a0/umilkTIA", + "exponent": 0 + }, + { + "denom": "milkTIA", + "exponent": 6 + } + ], + "base": "factory/osmo1f5vfcph2dvfeqcqkhetwv75fda69z7e5c2dldm3kvgj23crkv6wqcn47a0/umilkTIA", + "name": "milkTIA", + "display": "milkTIA", + "symbol": "milkTIA", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/milktia.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/milktia.svg" + }, + "coingecko_id": "milkyway-staked-tia", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D79E7D83AB399BFFF93433E54FAA480C191248FC556924A2A8351AE2638B3877:1335" + ] + }, + { + "description": "ASH", + "denom_units": [ + { + "denom": "ibc/4976049456D261659D0EC499CC9C2391D3C7D1128A0B9FB0BBF2842D1B2BC7BC", + "exponent": 0, + "aliases": [ + "factory/migaloo1erul6xyq0gk6ws98ncj7lnq9l4jn4gnnu9we73gdz78yyl2lr7qqrvcgup/ash" + ] + }, + { + "denom": "ASH", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/4976049456D261659D0EC499CC9C2391D3C7D1128A0B9FB0BBF2842D1B2BC7BC", + "name": "ASH", + "display": "ASH", + "symbol": "ASH", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "migaloo", + "base_denom": "factory/migaloo1erul6xyq0gk6ws98ncj7lnq9l4jn4gnnu9we73gdz78yyl2lr7qqrvcgup/ash", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-642", + "path": "transfer/channel-642/factory/migaloo1erul6xyq0gk6ws98ncj7lnq9l4jn4gnnu9we73gdz78yyl2lr7qqrvcgup/ash" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/ash.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1360" + ] + }, + { + "description": "RAC", + "denom_units": [ + { + "denom": "ibc/DDF1CD4CDC14AE2D6A3060193624605FF12DEE71CF1F8C19EEF35E9447653493", + "exponent": 0, + "aliases": [ + "factory/migaloo1eqntnl6tzcj9h86psg4y4h6hh05g2h9nj8e09l/urac" + ] + }, + { + "denom": "RAC", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/DDF1CD4CDC14AE2D6A3060193624605FF12DEE71CF1F8C19EEF35E9447653493", + "name": "RAC", + "display": "RAC", + "symbol": "RAC", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "migaloo", + "base_denom": "factory/migaloo1eqntnl6tzcj9h86psg4y4h6hh05g2h9nj8e09l/urac", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-642", + "path": "transfer/channel-642/factory/migaloo1eqntnl6tzcj9h86psg4y4h6hh05g2h9nj8e09l/urac" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/rac.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/rac.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1359" + ] + }, + { + "description": "GUPPY", + "denom_units": [ + { + "denom": "ibc/42A9553A7770F3D7B62F3A82AF04E7719B4FD6EAF31BE5645092AAC4A6C2201D", + "exponent": 0, + "aliases": [ + "factory/migaloo1etlu2h30tjvv8rfa4fwdc43c92f6ul5w9acxzk/uguppy" + ] + }, + { + "denom": "GUPPY", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/42A9553A7770F3D7B62F3A82AF04E7719B4FD6EAF31BE5645092AAC4A6C2201D", + "name": "GUPPY", + "display": "GUPPY", + "symbol": "GUPPY", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "migaloo", + "base_denom": "factory/migaloo1etlu2h30tjvv8rfa4fwdc43c92f6ul5w9acxzk/uguppy", + "channel_id": "channel-5" + }, + "chain": { + "channel_id": "channel-642", + "path": "transfer/channel-642/factory/migaloo1etlu2h30tjvv8rfa4fwdc43c92f6ul5w9acxzk/uguppy" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/guppy.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/46AC07DBFF1352EC94AF5BD4D23740D92D9803A6B41F6E213E77F3A1143FB963:1342" + ] + }, + { + "description": "The native EVM, governance and staking token of the Haqq Network", + "denom_units": [ + { + "denom": "ibc/69110FF673D70B39904FF056CFDFD58A90BEC3194303F45C32CB91B8B0A738EA", + "exponent": 0, + "aliases": [ + "aISLM" + ] + }, + { + "denom": "ISLM", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/69110FF673D70B39904FF056CFDFD58A90BEC3194303F45C32CB91B8B0A738EA", + "name": "Haqq Network", + "display": "ISLM", + "symbol": "ISLM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "haqq", + "base_denom": "aISLM", + "channel_id": "channel-2" + }, + "chain": { + "channel_id": "channel-1575", + "path": "transfer/channel-1575/aISLM" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/haqq/images/islm.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/haqq/images/islm.svg" + }, + "coingecko_id": "islamic-coin", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858:1343" + ] + }, + { + "description": "$AUTISM exists to celebrate autism as a superior biological tech stack for a changing world", + "denom_units": [ + { + "denom": "ibc/9DDF52A334F92BC57A9E0D59DFF9984EAC61D2A14E5162605DF601AA58FDFC6D", + "exponent": 0, + "aliases": [ + "factory/inj14lf8xm6fcvlggpa7guxzjqwjmtr24gnvf56hvz/autism" + ] + }, + { + "denom": "autism", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/9DDF52A334F92BC57A9E0D59DFF9984EAC61D2A14E5162605DF601AA58FDFC6D", + "name": "Autism", + "display": "autism", + "symbol": "AUTISM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "injective", + "base_denom": "factory/inj14lf8xm6fcvlggpa7guxzjqwjmtr24gnvf56hvz/autism", + "channel_id": "channel-8" + }, + "chain": { + "channel_id": "channel-122", + "path": "transfer/channel-122/factory/inj14lf8xm6fcvlggpa7guxzjqwjmtr24gnvf56hvz/autism" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/autism.png" + }, + "coingecko_id": "autism", + "keywords": [ + "osmosis-unlisted" + ] + }, + { + "description": "The PAGE token is used for actions in the PageDAO NFT literary ecosystem and for DAO governance.", + "denom_units": [ + { + "denom": "ibc/23A62409E4AD8133116C249B1FA38EED30E500A115D7B153109462CD82C1CD99", + "exponent": 0, + "aliases": [ + "gravity0x60e683C6514Edd5F758A55b6f393BeBBAfaA8d5e" + ] + }, + { + "denom": "page", + "exponent": 8 + } + ], + "type_asset": "ics20", + "base": "ibc/23A62409E4AD8133116C249B1FA38EED30E500A115D7B153109462CD82C1CD99", + "name": "Page", + "display": "page", + "symbol": "PAGE", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x60e683C6514Edd5F758A55b6f393BeBBAfaA8d5e" + }, + "provider": "Gravity Bridge" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "gravitybridge", + "base_denom": "gravity0x60e683C6514Edd5F758A55b6f393BeBBAfaA8d5e", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-144", + "path": "transfer/channel-144/gravity0x60e683C6514Edd5F758A55b6f393BeBBAfaA8d5e" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/page.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/page.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1344" + ] + }, + { + "description": "PURSE Token", + "denom_units": [ + { + "denom": "ibc/6FD2938076A4C1BB3A324A676E76B0150A4443DAE0E002FB62AC0E6B604B1519", + "exponent": 0, + "aliases": [ + "bsc0x29a63F4B209C29B4DC47f06FFA896F32667DAD2C" + ] + }, + { + "denom": "PURSE", + "exponent": 18 + } + ], + "type_asset": "ics20", + "base": "ibc/6FD2938076A4C1BB3A324A676E76B0150A4443DAE0E002FB62AC0E6B604B1519", + "name": "PURSE Token", + "display": "PURSE", + "symbol": "PURSE", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "binancesmartchain", + "base_denom": "0x29a63F4B209C29B4DC47f06FFA896F32667DAD2C", + "contract": "0x84238c00c8313920826D798e3cF6793Ef4F610ad" + }, + "provider": "Function X" + }, + { + "type": "ibc", + "counterparty": { + "chain_name": "pundix", + "base_denom": "bsc0x29a63F4B209C29B4DC47f06FFA896F32667DAD2C", + "channel_id": "channel-1" + }, + "chain": { + "channel_id": "channel-12618", + "path": "transfer/channel-12618/bsc0x29a63F4B209C29B4DC47f06FFA896F32667DAD2C" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/pundix/images/purse-token-logo.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/pundix/images/purse-token-logo.svg" + }, + "keywords": [ + "osmosis-price:uosmo:1394", + "osmosis-unlisted" + ] + }, + { + "description": "The first meme coin on Injective. It’s a dog, but he has nunchucks", + "denom_units": [ + { + "denom": "ibc/183C0BB962D2F57C957E0B134CFA0AC9D6F755C02DE9DC2A59089BA23009DEC3", + "exponent": 0, + "aliases": [ + "factory/inj1xtel2knkt8hmc9dnzpjz6kdmacgcfmlv5f308w/ninja" + ] + }, + { + "denom": "NINJA", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/183C0BB962D2F57C957E0B134CFA0AC9D6F755C02DE9DC2A59089BA23009DEC3", + "name": "Dog wif nunchucks", + "display": "NINJA", + "symbol": "NINJA", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "injective", + "base_denom": "factory/inj1xtel2knkt8hmc9dnzpjz6kdmacgcfmlv5f308w/ninja", + "channel_id": "channel-8" + }, + "chain": { + "channel_id": "channel-122", + "path": "transfer/channel-122/factory/inj1xtel2knkt8hmc9dnzpjz6kdmacgcfmlv5f308w/ninja" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/ninja.png" + }, + "coingecko_id": "dog-wif-nuchucks", + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1384" + ] + }, + { + "description": "Kleomedes Token", + "denom_units": [ + { + "denom": "ibc/5F5B7DA5ECC80F6C7A8702D525BB0B74279B1F7B8EFAE36E423D68788F7F39FF", + "exponent": 0, + "aliases": [ + "cw20:juno10gthz5ufgrpuk5cscve2f0hjp56wgp90psqxcrqlg4m9mcu9dh8q4864xy" + ] + }, + { + "denom": "kleo", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno10gthz5ufgrpuk5cscve2f0hjp56wgp90psqxcrqlg4m9mcu9dh8q4864xy", + "base": "ibc/5F5B7DA5ECC80F6C7A8702D525BB0B74279B1F7B8EFAE36E423D68788F7F39FF", + "name": "Kleomedes", + "display": "kleo", + "symbol": "KLEO", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno10gthz5ufgrpuk5cscve2f0hjp56wgp90psqxcrqlg4m9mcu9dh8q4864xy", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno10gthz5ufgrpuk5cscve2f0hjp56wgp90psqxcrqlg4m9mcu9dh8q4864xy" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/kleomedes.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1353" + ] + }, + { + "description": "NYX Token (NYX) is the Nym Network's native token.", + "denom_units": [ + { + "denom": "ibc/1A611E8A3E4248106A1A5A80A64BFA812739435E8B9888EB3F652A21F029F317", + "exponent": 0, + "aliases": [ + "unyx" + ] + }, + { + "denom": "nyx", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/1A611E8A3E4248106A1A5A80A64BFA812739435E8B9888EB3F652A21F029F317", + "name": "Nym", + "display": "nyx", + "symbol": "NYX", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "nyx", + "base_denom": "unyx", + "channel_id": "channel-8" + }, + "chain": { + "channel_id": "channel-15464", + "path": "transfer/channel-15464/unyx" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nyx/images/nyx.png" + }, + "keywords": [ + "osmosis-main", + "osmosis-unlisted" + ] + }, + { + "description": "NYM Token (NYM) is the Nym Network's native utility token, used as the primary means to incentivize mixnet node operators.", + "denom_units": [ + { + "denom": "ibc/37CB3078432510EE57B9AFA8DBE028B33AE3280A144826FEAC5F2334CF2C5539", + "exponent": 0, + "aliases": [ + "unym" + ] + }, + { + "denom": "nym", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/37CB3078432510EE57B9AFA8DBE028B33AE3280A144826FEAC5F2334CF2C5539", + "name": "NYM", + "display": "nym", + "symbol": "NYM", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "nyx", + "base_denom": "unym", + "channel_id": "channel-8" + }, + "chain": { + "channel_id": "channel-15464", + "path": "transfer/channel-15464/unym" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nyx/images/nym.png" + }, + "coingecko_id": "nym", + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:uosmo:1361" + ] + }, + { + "description": "has a hat", + "denom_units": [ + { + "denom": "ibc/2FFE07C4B4EFC0DDA099A16C6AF3C9CCA653CC56077E87217A585D48794B0BC7", + "exponent": 0, + "aliases": [ + "factory/chihuahua1x4q2vkrz4dfgd9hcw0p5m2f2nuv2uqmt9xr8k2/achihuahuawifhat" + ] + }, + { + "denom": "achihuahuawifhat", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/2FFE07C4B4EFC0DDA099A16C6AF3C9CCA653CC56077E87217A585D48794B0BC7", + "name": "Chihuahuawifhat", + "display": "achihuahuawifhat", + "symbol": "BADDOG", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "chihuahua", + "base_denom": "factory/chihuahua1x4q2vkrz4dfgd9hcw0p5m2f2nuv2uqmt9xr8k2/achihuahuawifhat", + "channel_id": "channel-7" + }, + "chain": { + "channel_id": "channel-113", + "path": "transfer/channel-113/factory/chihuahua1x4q2vkrz4dfgd9hcw0p5m2f2nuv2uqmt9xr8k2/achihuahuawifhat" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/chihuahua/images/baddog.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/B9E0A1A524E98BB407D3CED8720EFEFD186002F90C1B1B7964811DD0CCC12228:1356" + ] + }, + { + "description": "clownmaxxed store of value", + "denom_units": [ + { + "denom": "ibc/8C8F6349F656C943543C6B040377BE44123D01F712277815C3C13098BB98818C", + "exponent": 0, + "aliases": [ + "ucircus", + "factory/neutron170v88vrtnedesyfytuku257cggxc79rd7lwt7q/ucircus" + ] + }, + { + "denom": "circus", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/8C8F6349F656C943543C6B040377BE44123D01F712277815C3C13098BB98818C", + "name": "AtomEconomicZone69JaeKwonInu", + "display": "circus", + "symbol": "CIRCUS", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "neutron", + "base_denom": "factory/neutron170v88vrtnedesyfytuku257cggxc79rd7lwt7q/ucircus", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-874", + "path": "transfer/channel-874/factory/neutron170v88vrtnedesyfytuku257cggxc79rd7lwt7q/ucircus" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/circus.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1393" + ] + }, + { + "description": "Governance and utility token for the Junø Apes NFT platform on Juno", + "denom_units": [ + { + "denom": "ibc/176DD560277BB0BD676260BE02EBAB697725CA85144D8A2BF286C6B5323DB5FE", + "exponent": 0, + "aliases": [ + "cw20:juno1zkwveux7y6fmsr88atf3cyffx96p0c96qr8tgcsj7vfnhx7sal3s3zu3ps" + ] + }, + { + "denom": "jape", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno1zkwveux7y6fmsr88atf3cyffx96p0c96qr8tgcsj7vfnhx7sal3s3zu3ps", + "base": "ibc/176DD560277BB0BD676260BE02EBAB697725CA85144D8A2BF286C6B5323DB5FE", + "name": "Junø Apes", + "display": "jape", + "symbol": "JAPE", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno1zkwveux7y6fmsr88atf3cyffx96p0c96qr8tgcsj7vfnhx7sal3s3zu3ps", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno1zkwveux7y6fmsr88atf3cyffx96p0c96qr8tgcsj7vfnhx7sal3s3zu3ps" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/jape.png" + }, + "keywords": [ + "osmosis-price:uosmo:1377" + ] + }, + { + "description": "Woof", + "denom_units": [ + { + "denom": "ibc/9B8EC667B6DF55387DC0F3ACC4F187DA6921B0806ED35DE6B04DE96F5AB81F53", + "exponent": 0, + "aliases": [ + "factory/chihuahua13jawsn574rf3f0u5rhu7e8n6sayx5gkw3eddhp/uwoof" + ] + }, + { + "denom": "WOOF", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/9B8EC667B6DF55387DC0F3ACC4F187DA6921B0806ED35DE6B04DE96F5AB81F53", + "name": "WOOF", + "display": "WOOF", + "symbol": "WOOF", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "chihuahua", + "base_denom": "factory/chihuahua13jawsn574rf3f0u5rhu7e8n6sayx5gkw3eddhp/uwoof", + "channel_id": "channel-7" + }, + "chain": { + "channel_id": "channel-113", + "path": "transfer/channel-113/factory/chihuahua13jawsn574rf3f0u5rhu7e8n6sayx5gkw3eddhp/uwoof" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/chihuahua/images/woof.png" + }, + "keywords": [ + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1365" + ] + }, + { + "description": "The native coin of Sneaky Productions.", + "denom_units": [ + { + "denom": "ibc/94ED1F172BC633DFC56D7E26551D8B101ADCCC69052AC44FED89F97FF658138F", + "exponent": 0, + "aliases": [ + "factory/stars1xx5976njvxpl9n4v8huvff6cudhx7yuu8e7rt4/usneaky" + ] + }, + { + "denom": "sneaky", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/94ED1F172BC633DFC56D7E26551D8B101ADCCC69052AC44FED89F97FF658138F", + "name": "Sneaky Productions", + "display": "sneaky", + "symbol": "SNEAKY", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "stargaze", + "base_denom": "factory/stars1xx5976njvxpl9n4v8huvff6cudhx7yuu8e7rt4/usneaky", + "channel_id": "channel-0" + }, + "chain": { + "channel_id": "channel-75", + "path": "transfer/channel-75/factory/stars1xx5976njvxpl9n4v8huvff6cudhx7yuu8e7rt4/usneaky" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/sneaky.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/sneaky.svg" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1403" + ] + }, + { + "description": "Wrapped Bitcoin (WBTC) is an ERC20 token backed 1:1 with Bitcoin. Completely transparent. 100% verifiable. Community led.", + "denom_units": [ + { + "denom": "factory/osmo1z0qrq605sjgcqpylfl4aa6s90x738j7m58wyatt0tdzflg2ha26q67k743/wbtc", + "exponent": 0, + "aliases": [ + "wbtc-satoshi" + ] + }, + { + "denom": "wbtc", + "exponent": 8 + } + ], + "address": "osmo1z0qrq605sjgcqpylfl4aa6s90x738j7m58wyatt0tdzflg2ha26q67k743", + "base": "factory/osmo1z0qrq605sjgcqpylfl4aa6s90x738j7m58wyatt0tdzflg2ha26q67k743/wbtc", + "name": "Wrapped Bitcoin", + "display": "wbtc", + "symbol": "WBTC", + "traces": [ + { + "type": "bridge", + "counterparty": { + "chain_name": "bitcoin", + "base_denom": "sat" + }, + "provider": "BitGo, Kyber, and Ren" + }, + { + "type": "additional-mintage", + "counterparty": { + "chain_name": "ethereum", + "base_denom": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599" + }, + "provider": "BitGo, Kyber, and Ren" + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wbtc.png", + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wbtc.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-unlisted" + ] + }, + { + "description": "Baddest coin on Cosmos", + "denom_units": [ + { + "denom": "ibc/442A08C33AE9875DF90792FFA73B5728E1CAECE87AB4F26AE9B422F1E682ED23", + "exponent": 0, + "aliases": [ + "ubad", + "factory/neutron143wp6g8paqasnuuey6zyapucknwy9rhnld8hkr/bad" + ] + }, + { + "denom": "bad", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/442A08C33AE9875DF90792FFA73B5728E1CAECE87AB4F26AE9B422F1E682ED23", + "name": "Badcoin", + "display": "bad", + "symbol": "BAD", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "neutron", + "base_denom": "factory/neutron143wp6g8paqasnuuey6zyapucknwy9rhnld8hkr/bad", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-874", + "path": "transfer/channel-874/factory/neutron143wp6g8paqasnuuey6zyapucknwy9rhnld8hkr/bad" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/bad.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1381" + ] + }, + { + "description": "Signal Art and Gaming on Juno", + "denom_units": [ + { + "denom": "ibc/4BDADBEDA31899036AB286E9901116496A9D85FB87B35A408C9D67C0DCAC660A", + "exponent": 0, + "aliases": [ + "cw20:juno14lycavan8gvpjn97aapzvwmsj8kyrvf644p05r0hu79namyj3ens87650k" + ] + }, + { + "denom": "sgnl", + "exponent": 6 + } + ], + "type_asset": "ics20", + "address": "juno14lycavan8gvpjn97aapzvwmsj8kyrvf644p05r0hu79namyj3ens87650k", + "base": "ibc/4BDADBEDA31899036AB286E9901116496A9D85FB87B35A408C9D67C0DCAC660A", + "name": "Signal", + "display": "sgnl", + "symbol": "SGNL", + "traces": [ + { + "type": "ibc-cw20", + "counterparty": { + "chain_name": "juno", + "base_denom": "cw20:juno14lycavan8gvpjn97aapzvwmsj8kyrvf644p05r0hu79namyj3ens87650k", + "port": "wasm.juno1v4887y83d6g28puzvt8cl0f3cdhd3y6y9mpysnsp3k8krdm7l6jqgm0rkn", + "channel_id": "channel-47" + }, + "chain": { + "port": "transfer", + "channel_id": "channel-169", + "path": "transfer/channel-169/cw20:juno14lycavan8gvpjn97aapzvwmsj8kyrvf644p05r0hu79namyj3ens87650k" + } + } + ], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/sgnl.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1392" + ] + }, + { + "description": "The first native memecoin on Osmosis. Crafted by the deftest of hands in the lab of lunacy. It's scientifically anarchic, professionally foolish, and your ticket to the madhouse.", + "denom_units": [ + { + "denom": "factory/osmo1pfyxruwvtwk00y8z06dh2lqjdj82ldvy74wzm3/WOSMO", + "exponent": 0 + }, + { + "denom": "WOSMO", + "exponent": 6 + } + ], + "address": "osmo1pfyxruwvtwk00y8z06dh2lqjdj82ldvy74wzm3", + "base": "factory/osmo1pfyxruwvtwk00y8z06dh2lqjdj82ldvy74wzm3/WOSMO", + "name": "WOSMO", + "display": "WOSMO", + "symbol": "WOSMO", + "traces": [], + "logo_URIs": { + "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/WOSMO.png" + }, + "keywords": [ + "osmosis-info", + "osmosis-price:uosmo:1408" + ] + }, + { + "description": "Margined Power Token sqTIA", + "denom_units": [ + { + "denom": "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqtia", + "exponent": 0 + }, + { + "denom": "sqtia", + "exponent": 6 + } + ], + "base": "factory/osmo1g8qypve6l95xmhgc0fddaecerffymsl7kn9muw/sqtia", + "name": "TIA Squared", + "display": "sqtia", + "symbol": "sqTIA", + "traces": [], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqtia.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-info", + "osmosis-price:ibc/D79E7D83AB399BFFF93433E54FAA480C191248FC556924A2A8351AE2638B3877:1378" + ] + }, + { + "description": "The deflationary utility token of the Apollo DAO project", + "denom_units": [ + { + "denom": "ibc/73BB20AF857D1FE6E061D01CA13870872AD0C979497CAF71BEA25B1CBF6879F1", + "exponent": 0, + "aliases": [ + "uapollo", + "factory/neutron154gg0wtm2v4h9ur8xg32ep64e8ef0g5twlsgvfeajqwghdryvyqsqhgk8e/APOLLO" + ] + }, + { + "denom": "apollo", + "exponent": 6 + } + ], + "type_asset": "ics20", + "base": "ibc/73BB20AF857D1FE6E061D01CA13870872AD0C979497CAF71BEA25B1CBF6879F1", + "name": "Apollo DAO", + "display": "apollo", + "symbol": "APOLLO", + "traces": [ + { + "type": "ibc", + "counterparty": { + "chain_name": "neutron", + "base_denom": "factory/neutron154gg0wtm2v4h9ur8xg32ep64e8ef0g5twlsgvfeajqwghdryvyqsqhgk8e/APOLLO", + "channel_id": "channel-10" + }, + "chain": { + "channel_id": "channel-874", + "path": "transfer/channel-874/factory/neutron154gg0wtm2v4h9ur8xg32ep64e8ef0g5twlsgvfeajqwghdryvyqsqhgk8e/APOLLO" + } + } + ], + "logo_URIs": { + "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/apollo.svg" + }, + "keywords": [ + "osmosis-main", + "osmosis-price:ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4:1410" + ] + } + ] +} From 34cab979eacd0adea32f5f3b82c4da5ee498aa53 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Sat, 27 Jan 2024 17:40:35 -0700 Subject: [PATCH 06/35] fixed cosmos file asset load --- src/chains/cosmos/cosmos-base.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chains/cosmos/cosmos-base.ts b/src/chains/cosmos/cosmos-base.ts index 4b57295b9b..392d15a54a 100644 --- a/src/chains/cosmos/cosmos-base.ts +++ b/src/chains/cosmos/cosmos-base.ts @@ -251,7 +251,7 @@ export class CosmosBase { if (tokenListType === 'URL') { ({ data: tokensJson } = await axios.get(tokenListSource)); } else { - ({ tokensJson } = JSON.parse(await fs.readFile(tokenListSource, 'utf8'))); + (tokensJson = JSON.parse(await fs.readFile(tokenListSource, 'utf8'))); } for (var tokenAssetIdx=0; tokenAssetIdx Date: Sun, 28 Jan 2024 00:30:50 -0700 Subject: [PATCH 07/35] fix wallet add --- src/services/wallet/wallet.validators.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/services/wallet/wallet.validators.ts b/src/services/wallet/wallet.validators.ts index 9e377b0fc9..d58a0db605 100644 --- a/src/services/wallet/wallet.validators.ts +++ b/src/services/wallet/wallet.validators.ts @@ -108,6 +108,11 @@ export const validatePrivateKey: Validator = mkSelectingValidator( invalidCosmosPrivateKeyError, (val) => typeof val === 'string' && isCosmosPrivateKey(val) ), + osmosis: mkValidator( + 'privateKey', + invalidCosmosPrivateKeyError, + (val) => typeof val === 'string' && isCosmosPrivateKey(val) + ), polygon: mkValidator( 'privateKey', invalidEthPrivateKeyError, From 3c68dd8540c290b9146e664b800e10031cfb88e1 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Wed, 31 Jan 2024 00:40:23 -0700 Subject: [PATCH 08/35] amm/trade bigint serialize error --- src/chains/osmosis/osmosis.controllers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index b7b928e798..71b33456b8 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -320,7 +320,7 @@ export class OsmosisController { latency: latency(startTimestamp, Date.now()), base: tradeInfo.baseToken.base, // this is base denom. might want symbol tho? no address from what i see quote: tradeInfo.quoteToken.base, - amount: new Decimal(req.amount).toFixed(tradeInfo.baseToken.decimals), + amount: new Decimal(req.amount).toFixed(tradeInfo.baseToken.decimals).toString(), rawAmount: tradeInfo.requestAmount.toString(), expectedOut: new BigNumber(tradeInfo.expectedTrade.expectedAmount).decimalPlaces(8).toString(), finalAmountReceived: finalAmountReceived.toString(), From 3bed751ba8a4e5cd49667f11205ae5adac584616 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Wed, 31 Jan 2024 18:48:58 -0700 Subject: [PATCH 09/35] fix bigint serialize issue with osmo trade. also entirely moved from poolId->tokenId (so reusing tokenId as poolId for osmo) - should make og strat work --- src/amm/amm.requests.ts | 17 ++++++--------- src/amm/amm.validators.ts | 10 --------- src/chains/osmosis/osmosis.controllers.ts | 20 ++++++++--------- src/chains/osmosis/osmosis.ts | 26 +++++++++++------------ src/chains/osmosis/osmosis.types.ts | 2 +- test/chains/osmosis/osmosis.test.ts | 6 +++--- 6 files changed, 33 insertions(+), 48 deletions(-) diff --git a/src/amm/amm.requests.ts b/src/amm/amm.requests.ts index e0c72e20d0..a72e639890 100644 --- a/src/amm/amm.requests.ts +++ b/src/amm/amm.requests.ts @@ -101,11 +101,10 @@ export interface AddLiquidityRequest extends NetworkSelectionRequest { // now al fee?: string; lowerPrice?: string; // integer as string // COSMOS - using this != undefined then call addpositionLP(), else: addposition() upperPrice?: string; // integer as string - tokenId?: number; + tokenId?: number; // COSMOS: poolId - will select one for you if not provided nonce?: number; maxFeePerGas?: string; maxPriorityFeePerGas?: string; - poolId?: string; // COSMOS: will select one for you if not provided allowedSlippage?: string; // COSMOS: used to calc TokenMinAmount } @@ -116,8 +115,7 @@ export interface AddLiquidityResponse { token0: string; token1: string; fee: string; - tokenId?: number; - poolId?: string; // COSMOS + tokenId: number; // COSMOS - this is poolId gasPrice: number | string; // COSMOS: string gasPriceToken: string; gasLimit: number; @@ -133,7 +131,7 @@ export interface AddLiquidityResponse { export interface CollectEarnedFeesRequest extends NetworkSelectionRequest { address: string; - tokenId?: number; + tokenId: number; // COSMOS - this is poolId nonce?: number; maxFeePerGas?: string; maxPriorityFeePerGas?: string; @@ -141,7 +139,6 @@ export interface CollectEarnedFeesRequest extends NetworkSelectionRequest { export interface RemoveLiquidityRequest extends CollectEarnedFeesRequest { decreasePercent?: number; - poolId?: string; // Cosmos: required allowedSlippage?: string; } @@ -149,7 +146,7 @@ export interface RemoveLiquidityResponse { network: string; timestamp: number; latency: number; - tokenId?: number; + tokenId: number; // COSMOS - this is poolId gasPrice: number | string; // COSMOS: string gasPriceToken: string; gasLimit: number | string; @@ -158,13 +155,11 @@ export interface RemoveLiquidityResponse { txHash: string | undefined; gasWanted?: string; balances?: CoinAndSymbol[]; - poolId?: string; // Cosmos } export interface PositionRequest extends NetworkSelectionRequest { - tokenId?: number; - address?: string; - poolId?: string; + tokenId?: number; // COSMOS - this is poolId, not req. (required for others) + address?: string; // COSMOS only/required (no idea how this works without address for others) } export interface PositionResponse extends LPPositionInfo { diff --git a/src/amm/amm.validators.ts b/src/amm/amm.validators.ts index eb22cf7898..8b8fc8dde9 100644 --- a/src/amm/amm.validators.ts +++ b/src/amm/amm.validators.ts @@ -166,14 +166,6 @@ export const validateTokenId: Validator = mkValidator( true ); -export const validatePoolId: Validator = mkValidator( - 'poolId', - invalidTokenIdError, - (val) => - (typeof val === 'string' && BigInt(val) >= 0), - true -); - export const validatePeriod: Validator = mkValidator( 'period', invalidTimeError, @@ -312,7 +304,6 @@ export const validateAddLiquidityRequest: RequestValidator = mkRequestValidator( validateNonce, validateMaxFeePerGas, validateMaxPriorityFeePerGas, - validatePoolId, ] ); @@ -346,7 +337,6 @@ export const validatePositionRequest: RequestValidator = mkRequestValidator([ validateNetwork, validateTokenId, validateAddress, - validatePoolId, ]); export const validatePoolPriceRequest: RequestValidator = mkRequestValidator([ diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 71b33456b8..a415fb86c0 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -329,8 +329,8 @@ export class OsmosisController { price: finalExecutionPrice.toString(), gasPrice: tx.gasPrice, gasLimit: Number(gasLimitTransaction), - gasCost: tx.gasUsed, - gasWanted: tx.gasWanted, + gasCost: tx.gasUsed.toString(), + gasWanted: tx.gasWanted.toString(), txHash: tx.transactionHash, gasPriceToken: osmosis.manualGasPriceToken }; @@ -363,7 +363,7 @@ export class OsmosisController { token1, req.amount0, req.amount1, - req.poolId, + req.tokenId, req.allowedSlippage, feeTier, gasAdjustment, @@ -377,7 +377,7 @@ export class OsmosisController { latency: latency(startTimestamp, Date.now()), token0: req.token0, token1: req.token1, - poolId: tx.poolId, + tokenId: tx.poolId, gasPrice: gasPrice.toString(), gasLimit: Number(gasLimitTransaction), gasCost: tx.gasUsed, @@ -430,7 +430,7 @@ export class OsmosisController { token1, req.amount0, req.amount1, - req.poolId, + req.tokenId, req.allowedSlippage, feeTier, gasAdjustment, @@ -483,7 +483,7 @@ export class OsmosisController { wallet, req.decreasePercent, req.address, - req.poolId!, + req.tokenId, req.allowedSlippage, feeTier, gasAdjustment, @@ -497,7 +497,7 @@ export class OsmosisController { network: osmosis.chainName, timestamp: startTimestamp, latency: latency(startTimestamp, Date.now()), - poolId: req.poolId, + tokenId: req.tokenId, balances: tx.balances, gasPrice: gasPrice.toString(), gasLimit: Number(gasLimitTransaction), @@ -562,12 +562,12 @@ export class OsmosisController { const pools = await osmosis.findPoolsPositions( req.address!, - req.poolId + req.tokenId ); - if (req.poolId){ + if (req.tokenId){ logger.info( - `Found pool positions for ${req.address}, ${req.poolId}` + `Found pool positions for ${req.address}, ${req.tokenId!.toString()}` ); }else{ logger.info( diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts index 06d4d59b9e..775ff1fc72 100755 --- a/src/chains/osmosis/osmosis.ts +++ b/src/chains/osmosis/osmosis.ts @@ -783,7 +783,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ token1: CosmosAsset, amount0: string, amount1: string, - poolId?: string, + poolId?: number, allowedSlippage?: string, feeTier_input?: string, gasAdjustment_input?: number, @@ -886,7 +886,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var pool; if (poolId){ - pool = pools.find(({id}) => id.toString() == poolId); + pool = pools.find(({id}) => id.toString() == poolId.toString()); }else if (foundPools){ pool = foundPools.pop(); // this is not selective without poolid input (can be multiple pools per token pair).. though order should cause pool with greatest liquidity to be used } @@ -1033,7 +1033,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ res.token0_finalamount = token0_finalamount res.token1_finalamount = token1_finalamount res.poolshares = poolshares - res.poolId = pool.id.toString() + res.poolId = Number(pool.id.toString()) res.poolAddress = pool.address res.gasPrice = gasPrice return res; @@ -1092,7 +1092,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ res.token0_finalamount = token0_finalamount res.token1_finalamount = token1_finalamount res.poolshares = poolshares - res.poolId = pool.id.toString() + res.poolId = Number(pool.id.toString()) res.poolAddress = pool.address res.gasPrice = gasPrice return res; @@ -1223,8 +1223,8 @@ export class Osmosis extends CosmosBase implements Cosmosish{ }); var pool; - if (req.poolId){ - pool = filteredPools.find(({id}) => id.toString() == req.poolId); + if (req.tokenId){ + pool = filteredPools.find(({id}) => id.toString() == req.tokenId!.toString()); }else if (foundPools){ pool = foundPools.pop(); // this is not selective without poolid input (can be multiple pools per token pair).. though order should cause pool with greatest liquidity to be used } @@ -1411,7 +1411,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ res.token0_finalamount = token0_finalamount res.token1_finalamount = token1_finalamount res.poolshares = poolshares - res.poolId = pool.id.toString() + res.poolId = Number(pool.id.toString()) res.poolAddress = pool.address res.gasPrice = gasPrice return res; @@ -1470,7 +1470,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ res.token0_finalamount = token0_finalamount res.token1_finalamount = token1_finalamount res.poolshares = poolshares - res.poolId = pool.id.toString() + res.poolId = Number(pool.id.toString()) res.poolAddress = pool.address res.gasPrice = gasPrice return res; @@ -1489,7 +1489,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ } /** - * Given a 2 token symbols and 1-2 amounts, exchange amounts for pool liquidity shares + * exchange pool liquidity shares for amounts of tokens from a pool * * @param wallet CosmosWallet * @param decreasePercent @@ -1503,7 +1503,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ wallet: CosmosWallet, decreasePercent: number = 100, address: string, - poolId: string, + poolId: number, allowedSlippage?: string, feeTier_input?: string, gasAdjustment_input?: number, @@ -1561,7 +1561,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) ); - const currentPool = extendedPools.filter((pl) => pl.id.toString() == poolId)[0]; + const currentPool = extendedPools.filter((pl) => pl.id.toString() == poolId.toString())[0]; const percent = decreasePercent; // total percent of pool shares const myLiquidity = new BigNumber(currentPool.myLiquidity || 0) @@ -1842,7 +1842,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ */ async findPoolsPositions( address: string, - poolId?: string, + poolId?: number, ): Promise { try { @@ -1884,7 +1884,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var returnPools: SerializableExtendedPool[] = []; extendedPools.forEach(function (cPool) { if (poolId){ - if (cPool.id.toString() == poolId || cPool.poolId.toString() == poolId){ + if (cPool.id.toString() == poolId.toString() || cPool.poolId.toString() == poolId.toString()){ returnPools.push(new SerializableExtendedPool(cPool)); } }else{ diff --git a/src/chains/osmosis/osmosis.types.ts b/src/chains/osmosis/osmosis.types.ts index 450914871c..73a1fbb98d 100755 --- a/src/chains/osmosis/osmosis.types.ts +++ b/src/chains/osmosis/osmosis.types.ts @@ -228,7 +228,7 @@ export interface TransactionResponse { export interface AddPositionTransactionResponse extends TransactionResponse { rawLog: string; - poolId: string; + poolId: number; poolAddress: string; token0_finalamount: string; token1_finalamount: string; diff --git a/test/chains/osmosis/osmosis.test.ts b/test/chains/osmosis/osmosis.test.ts index 942f510e46..f72ef90f94 100755 --- a/test/chains/osmosis/osmosis.test.ts +++ b/test/chains/osmosis/osmosis.test.ts @@ -176,9 +176,9 @@ describe('controllers - CL Pools + Liquidity', () => { // best to join pools using one amount == 0 (so input 1 token type at a time) // adds tend to fail unless amounts input are similar in relative $ value it('addLiquidity', async () => { - const addLiquidityRequestFunction = {'poolId':'62', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; + const addLiquidityRequestFunction = {'tokenId':62, 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) - expect(addLiquidityResponse.poolId).toEqual('62') + expect(addLiquidityResponse.tokenId).toEqual(62) }); it('positionsRequest', async () => { @@ -192,7 +192,7 @@ describe('controllers - CL Pools + Liquidity', () => { }); it('removeLiquidity', async () => { - const removeLiquidityRequest = {'decreasePercent':100, 'poolId':'62', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, 'allowedSlippage':'100%'}; + const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':62, 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, 'allowedSlippage':'100%'}; var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) expect(removeLiquidityResponse.txHash).toBeDefined(); }); From 6f60437993924d60f0fd28a9ea791ffe862cca07 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Wed, 31 Jan 2024 18:53:56 -0700 Subject: [PATCH 10/35] swagger defs update for poolId->tokenId changes --- docs/swagger/definitions.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/swagger/definitions.yml b/docs/swagger/definitions.yml index 195c5c11f3..60b755553f 100644 --- a/docs/swagger/definitions.yml +++ b/docs/swagger/definitions.yml @@ -725,8 +725,8 @@ definitions: type: 'number' maxPriorityFeePerGas: type: 'number' - poolId: # Cosmos specific - type: 'string' + tokenId: # Cosmos poolId + type: 'number' allowedSlippage: # Cosmos specific type: 'string' chain: @@ -775,8 +775,8 @@ definitions: txHash: type: 'string' example: '0x0000000000000000000000000000000000000000' - poolId: # Cosmos specific - type: 'string' + tokenId: # Cosmos poolId + type: 'number' poolAddress: # Cosmos specific type: 'string' poolShares: # Cosmos specific @@ -796,6 +796,7 @@ definitions: type: 'object' required: - 'address' + - 'tokenId' - 'chain' - 'network' - 'connector' @@ -803,7 +804,7 @@ definitions: address: type: 'string' example: '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D' - tokenId: + tokenId: # Cosmos poolId type: 'number' example: 12 maxFeePerGas: @@ -821,8 +822,6 @@ definitions: example: 'uniswapLP' decreasePercent: # Cosmos specific type: 'number' - poolId: # Cosmos specific - type: 'string' allowedSlippage: # Cosmos specific type: 'string' From f04cc9dcb959f585983f7c541e486514fe20d51f Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Wed, 31 Jan 2024 23:38:56 -0700 Subject: [PATCH 11/35] re-enable addPositionCL, but its throwing null pointer error from the RPC --- src/chains/osmosis/osmosis.controllers.ts | 57 ----------------------- test/chains/osmosis/osmosis.test.ts | 6 +++ 2 files changed, 6 insertions(+), 57 deletions(-) diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index a415fb86c0..2e63411e73 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -351,63 +351,6 @@ export class OsmosisController { const token0: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token0)!; const token1: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token1)!; - const gasPrice = osmosis.manualGasPrice; // GAS PRICE PER UNIT OF WORK - const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION - const gasAdjustment = osmosis.gasPriceConstant; // - const feeTier = osmosis.feeTier; // - - const tx = await osmosis.addPosition( - wallet, - req.address, - token0, - token1, - req.amount0, - req.amount1, - req.tokenId, - req.allowedSlippage, - feeTier, - gasAdjustment, - ); - - this.validateTxErrors(tx, "Liquidity added. "); - - return { - network: osmosis.chainName, - timestamp: startTimestamp, - latency: latency(startTimestamp, Date.now()), - token0: req.token0, - token1: req.token1, - tokenId: tx.poolId, - gasPrice: gasPrice.toString(), - gasLimit: Number(gasLimitTransaction), - gasCost: tx.gasUsed, - gasWanted: tx.gasWanted, - txHash: tx.transactionHash, - poolAddress: tx.poolAddress, - poolShares: tx.poolshares, - token0FinalAmount: tx.token0_finalamount, - token1FinalAmount: tx.token1_finalamount, - nonce: 0, - gasPriceToken: osmosis.manualGasPriceToken, - fee: feeTier, - }; - } - - static async addLiquidityLP( - osmosis: Osmosis, - req: AddLiquidityRequest - ): Promise { - const startTimestamp: number = Date.now(); - - const { wallet } = - await getOsmoWallet( - osmosis, - req.address, - ); - - const token0: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token0)!; - const token1: TokenishCosmosAsset = osmosis.getTokenBySymbol(req.token1)!; - const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION const gasAdjustment = osmosis.gasPriceConstant; // const feeTier = osmosis.feeTier; // diff --git a/test/chains/osmosis/osmosis.test.ts b/test/chains/osmosis/osmosis.test.ts index f72ef90f94..1c82edc527 100755 --- a/test/chains/osmosis/osmosis.test.ts +++ b/test/chains/osmosis/osmosis.test.ts @@ -181,6 +181,12 @@ describe('controllers - CL Pools + Liquidity', () => { expect(addLiquidityResponse.tokenId).toEqual(62) }); + it('addLiquidity', async () => { + const addLiquidityRequestFunction = {'lowerPrice':'250', 'upperPrice':'400', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress}; + var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) + expect(addLiquidityResponse.tokenId).toEqual(79) + }); + it('positionsRequest', async () => { const positionsRequest1 = { chain:'osmosis', From a129397f42c38a3438397d24269e93b3b5eb9830 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Thu, 1 Feb 2024 20:52:48 -0700 Subject: [PATCH 12/35] fixed CL positions get and reduce --- src/amm/amm.requests.ts | 3 +- src/chains/osmosis/osmosis.controllers.ts | 5 +- src/chains/osmosis/osmosis.ts | 301 +++++++++++++++++----- src/services/common-interfaces.ts | 11 +- test/chains/osmosis/osmosis.test.ts | 46 +++- 5 files changed, 282 insertions(+), 84 deletions(-) diff --git a/src/amm/amm.requests.ts b/src/amm/amm.requests.ts index a72e639890..1037e7067e 100644 --- a/src/amm/amm.requests.ts +++ b/src/amm/amm.requests.ts @@ -158,12 +158,11 @@ export interface RemoveLiquidityResponse { } export interface PositionRequest extends NetworkSelectionRequest { - tokenId?: number; // COSMOS - this is poolId, not req. (required for others) + tokenId?: number; // COSMOS - this is poolId. requried for both address?: string; // COSMOS only/required (no idea how this works without address for others) } export interface PositionResponse extends LPPositionInfo { - pools?: CosmosSerializableExtendedPool[]; network: string; timestamp: number; latency: number; diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 2e63411e73..71d5af1863 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -503,7 +503,7 @@ export class OsmosisController { ): Promise { const startTimestamp: number = Date.now(); - const pools = await osmosis.findPoolsPositions( + const response = await osmosis.findPoolsPositions( req.address!, req.tokenId ); @@ -523,7 +523,8 @@ export class OsmosisController { network: osmosis.chainName, timestamp: startTimestamp, latency: latency(startTimestamp, Date.now()), - pools: pools, //CosmosExtendedPool[]; + //CosmosExtendedPool[]; + ...response }; } diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts index 775ff1fc72..3391a30780 100755 --- a/src/chains/osmosis/osmosis.ts +++ b/src/chains/osmosis/osmosis.ts @@ -55,7 +55,7 @@ import { getImperatorPriceHash } from './osmosis.prices'; import { GasPrice, calculateFee, setupIbcExtension, SigningStargateClient, AminoTypes } from '@cosmjs/stargate'; import { CosmWasmClient } from "@cosmjs/cosmwasm-stargate"; import { TokensRequest, TokensResponse } from '../../network/network.requests'; -import { Cosmosish, TransferRequest } from '../../services/common-interfaces'; +import { Cosmosish, PositionInfo, TransferRequest } from '../../services/common-interfaces'; import { AddLiquidityRequest } from '../../amm/amm.requests'; import { HttpBatchClient, Tendermint37Client } from '@cosmjs/tendermint-rpc'; import { GeneratedType, Registry } from "osmojs/node_modules/@cosmjs/proto-signing/build/registry"; @@ -78,7 +78,8 @@ const { swapExactAmountIn, } = osmosis.gamm.v1beta1.MessageComposer.withTypeUrl; const { - createPosition + createPosition, + withdrawPosition } = osmosis.concentratedliquidity.v1beta1.MessageComposer.withTypeUrl; const { send @@ -887,8 +888,8 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var pool; if (poolId){ pool = pools.find(({id}) => id.toString() == poolId.toString()); - }else if (foundPools){ - pool = foundPools.pop(); // this is not selective without poolid input (can be multiple pools per token pair).. though order should cause pool with greatest liquidity to be used + }else if (foundPools && foundPools.length > 0){ + pool = foundPools[0]; // this is not selective without poolid input (can be multiple pools per token pair).. though order should cause pool with greatest liquidity to be used } var calcedFee; @@ -1225,8 +1226,8 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var pool; if (req.tokenId){ pool = filteredPools.find(({id}) => id.toString() == req.tokenId!.toString()); - }else if (foundPools){ - pool = foundPools.pop(); // this is not selective without poolid input (can be multiple pools per token pair).. though order should cause pool with greatest liquidity to be used + }else if (foundPools && foundPools.length > 0){ + pool = foundPools[0]; // this is not selective without poolid input (can be multiple pools per token pair).. though order should cause pool with greatest liquidity to be used } var calcedFee; @@ -1433,12 +1434,23 @@ export class Osmosis extends CosmosBase implements Cosmosish{ } } else if (attribute.key == 'amount'){ + // this parses shares from a GAMM pool only if (pool.totalShares && pool.totalShares.denom && attribute.value.includes(pool.totalShares.denom)){ outbound_shares_string = attribute.value; } } } } + // this is a CL position + else if (event.type == 'create_position'){ + + for (var attribute_idx=0; attribute_idx extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) @@ -1563,63 +1580,106 @@ export class Osmosis extends CosmosBase implements Cosmosish{ const currentPool = extendedPools.filter((pl) => pl.id.toString() == poolId.toString())[0]; const percent = decreasePercent; // total percent of pool shares + + var tokenOutMins: Coin[] = [] + var msgs = [] + var myLiquidity; + if (currentPool.$typeUrl!.includes('concentratedliquidity')){ + var clPositions; + if (poolId){ + try{ + const clPositionsContainer = await this._provider.osmosis.concentratedliquidity.v1beta1.userPositions({ + address: address, + pagination: { + key: new Uint8Array(), + offset: BigInt(0), + limit: BigInt(10000), + countTotal: false, + reverse: false, + }, + poolId: poolId!.toString() + }) + clPositions = clPositionsContainer.positions + } catch (error) { + console.debug(error); + } + } + myLiquidity = new BigNumber(clPositions[0].position.liquidity || 0).multipliedBy(percent) + .div(100) + .toString(); - const myLiquidity = new BigNumber(currentPool.myLiquidity || 0) - .multipliedBy(percent) - .div(100) - .toString(); + var msgWithdrawPosition; - const unbondedShares = convertDollarValueToShares( - this.tokenList, - myLiquidity || 0, - currentPool, - prices - ); - - const myCoins = convertDollarValueToCoins( - this.tokenList, - myLiquidity || 0, - currentPool, - prices - ); + msgWithdrawPosition = withdrawPosition({ + sender: address, + positionId: clPositions[0].position.positionId.toString(), + liquidityAmount: myLiquidity, + }) - var coinsNeeded: Coin[] = []; - myCoins.forEach(({ denom, amount }) => { - var amountWithSlippage; - amountWithSlippage = new BigNumber(amount) - .multipliedBy(new BigNumber(100).minus(slippage)) - .div(100) - if (amountWithSlippage.isGreaterThanOrEqualTo(1)){ - coinsNeeded.push({ - denom, - amount: this.noDecimals(amountWithSlippage.toString()), - }); + msgs.push(msgWithdrawPosition) + + }else{ + if (currentPool.myLiquidity){ + myLiquidity = new BigNumber(currentPool.myLiquidity || 0) + .multipliedBy(percent) + .div(100) + .toString(); } - }); - const shareInAmount = new BigNumber(unbondedShares) - .shiftedBy(18) - .decimalPlaces(0) - .toString(); + const unbondedShares = convertDollarValueToShares( + this.tokenList, + myLiquidity || 0, + currentPool, + prices + ); + + const myCoins = convertDollarValueToCoins( + this.tokenList, + myLiquidity || 0, + currentPool, + prices + ); - var tokenOutMins = coinsNeeded.map((c: Coin) => { - return coin(c.amount, c.denom); - }); + var coinsNeeded: Coin[] = []; + myCoins.forEach(({ denom, amount }) => { + var amountWithSlippage; + amountWithSlippage = new BigNumber(amount) + .multipliedBy(new BigNumber(100).minus(slippage)) + .div(100) + if (amountWithSlippage.isGreaterThanOrEqualTo(1)){ + coinsNeeded.push({ + denom, + amount: this.noDecimals(amountWithSlippage.toString()), + }); + } + }); + + const shareInAmount = new BigNumber(unbondedShares) + .shiftedBy(18) + .decimalPlaces(0) + .toString(); + + tokenOutMins = coinsNeeded.map((c: Coin) => { + return coin(c.amount, c.denom); + }); + + if (slippage == 100){ + tokenOutMins = [] + } + + const msg = exitPool({ + // @ts-ignore: bad osmojs models + poolId: currentPool.id.toString(), + sender: address, + shareInAmount, + tokenOutMins: tokenOutMins, + }); + msgs.push(msg) + - if (slippage == 100){ - tokenOutMins = [] } + - var msgs = [] - const msg = exitPool({ - // @ts-ignore: bad osmojs models - poolId: currentPool.id.toString(), - sender: address, - shareInAmount, - tokenOutMins: tokenOutMins, - }); - msgs.push(msg) - var enumFee = FEES.osmosis.exitPool(feeTier); var gasToUse = enumFee.gas; try{ @@ -1692,6 +1752,42 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var coins_string_list = finalAmountsReceived_string.split(','); for (var coin_string_idx=0; coin_string_idx { + if (coin_string.includes(asset.token.denom)){ + var token = this.getTokenByBase(asset.token.denom); + var amount = (new BigNumber(coin_string.replace(asset.token.denom,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = asset.token.denom + } + finalBalancesReceived.push({base: asset.token.denom, amount:amount, symbol:symbol}) + } + }) + } else{ + if (coin_string.includes(currentPool.token0)){ + var token = this.getTokenByBase(currentPool.token0); + var amount = (new BigNumber(coin_string.replace(currentPool.token0,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = currentPool.token0 + } + finalBalancesReceived.push({base: currentPool.token0, amount:amount, symbol:symbol}) + } + if (coin_string.includes(currentPool.token1)){ + var token = this.getTokenByBase(currentPool.token1); + var amount = (new BigNumber(coin_string.replace(currentPool.token1,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = currentPool.token1 + } + finalBalancesReceived.push({base: currentPool.token1, amount:amount, symbol:symbol}) + } + } + } + }else{ + var coin_string = finalAmountsReceived_string; + if (currentPool.poolAssets){ currentPool.poolAssets.forEach((asset) => { if (coin_string.includes(asset.token.denom)){ var token = this.getTokenByBase(asset.token.denom); @@ -1703,20 +1799,27 @@ export class Osmosis extends CosmosBase implements Cosmosish{ finalBalancesReceived.push({base: asset.token.denom, amount:amount, symbol:symbol}) } }) - } - }else{ - var coin_string = finalAmountsReceived_string; - currentPool.poolAssets.forEach((asset) => { - if (coin_string.includes(asset.token.denom)){ - var token = this.getTokenByBase(asset.token.denom); - var amount = (new BigNumber(coin_string.replace(asset.token.denom,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + } else{ + if (coin_string.includes(currentPool.token0)){ + var token = this.getTokenByBase(currentPool.token0); + var amount = (new BigNumber(coin_string.replace(currentPool.token0,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); var symbol = token!.symbol; if (!symbol){ - symbol = asset.token.denom + symbol = currentPool.token0 } - finalBalancesReceived.push({base: asset.token.denom, amount:amount, symbol:symbol}) + finalBalancesReceived.push({base: currentPool.token0, amount:amount, symbol:symbol}) } - }) + if (coin_string.includes(currentPool.token1)){ + var token = this.getTokenByBase(currentPool.token1); + var amount = (new BigNumber(coin_string.replace(currentPool.token1,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = currentPool.token1 + } + finalBalancesReceived.push({base: currentPool.token1, amount:amount, symbol:symbol}) + } + } + } } @@ -1843,9 +1946,33 @@ export class Osmosis extends CosmosBase implements Cosmosish{ async findPoolsPositions( address: string, poolId?: number, - ): Promise { + ): Promise { + + console.debug('') try { + + var clPositions; + if (poolId){ + try{ + const clPositionsContainer = await this._provider.osmosis.concentratedliquidity.v1beta1.userPositions({ + address: address, + pagination: { + key: new Uint8Array(), + offset: BigInt(0), + limit: BigInt(10000), + countTotal: false, + reverse: false, + }, + poolId: poolId!.toString() + }) + clPositions = clPositionsContainer.positions + } catch (error) { + console.debug(error); + } + } + + // only shows GAMM positions by # of poolShares const balancesContainer = await this._provider.cosmos.bank.v1beta1.allBalances({ address: address, pagination: { @@ -1881,10 +2008,12 @@ export class Osmosis extends CosmosBase implements Cosmosish{ extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) ); + // balances contain pool address (as coin denom) and amount (# of shares) + // however it's not returning that for CL pool positions (only GAMM).. so we can't match the pool address to anything here var returnPools: SerializableExtendedPool[] = []; extendedPools.forEach(function (cPool) { if (poolId){ - if (cPool.id.toString() == poolId.toString() || cPool.poolId.toString() == poolId.toString()){ + if ((cPool.id && cPool.id.toString() == poolId.toString()) || (cPool.poolId && cPool.poolId.toString() == poolId.toString())){ returnPools.push(new SerializableExtendedPool(cPool)); } }else{ @@ -1897,7 +2026,41 @@ export class Osmosis extends CosmosBase implements Cosmosish{ }); - return returnPools; + + var returnObj: PositionInfo = {'pools':returnPools} + + + // if we're passed a poolId (tokenId), we used it to search for CLPositions + // so (if we can) let's pretend we match the existing model and just return the first position for that poolId + if (clPositions && clPositions.length > 0){ + const clPosition = clPositions[0]; + + returnObj.token0 = clPosition.asset0.denom; + returnObj.token1 = clPosition.asset1.denom; + returnObj.amount0 = clPosition.asset0.amount; + returnObj.amount1 = clPosition.asset1.amount; + returnObj.lowerPrice = clPosition.position.lowerTick.toString(); + returnObj.upperPrice = clPosition.position.upperTick.toString(); + returnObj.poolShares = clPosition.position.liquidity + + const clPositionPool = extendedPools.find((pl) => pl.id.toString() === clPosition.position.poolId.toString()); + returnObj.fee = clPositionPool?.fees7D.toString() + } + else if (poolId && returnPools.length > 0){ // we got a poolId but it was for a GAMM pool - so yes poolShares + var firstPool: SerializableExtendedPool = returnPools[0]!; + + returnObj.token0 = firstPool.poolAssets![0].token.denom; + returnObj.token1 = firstPool.poolAssets![1].token.denom; + + returnObj.amount0 = firstPool.poolAssets![0].token.amount; + returnObj.amount1 = firstPool.poolAssets![1].token.amount; + + returnObj.fee = firstPool.fees_spent_7d.toString() + + returnObj.poolShares = firstPool.myLiquidityShares.toString() + } + + return returnObj; } catch (error) { console.debug(error); diff --git a/src/services/common-interfaces.ts b/src/services/common-interfaces.ts index d62a093278..64a7c508f7 100644 --- a/src/services/common-interfaces.ts +++ b/src/services/common-interfaces.ts @@ -113,6 +113,7 @@ import { import { BalanceRequest } from '../network/network.requests'; import { TradeV2 } from '@traderjoe-xyz/sdk-v2'; import { CurveTrade } from '../connectors/curve/curve'; +import { SerializableExtendedPool as CosmosSerializableExtendedPool } from '../chains/osmosis/osmosis.types'; // TODO Check the possibility to have clob/solana/serum equivalents here // Check this link https://hummingbot.org/developers/gateway/building-gateway-connectors/#5-add-sdk-classes-to-uniswapish-interface @@ -203,13 +204,15 @@ export interface ExpectedTrade { export interface PositionInfo { token0?: string | undefined; token1?: string | undefined; + poolShares?: string; // COSMOS - GAMM pools only issue poolShares (no amount/unclaimedToken) fee?: string | undefined; lowerPrice?: string; upperPrice?: string; - amount0?: string; - amount1?: string; - unclaimedToken0?: string; - unclaimedToken1?: string; + amount0?: string; // COSMOS - CL pools only + amount1?: string; // COSMOS - CL pools only + unclaimedToken0?: string; // COSMOS - CL pools only + unclaimedToken1?: string; // COSMOS - CL pools only + pools?: CosmosSerializableExtendedPool[]; } export interface Uniswapish { diff --git a/test/chains/osmosis/osmosis.test.ts b/test/chains/osmosis/osmosis.test.ts index 1c82edc527..050fe0b57b 100755 --- a/test/chains/osmosis/osmosis.test.ts +++ b/test/chains/osmosis/osmosis.test.ts @@ -175,30 +175,62 @@ describe('controllers - CL Pools + Liquidity', () => { // best to join pools using one amount == 0 (so input 1 token type at a time) // adds tend to fail unless amounts input are similar in relative $ value + var poolIdGAMM: number; it('addLiquidity', async () => { const addLiquidityRequestFunction = {'tokenId':62, 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) - expect(addLiquidityResponse.tokenId).toEqual(62) + poolIdGAMM = addLiquidityResponse.tokenId; + expect(addLiquidityResponse.tokenId).toBeDefined(); }); - it('addLiquidity', async () => { - const addLiquidityRequestFunction = {'lowerPrice':'250', 'upperPrice':'400', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress}; + var poolIdCL: number; + it('addLiquidity LP', async () => { + const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'5', 'upperPrice':'5.7', 'fee': 'high', 'token0':'ATOM', 'token1':'OSMO', 'amount0':'0.001', 'amount1':'0.006', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress}; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) - expect(addLiquidityResponse.tokenId).toEqual(79) + poolIdCL = addLiquidityResponse.tokenId; + expect(addLiquidityResponse.tokenId).toBeDefined(); + }); + + it('positionsRequest ALL in Cosmos pool format', async () => { + const positionsRequest1 = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress, + } + var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) + expect(positionsResponse1.pools!.length).toBeGreaterThan(0) }); - it('positionsRequest', async () => { + it('positionsRequest GAMM', async () => { const positionsRequest1 = { chain:'osmosis', network:'testnet', address: osmosisAddress, + tokenId: poolIdGAMM // GAMM } var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) expect(positionsResponse1.pools!.length).toBeGreaterThan(0) }); - it('removeLiquidity', async () => { - const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':62, 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, 'allowedSlippage':'100%'}; + it('positionsRequest CL', async () => { + const positionsRequest1 = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress, + tokenId: poolIdCL // CL + } + var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) + expect(positionsResponse1.pools!.length).toBeGreaterThan(0) + }); + + it('removeLiquidity GAMM', async () => { + const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdGAMM, 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, 'allowedSlippage':'100%'}; + var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) + expect(removeLiquidityResponse.txHash).toBeDefined(); + }); + + it('removeLiquidity CL', async () => { + const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdCL, 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, 'allowedSlippage':'100%'}; var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) expect(removeLiquidityResponse.txHash).toBeDefined(); }); From c7443f0df757cd2183c0795d062239230e9be944 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Mon, 5 Feb 2024 13:49:55 -0700 Subject: [PATCH 13/35] Fix network return name for osmo chains/balances --- src/chains/osmosis/osmosis.controllers.ts | 4 ++++ src/chains/osmosis/osmosis.ts | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 71d5af1863..8109a2a47f 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -585,6 +585,7 @@ export class OsmosisController { } static async balances(osmosis: Osmosis, req: CosmosBalanceRequest) { + const startTimestamp: number = Date.now(); validateCosmosBalanceRequest(req); const wallet = await osmosis.getWallet(req.address, 'osmo'); @@ -604,6 +605,9 @@ export class OsmosisController { const filteredBalances = toCosmosBalances(balances, tokenSymbols); return { + network: osmosis.chainName, + timestamp: startTimestamp, + latency: latency(startTimestamp, Date.now()), balances: filteredBalances, }; } diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts index 3391a30780..2b4e50e8df 100755 --- a/src/chains/osmosis/osmosis.ts +++ b/src/chains/osmosis/osmosis.ts @@ -110,6 +110,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ private _gasPrice: number; private _nativeTokenSymbol: string; private _chain: string; + private _network: string; private _requestCount: number; private _metricsLogInterval: number; private _metricTimer; @@ -134,7 +135,8 @@ export class Osmosis extends CosmosBase implements Cosmosish{ config.rpcAddressDynamicBaseFee, config.manualGasPrice ) - this._chain = network; + this._network = network; + this._chain = 'osmosis'; this._nativeTokenSymbol = config.nativeCurrencySymbol; this.manualGasPriceToken = config.manualGasPriceToken; @@ -196,7 +198,10 @@ export class Osmosis extends CosmosBase implements Cosmosish{ public get chain(): string { return this._chain; } - + public get network(): string { + return this._network; + } + public get nativeTokenSymbol(): string { return this._nativeTokenSymbol; } From 97af83a18fd32ef5405aacd8269ef597bcb7dce3 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Mon, 5 Feb 2024 18:12:06 -0700 Subject: [PATCH 14/35] remove address required in poolPrices() --- src/chains/osmosis/osmosis.ts | 37 +++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts index 2b4e50e8df..2b25f7d101 100755 --- a/src/chains/osmosis/osmosis.ts +++ b/src/chains/osmosis/osmosis.ts @@ -1862,21 +1862,26 @@ export class Osmosis extends CosmosBase implements Cosmosish{ ): Promise { try { - const balancesContainer = await this._provider.cosmos.bank.v1beta1.allBalances({ - address: address, - pagination: { - key: new Uint8Array(), - offset: BigInt(0), - limit: BigInt(10000), - countTotal: false, - reverse: false, - }, - }) - const balances = balancesContainer.balances - const lockedCoinsContainer = await this._provider.osmosis.lockup.accountLockedCoins({ - owner: address, - }); - const lockedCoins: Coin[] = lockedCoinsContainer.lockedCoins ? lockedCoinsContainer.lockedCoins : [] + var balances: Coin[] = [] + var lockedCoins: Coin[] = [] + if (address){ + const balancesContainer = await this._provider.cosmos.bank.v1beta1.allBalances({ + address: address, + pagination: { + key: new Uint8Array(), + offset: BigInt(0), + limit: BigInt(10000), + countTotal: false, + reverse: false, + }, + }) + balances = balancesContainer.balances + + const lockedCoinsContainer = await this._provider.osmosis.lockup.accountLockedCoins({ + owner: address, + }); + lockedCoinsContainer.lockedCoins ? lockedCoinsContainer.lockedCoins : [] + } // RETURN TYPES: // concentrated-liquidity/pool || cosmwasmpool/v1beta1/model/pool || gamm/pool-models/balancer/balancerPool || gamm/pool-models/stableswap/stableswap_pool @@ -1953,8 +1958,6 @@ export class Osmosis extends CosmosBase implements Cosmosish{ poolId?: number, ): Promise { - console.debug('') - try { var clPositions; From c26fcf5b1240be48ae0f24e49621c360a70ae81d Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Mon, 5 Feb 2024 18:55:20 -0700 Subject: [PATCH 15/35] fixed approvals when interacting with client --- src/chains/cosmos/cosmos.controllers.ts | 2 +- src/chains/cosmos/cosmos.requests.ts | 2 +- src/chains/kujira/kujira.ts | 2 +- src/chains/osmosis/osmosis.controllers.ts | 38 ++++++++++++++++------- src/network/network.requests.ts | 2 +- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/chains/cosmos/cosmos.controllers.ts b/src/chains/cosmos/cosmos.controllers.ts index 311f867497..1a660046e4 100644 --- a/src/chains/cosmos/cosmos.controllers.ts +++ b/src/chains/cosmos/cosmos.controllers.ts @@ -63,7 +63,7 @@ export class CosmosController { static async poll(cosmos: Cosmos, req: CosmosPollRequest) { validateCosmosPollRequest(req); - const transaction = await cosmos.getTransaction(req.txHash); + const transaction = await cosmos.getTransaction(req.txHash!); const currentBlock = await cosmos.getCurrentBlockNumber(); return { diff --git a/src/chains/cosmos/cosmos.requests.ts b/src/chains/cosmos/cosmos.requests.ts index 3329dab41d..09103da389 100644 --- a/src/chains/cosmos/cosmos.requests.ts +++ b/src/chains/cosmos/cosmos.requests.ts @@ -17,7 +17,7 @@ export interface CosmosTokenRequest { } export interface CosmosPollRequest { - txHash: string; + txHash?: string; } export enum TransactionResponseStatusCode { diff --git a/src/chains/kujira/kujira.ts b/src/chains/kujira/kujira.ts index 81a44558c7..7282a107e2 100644 --- a/src/chains/kujira/kujira.ts +++ b/src/chains/kujira/kujira.ts @@ -134,7 +134,7 @@ export class Kujira { const currentBlock = await this.kujira.getCurrentBlock({}); const transaction = await this.kujira.getTransaction({ - hash: req.txHash, + hash: req.txHash!, }); // noinspection UnnecessaryLocalVariableJS diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 8109a2a47f..00ceff877d 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -44,6 +44,7 @@ import { Decimal } from 'decimal.js-light'; import { CosmosAsset as TokenishCosmosAsset} from '../../chains/cosmos/cosmos-base'; import { TokensRequest, TokensResponse } from '../../network/network.requests'; import { TransferRequest, TransferResponse } from '../../services/common-interfaces'; +//@ts-ignore import { validateCosmosBalanceRequest, validateCosmosPollRequest } from '../cosmos/cosmos.validators'; import { CosmosBalanceRequest, CosmosPollRequest } from '../cosmos/cosmos.requests'; import { toCosmosBalances } from '../cosmos/cosmos.controllers'; @@ -613,18 +614,27 @@ export class OsmosisController { } static async poll(osmosis: Osmosis, req: CosmosPollRequest) { - validateCosmosPollRequest(req); - - const transaction = await osmosis.getTransaction(req.txHash); - const currentBlock = await osmosis.getCurrentBlockNumber(); - + // validateCosmosPollRequest(req); + if (req.txHash){ + const transaction = await osmosis.getTransaction(req.txHash); + const currentBlock = await osmosis.getCurrentBlockNumber(); + + return { + txHash: req.txHash, + currentBlock, + txBlock: transaction.height, + gasUsed: transaction.gasUsed, + gasWanted: transaction.gasWanted, + txData: decodeTxRaw(transaction.tx), + }; + } return { - txHash: req.txHash, - currentBlock, - txBlock: transaction.height, - gasUsed: transaction.gasUsed, - gasWanted: transaction.gasWanted, - txData: decodeTxRaw(transaction.tx), + txHash: '', + txStatus: 1, + txBlock: 0, + gasUsed: 0, + gasWanted: 0, + txData: '', }; } @@ -634,9 +644,13 @@ export class OsmosisController { ){ if (osmosis || req){} // Not applicable. + var allowances: Record = {} + req.tokenSymbols.forEach((sym)=>{ + allowances[sym] = "1000000000000000000000000000" + }) return { spender: undefined as unknown as string, - approvals: {} as Record, + approvals: allowances, }; } diff --git a/src/network/network.requests.ts b/src/network/network.requests.ts index 20b386b90f..306057dae9 100644 --- a/src/network/network.requests.ts +++ b/src/network/network.requests.ts @@ -20,7 +20,7 @@ export interface BalanceResponse { } export interface PollRequest extends NetworkSelectionRequest { - txHash: string; + txHash?: string; // not required for cosmos when coming after approve() } export interface PollResponse { From 65e1eccd0e26ddeff481a327e935b227f015d7e9 Mon Sep 17 00:00:00 2001 From: PecuNick <92998964+nkhrs@users.noreply.github.com> Date: Mon, 12 Feb 2024 20:57:48 +0100 Subject: [PATCH 16/35] update curl.sh and osmosis_trade.json --- test-helpers/curl/curl.sh | 1 + test-helpers/curl/requests/osmosis_trade.json | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/test-helpers/curl/curl.sh b/test-helpers/curl/curl.sh index 999b44ec84..e47f63c450 100644 --- a/test-helpers/curl/curl.sh +++ b/test-helpers/curl/curl.sh @@ -8,6 +8,7 @@ # export POLYGON_ADDRESS='' # export KUJIRA_MNEMONIC='put-your-kujira-mnemonic-here' # export OSMOSIS_ADDRESS='' +# export OSMOSIS_PRIVATE_KEY='' # -k is --insecure, this disables certificate verification and should only be # used for local development and testing diff --git a/test-helpers/curl/requests/osmosis_trade.json b/test-helpers/curl/requests/osmosis_trade.json index a3df130c94..158c1173ec 100644 --- a/test-helpers/curl/requests/osmosis_trade.json +++ b/test-helpers/curl/requests/osmosis_trade.json @@ -1,10 +1,11 @@ { - "address": "$OSMOSIS_ADDRESS", - "quote": "ATOM", - "base": "OSMO", - "amount": "1", - "side": "BUY", - "chain": "osmosis", - "network": "testnet", - "connector": "osmosis" -} \ No newline at end of file + "address": "$OSMOSIS_ADDRESS", + "quote": "ION", + "base": "OSMO", + "amount": "0.01", + "side": "BUY", + "fee": "HIGH", + "chain": "osmosis", + "network": "testnet", + "connector": "osmosis" +} From e94bf8ea055e951e4a3f31180b96b89384cdb391 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Thu, 15 Feb 2024 14:16:46 -0700 Subject: [PATCH 17/35] changed tests to use ION-OSMO for CL pools since ATOM-OSMO pools were deleted. Currently getting an error back from RPC when trying to add CL liquidity --- src/chains/osmosis/osmosis.controllers.ts | 5 +- .../chains/osmosis/osmosis.test.ts | 4 +- .../chains/osmosis/osmosis.testnojest.ts | 694 ++++++++++++++++++ yarn.lock | 375 +++++----- 4 files changed, 889 insertions(+), 189 deletions(-) rename {test => test-bronze}/chains/osmosis/osmosis.test.ts (97%) create mode 100644 test-bronze/chains/osmosis/osmosis.testnojest.ts diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 00ceff877d..43941d6033 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -91,10 +91,10 @@ export class OsmosisController { quoteAsset: string, baseAmount: Decimal, tradeSide: string, + allowedSlippage?: string, ): Promise { const gasAdjustment = osmosis.gasPriceConstant; // const feeTier = osmosis.feeTier; // - const allowedSlippage = osmosis.allowedSlippage; // const baseToken: Tokenish = osmosis.getTokenBySymbol(baseAsset)!; const quoteToken: Tokenish = osmosis.getTokenBySymbol(quoteAsset)!; @@ -214,7 +214,8 @@ export class OsmosisController { req.base, req.quote, new Decimal(req.amount), - req.side + req.side, + req.allowedSlippage ); } catch (e) { if (e instanceof Error) { diff --git a/test/chains/osmosis/osmosis.test.ts b/test-bronze/chains/osmosis/osmosis.test.ts similarity index 97% rename from test/chains/osmosis/osmosis.test.ts rename to test-bronze/chains/osmosis/osmosis.test.ts index 050fe0b57b..322d1b3fd4 100755 --- a/test/chains/osmosis/osmosis.test.ts +++ b/test-bronze/chains/osmosis/osmosis.test.ts @@ -1,4 +1,4 @@ -import { patch, unpatch } from '../../services/patch'; +import { patch, unpatch } from '../../../test/services/patch'; import { Osmosis } from '../../../src/chains/osmosis/osmosis'; import { ConfigManagerCertPassphrase } from '../../../src/services/config-manager-cert-passphrase'; import { addWallet, getWallets } from '../../../src/services/wallet/wallet.controllers'; @@ -185,7 +185,7 @@ describe('controllers - CL Pools + Liquidity', () => { var poolIdCL: number; it('addLiquidity LP', async () => { - const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'5', 'upperPrice':'5.7', 'fee': 'high', 'token0':'ATOM', 'token1':'OSMO', 'amount0':'0.001', 'amount1':'0.006', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress}; + const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.0004016', 'amount1':'0.1', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress}; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) poolIdCL = addLiquidityResponse.tokenId; expect(addLiquidityResponse.tokenId).toBeDefined(); diff --git a/test-bronze/chains/osmosis/osmosis.testnojest.ts b/test-bronze/chains/osmosis/osmosis.testnojest.ts new file mode 100644 index 0000000000..92d7ba969c --- /dev/null +++ b/test-bronze/chains/osmosis/osmosis.testnojest.ts @@ -0,0 +1,694 @@ +// @ts-nocheck +import fs = require('fs'); +import https = require('https'); +import axios from 'axios'; +import BigNumber from 'bignumber.js'; + +type method = 'GET' | 'POST'; + +const certPath = '/home/gateway/certs'; + +const httpsAgent = axios.create({ + httpsAgent: new https.Agent({ + ca: fs.readFileSync(certPath.concat('/ca_cert.pem'), { + encoding: 'utf-8', + }), + cert: fs.readFileSync(certPath.concat('/client_cert.pem'), { + encoding: 'utf-8', + }), + key: fs.readFileSync(certPath.concat('/client_key.pem'), { + encoding: 'utf-8', + }), + host: '127.0.0.1', + port: 15888, + requestCert: true, + rejectUnauthorized: false, + }), +}); +const request = async ( + method: method, + path: string, + params: Record +) => { + try { + let response; + const gatewayAddress = 'https://127.0.0.1:15888'; + if (method === 'GET') { + response = await httpsAgent.get(gatewayAddress + path); + } else { + response = await httpsAgent.post(gatewayAddress + path, params); + } + return response.data; + } catch (err) { + console.log(`${method} ${path} - ${err}`); + } +}; + +import { Osmosis } from '../../../src/chains/osmosis/osmosis'; +import { addWallet, getWallets } from '../../../src/services/wallet/wallet.controllers'; +import Decimal from 'decimal.js-light'; +import { Side } from '../../../src/amm/amm.requests'; + +const osmosisAddress_testnet = 'osmo1gxfandcf6x6y0lv3afv0p4w4akv809ycrly4cs'; +const osmosisAddress_mainnet = 'osmo1mvsg3en5ulpnpd3dset2m86zjpnzp4v4epmjh7'; + +const osmosisPrivateKey_testnet = '2e8be986f72f76dba7f8448b2e2342d3297cd628cf08aad9b90098102824f9d5'; // real testnet +const osmosisPrivateKey_mainnet = '8155cee93c2ff619e0943db140a31fe0ab34df8c85fefe114eb2200ef1a017db'; +// const osmosisPrivateKey_mainnet = 'ENTER PRIVATE KEY AND UPDATE osmosisAddress_mainnet'; + +const txHash_mainnet = 'FAEED1587F703D59CC8641D06DF18363E9E960D56F533D1ED75BA186990954D5' +const txHash_testnet = '0BF855ED36FDE2AEBA753A51FA0741A45E2D5CADD0583815559BDB9314F1380C' + +// update this to mainnet if desired to test multi-hop routes +var network = 'testnet' + +var slippage = '100%' +var osmosisAddress_from = osmosisAddress_testnet +var osmosisAddress_to = osmosisAddress_mainnet +var osmosisPrivateKey = osmosisPrivateKey_testnet +if (network == 'mainnet'){ + slippage = '2%' + osmosisAddress_from = osmosisAddress_mainnet + osmosisAddress_to = osmosisAddress_testnet + osmosisPrivateKey = osmosisPrivateKey_mainnet +} + +async function test() { + let osmosis: Osmosis; + + osmosis = Osmosis.getInstance(network); + await osmosis.init(); + + + // try { + // await addWallet({ + // privateKey: osmosisPrivateKey, + // chain: 'osmosis', + // network: network, + // }); + + // const wallets = await getWallets(); + // console.debug(wallets); + + // } catch (err) { + // console.debug(err); + // } + + // try { + // console.debug('priceResponse3'); + // const priceRequest3 = {'quote':'ATOM', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; + // const priceResponse3 = await osmosis.controller.price(osmosis, priceRequest3) + // console.debug(priceResponse3) + // } catch (err) { + // console.debug(err); + // } + + // // trade + // try { + // console.debug('tradeResponse'); + // const tradeRequest = {'quote':'ATOM', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; + // const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) + // console.debug(tradeResponse); + // } catch (err) { + // console.debug(err); + // } + + try { + console.debug('balances All'); + const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); + console.debug(balances); + } catch (err) { + console.debug(err); + } + + var poolId; + try { + console.debug('addLiquidity LP'); + const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.0004016', 'amount1':'0.1', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress_from}; + var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) + poolId = addLiquidityResponse.tokenId; + console.debug(addLiquidityResponse); + } catch (err) { + console.debug(err); + } + + try { + if (poolId){ + console.debug('removeLiquidityResponse'); + const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdCL, 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress_from, 'allowedSlippage':'100%'}; + var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) + console.debug(removeLiquidityResponse); + } + } catch (err) { + console.debug(err); + } + + + try { + console.debug('positionsResponse1'); + const positionsRequest1 = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress_from, + tokenId: 96 // CL + } + var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) + console.debug(positionsResponse1); + } catch (err) { + console.debug(err); + } + + try { + console.debug('positionsResponse1'); + const positionsRequest1 = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress_from, + tokenId: 62 // GAMM + } + var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) + console.debug(positionsResponse1); + } catch (err) { + console.debug(err); + } + + + try { + console.debug('balances All'); + const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); + console.debug(balances); + } catch (err) { + console.debug(err); + } + + + // try { + // console.debug('addLiquidity LP'); + // const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'5', 'upperPrice':'5.7', 'fee': 'high', 'token0':'ATOM', 'token1':'OSMO', 'amount0':'0.001', 'amount1':'0.006', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress_from}; + // var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) + // poolId = addLiquidityResponse.tokenId; + // console.debug(addLiquidityResponse); + // } catch (err) { + // console.debug(err); + // } + + + try { + console.debug('positionsResponse1'); + const positionsRequest1 = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress_from, + } + var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) + console.debug(positionsResponse1); + } catch (err) { + console.debug(err); + } + + + + + + + try { + await addWallet({ + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: network, + }); + + const wallets = await getWallets(); + console.debug(wallets); + + } catch (err) { + console.debug(err); + } + + + try { + console.debug('wallet balances All'); + const walleto = await osmosis.getWalletFromPrivateKey( + osmosisPrivateKey, + 'osmo' + ); + console.debug(walleto); + } catch (err) { + console.debug(err); + } + + try { + console.debug('balances All'); + const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); + console.debug(balances); + } catch (err) { + console.debug(err); + } + + var poolId; + try { + console.debug('addLiquidityResponse'); + const addLiquidityRequestFunction = {'fee': 'high', 'token0':'OSMO', 'token1':'ION', 'amount0':'0.0001', 'amount1':'0', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; //'poolId':'62', + var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) + poolId = addLiquidityResponse.poolId; + console.debug(addLiquidityResponse); + } catch (err) { + console.debug(err); + } + + try { + console.debug('poolPriceResponse'); + const poolPriceRequest = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress_from, + token0: 'OSMO', + token1: 'ATOM', + } + var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) + console.debug(poolPriceResponse); + } catch (err) { + console.debug(err); + } + + try { + console.debug('positionsResponse1'); + const positionsRequest1 = { + chain:'osmosis', + network:'testnet', + address: osmosisAddress_from, + } + var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) + console.debug(positionsResponse1); + } catch (err) { + console.debug(err); + } + + + + // START USUAL TEST RUNS + +// // poll +// try { +// console.debug('poll'); +// const pollRequest = {'txHash':txHash_testnet, 'chain':'osmosis', 'network': network}; +// const pollResponse = await osmosis.controller.poll(osmosis, pollRequest) +// console.debug(pollResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// await addWallet({ +// privateKey: osmosisPrivateKey, +// chain: 'osmosis', +// network: network, +// }); + +// const wallets = await getWallets(); +// console.debug(wallets); + +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('balances OSMO'); +// const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:['OSMO']}); +// console.debug(balances); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('balances All'); +// const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); +// console.debug(balances); +// } catch (err) { +// console.debug(err); +// } + +// // DISABLED ENDPOINTS +// try { +// console.debug('allowances'); +// var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress_to, 'spender':osmosisAddress_from, 'tokenSymbols':[], 'chain':'osmosis', 'network': network}); +// console.debug(allowances); +// console.debug(allowances); +// } catch (err) { +// console.debug(err); +// } +// try { +// console.debug('cancel'); +// var cancel = await osmosis.controller.cancel(osmosis, {'address':osmosisAddress_to, 'nonce':0, 'chain':'osmosis', 'network': network}); +// console.debug(cancel); +// } catch (err) { +// console.debug(err); +// } +// try { +// console.debug('approve'); +// var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress_to, 'spender':osmosisAddress_from, token:'OSMO', 'chain':'osmosis', 'network': network}); +// console.debug(approve); +// } catch (err) { +// console.debug(err); +// } +// // DISABLED ENDPOINTS + +// try { +// console.debug('transfer'); +// var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress_from, 'to':osmosisAddress_to, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network': network}); +// console.debug(transfer); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('getTokens OSMO'); +// var getTokens = await osmosis.controller.getTokens(osmosis, {tokenSymbols:['OSMO']}); +// console.debug(getTokens); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('getTokens All'); +// var getTokens = await osmosis.controller.getTokens(osmosis, {}); +// console.debug(getTokens); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('estimateGas'); +// var estimateGas = await osmosis.controller.estimateGas(osmosis); +// console.debug(estimateGas); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('block'); +// const block = await osmosis.getCurrentBlockNumber(); +// console.debug(block); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('wallet balances All'); +// const walleto = await osmosis.getWalletFromPrivateKey( +// osmosisPrivateKey, +// 'osmo' +// ); +// console.debug(walleto); +// } catch (err) { +// console.debug(err); +// } + + +// try { +// console.debug('get token'); +// var token = osmosis.getTokenBySymbol('ATOM'); +// var token2 = osmosis.getTokenForSymbol('OSMO'); +// console.debug(token); +// console.debug(token2); +// } catch (err) { +// console.debug(err); +// } + + + + +// try { +// console.debug('priceResponse1'); +// const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; +// const priceResponse1 = await osmosis.controller.price(osmosis, priceRequest1) +// console.debug(priceResponse1) +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('priceResponse2'); +// const priceRequest2 = {'quote':'OSMO', 'base':'ION', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; +// const priceResponse2 = await osmosis.controller.price(osmosis, priceRequest2) +// console.debug(priceResponse2) +// } catch (err) { +// console.debug(err); +// } + + +// // trade +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } + +// // trade back +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } + + +// // 3 cycle trade - tests 2-hop trades. ONLY WORKS ON MAINNET +// if (network == 'mainnet'){ +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'JUNO', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'STARS', 'base':'JUNO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('tradeResponse'); +// const tradeRequest = {'quote':'OSMO', 'base':'STARS', 'amount':'0.3', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; +// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) +// console.debug(tradeResponse); +// } catch (err) { +// console.debug(err); +// } +// } + + +// try { +// console.debug('priceResponse3'); +// const priceRequest3 = {'quote':'ATOM', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; +// const priceResponse3 = await osmosis.controller.price(osmosis, priceRequest3) +// console.debug(priceResponse3) +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('tradeInfo'); +// const tradeInfo = await osmosis.controller.getTradeInfo(osmosis, "OSMO", "ION", new Decimal(1.0), "BUY") +// console.debug(tradeInfo); +// } catch (err) { +// console.debug(err); +// } + +// var poolId; +// try { +// console.debug('addLiquidityResponse'); +// const addLiquidityRequestFunction = {'fee': 'high', 'token0':'OSMO', 'token1':'ION', 'amount0':'0.0001', 'amount1':'0', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; //'poolId':'62', +// var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) +// poolId = addLiquidityResponse.poolId; +// console.debug(addLiquidityResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// if (poolId){ +// console.debug('removeLiquidityResponse'); +// const removeLiquidityRequest = {'decreasePercent':100, 'poolId':poolId, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, 'allowedSlippage':slippage}; +// var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) +// console.debug(removeLiquidityResponse); +// } +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('poolPriceResponse'); +// const poolPriceRequest = { +// chain:'osmosis', +// network:'testnet', +// address: osmosisAddress_from, +// token0: 'OSMO', +// token1: 'ATOM', +// } +// var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) +// console.debug(poolPriceResponse); +// } catch (err) { +// console.debug(err); +// } + +// try { +// console.debug('positionsResponse1'); +// const positionsRequest1 = { +// chain:'osmosis', +// network:'testnet', +// address: osmosisAddress_from, +// } +// var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) +// console.debug(positionsResponse1); +// } catch (err) { +// console.debug(err); +// } + + +// await osmosis.close(); +// } + +// // BELOW NEEDS TO HAVE GATEWAY RUNNIN SEPARATELY +// async function testViaEndpoints() { +// let osmosis: Osmosis; + +// osmosis = Osmosis.getInstance('testnet'); +// await osmosis.init(); + +// console.debug('starting'); +// console.debug('starting'); +// console.debug('starting'); +// console.debug('starting'); + +// const status = await request('GET', '/chain/status', { +// privateKey: osmosisPrivateKey, +// chain: 'osmosis', +// network: 'testnet', +// }); +// console.debug('status'); +// console.debug(status); + +// const balances = await request('POST', '/chain/balances', { +// privateKey: osmosisPrivateKey, +// address: osmosisAddress_testnet, +// chain: 'osmosis', +// network: 'testnet', +// tokenSymbols: ['OSMO','ATOM','ION'], +// }); +// console.debug('balances'); +// console.debug(balances); + +// const tokensList = await osmosis.controller.getTokens(osmosis,{}) +// console.debug(tokensList); + +// const tokens = await request('GET', '/chain/tokens?chain=osmosis&network=testnet', { +// privateKey: osmosisPrivateKey, +// chain: 'osmosis', +// network: 'testnet', +// query: {chain: 'osmosis', network: 'testnet'}, +// }); +// console.debug('tokens'); +// console.debug(tokens); + + await osmosis.close(); + +} + +async function testViaEndpoints2() { + + const priceRequest = await request('POST', '/amm/price_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + quote: 'ION', + base: 'OSMO', + amount: '0.001', + side: 'BUY', + allowedSlippage: '1%', + }); + console.debug(priceRequest); + + // can specify poolId + const addLiquidityRequest = await request('POST', '/amm/liquidity/add_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + token0: 'ION', + token1: 'OSMO', + amount0: '0.001', + amount1: '0.1', + // poolId: 'X', + }); + console.debug(addLiquidityRequest); + + const removeLiquidityRequest = await request('POST', '/amm/liquidity/remove_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + decreasePercent: 10, + poolId: '62', + }); + console.debug(removeLiquidityRequest); + + const poolPriceRequest = await request('POST', '/amm/liquidity/price_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + token0: 'ION', + token1: 'OSMO', + }); + console.debug(poolPriceRequest); + + + const poolPriceRequestTest = await request('POST', '/amm/liquidity/price_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + token0: 'ATOM', + token1: 'OSMO', + }); + console.debug(poolPriceRequestTest); + + // can specify poolId + const positionsRequest = await request('POST', '/amm/liquidity/positions_osmosis', { + privateKey: osmosisPrivateKey, + chain: 'osmosis', + network: 'testnet', + address: osmosisAddress_testnet, + connector: 'osmosis', + // poolId: 'X', + }); + console.debug(positionsRequest); + + + + +}; + +if (false){ + testViaEndpoints2(); +} + +test(); diff --git a/yarn.lock b/yarn.lock index 87d943fd0a..67a2751eaa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1451,137 +1451,137 @@ "@ethersproject-xdc/abi@file:vendor/@ethersproject-xdc/abi": version "5.7.0" dependencies: - "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-9c89b9d9-7a50-4e62-a983-5764c9524c1e-1705725861189/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-0a904ea9-73f4-4149-96b2-f52e59bf4e91-1708027681442/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/abstract-provider@file:vendor/@ethersproject-xdc/abstract-provider": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-8abb2b8c-9519-45c8-b91b-b6c7035c34c6-1705725861188/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d9225cdd-a324-4bb2-9842-0d5fa2cc8acd-1708027681441/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d9225cdd-a324-4bb2-9842-0d5fa2cc8acd-1708027681441/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d9225cdd-a324-4bb2-9842-0d5fa2cc8acd-1708027681441/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d9225cdd-a324-4bb2-9842-0d5fa2cc8acd-1708027681441/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d9225cdd-a324-4bb2-9842-0d5fa2cc8acd-1708027681441/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d9225cdd-a324-4bb2-9842-0d5fa2cc8acd-1708027681441/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d9225cdd-a324-4bb2-9842-0d5fa2cc8acd-1708027681441/node_modules/@ethersproject-xdc/web" "@ethersproject-xdc/abstract-signer@file:vendor/@ethersproject-xdc/abstract-signer": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-f7d37dd5-5c7a-49db-91f2-e58a480cc21e-1705725861189/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-73b7420c-d31e-4eca-b871-21f3f72eaa0f-1708027681440/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-73b7420c-d31e-4eca-b871-21f3f72eaa0f-1708027681440/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-73b7420c-d31e-4eca-b871-21f3f72eaa0f-1708027681440/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-73b7420c-d31e-4eca-b871-21f3f72eaa0f-1708027681440/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-73b7420c-d31e-4eca-b871-21f3f72eaa0f-1708027681440/node_modules/@ethersproject-xdc/properties" "@ethersproject-xdc/address@file:vendor/@ethersproject-xdc/address": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-f7fc70e9-3897-4cc4-bfb3-124a899d7e47-1705725861187/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-a75ed138-702f-41ee-bd60-f9f839314844-1708027681445/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-a75ed138-702f-41ee-bd60-f9f839314844-1708027681445/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-a75ed138-702f-41ee-bd60-f9f839314844-1708027681445/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-a75ed138-702f-41ee-bd60-f9f839314844-1708027681445/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-address-5.7.0-a75ed138-702f-41ee-bd60-f9f839314844-1708027681445/node_modules/@ethersproject-xdc/rlp" "@ethersproject-xdc/base64@file:vendor/@ethersproject-xdc/base64": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-base64-5.7.0-25ef3932-3b41-4a32-83e6-017583bdbdf3-1705725861190/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-base64-5.7.0-59556f54-d881-4c03-9bd0-0b1032052f4e-1708027681443/node_modules/@ethersproject-xdc/bytes" "@ethersproject-xdc/basex@file:vendor/@ethersproject-xdc/basex": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-d90b7a18-eddb-494a-802e-dfc1d2939c12-1705725861191/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-d90b7a18-eddb-494a-802e-dfc1d2939c12-1705725861191/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-89bf4043-5d1f-4b9e-a6b4-0dbab3a3ed03-1708027681445/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-89bf4043-5d1f-4b9e-a6b4-0dbab3a3ed03-1708027681445/node_modules/@ethersproject-xdc/properties" "@ethersproject-xdc/bignumber@file:vendor/@ethersproject-xdc/bignumber": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-aea28333-7b74-45d3-9a53-61f87768db22-1705725861193/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-aea28333-7b74-45d3-9a53-61f87768db22-1705725861193/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-3c6c2d4b-ac14-4cd7-baba-df884220bcd5-1708027681446/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-3c6c2d4b-ac14-4cd7-baba-df884220bcd5-1708027681446/node_modules/@ethersproject-xdc/logger" bn.js "^5.2.1" "@ethersproject-xdc/bytes@file:vendor/@ethersproject-xdc/bytes": version "5.7.0" dependencies: - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bytes-5.7.0-413d6140-1fae-4924-88a9-dd4fd517bd0f-1705725861192/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-bytes-5.7.0-9b4beea1-ff8c-4d8d-afd5-f4d39e328f64-1708027681446/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/constants@file:vendor/@ethersproject-xdc/constants": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-constants-5.7.0-420dbb15-49c2-4689-9f23-e852c46d289f-1705725861188/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-constants-5.7.0-922e1211-14e0-49c6-a3eb-a716f0e415fe-1708027681442/node_modules/@ethersproject-xdc/bignumber" "@ethersproject-xdc/contracts@file:vendor/@ethersproject-xdc/contracts": version "5.6.0" dependencies: - "@ethersproject-xdc/abi" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/abi" - "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-d10170ea-3402-4485-8f22-3c66524b871d-1705725861190/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/abi" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/abi" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-20e25909-c3ff-40c3-8ed2-b1eaf45219fc-1708027681443/node_modules/@ethersproject-xdc/transactions" "@ethersproject-xdc/hash@file:vendor/@ethersproject-xdc/hash": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-634d3131-e3ff-402d-a7df-b7d796c89afe-1705725861192/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-94f0e7e2-6f92-45a6-a49f-c24b3244f09b-1708027681448/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/hdnode@file:vendor/@ethersproject-xdc/hdnode": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-19f0d281-3564-4382-b6a7-2d2c745d772f-1705725861191/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-e20dabd4-9c53-4cd8-947d-2b81146604de-1708027681444/node_modules/@ethersproject-xdc/wordlists" "@ethersproject-xdc/json-wallets@file:vendor/@ethersproject-xdc/json-wallets": version "5.6.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-98fd3c72-be9e-49eb-9f60-d4355b0cf0d3-1705725861200/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-cc65dbeb-dfa8-447c-9456-2ba089f06af1-1708027681444/node_modules/@ethersproject-xdc/transactions" aes-js "3.0.0" scrypt-js "3.0.1" "@ethersproject-xdc/keccak256@file:vendor/@ethersproject-xdc/keccak256": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-keccak256-5.7.0-353bf255-dadd-4ed6-a57b-e53e45634010-1705725861200/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-keccak256-5.7.0-5a10cf06-44e3-4efd-8092-b49d9d8305a0-1708027681454/node_modules/@ethersproject-xdc/bytes" js-sha3 "0.8.0" "@ethersproject-xdc/logger@file:vendor/@ethersproject-xdc/logger": @@ -1590,67 +1590,67 @@ "@ethersproject-xdc/networks@file:vendor/@ethersproject-xdc/networks": version "5.7.1" dependencies: - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-networks-5.7.1-44a30ab6-c828-4d55-a76f-c2bbb4c7d941-1705725861193/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-networks-5.7.1-2d35e20b-0e1f-49bd-9ab3-726e46bb3012-1708027681452/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/pbkdf2@file:vendor/@ethersproject-xdc/pbkdf2": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-fc6e8aef-7cb8-464f-a10b-57e8e5e839a9-1705725861194/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-fc6e8aef-7cb8-464f-a10b-57e8e5e839a9-1705725861194/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-c07be268-1000-46a6-a94b-0f4adbf49338-1708027681458/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-c07be268-1000-46a6-a94b-0f4adbf49338-1708027681458/node_modules/@ethersproject-xdc/sha2" "@ethersproject-xdc/properties@file:vendor/@ethersproject-xdc/properties": version "5.7.0" dependencies: - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-properties-5.7.0-42e6a55d-f69a-4a81-98ed-eb3c8176d4c4-1705725861201/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-properties-5.7.0-184f0774-29ed-4a16-854e-7cba8d280802-1708027681453/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/providers@file:vendor/@ethersproject-xdc/providers": version "5.6.2" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-bd70b41c-4d75-41b9-8d8a-8f2e3cdacfe7-1705725861194/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-7b5ea25f-2eb9-4d65-957a-d37793a149fe-1708027681452/node_modules/@ethersproject-xdc/web" bech32 "1.1.4" ws "7.4.6" "@ethersproject-xdc/random@file:vendor/@ethersproject-xdc/random": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-random-5.7.0-6d7fbaa1-9a5c-4735-8456-019ecde03a35-1705725861201/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-random-5.7.0-6d7fbaa1-9a5c-4735-8456-019ecde03a35-1705725861201/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-random-5.7.0-3694b76c-d9f7-495e-ab60-76ac5c34d580-1708027681470/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-random-5.7.0-3694b76c-d9f7-495e-ab60-76ac5c34d580-1708027681470/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/rlp@file:vendor/@ethersproject-xdc/rlp": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-0bd5787d-3447-49bb-991b-441e4c002f33-1705725861202/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-0bd5787d-3447-49bb-991b-441e4c002f33-1705725861202/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-51f9fa9f-e139-46c3-bdd2-22ead87faadf-1708027681454/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-51f9fa9f-e139-46c3-bdd2-22ead87faadf-1708027681454/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/sha2@file:vendor/@ethersproject-xdc/sha2": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-7deeb9d2-1fc3-44a2-9527-839ede1e50e8-1705725861201/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-7deeb9d2-1fc3-44a2-9527-839ede1e50e8-1705725861201/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-e9460efb-7c32-4c2f-89d8-23a011e8c5ea-1708027681452/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-e9460efb-7c32-4c2f-89d8-23a011e8c5ea-1708027681452/node_modules/@ethersproject-xdc/logger" hash.js "1.1.7" "@ethersproject-xdc/signing-key@file:vendor/@ethersproject-xdc/signing-key": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-a107cf1b-c037-47b2-a9db-a73bee263f68-1705725861202/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-a107cf1b-c037-47b2-a9db-a73bee263f68-1705725861202/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-a107cf1b-c037-47b2-a9db-a73bee263f68-1705725861202/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-39fb5917-5916-4e5d-8fb3-6c574343b477-1708027681455/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-39fb5917-5916-4e5d-8fb3-6c574343b477-1708027681455/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-39fb5917-5916-4e5d-8fb3-6c574343b477-1708027681455/node_modules/@ethersproject-xdc/properties" bn.js "^5.2.1" elliptic "6.5.4" hash.js "1.1.7" @@ -1658,76 +1658,76 @@ "@ethersproject-xdc/solidity@file:vendor/@ethersproject-xdc/solidity": version "5.6.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-13cdae01-1bba-4e15-abf6-6043631a133a-1705725861201/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-83295d87-df2c-4c7a-b954-d2c062f89ed3-1708027681453/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-83295d87-df2c-4c7a-b954-d2c062f89ed3-1708027681453/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-83295d87-df2c-4c7a-b954-d2c062f89ed3-1708027681453/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-83295d87-df2c-4c7a-b954-d2c062f89ed3-1708027681453/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-83295d87-df2c-4c7a-b954-d2c062f89ed3-1708027681453/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-83295d87-df2c-4c7a-b954-d2c062f89ed3-1708027681453/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/strings@file:vendor/@ethersproject-xdc/strings": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fd51339c-2ba3-4df6-8afc-7b6f4a74368f-1705725861204/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fd51339c-2ba3-4df6-8afc-7b6f4a74368f-1705725861204/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fd51339c-2ba3-4df6-8afc-7b6f4a74368f-1705725861204/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fff81b49-da0e-4709-9dc9-7d59c2eaa6a7-1708027681454/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fff81b49-da0e-4709-9dc9-7d59c2eaa6a7-1708027681454/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-fff81b49-da0e-4709-9dc9-7d59c2eaa6a7-1708027681454/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/transactions@file:vendor/@ethersproject-xdc/transactions": version "5.7.0" dependencies: - "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-ae6f3b14-4ccc-4913-9931-2b469688fe45-1705725861204/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-2230bd12-732c-4d6d-982f-710b24074a21-1708027681459/node_modules/@ethersproject-xdc/signing-key" "@ethersproject-xdc/units@file:vendor/@ethersproject-xdc/units": version "5.6.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-d7abf608-56ee-4a3a-a19d-5651eadaa4b7-1705725861205/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-d7abf608-56ee-4a3a-a19d-5651eadaa4b7-1705725861205/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-d7abf608-56ee-4a3a-a19d-5651eadaa4b7-1705725861205/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-aee3c98d-7283-48ab-8ac1-e509598a63f1-1708027681454/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-aee3c98d-7283-48ab-8ac1-e509598a63f1-1708027681454/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-units-5.6.0-aee3c98d-7283-48ab-8ac1-e509598a63f1-1708027681454/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/wallet@file:vendor/@ethersproject-xdc/wallet": version "5.6.0" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/json-wallets" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/json-wallets" - "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-9b414bf9-67ae-431c-9c04-598489730241-1705725861206/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/json-wallets" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/json-wallets" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-58dd3997-c21b-411f-b524-fd16ef9e2b49-1708027681455/node_modules/@ethersproject-xdc/wordlists" "@ethersproject-xdc/web@file:vendor/@ethersproject-xdc/web": version "5.7.1" dependencies: - "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-13ae2c4b-9792-47cd-b781-218cf69c572d-1705725861205/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-f5d225c1-a5cd-45cf-b66b-cc763e4c4240-1708027681460/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-f5d225c1-a5cd-45cf-b66b-cc763e4c4240-1708027681460/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-f5d225c1-a5cd-45cf-b66b-cc763e4c4240-1708027681460/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-f5d225c1-a5cd-45cf-b66b-cc763e4c4240-1708027681460/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-web-5.7.1-f5d225c1-a5cd-45cf-b66b-cc763e4c4240-1708027681460/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/wordlists@file:vendor/@ethersproject-xdc/wordlists": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-e58951b4-69e0-4567-b5b0-313a3b8c3146-1705725861206/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-1b69f2d9-bcf4-4385-90b8-38e81890a771-1708027681461/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-1b69f2d9-bcf4-4385-90b8-38e81890a771-1708027681461/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-1b69f2d9-bcf4-4385-90b8-38e81890a771-1708027681461/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-1b69f2d9-bcf4-4385-90b8-38e81890a771-1708027681461/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-1b69f2d9-bcf4-4385-90b8-38e81890a771-1708027681461/node_modules/@ethersproject-xdc/strings" "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.12", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -1817,7 +1817,7 @@ dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.0.1", "@ethersproject/contracts@^5.4.0": +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.0.1", "@ethersproject/contracts@^5.4.0", "@ethersproject/contracts@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -1962,7 +1962,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.0.4", "@ethersproject/providers@^5.4.0": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.0.4", "@ethersproject/providers@^5.4.0", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -2061,7 +2061,7 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/units@5.7.0": +"@ethersproject/units@5.7.0", "@ethersproject/units@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== @@ -8236,36 +8236,36 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: "ethers-xdc@file:./vendor/ethers-xdc": version "5.7.2" dependencies: - "@ethersproject-xdc/abi" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/abi" - "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/contracts" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/contracts" - "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/json-wallets" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/json-wallets" - "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/providers" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/providers" - "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/solidity" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/solidity" - "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/units" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/units" - "@ethersproject-xdc/wallet" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/wallet" - "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/web" - "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-37a1d596-7ad8-4448-a4cc-ff0e648fe71b-1705725861173/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abi" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/abi" + "@ethersproject-xdc/abstract-provider" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/base64" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/basex" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/contracts" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/contracts" + "@ethersproject-xdc/hash" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/hdnode" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/json-wallets" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/json-wallets" + "@ethersproject-xdc/keccak256" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/pbkdf2" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/providers" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/providers" + "@ethersproject-xdc/random" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/rlp" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/sha2" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/signing-key" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/solidity" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/solidity" + "@ethersproject-xdc/strings" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/units" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/units" + "@ethersproject-xdc/wallet" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/wallet" + "@ethersproject-xdc/web" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/wordlists" "file:../../../.cache/yarn/v6/npm-ethers-xdc-5.7.2-0a13fb3c-1274-4d2b-89ed-05b6162ddbe6-1708027681420/node_modules/@ethersproject-xdc/wordlists" ethers@4.0.0-beta.3: version "4.0.0-beta.3" @@ -8370,6 +8370,11 @@ eventemitter3@^4.0.7: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" From 77ba322177d31f2721632593d749a81c328134f5 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Thu, 15 Feb 2024 14:28:09 -0700 Subject: [PATCH 18/35] updated osmo tests to use mainnet when specified --- test-bronze/chains/osmosis/osmosis.test.ts | 40 ++++++++++++---------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/test-bronze/chains/osmosis/osmosis.test.ts b/test-bronze/chains/osmosis/osmosis.test.ts index 322d1b3fd4..975bbfb167 100755 --- a/test-bronze/chains/osmosis/osmosis.test.ts +++ b/test-bronze/chains/osmosis/osmosis.test.ts @@ -10,13 +10,15 @@ const osmosisAddress = 'osmo1gxfandcf6x6y0lv3afv0p4w4akv809ycrly4cs'; const osmosisPrivateKey = '2e8be986f72f76dba7f8448b2e2342d3297cd628cf08aad9b90098102824f9d5'; // real const liveAddressNik = 'osmo1mvsg3en5ulpnpd3dset2m86zjpnzp4v4epmjh7' +const network = 'testnet' + jest.setTimeout(300000); // run for 5 mins let osmosis: Osmosis; beforeAll(async () => { patch(ConfigManagerCertPassphrase, 'readPassphrase', () => 'a'); - osmosis = Osmosis.getInstance('testnet'); + osmosis = Osmosis.getInstance(network); await osmosis.init(); }); @@ -37,7 +39,7 @@ describe('wallets', () => { await addWallet({ privateKey: osmosisPrivateKey, chain: 'osmosis', - network: 'testnet', + network: network, }); const wallets = await getWallets(); @@ -96,7 +98,7 @@ describe('chain.routes', () => { }); it('transfer', async () => { - var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress, 'to':liveAddressNik, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network':'testnet'}); + var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress, 'to':liveAddressNik, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network':network}); expect(transfer).toContain('Transfer success'); }); @@ -106,27 +108,27 @@ describe('chain.routes', () => { describe('chain.routes - DISABLED', () => { it('allowances', async () => { - var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress, 'spender':liveAddressNik, 'tokenSymbols':[], 'chain':'osmosis', 'network':'testnet'}); + var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress, 'spender':liveAddressNik, 'tokenSymbols':[], 'chain':'osmosis', 'network':network}); expect(allowances.spender).toBeUndefined() }); it('approve', async () => { - var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress, 'spender':liveAddressNik, token:'OSMO', 'chain':'osmosis', 'network':'testnet'}); + var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress, 'spender':liveAddressNik, token:'OSMO', 'chain':'osmosis', 'network':network}); expect(approve.spender).toBeUndefined() }); it('cancel', async () => { - var cancel = await osmosis.controller.cancel(osmosis, {'address':osmosisAddress, 'nonce':0, 'chain':'osmosis', 'network':'testnet'}); + var cancel = await osmosis.controller.cancel(osmosis, {'address':osmosisAddress, 'nonce':0, 'chain':'osmosis', 'network':network}); expect(cancel.txHash).toBeUndefined() }); it('nextNonce', async () => { - var nextNonce = await osmosis.controller.nextNonce(osmosis, {'address':osmosisAddress, 'chain':'osmosis', 'network':'testnet'}); + var nextNonce = await osmosis.controller.nextNonce(osmosis, {'address':osmosisAddress, 'chain':'osmosis', 'network':network}); expect(nextNonce.nonce).toEqual(0) }); it('nonce', async () => { - var nonce = await osmosis.controller.nonce(osmosis, {'address':osmosisAddress, 'chain':'osmosis', 'network':'testnet'}); + var nonce = await osmosis.controller.nonce(osmosis, {'address':osmosisAddress, 'chain':'osmosis', 'network':network}); expect(nonce.nonce).toEqual(0) }); @@ -150,19 +152,19 @@ describe('controllers - price + trade', () => { it('price', async () => { // slippage must be high on testnet due to price mismatch with pool ratios - const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':'testnet'}; + const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':network}; const priceResponse1 = await osmosis.controller.price(osmosis, priceRequest1) expect(priceResponse1.base).toEqual('OSMO') }); it('trade', async () => { - const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; + const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) expect(tradeResponse.base).toEqual('uosmo') }); it('trade back', async () => { - const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; + const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) expect(tradeResponse.base).toEqual('uion') }); @@ -177,7 +179,7 @@ describe('controllers - CL Pools + Liquidity', () => { // adds tend to fail unless amounts input are similar in relative $ value var poolIdGAMM: number; it('addLiquidity', async () => { - const addLiquidityRequestFunction = {'tokenId':62, 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, }; + const addLiquidityRequestFunction = {'tokenId':62, 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) poolIdGAMM = addLiquidityResponse.tokenId; expect(addLiquidityResponse.tokenId).toBeDefined(); @@ -185,7 +187,7 @@ describe('controllers - CL Pools + Liquidity', () => { var poolIdCL: number; it('addLiquidity LP', async () => { - const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.0004016', 'amount1':'0.1', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress}; + const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.0004016', 'amount1':'0.1', 'chain':'osmosis', 'network':network, 'address':osmosisAddress}; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) poolIdCL = addLiquidityResponse.tokenId; expect(addLiquidityResponse.tokenId).toBeDefined(); @@ -194,7 +196,7 @@ describe('controllers - CL Pools + Liquidity', () => { it('positionsRequest ALL in Cosmos pool format', async () => { const positionsRequest1 = { chain:'osmosis', - network:'testnet', + network:network, address: osmosisAddress, } var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) @@ -204,7 +206,7 @@ describe('controllers - CL Pools + Liquidity', () => { it('positionsRequest GAMM', async () => { const positionsRequest1 = { chain:'osmosis', - network:'testnet', + network:network, address: osmosisAddress, tokenId: poolIdGAMM // GAMM } @@ -215,7 +217,7 @@ describe('controllers - CL Pools + Liquidity', () => { it('positionsRequest CL', async () => { const positionsRequest1 = { chain:'osmosis', - network:'testnet', + network:network, address: osmosisAddress, tokenId: poolIdCL // CL } @@ -224,13 +226,13 @@ describe('controllers - CL Pools + Liquidity', () => { }); it('removeLiquidity GAMM', async () => { - const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdGAMM, 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, 'allowedSlippage':'100%'}; + const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdGAMM, 'chain':'osmosis', 'network':network, 'address':osmosisAddress, 'allowedSlippage':'100%'}; var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) expect(removeLiquidityResponse.txHash).toBeDefined(); }); it('removeLiquidity CL', async () => { - const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdCL, 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress, 'allowedSlippage':'100%'}; + const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdCL, 'chain':'osmosis', 'network':network, 'address':osmosisAddress, 'allowedSlippage':'100%'}; var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) expect(removeLiquidityResponse.txHash).toBeDefined(); }); @@ -238,7 +240,7 @@ describe('controllers - CL Pools + Liquidity', () => { it('poolPrice', async () => { const poolPriceRequest = { chain:'osmosis', - network:'testnet', + network:network, address: osmosisAddress, token0: 'OSMO', token1: 'ATOM', From 74a51b130959ab9b060393b1193f4ecc8ffea86a Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Thu, 15 Feb 2024 15:26:31 -0700 Subject: [PATCH 19/35] fixed our testnet CL add/remove again --- test-bronze/chains/osmosis/osmosis.test.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test-bronze/chains/osmosis/osmosis.test.ts b/test-bronze/chains/osmosis/osmosis.test.ts index 975bbfb167..d3eba772d0 100755 --- a/test-bronze/chains/osmosis/osmosis.test.ts +++ b/test-bronze/chains/osmosis/osmosis.test.ts @@ -7,8 +7,8 @@ import { CosmosAsset } from '../../../src/chains/cosmos/cosmos-base'; import { Side } from '../../../src/amm/amm.requests'; const osmosisAddress = 'osmo1gxfandcf6x6y0lv3afv0p4w4akv809ycrly4cs'; -const osmosisPrivateKey = '2e8be986f72f76dba7f8448b2e2342d3297cd628cf08aad9b90098102824f9d5'; // real -const liveAddressNik = 'osmo1mvsg3en5ulpnpd3dset2m86zjpnzp4v4epmjh7' +const osmosisPrivateKey = '2e8be986f72f76dba7f8448b2e2342d3297cd628cf08aad9b90098102824f9d5'; +const osmosisOutboundAddress = 'osmo1mvsg3en5ulpnpd3dset2m86zjpnzp4v4epmjh7' const network = 'testnet' @@ -61,7 +61,7 @@ describe('chain.routes', () => { it('getTokens All', async () => { var getTokens = await osmosis.controller.getTokens(osmosis, {}); - expect(getTokens.tokens.length).toEqual(12); + expect(getTokens.tokens.length).toBeGreaterThan(0); }); it('balances OSMO', async () => { @@ -98,7 +98,7 @@ describe('chain.routes', () => { }); it('transfer', async () => { - var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress, 'to':liveAddressNik, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network':network}); + var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress, 'to':osmosisOutboundAddress, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network':network}); expect(transfer).toContain('Transfer success'); }); @@ -108,12 +108,12 @@ describe('chain.routes', () => { describe('chain.routes - DISABLED', () => { it('allowances', async () => { - var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress, 'spender':liveAddressNik, 'tokenSymbols':[], 'chain':'osmosis', 'network':network}); + var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress, 'spender':osmosisOutboundAddress, 'tokenSymbols':[], 'chain':'osmosis', 'network':network}); expect(allowances.spender).toBeUndefined() }); it('approve', async () => { - var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress, 'spender':liveAddressNik, token:'OSMO', 'chain':'osmosis', 'network':network}); + var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress, 'spender':osmosisOutboundAddress, token:'OSMO', 'chain':'osmosis', 'network':network}); expect(approve.spender).toBeUndefined() }); @@ -179,15 +179,15 @@ describe('controllers - CL Pools + Liquidity', () => { // adds tend to fail unless amounts input are similar in relative $ value var poolIdGAMM: number; it('addLiquidity', async () => { - const addLiquidityRequestFunction = {'tokenId':62, 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; + const addLiquidityRequestFunction = {'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0', 'amount1':'0.0005', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) poolIdGAMM = addLiquidityResponse.tokenId; expect(addLiquidityResponse.tokenId).toBeDefined(); }); var poolIdCL: number; - it('addLiquidity LP', async () => { - const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.0004016', 'amount1':'0.1', 'chain':'osmosis', 'network':network, 'address':osmosisAddress}; + it('addLiquidity CL', async () => { + const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.000401', 'amount1':'0.1', 'chain':'osmosis', 'network':network, 'address':osmosisAddress}; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) poolIdCL = addLiquidityResponse.tokenId; expect(addLiquidityResponse.tokenId).toBeDefined(); From 19c229e5a3e668d93328836a66e0880ede800084 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Fri, 16 Feb 2024 08:42:22 -0700 Subject: [PATCH 20/35] removed osmo test-no-jest file used for debug --- src/amm/amm.validators.ts | 4 +- .../chains/osmosis/osmosis.testnojest.ts | 694 ------------------ 2 files changed, 1 insertion(+), 697 deletions(-) delete mode 100644 test-bronze/chains/osmosis/osmosis.testnojest.ts diff --git a/src/amm/amm.validators.ts b/src/amm/amm.validators.ts index 8b8fc8dde9..5fe96cfa4a 100644 --- a/src/amm/amm.validators.ts +++ b/src/amm/amm.validators.ts @@ -160,9 +160,7 @@ export const validateLimitPrice: Validator = mkValidator( export const validateTokenId: Validator = mkValidator( 'tokenId', invalidTokenIdError, - (val) => - typeof val === 'undefined' || - (typeof val === 'number' && val >= 0 && Number.isInteger(val)), + (val) => typeof val === 'number' && val >= 0 && Number.isInteger(val), true ); diff --git a/test-bronze/chains/osmosis/osmosis.testnojest.ts b/test-bronze/chains/osmosis/osmosis.testnojest.ts deleted file mode 100644 index 92d7ba969c..0000000000 --- a/test-bronze/chains/osmosis/osmosis.testnojest.ts +++ /dev/null @@ -1,694 +0,0 @@ -// @ts-nocheck -import fs = require('fs'); -import https = require('https'); -import axios from 'axios'; -import BigNumber from 'bignumber.js'; - -type method = 'GET' | 'POST'; - -const certPath = '/home/gateway/certs'; - -const httpsAgent = axios.create({ - httpsAgent: new https.Agent({ - ca: fs.readFileSync(certPath.concat('/ca_cert.pem'), { - encoding: 'utf-8', - }), - cert: fs.readFileSync(certPath.concat('/client_cert.pem'), { - encoding: 'utf-8', - }), - key: fs.readFileSync(certPath.concat('/client_key.pem'), { - encoding: 'utf-8', - }), - host: '127.0.0.1', - port: 15888, - requestCert: true, - rejectUnauthorized: false, - }), -}); -const request = async ( - method: method, - path: string, - params: Record -) => { - try { - let response; - const gatewayAddress = 'https://127.0.0.1:15888'; - if (method === 'GET') { - response = await httpsAgent.get(gatewayAddress + path); - } else { - response = await httpsAgent.post(gatewayAddress + path, params); - } - return response.data; - } catch (err) { - console.log(`${method} ${path} - ${err}`); - } -}; - -import { Osmosis } from '../../../src/chains/osmosis/osmosis'; -import { addWallet, getWallets } from '../../../src/services/wallet/wallet.controllers'; -import Decimal from 'decimal.js-light'; -import { Side } from '../../../src/amm/amm.requests'; - -const osmosisAddress_testnet = 'osmo1gxfandcf6x6y0lv3afv0p4w4akv809ycrly4cs'; -const osmosisAddress_mainnet = 'osmo1mvsg3en5ulpnpd3dset2m86zjpnzp4v4epmjh7'; - -const osmosisPrivateKey_testnet = '2e8be986f72f76dba7f8448b2e2342d3297cd628cf08aad9b90098102824f9d5'; // real testnet -const osmosisPrivateKey_mainnet = '8155cee93c2ff619e0943db140a31fe0ab34df8c85fefe114eb2200ef1a017db'; -// const osmosisPrivateKey_mainnet = 'ENTER PRIVATE KEY AND UPDATE osmosisAddress_mainnet'; - -const txHash_mainnet = 'FAEED1587F703D59CC8641D06DF18363E9E960D56F533D1ED75BA186990954D5' -const txHash_testnet = '0BF855ED36FDE2AEBA753A51FA0741A45E2D5CADD0583815559BDB9314F1380C' - -// update this to mainnet if desired to test multi-hop routes -var network = 'testnet' - -var slippage = '100%' -var osmosisAddress_from = osmosisAddress_testnet -var osmosisAddress_to = osmosisAddress_mainnet -var osmosisPrivateKey = osmosisPrivateKey_testnet -if (network == 'mainnet'){ - slippage = '2%' - osmosisAddress_from = osmosisAddress_mainnet - osmosisAddress_to = osmosisAddress_testnet - osmosisPrivateKey = osmosisPrivateKey_mainnet -} - -async function test() { - let osmosis: Osmosis; - - osmosis = Osmosis.getInstance(network); - await osmosis.init(); - - - // try { - // await addWallet({ - // privateKey: osmosisPrivateKey, - // chain: 'osmosis', - // network: network, - // }); - - // const wallets = await getWallets(); - // console.debug(wallets); - - // } catch (err) { - // console.debug(err); - // } - - // try { - // console.debug('priceResponse3'); - // const priceRequest3 = {'quote':'ATOM', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; - // const priceResponse3 = await osmosis.controller.price(osmosis, priceRequest3) - // console.debug(priceResponse3) - // } catch (err) { - // console.debug(err); - // } - - // // trade - // try { - // console.debug('tradeResponse'); - // const tradeRequest = {'quote':'ATOM', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; - // const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) - // console.debug(tradeResponse); - // } catch (err) { - // console.debug(err); - // } - - try { - console.debug('balances All'); - const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); - console.debug(balances); - } catch (err) { - console.debug(err); - } - - var poolId; - try { - console.debug('addLiquidity LP'); - const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.0004016', 'amount1':'0.1', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress_from}; - var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) - poolId = addLiquidityResponse.tokenId; - console.debug(addLiquidityResponse); - } catch (err) { - console.debug(err); - } - - try { - if (poolId){ - console.debug('removeLiquidityResponse'); - const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdCL, 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress_from, 'allowedSlippage':'100%'}; - var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) - console.debug(removeLiquidityResponse); - } - } catch (err) { - console.debug(err); - } - - - try { - console.debug('positionsResponse1'); - const positionsRequest1 = { - chain:'osmosis', - network:'testnet', - address: osmosisAddress_from, - tokenId: 96 // CL - } - var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) - console.debug(positionsResponse1); - } catch (err) { - console.debug(err); - } - - try { - console.debug('positionsResponse1'); - const positionsRequest1 = { - chain:'osmosis', - network:'testnet', - address: osmosisAddress_from, - tokenId: 62 // GAMM - } - var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) - console.debug(positionsResponse1); - } catch (err) { - console.debug(err); - } - - - try { - console.debug('balances All'); - const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); - console.debug(balances); - } catch (err) { - console.debug(err); - } - - - // try { - // console.debug('addLiquidity LP'); - // const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'5', 'upperPrice':'5.7', 'fee': 'high', 'token0':'ATOM', 'token1':'OSMO', 'amount0':'0.001', 'amount1':'0.006', 'chain':'osmosis', 'network':'testnet', 'address':osmosisAddress_from}; - // var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) - // poolId = addLiquidityResponse.tokenId; - // console.debug(addLiquidityResponse); - // } catch (err) { - // console.debug(err); - // } - - - try { - console.debug('positionsResponse1'); - const positionsRequest1 = { - chain:'osmosis', - network:'testnet', - address: osmosisAddress_from, - } - var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) - console.debug(positionsResponse1); - } catch (err) { - console.debug(err); - } - - - - - - - try { - await addWallet({ - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: network, - }); - - const wallets = await getWallets(); - console.debug(wallets); - - } catch (err) { - console.debug(err); - } - - - try { - console.debug('wallet balances All'); - const walleto = await osmosis.getWalletFromPrivateKey( - osmosisPrivateKey, - 'osmo' - ); - console.debug(walleto); - } catch (err) { - console.debug(err); - } - - try { - console.debug('balances All'); - const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); - console.debug(balances); - } catch (err) { - console.debug(err); - } - - var poolId; - try { - console.debug('addLiquidityResponse'); - const addLiquidityRequestFunction = {'fee': 'high', 'token0':'OSMO', 'token1':'ION', 'amount0':'0.0001', 'amount1':'0', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; //'poolId':'62', - var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) - poolId = addLiquidityResponse.poolId; - console.debug(addLiquidityResponse); - } catch (err) { - console.debug(err); - } - - try { - console.debug('poolPriceResponse'); - const poolPriceRequest = { - chain:'osmosis', - network:'testnet', - address: osmosisAddress_from, - token0: 'OSMO', - token1: 'ATOM', - } - var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) - console.debug(poolPriceResponse); - } catch (err) { - console.debug(err); - } - - try { - console.debug('positionsResponse1'); - const positionsRequest1 = { - chain:'osmosis', - network:'testnet', - address: osmosisAddress_from, - } - var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) - console.debug(positionsResponse1); - } catch (err) { - console.debug(err); - } - - - - // START USUAL TEST RUNS - -// // poll -// try { -// console.debug('poll'); -// const pollRequest = {'txHash':txHash_testnet, 'chain':'osmosis', 'network': network}; -// const pollResponse = await osmosis.controller.poll(osmosis, pollRequest) -// console.debug(pollResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// await addWallet({ -// privateKey: osmosisPrivateKey, -// chain: 'osmosis', -// network: network, -// }); - -// const wallets = await getWallets(); -// console.debug(wallets); - -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('balances OSMO'); -// const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:['OSMO']}); -// console.debug(balances); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('balances All'); -// const balances = await osmosis.controller.balances(osmosis, {address:osmosisAddress_from, tokenSymbols:[]}); -// console.debug(balances); -// } catch (err) { -// console.debug(err); -// } - -// // DISABLED ENDPOINTS -// try { -// console.debug('allowances'); -// var allowances = await osmosis.controller.allowances(osmosis, {'address':osmosisAddress_to, 'spender':osmosisAddress_from, 'tokenSymbols':[], 'chain':'osmosis', 'network': network}); -// console.debug(allowances); -// console.debug(allowances); -// } catch (err) { -// console.debug(err); -// } -// try { -// console.debug('cancel'); -// var cancel = await osmosis.controller.cancel(osmosis, {'address':osmosisAddress_to, 'nonce':0, 'chain':'osmosis', 'network': network}); -// console.debug(cancel); -// } catch (err) { -// console.debug(err); -// } -// try { -// console.debug('approve'); -// var approve = await osmosis.controller.approve(osmosis, {'address':osmosisAddress_to, 'spender':osmosisAddress_from, token:'OSMO', 'chain':'osmosis', 'network': network}); -// console.debug(approve); -// } catch (err) { -// console.debug(err); -// } -// // DISABLED ENDPOINTS - -// try { -// console.debug('transfer'); -// var transfer = await osmosis.controller.transfer(osmosis, {'from':osmosisAddress_from, 'to':osmosisAddress_to, 'token':'OSMO', amount:'0.000001', 'chain':'osmosis', 'network': network}); -// console.debug(transfer); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('getTokens OSMO'); -// var getTokens = await osmosis.controller.getTokens(osmosis, {tokenSymbols:['OSMO']}); -// console.debug(getTokens); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('getTokens All'); -// var getTokens = await osmosis.controller.getTokens(osmosis, {}); -// console.debug(getTokens); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('estimateGas'); -// var estimateGas = await osmosis.controller.estimateGas(osmosis); -// console.debug(estimateGas); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('block'); -// const block = await osmosis.getCurrentBlockNumber(); -// console.debug(block); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('wallet balances All'); -// const walleto = await osmosis.getWalletFromPrivateKey( -// osmosisPrivateKey, -// 'osmo' -// ); -// console.debug(walleto); -// } catch (err) { -// console.debug(err); -// } - - -// try { -// console.debug('get token'); -// var token = osmosis.getTokenBySymbol('ATOM'); -// var token2 = osmosis.getTokenForSymbol('OSMO'); -// console.debug(token); -// console.debug(token2); -// } catch (err) { -// console.debug(err); -// } - - - - -// try { -// console.debug('priceResponse1'); -// const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; -// const priceResponse1 = await osmosis.controller.price(osmosis, priceRequest1) -// console.debug(priceResponse1) -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('priceResponse2'); -// const priceRequest2 = {'quote':'OSMO', 'base':'ION', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; -// const priceResponse2 = await osmosis.controller.price(osmosis, priceRequest2) -// console.debug(priceResponse2) -// } catch (err) { -// console.debug(err); -// } - - -// // trade -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } - -// // trade back -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } - - -// // 3 cycle trade - tests 2-hop trades. ONLY WORKS ON MAINNET -// if (network == 'mainnet'){ -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'JUNO', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'STARS', 'base':'JUNO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('tradeResponse'); -// const tradeRequest = {'quote':'OSMO', 'base':'STARS', 'amount':'0.3', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; -// const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) -// console.debug(tradeResponse); -// } catch (err) { -// console.debug(err); -// } -// } - - -// try { -// console.debug('priceResponse3'); -// const priceRequest3 = {'quote':'ATOM', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':slippage, 'chain':'osmosis', 'network': network}; -// const priceResponse3 = await osmosis.controller.price(osmosis, priceRequest3) -// console.debug(priceResponse3) -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('tradeInfo'); -// const tradeInfo = await osmosis.controller.getTradeInfo(osmosis, "OSMO", "ION", new Decimal(1.0), "BUY") -// console.debug(tradeInfo); -// } catch (err) { -// console.debug(err); -// } - -// var poolId; -// try { -// console.debug('addLiquidityResponse'); -// const addLiquidityRequestFunction = {'fee': 'high', 'token0':'OSMO', 'token1':'ION', 'amount0':'0.0001', 'amount1':'0', 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, }; //'poolId':'62', -// var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) -// poolId = addLiquidityResponse.poolId; -// console.debug(addLiquidityResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// if (poolId){ -// console.debug('removeLiquidityResponse'); -// const removeLiquidityRequest = {'decreasePercent':100, 'poolId':poolId, 'chain':'osmosis', 'network': network, 'address':osmosisAddress_from, 'allowedSlippage':slippage}; -// var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) -// console.debug(removeLiquidityResponse); -// } -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('poolPriceResponse'); -// const poolPriceRequest = { -// chain:'osmosis', -// network:'testnet', -// address: osmosisAddress_from, -// token0: 'OSMO', -// token1: 'ATOM', -// } -// var poolPriceResponse = await osmosis.controller.poolPrice(osmosis, poolPriceRequest) -// console.debug(poolPriceResponse); -// } catch (err) { -// console.debug(err); -// } - -// try { -// console.debug('positionsResponse1'); -// const positionsRequest1 = { -// chain:'osmosis', -// network:'testnet', -// address: osmosisAddress_from, -// } -// var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) -// console.debug(positionsResponse1); -// } catch (err) { -// console.debug(err); -// } - - -// await osmosis.close(); -// } - -// // BELOW NEEDS TO HAVE GATEWAY RUNNIN SEPARATELY -// async function testViaEndpoints() { -// let osmosis: Osmosis; - -// osmosis = Osmosis.getInstance('testnet'); -// await osmosis.init(); - -// console.debug('starting'); -// console.debug('starting'); -// console.debug('starting'); -// console.debug('starting'); - -// const status = await request('GET', '/chain/status', { -// privateKey: osmosisPrivateKey, -// chain: 'osmosis', -// network: 'testnet', -// }); -// console.debug('status'); -// console.debug(status); - -// const balances = await request('POST', '/chain/balances', { -// privateKey: osmosisPrivateKey, -// address: osmosisAddress_testnet, -// chain: 'osmosis', -// network: 'testnet', -// tokenSymbols: ['OSMO','ATOM','ION'], -// }); -// console.debug('balances'); -// console.debug(balances); - -// const tokensList = await osmosis.controller.getTokens(osmosis,{}) -// console.debug(tokensList); - -// const tokens = await request('GET', '/chain/tokens?chain=osmosis&network=testnet', { -// privateKey: osmosisPrivateKey, -// chain: 'osmosis', -// network: 'testnet', -// query: {chain: 'osmosis', network: 'testnet'}, -// }); -// console.debug('tokens'); -// console.debug(tokens); - - await osmosis.close(); - -} - -async function testViaEndpoints2() { - - const priceRequest = await request('POST', '/amm/price_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - quote: 'ION', - base: 'OSMO', - amount: '0.001', - side: 'BUY', - allowedSlippage: '1%', - }); - console.debug(priceRequest); - - // can specify poolId - const addLiquidityRequest = await request('POST', '/amm/liquidity/add_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - token0: 'ION', - token1: 'OSMO', - amount0: '0.001', - amount1: '0.1', - // poolId: 'X', - }); - console.debug(addLiquidityRequest); - - const removeLiquidityRequest = await request('POST', '/amm/liquidity/remove_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - decreasePercent: 10, - poolId: '62', - }); - console.debug(removeLiquidityRequest); - - const poolPriceRequest = await request('POST', '/amm/liquidity/price_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - token0: 'ION', - token1: 'OSMO', - }); - console.debug(poolPriceRequest); - - - const poolPriceRequestTest = await request('POST', '/amm/liquidity/price_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - token0: 'ATOM', - token1: 'OSMO', - }); - console.debug(poolPriceRequestTest); - - // can specify poolId - const positionsRequest = await request('POST', '/amm/liquidity/positions_osmosis', { - privateKey: osmosisPrivateKey, - chain: 'osmosis', - network: 'testnet', - address: osmosisAddress_testnet, - connector: 'osmosis', - // poolId: 'X', - }); - console.debug(positionsRequest); - - - - -}; - -if (false){ - testViaEndpoints2(); -} - -test(); From 2c659a00de9bf31d4008575602f422d794778250 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Fri, 16 Feb 2024 08:57:53 -0700 Subject: [PATCH 21/35] remove validateAddress from validatePositionRequest --- src/amm/amm.validators.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/amm/amm.validators.ts b/src/amm/amm.validators.ts index 5fe96cfa4a..111bf0d943 100644 --- a/src/amm/amm.validators.ts +++ b/src/amm/amm.validators.ts @@ -334,7 +334,6 @@ export const validatePositionRequest: RequestValidator = mkRequestValidator([ validateChain, validateNetwork, validateTokenId, - validateAddress, ]); export const validatePoolPriceRequest: RequestValidator = mkRequestValidator([ From 355a5920bbf89452881ba7af675c5b18a9bc12a0 Mon Sep 17 00:00:00 2001 From: mlguys Date: Sun, 25 Feb 2024 02:00:10 +0700 Subject: [PATCH 22/35] Update XRPL polling retry interval and market loading logic --- src/chains/xrpl/xrpl.ts | 2 +- src/connectors/xrpl/xrpl.ts | 56 +++++++++++++++++++++++++++++-------- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/chains/xrpl/xrpl.ts b/src/chains/xrpl/xrpl.ts index 9a3463c7d0..bf10630f28 100644 --- a/src/chains/xrpl/xrpl.ts +++ b/src/chains/xrpl/xrpl.ts @@ -55,7 +55,7 @@ export type Fee = { }; const MAX_POLL_RETRY = 5; -const POLL_RETRY_INTERVAL = 300; +const POLL_RETRY_INTERVAL = 1500; export class XRPL implements XRPLish { private static _instances: { [name: string]: XRPL }; diff --git a/src/connectors/xrpl/xrpl.ts b/src/connectors/xrpl/xrpl.ts index 75c3de54dd..6a943e984f 100644 --- a/src/connectors/xrpl/xrpl.ts +++ b/src/connectors/xrpl/xrpl.ts @@ -86,21 +86,25 @@ export class XRPLCLOB implements CLOBish { return XRPLCLOB._instances.get(instanceKey) as XRPLCLOB; } - public async loadMarkets() { - // Make a while loop and wait for the XRPL to be ready + public async loadMarkets(marketId: string = '') { while (!this._xrpl.ready()) { - await new Promise((resolve) => setTimeout(resolve, 100)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } - const rawMarkets = await this.fetchMarkets(); - for (const market of rawMarkets) { - this.parsedMarkets[market.marketId] = market; + if (marketId.length > 0) { + const market = await this.fetchMarkets(marketId); + this.parsedMarkets[market[0].marketId] = market[0]; + } else { + const rawMarkets = await this.fetchMarkets(); + for (const market of rawMarkets) { + this.parsedMarkets[market.marketId] = market; + } } } public async init() { await this._xrpl.init(); - await this.loadMarkets(); + // await this.loadMarkets(); this._ready = true; } @@ -120,11 +124,19 @@ export class XRPLCLOB implements CLOBish { req: ClobMarketsRequest ): Promise<{ markets: Array }> { if (req.market && req.market.split('-').length === 2) { + if (!this.parsedMarkets[req.market]) { + // const fetchedMarket = await this.fetchMarkets(req.market); + await this.loadMarkets(req.market); + } + const marketsAsArray: Array = []; marketsAsArray.push(this.parsedMarkets[req.market]); return { markets: marketsAsArray }; } + // Load all markets + await this.loadMarkets(); + const marketsAsArray: Array = []; for (const marketId in this.parsedMarkets) { marketsAsArray.push(this.parsedMarkets[marketId]); @@ -134,12 +146,33 @@ export class XRPLCLOB implements CLOBish { } public async orderBook(req: ClobOrderbookRequest): Promise { + if (!this.parsedMarkets[req.market]) { + await this.loadMarkets(req.market); + } + return await this.getOrderBook(this.parsedMarkets[req.market]); } // Utility methods: - async fetchMarkets(): Promise { + async fetchMarkets(marketId: String = ''): Promise { const loadedMarkets: Market[] = []; + + // If marketId is provided, fetch only that market + if (marketId.length > 0) { + logger.info( + `Fetching 1 market ${marketId} for ${this.chain} ${this.network}` + ); + const market = this._xrpl.storedMarketList.find( + (m) => m.marketId === marketId + ); + if (!market) + throw new MarketNotFoundError(`Market "${marketId}" not found.`); + const processedMarket = await this.getMarket(market); + loadedMarkets.push(processedMarket); + return loadedMarkets; + } + + // Fetch all markets const markets = this._xrpl.storedMarketList; const getMarket = async (market: MarketInfo): Promise => { const processedMarket = await this.getMarket(market); @@ -148,7 +181,7 @@ export class XRPLCLOB implements CLOBish { logger.info(`Fetching markets for ${this.chain} ${this.network}`); - await promiseAllInBatches(getMarket, markets, 15, 300); + await promiseAllInBatches(getMarket, markets, 6, 100); return loadedMarkets; } @@ -396,7 +429,7 @@ export class XRPLCLOB implements CLOBish { const quoteCurrency = market.quoteCurrency; const baseIssuer = market.baseIssuer; const quoteIssuer = market.quoteIssuer; - let price = parseFloat(req.price) + let price = parseFloat(req.price); // If it is market order // Increase price by 3% if it is buy order @@ -513,6 +546,7 @@ export class XRPLCLOB implements CLOBish { public async deleteOrder( req: ClobDeleteOrderRequest ): Promise<{ txHash: string }> { + await this._xrpl.ensureConnection(); const wallet = await this.getWallet(req.address); const offer: Transaction = { TransactionType: 'OfferCancel', @@ -571,7 +605,7 @@ export class XRPLCLOB implements CLOBish { const prepared = await this._client.autofill(offer); const signed = wallet.sign(prepared); await this._xrpl.ensureConnection(); - await this._client.submitAndWait(signed.tx_blob); + await this._client.submit(signed.tx_blob); this._isSubmittingTxn = false; return { prepared, signed }; } From 67c3ae598eee5a0aa2a11ac756f3cc1928e73430 Mon Sep 17 00:00:00 2001 From: mlguys Date: Sun, 25 Feb 2024 20:43:35 +0700 Subject: [PATCH 23/35] upgrade eslint + prettier --- package.json | 14 +- src/chains/xrpl/xrpl.ts | 14 +- src/connectors/xrpl/xrpl.ts | 2 +- yarn.lock | 864 +++++++++++++++++------------------- 4 files changed, 415 insertions(+), 479 deletions(-) diff --git a/package.json b/package.json index bf1252ccfb..786753bc70 100644 --- a/package.json +++ b/package.json @@ -131,16 +131,16 @@ "@types/swagger-ui-express": "^4.1.3", "@types/uuid": "^8.3.4", "@types/ws": "^8.5.3", - "@typescript-eslint/eslint-plugin": "^4.26.1", - "@typescript-eslint/parser": "^4.26.1", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", "bs58": "^4.0.1", "copyfiles": "^2.4.1", - "eslint": "^7.25.0", - "eslint-config-prettier": "^8.3.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^16.0.3", "eslint-plugin-import": "^2.23.4", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-promise": "^5.1.0", "eslint-plugin-standard": "^4.0.1", "google-protobuf": "^3.2.0", @@ -151,7 +151,7 @@ "mock-ethers-provider": "^1.0.2", "node-cache": "5.1.2", "nodemon": "^2.0.16", - "prettier": "^2.3.0", + "prettier": "^3.2.5", "react": "^18", "react-dom": "^18", "rimraf": "^3.0.2", @@ -164,4 +164,4 @@ "resolutions": { "web3-utils": "1.7.3" } -} \ No newline at end of file +} diff --git a/src/chains/xrpl/xrpl.ts b/src/chains/xrpl/xrpl.ts index bf10630f28..d42effe4bf 100644 --- a/src/chains/xrpl/xrpl.ts +++ b/src/chains/xrpl/xrpl.ts @@ -287,7 +287,7 @@ export class XRPL implements XRPLish { } public getTokenForSymbol(code: string): XRPTokenInfo[] | undefined { - let query = convertHexToString(code); + const query = convertHexToString(code); return this._tokenMap[query] ? this._tokenMap[query] : undefined; } @@ -522,10 +522,16 @@ export class XRPL implements XRPLish { } catch (error) { retryCount++; if (retryCount >= 5) { - throw new Error(`Transaction ${txHash} not found, error: ` + String(error)); + throw new Error( + `Transaction ${txHash} not found, error: ` + String(error) + ); } - logger.info(`Transaction ${txHash} not found, retrying ${retryCount}/${MAX_POLL_RETRY}...`); - await new Promise(resolve => setTimeout(resolve, POLL_RETRY_INTERVAL)); // Add delay + logger.info( + `Transaction ${txHash} not found, retrying ${retryCount}/${MAX_POLL_RETRY}...` + ); + await new Promise((resolve) => + setTimeout(resolve, POLL_RETRY_INTERVAL) + ); // Add delay } } diff --git a/src/connectors/xrpl/xrpl.ts b/src/connectors/xrpl/xrpl.ts index 6a943e984f..3418804639 100644 --- a/src/connectors/xrpl/xrpl.ts +++ b/src/connectors/xrpl/xrpl.ts @@ -154,7 +154,7 @@ export class XRPLCLOB implements CLOBish { } // Utility methods: - async fetchMarkets(marketId: String = ''): Promise { + async fetchMarkets(marketId: string = ''): Promise { const loadedMarkets: Market[] = []; // If marketId is provided, fetch only that market diff --git a/yarn.lock b/yarn.lock index f7a8456af1..626455cb31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -152,13 +152,6 @@ dependencies: xss "^1.0.8" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" @@ -441,7 +434,7 @@ "@babel/traverse" "^7.23.6" "@babel/types" "^7.23.6" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": +"@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== @@ -1092,33 +1085,18 @@ enabled "2.0.x" kuler "^2.0.0" -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - "@eslint/eslintrc@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" @@ -1139,6 +1117,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + "@ethereumjs/common@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" @@ -1174,137 +1157,137 @@ "@ethersproject-xdc/abi@file:vendor/@ethersproject-xdc/abi": version "5.7.0" dependencies: - "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-b7b4af72-b45f-4077-b151-8f0741d50a55-1707746220367/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abi-5.7.0-75d1712e-ad90-4c0f-968d-06b7152210d0-1708867847017/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/abstract-provider@file:vendor/@ethersproject-xdc/abstract-provider": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-7ed4cfe0-b44c-4745-88b9-854ebe82e0bf-1707746220366/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-7ed4cfe0-b44c-4745-88b9-854ebe82e0bf-1707746220366/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-7ed4cfe0-b44c-4745-88b9-854ebe82e0bf-1707746220366/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-7ed4cfe0-b44c-4745-88b9-854ebe82e0bf-1707746220366/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-7ed4cfe0-b44c-4745-88b9-854ebe82e0bf-1707746220366/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-7ed4cfe0-b44c-4745-88b9-854ebe82e0bf-1707746220366/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/web" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-7ed4cfe0-b44c-4745-88b9-854ebe82e0bf-1707746220366/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d45c0f42-35fe-49df-8b75-8929d6997799-1708867847016/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d45c0f42-35fe-49df-8b75-8929d6997799-1708867847016/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d45c0f42-35fe-49df-8b75-8929d6997799-1708867847016/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d45c0f42-35fe-49df-8b75-8929d6997799-1708867847016/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d45c0f42-35fe-49df-8b75-8929d6997799-1708867847016/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d45c0f42-35fe-49df-8b75-8929d6997799-1708867847016/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/web" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-provider-5.7.0-d45c0f42-35fe-49df-8b75-8929d6997799-1708867847016/node_modules/@ethersproject-xdc/web" "@ethersproject-xdc/abstract-signer@file:vendor/@ethersproject-xdc/abstract-signer": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-881f7628-fc63-4936-a4d8-c3dd78e2ea10-1707746220367/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-881f7628-fc63-4936-a4d8-c3dd78e2ea10-1707746220367/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-881f7628-fc63-4936-a4d8-c3dd78e2ea10-1707746220367/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-881f7628-fc63-4936-a4d8-c3dd78e2ea10-1707746220367/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-881f7628-fc63-4936-a4d8-c3dd78e2ea10-1707746220367/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-0721817a-c104-457c-bfe9-01b57fdd0ebf-1708867847016/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-0721817a-c104-457c-bfe9-01b57fdd0ebf-1708867847016/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-0721817a-c104-457c-bfe9-01b57fdd0ebf-1708867847016/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-0721817a-c104-457c-bfe9-01b57fdd0ebf-1708867847016/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-abstract-signer-5.7.0-0721817a-c104-457c-bfe9-01b57fdd0ebf-1708867847016/node_modules/@ethersproject-xdc/properties" "@ethersproject-xdc/address@file:vendor/@ethersproject-xdc/address": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-fe34d301-d5ee-4904-8ac4-bbd60ce306c5-1707746220367/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-fe34d301-d5ee-4904-8ac4-bbd60ce306c5-1707746220367/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-fe34d301-d5ee-4904-8ac4-bbd60ce306c5-1707746220367/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-fe34d301-d5ee-4904-8ac4-bbd60ce306c5-1707746220367/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/rlp" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-fe34d301-d5ee-4904-8ac4-bbd60ce306c5-1707746220367/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-67d0384d-9209-4f28-a7bb-a490960aa934-1708867847016/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-67d0384d-9209-4f28-a7bb-a490960aa934-1708867847016/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-67d0384d-9209-4f28-a7bb-a490960aa934-1708867847016/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-67d0384d-9209-4f28-a7bb-a490960aa934-1708867847016/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/rlp" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-address-5.7.0-67d0384d-9209-4f28-a7bb-a490960aa934-1708867847016/node_modules/@ethersproject-xdc/rlp" "@ethersproject-xdc/base64@file:vendor/@ethersproject-xdc/base64": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-base64-5.7.0-85441adf-e89e-45ba-8b8e-fe505e45b4e3-1707746220368/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-base64-5.7.0-17501914-5c98-4dde-987e-648592bdf1a9-1708867847017/node_modules/@ethersproject-xdc/bytes" "@ethersproject-xdc/basex@file:vendor/@ethersproject-xdc/basex": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-cffbf6ae-ebf3-40ac-8b29-03448e71bda2-1707746220368/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-cffbf6ae-ebf3-40ac-8b29-03448e71bda2-1707746220368/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-3c604ac0-7a4b-4d8c-b0bc-9ed667296e45-1708867847019/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-basex-5.7.0-3c604ac0-7a4b-4d8c-b0bc-9ed667296e45-1708867847019/node_modules/@ethersproject-xdc/properties" "@ethersproject-xdc/bignumber@file:vendor/@ethersproject-xdc/bignumber": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-b9234e3c-743c-41d0-afa8-98626be8151a-1707746220368/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-b9234e3c-743c-41d0-afa8-98626be8151a-1707746220368/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-0c9beeda-daef-485a-b1b6-e01d323ecf52-1708867847017/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bignumber-5.7.0-0c9beeda-daef-485a-b1b6-e01d323ecf52-1708867847017/node_modules/@ethersproject-xdc/logger" bn.js "^5.2.1" "@ethersproject-xdc/bytes@file:vendor/@ethersproject-xdc/bytes": version "5.7.0" dependencies: - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bytes-5.7.0-54859421-d04c-49e3-af47-5b3796198683-1707746220368/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-bytes-5.7.0-5dfa9516-15cb-4795-b904-f2bf08d46f23-1708867847017/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/constants@file:vendor/@ethersproject-xdc/constants": version "5.7.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-constants-5.7.0-4cc25760-f72f-4028-aae8-3d9e690944ea-1707746220368/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-constants-5.7.0-2e0c1fc4-c462-4e17-a084-d8e607748e2b-1708867847017/node_modules/@ethersproject-xdc/bignumber" "@ethersproject-xdc/contracts@file:vendor/@ethersproject-xdc/contracts": version "5.6.0" dependencies: - "@ethersproject-xdc/abi" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/abi" - "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-7cd30a41-9596-405e-8019-6d01651e414c-1707746220369/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/abi" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/abi" + "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-contracts-5.6.0-5a3a692d-d5b1-4a18-89ae-8f654097081a-1708867847020/node_modules/@ethersproject-xdc/transactions" "@ethersproject-xdc/hash@file:vendor/@ethersproject-xdc/hash": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/base64" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-6ecadd7b-375d-40b7-bab4-4e06c441aa07-1707746220370/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/base64" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hash-5.7.0-b28857d1-e695-42e7-b348-b68b350a5c27-1708867847019/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/hdnode@file:vendor/@ethersproject-xdc/hdnode": version "5.7.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/basex" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/pbkdf2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/signing-key" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/wordlists" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-0e95dde4-d63c-4291-a92d-e045705ed812-1707746220376/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/basex" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/pbkdf2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/signing-key" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/wordlists" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-hdnode-5.7.0-96f6d0e9-c33b-4eba-9b78-2b51fe612daa-1708867847025/node_modules/@ethersproject-xdc/wordlists" "@ethersproject-xdc/json-wallets@file:vendor/@ethersproject-xdc/json-wallets": version "5.6.0" dependencies: - "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hdnode" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/pbkdf2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-3ecef9c3-62c3-437f-912d-922b4d3b52fe-1707746220369/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hdnode" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/pbkdf2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-json-wallets-5.6.0-0edb1ae6-e9b5-4c89-95f2-4e58c4e42d99-1708867847018/node_modules/@ethersproject-xdc/transactions" aes-js "3.0.0" scrypt-js "3.0.1" "@ethersproject-xdc/keccak256@file:vendor/@ethersproject-xdc/keccak256": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-keccak256-5.7.0-d933a273-2b5e-4549-80eb-b73ea608cfc2-1707746220374/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-keccak256-5.7.0-b5da59a1-eba3-417c-9687-d8fa14bd4f75-1708867847018/node_modules/@ethersproject-xdc/bytes" js-sha3 "0.8.0" "@ethersproject-xdc/logger@file:vendor/@ethersproject-xdc/logger": @@ -1313,67 +1296,67 @@ "@ethersproject-xdc/networks@file:vendor/@ethersproject-xdc/networks": version "5.7.1" dependencies: - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-networks-5.7.1-b99d9e84-87b1-452f-9ba0-af541322b53f-1707746220369/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-networks-5.7.1-41e8abd8-fd30-4e99-81a9-0166c220ed59-1708867847019/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/pbkdf2@file:vendor/@ethersproject-xdc/pbkdf2": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-10fb5c74-3e6a-4ab9-abd6-7d1b45bb193b-1707746220370/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-10fb5c74-3e6a-4ab9-abd6-7d1b45bb193b-1707746220370/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-008da51d-6c74-46de-9505-20c9c7f170cd-1708867847019/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-pbkdf2-5.7.0-008da51d-6c74-46de-9505-20c9c7f170cd-1708867847019/node_modules/@ethersproject-xdc/sha2" "@ethersproject-xdc/properties@file:vendor/@ethersproject-xdc/properties": version "5.7.0" dependencies: - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-properties-5.7.0-72c88612-fe94-4441-93a9-df7fe5582399-1707746220369/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-properties-5.7.0-a286e825-0bf8-456c-8301-7c3133d22953-1708867847025/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/providers@file:vendor/@ethersproject-xdc/providers": version "5.6.2" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/basex" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/rlp" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/web" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-720be74c-b4fe-4b1f-a23a-4a16ab69a557-1707746220372/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/basex" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/rlp" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/web" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-providers-5.6.2-dd892364-5a09-4c98-9786-36aa800f8531-1708867847024/node_modules/@ethersproject-xdc/web" bech32 "1.1.4" ws "7.4.6" "@ethersproject-xdc/random@file:vendor/@ethersproject-xdc/random": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-random-5.7.0-30cabe5f-7588-453e-8a94-444f15e4c9d4-1707746220370/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-random-5.7.0-30cabe5f-7588-453e-8a94-444f15e4c9d4-1707746220370/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-random-5.7.0-851cc344-b20f-498d-b242-f02c37f6a65b-1708867847026/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-random-5.7.0-851cc344-b20f-498d-b242-f02c37f6a65b-1708867847026/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/rlp@file:vendor/@ethersproject-xdc/rlp": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-f9c07616-1cb8-4a4e-b317-4b4e407b78f3-1707746220370/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-f9c07616-1cb8-4a4e-b317-4b4e407b78f3-1707746220370/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-7bd18564-9646-484e-9ec0-e133a70e4b6a-1708867847021/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-rlp-5.7.0-7bd18564-9646-484e-9ec0-e133a70e4b6a-1708867847021/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/sha2@file:vendor/@ethersproject-xdc/sha2": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-9195cf3e-2f5e-4298-a931-ddcfd128d73c-1707746220371/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-9195cf3e-2f5e-4298-a931-ddcfd128d73c-1707746220371/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-2baa6d83-34d4-471a-a760-f40b9ba93a58-1708867847026/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-sha2-5.7.0-2baa6d83-34d4-471a-a760-f40b9ba93a58-1708867847026/node_modules/@ethersproject-xdc/logger" hash.js "1.1.7" "@ethersproject-xdc/signing-key@file:vendor/@ethersproject-xdc/signing-key": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-38058fe6-de4a-46aa-99d5-01e4e1f17325-1707746220371/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-38058fe6-de4a-46aa-99d5-01e4e1f17325-1707746220371/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-38058fe6-de4a-46aa-99d5-01e4e1f17325-1707746220371/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-fdfcf5e7-b04d-4e95-8675-2fc43a71051b-1708867847020/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-fdfcf5e7-b04d-4e95-8675-2fc43a71051b-1708867847020/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-signing-key-5.7.0-fdfcf5e7-b04d-4e95-8675-2fc43a71051b-1708867847020/node_modules/@ethersproject-xdc/properties" bn.js "^5.2.1" elliptic "6.5.4" hash.js "1.1.7" @@ -1381,76 +1364,76 @@ "@ethersproject-xdc/solidity@file:vendor/@ethersproject-xdc/solidity": version "5.6.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-f8bdd66a-813b-450f-8fdf-5001c4db924d-1707746220373/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-f8bdd66a-813b-450f-8fdf-5001c4db924d-1707746220373/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-f8bdd66a-813b-450f-8fdf-5001c4db924d-1707746220373/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-f8bdd66a-813b-450f-8fdf-5001c4db924d-1707746220373/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-f8bdd66a-813b-450f-8fdf-5001c4db924d-1707746220373/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-f8bdd66a-813b-450f-8fdf-5001c4db924d-1707746220373/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-c6d9bb1f-1efd-4541-8f31-afbf5645aa33-1708867847020/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-c6d9bb1f-1efd-4541-8f31-afbf5645aa33-1708867847020/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-c6d9bb1f-1efd-4541-8f31-afbf5645aa33-1708867847020/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-c6d9bb1f-1efd-4541-8f31-afbf5645aa33-1708867847020/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-c6d9bb1f-1efd-4541-8f31-afbf5645aa33-1708867847020/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-solidity-5.6.0-c6d9bb1f-1efd-4541-8f31-afbf5645aa33-1708867847020/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/strings@file:vendor/@ethersproject-xdc/strings": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-6290db1a-50f2-4106-9d3b-ace409fab9d8-1707746220373/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-6290db1a-50f2-4106-9d3b-ace409fab9d8-1707746220373/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-6290db1a-50f2-4106-9d3b-ace409fab9d8-1707746220373/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-097a1444-8150-46f3-a5ae-275f11d6f403-1708867847025/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-097a1444-8150-46f3-a5ae-275f11d6f403-1708867847025/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-strings-5.7.0-097a1444-8150-46f3-a5ae-275f11d6f403-1708867847025/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/transactions@file:vendor/@ethersproject-xdc/transactions": version "5.7.0" dependencies: - "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/rlp" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/signing-key" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-dc7d6b77-752e-444d-ba26-6d7efb0a56f0-1707746220375/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/rlp" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/signing-key" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-transactions-5.7.0-821735e3-264f-4877-bc9e-d9d9e2e1f244-1708867847021/node_modules/@ethersproject-xdc/signing-key" "@ethersproject-xdc/units@file:vendor/@ethersproject-xdc/units": version "5.6.0" dependencies: - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-514c593c-0809-476b-a3b1-4237333d3639-1707746220374/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-514c593c-0809-476b-a3b1-4237333d3639-1707746220374/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-514c593c-0809-476b-a3b1-4237333d3639-1707746220374/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-489ab83b-56b9-4fff-b287-8a87b0bdeb27-1708867847027/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-489ab83b-56b9-4fff-b287-8a87b0bdeb27-1708867847027/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-units-5.6.0-489ab83b-56b9-4fff-b287-8a87b0bdeb27-1708867847027/node_modules/@ethersproject-xdc/logger" "@ethersproject-xdc/wallet@file:vendor/@ethersproject-xdc/wallet": version "5.6.0" dependencies: - "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/hdnode" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/json-wallets" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/json-wallets" - "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/random" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/signing-key" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/wordlists" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-fc5769d5-fff3-4cc7-a16a-28f96f7ba315-1707746220374/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/hdnode" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/json-wallets" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/json-wallets" + "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/random" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/signing-key" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/wordlists" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wallet-5.6.0-a09eb1ac-3a0c-442b-89bd-bb790d286986-1708867847026/node_modules/@ethersproject-xdc/wordlists" "@ethersproject-xdc/web@file:vendor/@ethersproject-xdc/web": version "5.7.1" dependencies: - "@ethersproject-xdc/base64" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-3861e2ee-bbca-4081-ae05-f6881a31c492-1707746220377/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-3861e2ee-bbca-4081-ae05-f6881a31c492-1707746220377/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-3861e2ee-bbca-4081-ae05-f6881a31c492-1707746220377/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-3861e2ee-bbca-4081-ae05-f6881a31c492-1707746220377/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-3861e2ee-bbca-4081-ae05-f6881a31c492-1707746220377/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/base64" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-c056f5c9-afe3-4b90-a0e5-20cab43d0727-1708867847027/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-c056f5c9-afe3-4b90-a0e5-20cab43d0727-1708867847027/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-c056f5c9-afe3-4b90-a0e5-20cab43d0727-1708867847027/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-c056f5c9-afe3-4b90-a0e5-20cab43d0727-1708867847027/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-web-5.7.1-c056f5c9-afe3-4b90-a0e5-20cab43d0727-1708867847027/node_modules/@ethersproject-xdc/strings" "@ethersproject-xdc/wordlists@file:vendor/@ethersproject-xdc/wordlists": version "5.7.0" dependencies: - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-5a7df4e3-9685-48ee-a435-82e237b3b004-1707746220376/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-5a7df4e3-9685-48ee-a435-82e237b3b004-1707746220376/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-5a7df4e3-9685-48ee-a435-82e237b3b004-1707746220376/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-5a7df4e3-9685-48ee-a435-82e237b3b004-1707746220376/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-5a7df4e3-9685-48ee-a435-82e237b3b004-1707746220376/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-382bd085-e03b-480a-acbe-4add8973a5dc-1708867847026/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-382bd085-e03b-480a-acbe-4add8973a5dc-1708867847026/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-382bd085-e03b-480a-acbe-4add8973a5dc-1708867847026/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-382bd085-e03b-480a-acbe-4add8973a5dc-1708867847026/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-@ethersproject-xdc-wordlists-5.7.0-382bd085-e03b-480a-acbe-4add8973a5dc-1708867847026/node_modules/@ethersproject-xdc/strings" "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.12", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -2056,30 +2039,30 @@ debug "^4.1.1" minimatch "^3.0.5" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - "@humanwhocodes/object-schema@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + "@improbable-eng/grpc-web@^0.13.0": version "0.13.0" resolved "https://registry.yarnpkg.com/@improbable-eng/grpc-web/-/grpc-web-0.13.0.tgz#289e6fc4dafc00b1af8e2b93b970e6892299014d" @@ -3086,6 +3069,11 @@ cross-fetch "3.1.5" exponential-backoff "3.1.0" +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -4290,10 +4278,10 @@ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== -"@types/json-schema@^7.0.7": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -4467,6 +4455,11 @@ resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== +"@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + "@types/serve-static@*": version "1.15.1" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" @@ -4551,75 +4544,91 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.26.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== +"@typescript-eslint/eslint-plugin@^7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.2.tgz#c13a34057be425167cc4a765158c46fdf2fd981d" + integrity sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "7.0.2" + "@typescript-eslint/type-utils" "7.0.2" + "@typescript-eslint/utils" "7.0.2" + "@typescript-eslint/visitor-keys" "7.0.2" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.0.2.tgz#95c31233d343db1ca1df8df7811b5b87ca7b1a68" + integrity sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q== dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@^4.26.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== - dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" + "@typescript-eslint/scope-manager" "7.0.2" + "@typescript-eslint/types" "7.0.2" + "@typescript-eslint/typescript-estree" "7.0.2" + "@typescript-eslint/visitor-keys" "7.0.2" + debug "^4.3.4" -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== +"@typescript-eslint/scope-manager@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.0.2.tgz#6ec4cc03752758ddd1fdaae6fbd0ed9a2ca4fe63" + integrity sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g== + dependencies: + "@typescript-eslint/types" "7.0.2" + "@typescript-eslint/visitor-keys" "7.0.2" + +"@typescript-eslint/type-utils@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.0.2.tgz#a7fc0adff0c202562721357e7478207d380a757b" + integrity sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ== dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" + "@typescript-eslint/typescript-estree" "7.0.2" + "@typescript-eslint/utils" "7.0.2" + debug "^4.3.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== +"@typescript-eslint/types@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.0.2.tgz#b6edd108648028194eb213887d8d43ab5750351c" + integrity sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA== -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== +"@typescript-eslint/typescript-estree@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.2.tgz#3c6dc8a3b9799f4ef7eca0d224ded01974e4cb39" + integrity sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw== dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" + "@typescript-eslint/types" "7.0.2" + "@typescript-eslint/visitor-keys" "7.0.2" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.0.2.tgz#8756123054cd934c8ba7db6a6cffbc654b10b5c4" + integrity sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "7.0.2" + "@typescript-eslint/types" "7.0.2" + "@typescript-eslint/typescript-estree" "7.0.2" + semver "^7.5.4" -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== +"@typescript-eslint/visitor-keys@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.2.tgz#2899b716053ad7094962beb895d11396fc12afc7" + integrity sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ== dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" + "@typescript-eslint/types" "7.0.2" + eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": version "1.2.0" @@ -4948,7 +4957,7 @@ accepts@^1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -4963,11 +4972,6 @@ acorn@7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.4.1: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" @@ -5024,7 +5028,7 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -5034,7 +5038,7 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.3: +ajv@^8.0.0, ajv@^8.6.3: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -5383,11 +5387,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-eventemitter@0.2.4, async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" @@ -6839,7 +6838,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -7303,7 +7302,7 @@ end-stream@~0.1.0: dependencies: write-stream "~0.4.3" -enquirer@^2.3.0, enquirer@^2.3.5: +enquirer@^2.3.0: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -7476,10 +7475,10 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -eslint-config-prettier@^8.3.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz#f1cc58a8afebc50980bd53475451df146c13182d" - integrity sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA== +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== eslint-config-standard@^16.0.3: version "16.0.3" @@ -7543,12 +7542,13 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" -eslint-plugin-prettier@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" - integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== +eslint-plugin-prettier@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== dependencies: prettier-linter-helpers "^1.0.0" + synckit "^0.8.6" eslint-plugin-promise@^5.1.0: version "5.2.0" @@ -7560,14 +7560,6 @@ eslint-plugin-standard@^4.0.1: resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz#0c3bf3a67e853f8bbbc580fb4945fbf16f41b7c5" integrity sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ== -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - eslint-scope@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" @@ -7576,91 +7568,77 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: +eslint-utils@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^7.25.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint@^8.17.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" + optionator "^0.9.3" + strip-ansi "^6.0.1" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -eslint@^8.17.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== +eslint@^8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -7695,15 +7673,6 @@ eslint@^8.17.0: strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -7718,7 +7687,7 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0, esquery@^1.4.2: +esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -7732,11 +7701,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -7876,36 +7840,36 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: "ethers-xdc@file:./vendor/ethers-xdc": version "5.7.2" dependencies: - "@ethersproject-xdc/abi" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/abi" - "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/abstract-provider" - "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/abstract-signer" - "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/address" - "@ethersproject-xdc/base64" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/base64" - "@ethersproject-xdc/basex" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/basex" - "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/bignumber" - "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/bytes" - "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/constants" - "@ethersproject-xdc/contracts" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/contracts" - "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/hash" - "@ethersproject-xdc/hdnode" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/hdnode" - "@ethersproject-xdc/json-wallets" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/json-wallets" - "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/keccak256" - "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/logger" - "@ethersproject-xdc/networks" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/networks" - "@ethersproject-xdc/pbkdf2" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/pbkdf2" - "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/properties" - "@ethersproject-xdc/providers" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/providers" - "@ethersproject-xdc/random" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/random" - "@ethersproject-xdc/rlp" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/rlp" - "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/sha2" - "@ethersproject-xdc/signing-key" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/signing-key" - "@ethersproject-xdc/solidity" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/solidity" - "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/strings" - "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/transactions" - "@ethersproject-xdc/units" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/units" - "@ethersproject-xdc/wallet" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/wallet" - "@ethersproject-xdc/web" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/web" - "@ethersproject-xdc/wordlists" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-116f9596-15f0-41b7-b3dc-b958163dbaf9-1707746220349/node_modules/@ethersproject-xdc/wordlists" + "@ethersproject-xdc/abi" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/abi" + "@ethersproject-xdc/abstract-provider" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/abstract-provider" + "@ethersproject-xdc/abstract-signer" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/abstract-signer" + "@ethersproject-xdc/address" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/address" + "@ethersproject-xdc/base64" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/base64" + "@ethersproject-xdc/basex" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/basex" + "@ethersproject-xdc/bignumber" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/bignumber" + "@ethersproject-xdc/bytes" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/bytes" + "@ethersproject-xdc/constants" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/constants" + "@ethersproject-xdc/contracts" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/contracts" + "@ethersproject-xdc/hash" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/hash" + "@ethersproject-xdc/hdnode" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/hdnode" + "@ethersproject-xdc/json-wallets" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/json-wallets" + "@ethersproject-xdc/keccak256" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/keccak256" + "@ethersproject-xdc/logger" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/logger" + "@ethersproject-xdc/networks" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/networks" + "@ethersproject-xdc/pbkdf2" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/pbkdf2" + "@ethersproject-xdc/properties" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/properties" + "@ethersproject-xdc/providers" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/providers" + "@ethersproject-xdc/random" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/random" + "@ethersproject-xdc/rlp" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/rlp" + "@ethersproject-xdc/sha2" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/sha2" + "@ethersproject-xdc/signing-key" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/signing-key" + "@ethersproject-xdc/solidity" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/solidity" + "@ethersproject-xdc/strings" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/strings" + "@ethersproject-xdc/transactions" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/transactions" + "@ethersproject-xdc/units" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/units" + "@ethersproject-xdc/wallet" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/wallet" + "@ethersproject-xdc/web" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/web" + "@ethersproject-xdc/wordlists" "file:../../../../Library/Caches/Yarn/v6/npm-ethers-xdc-5.7.2-7ae06096-69a0-4901-bab0-8a6a4af3667d-1708867847000/node_modules/@ethersproject-xdc/wordlists" ethers@4.0.0-beta.3: version "4.0.0-beta.3" @@ -8233,9 +8197,9 @@ fast-glob@^2.2.3: micromatch "^3.1.10" fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -8264,9 +8228,9 @@ fast-stable-stringify@^1.0.0: integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -8809,13 +8773,6 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globals@^13.6.0, globals@^13.9.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== - dependencies: - type-fest "^0.20.2" - globalthis@^1.0.1, globalthis@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" @@ -8823,7 +8780,7 @@ globalthis@^1.0.1, globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.3: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -9367,16 +9324,16 @@ ignore-by-default@^1.0.1: resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: +ignore@^5.1.1: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + immediate@3.3.0, immediate@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" @@ -9387,7 +9344,7 @@ immutable@^4.0.0-rc.12, immutable@^4.2.4: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -10928,11 +10885,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - lodash.values@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" @@ -11337,6 +11289,13 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -12023,18 +11982,6 @@ optimism@^0.16.1: "@wry/context" "^0.7.0" "@wry/trie" "^0.3.0" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -12579,16 +12526,16 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.3.0: - version "2.8.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.5.tgz#3dd8ae1ebddc4f6aa419c9b64d8c8319a7e0d982" - integrity sha512-3gzuxrHbKUePRBB4ZeU08VNkUcqEHaUaouNt0m7LGP4Hti/NuB07C7PPTM/LkWqXoJYJn2McEo5+kxPNrtQkLQ== - prettier@^2.7.0: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + pretty-format@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" @@ -12626,11 +12573,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" @@ -13027,7 +12969,7 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -13482,7 +13424,14 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1, semver@^7.3.5, semver@^7.3.8: +semver@^7.3.5: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -13697,15 +13646,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - snake-case@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" @@ -14062,7 +14002,7 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -14232,16 +14172,13 @@ symbol-observable@^4.0.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== -table@^6.0.9: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== +synckit@^0.8.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" tar-stream@^1.5.2: version "1.6.2" @@ -14502,6 +14439,11 @@ truffle@^5.1.41: optionalDependencies: "@truffle/db" "^2.0.20" +ts-api-utils@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + ts-invariant@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" @@ -14571,7 +14513,7 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -14581,6 +14523,11 @@ tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslib@~2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" @@ -14591,13 +14538,6 @@ tsort@0.0.1: resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -14980,11 +14920,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8-to-istanbul@^9.0.1: version "9.2.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" @@ -15667,11 +15602,6 @@ winston@^3.3.3: triple-beam "^1.3.0" winston-transport "^4.5.0" -word-wrap@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" From cee7d17ab736351ebff915ef148d749707b19784 Mon Sep 17 00:00:00 2001 From: nikspz <83953535+nikspz@users.noreply.github.com> Date: Tue, 27 Feb 2024 13:11:28 +0700 Subject: [PATCH 24/35] fix- Update development version to dev-1.26.0 --- src/app.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.ts b/src/app.ts index a2db518650..78d25640ee 100644 --- a/src/app.ts +++ b/src/app.ts @@ -112,7 +112,7 @@ export const startSwagger = async () => { export const startGateway = async () => { const port = ConfigManagerV2.getInstance().get('server.port'); - const gateway_version="dev-1.25.0"; // gateway version + const gateway_version="dev-1.26.0"; // gateway version if (!ConfigManagerV2.getInstance().get('server.id')) { ConfigManagerV2.getInstance().set( 'server.id', From 970b728e3a6c9c8dfe250a51be27f8654bfb9048 Mon Sep 17 00:00:00 2001 From: nikspz <83953535+nikspz@users.noreply.github.com> Date: Tue, 27 Feb 2024 13:12:18 +0700 Subject: [PATCH 25/35] Update package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index bf1252ccfb..ffc2c8b813 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hummingbot-gateway", - "version": "dev-1.25.0", + "version": "dev-1.26.0", "description": "Middleware that helps Hummingbot clients access standardized DEX API endpoints on different blockchain networks", "main": "index.js", "license": "Apache-2.0", @@ -164,4 +164,4 @@ "resolutions": { "web3-utils": "1.7.3" } -} \ No newline at end of file +} From 1f7009cc848b2b4549663cec85bdcbec53fe0e0d Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Tue, 27 Feb 2024 20:47:22 -0700 Subject: [PATCH 26/35] Osmosis: Fixed sig fig issues caused by DAI being excessive. Fixed alphabetization of coins. Made fees default to 0 when endpoint is down. --- src/chains/osmosis/osmosis.lp.utils.ts | 13 +++++--- src/chains/osmosis/osmosis.ts | 46 ++++++++++++++++++-------- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/chains/osmosis/osmosis.lp.utils.ts b/src/chains/osmosis/osmosis.lp.utils.ts index dcade9448f..ab7619cb31 100755 --- a/src/chains/osmosis/osmosis.lp.utils.ts +++ b/src/chains/osmosis/osmosis.lp.utils.ts @@ -88,10 +88,15 @@ export const extendPool = (assets: Asset[], { .toNumber(); } - const feeData = fees.find((fee) => fee.pool_id === pool.id.toString()); - const volume24H = Math.round(Number(feeData?.volume_24h || 0)); - const volume7d = Math.round(Number(feeData?.volume_7d || 0)); - const fees7D = Math.round(Number(feeData?.fees_spent_7d || 0)); + var volume24H = 0 + var volume7d = 0 + var fees7D = 0 + if (fees){ + const feeData = fees.find((fee) => fee.pool_id === pool.id.toString()); + volume24H = Math.round(Number(feeData?.volume_24h || 0)); + volume7d = Math.round(Number(feeData?.volume_7d || 0)); + fees7D = Math.round(Number(feeData?.fees_spent_7d || 0)); + } var poolDenom = ''; if (pool.totalShares){ diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts index 2b25f7d101..5a6a791ba8 100755 --- a/src/chains/osmosis/osmosis.ts +++ b/src/chains/osmosis/osmosis.ts @@ -767,7 +767,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ TRADE_FAILED_ERROR_CODE ); } - + /** * Given a 2 token symbols and 1-2 amounts, exchange amounts for pool liquidity shares * @@ -935,7 +935,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ poolId: pool.id.toString(), sender: address, tokenIn: inputCoin, - shareOutMinAmount: finalShareOutAmount.toString(), + shareOutMinAmount: this.noDecimals(finalShareOutAmount.toString()), }); msgs.push(joinSwapExternAmountInMsg); @@ -972,6 +972,11 @@ export class Osmosis extends CosmosBase implements Cosmosish{ .shiftedBy(this.getExponentByBase(token1.base)) .toString()}); + // alphabetize the coins going in or else invalid coins error + if (!(token0.base.toLowerCase() < token1.base.toLowerCase())){ + allCoins.reverse() + } + const shareOutAmount = calcShareOutAmount(pool, allCoins); const tokenInMaxs = allCoins.map((c: Coin) => { return coin(c.amount, c.denom); @@ -988,7 +993,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ // @ts-ignore: bad osmojs models poolId: pool.id.toString(), sender: address, - shareOutAmount: finalShareOutAmount.toString(), + shareOutAmount: this.noDecimals(finalShareOutAmount.toString()), tokenInMaxs, }); msgs.push(joinPoolMsg); @@ -1338,12 +1343,10 @@ export class Osmosis extends CosmosBase implements Cosmosish{ allCoins.push({'denom':token1.base, 'amount':new BigNumber(amount1) .shiftedBy(this.getExponentByBase(token1.base)) .toString()}); - - - const token0_bignumber = new BigNumber(amount0) - const token1_bignumber = new BigNumber(amount1) - + var token0_bignumber = new BigNumber(amount0) + var token1_bignumber = new BigNumber(amount1) + var tokenMinAmount0; var tokenMinAmount1; if (slippage == 100){ @@ -1353,10 +1356,19 @@ export class Osmosis extends CosmosBase implements Cosmosish{ tokenMinAmount0 = token0_bignumber.shiftedBy(this.getExponentByBase(token0.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) tokenMinAmount1 = token1_bignumber.shiftedBy(this.getExponentByBase(token1.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) } - const lowerTick = findTickForPrice(req.lowerPrice!, pool.exponentAtPriceOne, pool.tickSpacing, true) const upperTick = findTickForPrice(req.upperPrice!, pool.exponentAtPriceOne, pool.tickSpacing, false) + var tokenMinAmount0_final = tokenMinAmount0.toString() + var tokenMinAmount1_final = tokenMinAmount1.toString() + + // alphabetize the coins going in or else invalid coins error + if (!(token0.base.toLowerCase() < token1.base.toLowerCase())){ + allCoins.reverse() + tokenMinAmount0_final = tokenMinAmount1.toString() + tokenMinAmount1_final = tokenMinAmount0.toString() + } + const MsgCreatePosition = createPosition({ poolId: pool.id.toString(), sender: req.address, @@ -1365,8 +1377,8 @@ export class Osmosis extends CosmosBase implements Cosmosish{ // @ts-ignore: bad osmojs models upperTick: upperTick, tokensProvided: allCoins, - tokenMinAmount0: tokenMinAmount0.toString(), - tokenMinAmount1: tokenMinAmount1.toString(), + tokenMinAmount0: tokenMinAmount0_final, + tokenMinAmount1: tokenMinAmount1_final, }) msgs.push(MsgCreatePosition); @@ -1663,7 +1675,14 @@ export class Osmosis extends CosmosBase implements Cosmosish{ .shiftedBy(18) .decimalPlaces(0) .toString(); - + + // alphabetize the coins going in or else invalid coins error + if (coinsNeeded.length>1){ + if (!(coinsNeeded[0].denom.toLowerCase() < coinsNeeded[1].denom.toLowerCase())){ + coinsNeeded.reverse() + } + } + tokenOutMins = coinsNeeded.map((c: Coin) => { return coin(c.amount, c.denom); }); @@ -1673,7 +1692,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ } const msg = exitPool({ - // @ts-ignore: bad osmojs models + // @ts-ignore: bad osmojs models poolId: currentPool.id.toString(), sender: address, shareInAmount, @@ -1681,7 +1700,6 @@ export class Osmosis extends CosmosBase implements Cosmosish{ }); msgs.push(msg) - } From d49009a7f5a97a750d66fc89be3e2dedfacdf150 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Wed, 28 Feb 2024 16:00:35 -0700 Subject: [PATCH 27/35] Osmosis: cleaned some comments, added market price to PoolPriceResponse --- src/chains/osmosis/osmosis.controllers.ts | 5 +++-- src/chains/osmosis/osmosis.lp.utils.ts | 2 -- src/chains/osmosis/osmosis.ts | 8 ++++++-- src/chains/osmosis/osmosis.types.ts | 15 +++++---------- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 43941d6033..092366c839 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -478,7 +478,7 @@ export class OsmosisController { ); } - const pools = await osmosis.findPoolsPrices( + const priceAndPools = await osmosis.findPoolsPrices( token0, token1, req.address! @@ -494,7 +494,8 @@ export class OsmosisController { latency: latency(startTimestamp, Date.now()), token0: req.token0, token1: req.token1, - pools: pools, //CosmosExtendedPool[]; + prices: [priceAndPools.price], + pools: priceAndPools.pools, //CosmosExtendedPool[]; }; } diff --git a/src/chains/osmosis/osmosis.lp.utils.ts b/src/chains/osmosis/osmosis.lp.utils.ts index ab7619cb31..844c4cd421 100755 --- a/src/chains/osmosis/osmosis.lp.utils.ts +++ b/src/chains/osmosis/osmosis.lp.utils.ts @@ -126,8 +126,6 @@ export const extendPool = (assets: Asset[], { }; }; -// export type ExtendedPool = ReturnType; - export const descByLiquidity = (pool1: ExtendedPool, pool2: ExtendedPool) => { return new BigNumber(pool1.liquidity).lt(pool2.liquidity) ? 1 : -1; }; diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts index 5a6a791ba8..3e94aa39bf 100755 --- a/src/chains/osmosis/osmosis.ts +++ b/src/chains/osmosis/osmosis.ts @@ -24,6 +24,7 @@ import { AddPositionTransactionResponse, ReduceLiquidityTransactionResponse, SerializableExtendedPool, + PriceAndSerializableExtendedPools, ExtendedPool, CoinAndSymbol, AnyPoolType @@ -1877,7 +1878,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ token0: CosmosAsset, token1: CosmosAsset, address: string, - ): Promise { + ): Promise { try { var balances: Coin[] = [] @@ -1950,7 +1951,10 @@ export class Osmosis extends CosmosBase implements Cosmosish{ } }); - return returnPools; + var price_out = new BigNumber(prices[token0.base]).dividedBy(new BigNumber(prices[token1.base])).toString() + var returnPriceAndPools = {'pools':returnPools, 'price':price_out} + + return returnPriceAndPools; } catch (error) { console.debug(error); diff --git a/src/chains/osmosis/osmosis.types.ts b/src/chains/osmosis/osmosis.types.ts index 73a1fbb98d..e41d430b7a 100755 --- a/src/chains/osmosis/osmosis.types.ts +++ b/src/chains/osmosis/osmosis.types.ts @@ -245,6 +245,11 @@ export interface TransactionEventAttribute { value: string; } +export interface PriceAndSerializableExtendedPools{ + pools: SerializableExtendedPool[]; + price: string; +} + export class SerializableExtendedPool { constructor(input: ExtendedPool) { this.$typeUrl = input.$typeUrl; @@ -288,16 +293,6 @@ export class SerializableExtendedPool { denom: string; } -// token0: string | undefined; -// token1: string | undefined; -// fee: string | undefined; -// lowerPrice: string; -// upperPrice: string; -// amount0: string; -// amount1: string; -// unclaimedToken0: string; -// unclaimedToken1: string; - export class ExtendedPool { liquidity: number = 0; volume24H: number = 0; From 6a40c38e3c2792ea761c1e279b81474bc9a748a0 Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Fri, 1 Mar 2024 13:50:06 -0700 Subject: [PATCH 28/35] Osmosis: fix bigint serialization error --- src/chains/osmosis/osmosis.controllers.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 092366c839..3868fd00d9 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -395,8 +395,8 @@ export class OsmosisController { gasPrice: tx.gasPrice, gasPriceToken: osmosis.manualGasPriceToken, gasLimit: Number(gasLimitTransaction), - gasCost: tx.gasUsed, - gasWanted: tx.gasWanted, + gasCost: tx.gasUsed.toString(), + gasWanted: tx.gasWanted.toString(), txHash: tx.transactionHash, poolAddress: tx.poolAddress, poolShares: tx.poolshares, @@ -446,8 +446,8 @@ export class OsmosisController { balances: tx.balances, gasPrice: gasPrice.toString(), gasLimit: Number(gasLimitTransaction), - gasCost: tx.gasUsed, - gasWanted: tx.gasWanted, + gasCost: tx.gasUsed.toString(), + gasWanted: tx.gasWanted.toString(), txHash: tx.transactionHash, gasPriceToken: osmosis.manualGasPriceToken, }; From eb3e9c57819628a0e68fd5710c63644f81cd14d4 Mon Sep 17 00:00:00 2001 From: david-hummingbot <85695272+david-hummingbot@users.noreply.github.com> Date: Mon, 4 Mar 2024 07:59:34 +0800 Subject: [PATCH 29/35] feat/update-gateway-workflow --- .github/workflows/docker_buildx_workflow.yml | 80 ++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 .github/workflows/docker_buildx_workflow.yml diff --git a/.github/workflows/docker_buildx_workflow.yml b/.github/workflows/docker_buildx_workflow.yml new file mode 100644 index 0000000000..2dfe2aecd1 --- /dev/null +++ b/.github/workflows/docker_buildx_workflow.yml @@ -0,0 +1,80 @@ +name: Gateway Docker Buildx Workflow + +on: + pull_request: + types: [closed] + branches: + - master + - development + release: + types: [published, edited] + +jobs: + build_pr: + if: github.event_name == 'pull_request' && github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4.1.1 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3.1.0 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push Development Image + if: github.base_ref == 'development' + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: hummingbot/gateway:development + + - name: Build and push Latest Image + if: github.base_ref == 'master' + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: hummingbot/gateway:latest + + build_release: + if: github.event_name == 'release' + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4.1.1 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3.1.0 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Extract tag name + id: get_tag + run: echo ::set-output name=VERSION::version-${GITHUB_REF#refs/tags/v} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: hummingbot/gateway:${{ steps.get_tag.outputs.VERSION }} From 5304a62f867758045399b627bfbb361bd11bcb50 Mon Sep 17 00:00:00 2001 From: david-hummingbot <85695272+david-hummingbot@users.noreply.github.com> Date: Mon, 4 Mar 2024 08:00:07 +0800 Subject: [PATCH 30/35] Delete .github/workflows/docker_build_latest --- .github/workflows/docker_build_latest | 47 --------------------------- 1 file changed, 47 deletions(-) delete mode 100644 .github/workflows/docker_build_latest diff --git a/.github/workflows/docker_build_latest b/.github/workflows/docker_build_latest deleted file mode 100644 index e6d0ffab65..0000000000 --- a/.github/workflows/docker_build_latest +++ /dev/null @@ -1,47 +0,0 @@ -name: Build and Push Docker image - -on: - pull_request: - types: [closed] - branches: - - main - -jobs: - build: - runs-on: ubuntu-latest - if: github.event.pull_request.merged == true - steps: - - name: Checkout code - uses: actions/checkout@v3.5.3 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2.2.0 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2.9.1 - with: - version: latest - - - name: Login to DockerHub - uses: docker/login-action@v2.2.0 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push - id: docker_build - uses: docker/build-push-action@v4.1.1 - with: - context: . - push: true - tags: hummingbot/gateway:latest - platforms: linux/amd64,linux/arm64 - build-args: | - BRANCH=${{ github.ref }} - COMMIT=${{ github.sha }} - BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') - cache-from: type=registry,ref=hummingbot/gateway:latest - cache-to: type=inline - - - name: Image digest - run: echo ${{ steps.docker_build.outputs.digest }} From 93072999ac0413adc1920e1fc0a06393f9e08572 Mon Sep 17 00:00:00 2001 From: david-hummingbot <85695272+david-hummingbot@users.noreply.github.com> Date: Mon, 4 Mar 2024 08:00:16 +0800 Subject: [PATCH 31/35] Delete .github/workflows/docker_build_tags --- .github/workflows/docker_build_tags | 37 ----------------------------- 1 file changed, 37 deletions(-) delete mode 100644 .github/workflows/docker_build_tags diff --git a/.github/workflows/docker_build_tags b/.github/workflows/docker_build_tags deleted file mode 100644 index 72a6224570..0000000000 --- a/.github/workflows/docker_build_tags +++ /dev/null @@ -1,37 +0,0 @@ -name: Build and push Docker images on release - -on: - release: - types: [published, edited] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2.2.0 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2.7.0 - - - name: Login to DockerHub - uses: docker/login-action@v2.2.0 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Extract tag name - id: get_tag - run: echo ::set-output name=VERSION::version-${GITHUB_REF#refs/tags/v} - - - name: Build and push - uses: docker/build-push-action@v4.1.1 - with: - context: . - platforms: linux/amd64,linux/arm64 - push: true - tags: hummingbot/gateway:${{ steps.get_tag.outputs.VERSION }} From aa7998e7d77f9172050c50143acc26a2bd98b07a Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Wed, 6 Mar 2024 23:10:27 -0700 Subject: [PATCH 32/35] Osmosis: Updated tokenId to take either positionId or PoolId --- src/amm/amm.controllers.ts | 7 +- src/amm/amm.requests.ts | 1 + src/chains/cosmos/cosmos-base.ts | 23 ++ src/chains/osmosis/osmosis.controllers.ts | 130 +++++++- src/chains/osmosis/osmosis.ts | 369 ++++++++++++++++++--- src/chains/osmosis/osmosis.types.ts | 55 ++- src/network/network.requests.ts | 1 + src/templates/osmosis.yml | 2 +- test-bronze/chains/osmosis/osmosis.test.ts | 1 + 9 files changed, 514 insertions(+), 75 deletions(-) diff --git a/src/amm/amm.controllers.ts b/src/amm/amm.controllers.ts index a407a07623..54ba964bb7 100644 --- a/src/amm/amm.controllers.ts +++ b/src/amm/amm.controllers.ts @@ -87,7 +87,6 @@ import { Tinyman } from '../connectors/tinyman/tinyman'; import { Plenty } from '../connectors/plenty/plenty'; import { QuipuSwap } from '../connectors/quipuswap/quipuswap'; import { Osmosis } from '../chains/osmosis/osmosis'; -import { AMOUNT_NOT_SUPPORTED_ERROR_CODE, ENDPOINT_NOT_SUPPORTED_ERROR_MESSAGE, HttpException } from '../services/error-handler'; import { Carbonamm } from '../connectors/carbon/carbonAMM'; export async function price(req: PriceRequest): Promise { @@ -189,11 +188,7 @@ export async function collectFees( ): Promise { const chain = await getInitializedChain(req.chain, req.network); if (chain instanceof Osmosis){ - throw new HttpException( - 500, - ENDPOINT_NOT_SUPPORTED_ERROR_MESSAGE, - AMOUNT_NOT_SUPPORTED_ERROR_CODE - ); + return chain.controller.collectFees(chain as unknown as Osmosis, req); } const connector: UniswapLPish = await getConnector( req.chain, diff --git a/src/amm/amm.requests.ts b/src/amm/amm.requests.ts index 1037e7067e..055561e7eb 100644 --- a/src/amm/amm.requests.ts +++ b/src/amm/amm.requests.ts @@ -155,6 +155,7 @@ export interface RemoveLiquidityResponse { txHash: string | undefined; gasWanted?: string; balances?: CoinAndSymbol[]; + isCollectFees?: boolean; } export interface PositionRequest extends NetworkSelectionRequest { diff --git a/src/chains/cosmos/cosmos-base.ts b/src/chains/cosmos/cosmos-base.ts index 392d15a54a..bf62f1616f 100644 --- a/src/chains/cosmos/cosmos-base.ts +++ b/src/chains/cosmos/cosmos-base.ts @@ -18,6 +18,9 @@ const crypto = require('crypto').webcrypto; import { osmosis } from 'osmojs'; import { getEIP1559DynamicBaseFee } from '../osmosis/osmosis.prices'; +import { isFractionString } from '../../services/validators'; +import { RefConfig } from '../../connectors/ref/ref.config'; +import { percentRegexp } from '../../services/config-manager-v2'; const { createRPCQueryClient } = osmosis.ClientFactory; export class CosmosAsset implements Asset { @@ -496,4 +499,24 @@ export class CosmosBase { return await provider.getHeight(); } + + /** + * Gets the allowed slippage percent from the optional parameter or the value + * in the configuration. + * + * @param allowedSlippageStr (Optional) should be of the form '1/10'. + */ + public getAllowedSlippage(allowedSlippageStr?: string): number { + if (allowedSlippageStr != null && isFractionString(allowedSlippageStr)) { + const fractionSplit = allowedSlippageStr.split('/'); + return Number(fractionSplit[0]) / Number(fractionSplit[1]); + } + + const allowedSlippage = RefConfig.config.allowedSlippage; + const nd = allowedSlippage.match(percentRegexp); + if (nd) return Number(nd[1]) / Number(nd[2]); + throw new Error( + 'Encountered a malformed percent string in the config for ALLOWED_SLIPPAGE.' + ); + } } \ No newline at end of file diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 3868fd00d9..07e3fe39eb 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -49,10 +49,13 @@ import { validateCosmosBalanceRequest, validateCosmosPollRequest } from '../cosm import { CosmosBalanceRequest, CosmosPollRequest } from '../cosmos/cosmos.requests'; import { toCosmosBalances } from '../cosmos/cosmos.controllers'; import { AllowancesRequest, ApproveRequest, CancelRequest, NonceRequest, NonceResponse } from '../chain.requests'; -import { TOKEN_NOT_SUPPORTED_ERROR_MESSAGE, TOKEN_NOT_SUPPORTED_ERROR_CODE, OUT_OF_GAS_ERROR_MESSAGE, OUT_OF_GAS_ERROR_CODE, INSUFFICIENT_FUNDS_ERROR_MESSAGE, INSUFFICIENT_FUNDS_ERROR_CODE } from '../../services/error-handler'; +import { TOKEN_NOT_SUPPORTED_ERROR_MESSAGE, TOKEN_NOT_SUPPORTED_ERROR_CODE, OUT_OF_GAS_ERROR_MESSAGE, OUT_OF_GAS_ERROR_CODE, INSUFFICIENT_FUNDS_ERROR_MESSAGE, INSUFFICIENT_FUNDS_ERROR_CODE, AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE, AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE } from '../../services/error-handler'; const { decodeTxRaw } = require('@cosmjs/proto-signing'); +// Osmosis transaction.code values const successfulTransaction = 0; +const unconfirmedTransaction = 0; +const lessThanMinAmountSlippage = 7; const insufficientFunds = 5; const outOfGas = 11; @@ -358,6 +361,7 @@ export class OsmosisController { const feeTier = osmosis.feeTier; // var tx = undefined; + var out_tokenId = 0; if (req.lowerPrice){ tx = await osmosis.addPositionLP( wallet, @@ -367,6 +371,7 @@ export class OsmosisController { feeTier, gasAdjustment, ); + out_tokenId = tx.positionId! } else{ tx = await osmosis.addPosition( wallet, @@ -380,10 +385,12 @@ export class OsmosisController { feeTier, gasAdjustment, ); + out_tokenId = tx.poolId } this.validateTxErrors(tx, "Liquidity added. "); + // Instead of poolId for tokenId, we can return Position_id then filter our current positions to find it later, to get the poolId again.. then we'd support multiple positions for each pool return { network: osmosis.chainName, timestamp: startTimestamp, @@ -391,7 +398,7 @@ export class OsmosisController { token0: req.token0, token1: req.token1, fee: feeTier, - tokenId: Number(tx.poolId), + tokenId: out_tokenId, gasPrice: tx.gasPrice, gasPriceToken: osmosis.manualGasPriceToken, gasLimit: Number(gasLimitTransaction), @@ -428,7 +435,7 @@ export class OsmosisController { wallet, req.decreasePercent, req.address, - req.tokenId, + req.tokenId, // this is PositionID (CL) or PoolID (GAMM) req.allowedSlippage, feeTier, gasAdjustment, @@ -450,6 +457,53 @@ export class OsmosisController { gasWanted: tx.gasWanted.toString(), txHash: tx.transactionHash, gasPriceToken: osmosis.manualGasPriceToken, + isCollectFees: false, // instead of collect + }; + } + + + static async collectFees( + osmosis: Osmosis, + req: RemoveLiquidityRequest + ): Promise { + const startTimestamp: number = Date.now(); + + const { wallet } = + await getOsmoWallet( + osmosis, + req.address, + ); + + const gasPrice = osmosis.manualGasPrice; // GAS PRICE PER UNIT OF WORK + const gasLimitTransaction = osmosis.gasLimitEstimate; // MAX uOSMO COST PER TRANSACTION + const gasAdjustment = osmosis.gasPriceConstant; // + const feeTier = osmosis.feeTier; // + + const tx = await osmosis.collectRewardsIncentives( + wallet, + req.address, + req.tokenId, // this is PositionID (CL) or PoolID (GAMM) + feeTier, + gasAdjustment, + ); + + logger.info( + `Collected Fees, txHash is ${tx.transactionHash}, gasUsed is ${tx.gasUsed}.` + ); + + return { + network: osmosis.chainName, + timestamp: startTimestamp, + latency: latency(startTimestamp, Date.now()), + tokenId: req.tokenId, + balances: tx.balances, + gasPrice: gasPrice.toString(), + gasLimit: Number(gasLimitTransaction), + gasCost: tx.gasUsed.toString(), + gasWanted: tx.gasWanted.toString(), + txHash: tx.transactionHash, + gasPriceToken: osmosis.manualGasPriceToken, + isCollectFees: true, // instead of collect }; } @@ -542,10 +596,10 @@ export class OsmosisController { return { network: osmosis.chainName, timestamp: Date.now(), - gasPrice, + gasPrice: gasPrice, gasPriceToken: osmosis.manualGasPriceToken, gasLimit: Number(gasLimitTransaction), - gasCost: '0', + gasCost: gasPrice.toString(), }; } @@ -616,23 +670,64 @@ export class OsmosisController { } static async poll(osmosis: Osmosis, req: CosmosPollRequest) { - // validateCosmosPollRequest(req); if (req.txHash){ const transaction = await osmosis.getTransaction(req.txHash); const currentBlock = await osmosis.getCurrentBlockNumber(); + //@ts-ignore cosmojs models again + var pool_id = undefined; + var position_id = undefined; + //@ts-ignore cosmojs models again + if (transaction.txResponse.logs){ + //@ts-ignore cosmojs models again + transaction.txResponse.logs.forEach((log) => { + //@ts-ignore cosmojs models again + const create_position_event = log.events.find(({ type }) => type === 'create_position'); + if (create_position_event){ + //@ts-ignore cosmojs models again + const pool_id_attribute = create_position_event.attributes.find(({ key }) => key === 'pool_id'); + if (pool_id_attribute){ + pool_id = pool_id_attribute.value + } + //@ts-ignore cosmojs models again + const position_id_attribute = create_position_event.attributes.find(({ key }) => key === 'position_id'); + if (position_id_attribute){ + position_id = position_id_attribute.value + } + } + }) + } + var tokenId = position_id ? position_id!=undefined : pool_id; + + var txStatus = unconfirmedTransaction; + //@ts-ignore cosmojs models again + if (transaction.txResponse.code == successfulTransaction){ + txStatus = 1; // clientside this is a successful tx + } + //@ts-ignore cosmojs models again + else if (transaction.txResponse.code != unconfirmedTransaction){ + //@ts-ignore cosmojs models again + txStatus = transaction.txResponse.code; // any other failure + } return { + txStatus: txStatus, + txReceipt: null, + tokenId: Number(tokenId ? tokenId != undefined : -1), txHash: req.txHash, currentBlock, - txBlock: transaction.height, - gasUsed: transaction.gasUsed, - gasWanted: transaction.gasWanted, + //@ts-ignore cosmojs models again + txBlock: Number(transaction.txResponse.height.toString()), + //@ts-ignore cosmojs models again + gasUsed: Number(transaction.txResponse.gasUsed.toString()), + //@ts-ignore cosmojs models again + gasWanted: Number(transaction.txResponse.gasWanted.toString()), txData: decodeTxRaw(transaction.tx), }; + } return { txHash: '', - txStatus: 1, + txStatus: 0, txBlock: 0, gasUsed: 0, gasWanted: 0, @@ -640,6 +735,7 @@ export class OsmosisController { }; } + // these below shouldn't actually be called static async allowances( osmosis: Osmosis, req: AllowancesRequest @@ -648,7 +744,7 @@ export class OsmosisController { // Not applicable. var allowances: Record = {} req.tokenSymbols.forEach((sym)=>{ - allowances[sym] = "1000000000000000000000000000" + allowances[sym] = "1000000000000000000000000000000000000000000000" }) return { spender: undefined as unknown as string, @@ -713,7 +809,17 @@ export class OsmosisController { OUT_OF_GAS_ERROR_MESSAGE + " : " + tx.rawLog, OUT_OF_GAS_ERROR_CODE ); - } else if (tx.code == insufficientFunds){ + } else if (tx.code == lessThanMinAmountSlippage){ + logger.error( + `Failed to execute trade. Token created less than minimum amount; increase slippage. txHash is ${tx.transactionHash}, gasUsed is ${tx.gasUsed}. Log: ${tx.rawLog}` + ) + throw new HttpException( + 500, + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE + " : " + tx.rawLog, + AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE + ); + } + else if (tx.code == insufficientFunds){ logger.error( `Failed to execute trade. Insufficient funds. txHash is ${tx.transactionHash}, gasUsed is ${tx.gasUsed}. Log: ${tx.rawLog}` ) diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts index 3e94aa39bf..6e9317a4dd 100755 --- a/src/chains/osmosis/osmosis.ts +++ b/src/chains/osmosis/osmosis.ts @@ -80,7 +80,9 @@ const { } = osmosis.gamm.v1beta1.MessageComposer.withTypeUrl; const { createPosition, - withdrawPosition + withdrawPosition, + collectSpreadRewards, + collectIncentives } = osmosis.concentratedliquidity.v1beta1.MessageComposer.withTypeUrl; const { send @@ -418,9 +420,9 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var slippage = 0; if (allowedSlippage){ - slippage = Number(allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(allowedSlippage) }else{ - slippage = Number(this.allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(this.allowedSlippage) } var feeTier = this.feeTier; if (feeTier_input){ @@ -687,9 +689,9 @@ export class Osmosis extends CosmosBase implements Cosmosish{ ): Promise { var slippage = 0; if (allowedSlippage){ - slippage = Number(allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(allowedSlippage) }else{ - slippage = Number(this.allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(this.allowedSlippage) } var feeTier = this.feeTier; if (feeTier_input){ @@ -798,9 +800,9 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var slippage = 0; if (allowedSlippage){ - slippage = Number(allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(allowedSlippage) }else{ - slippage = Number(this.allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(this.allowedSlippage) } var feeTier = this.feeTier; if (feeTier_input){ @@ -1148,9 +1150,9 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var slippage = 0; if (req.allowedSlippage){ - slippage = Number(req.allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(req.allowedSlippage) }else{ - slippage = Number(this.allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(this.allowedSlippage) } var feeTier = this.feeTier; if (feeTier_input){ @@ -1345,18 +1347,18 @@ export class Osmosis extends CosmosBase implements Cosmosish{ .shiftedBy(this.getExponentByBase(token1.base)) .toString()}); - var token0_bignumber = new BigNumber(amount0) - var token1_bignumber = new BigNumber(amount1) + // var token0_bignumber = new BigNumber(amount0) + // var token1_bignumber = new BigNumber(amount1) var tokenMinAmount0; var tokenMinAmount1; - if (slippage == 100){ - tokenMinAmount0 = '0'; - tokenMinAmount1 = '0'; - }else{ - tokenMinAmount0 = token0_bignumber.shiftedBy(this.getExponentByBase(token0.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) - tokenMinAmount1 = token1_bignumber.shiftedBy(this.getExponentByBase(token1.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) - } + // if (slippage == 100){ + tokenMinAmount0 = '0'; + tokenMinAmount1 = '0'; + // }else{ + // tokenMinAmount0 = token0_bignumber.shiftedBy(this.getExponentByBase(token0.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) + // tokenMinAmount1 = token1_bignumber.shiftedBy(this.getExponentByBase(token1.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) + // } const lowerTick = findTickForPrice(req.lowerPrice!, pool.exponentAtPriceOne, pool.tickSpacing, true) const upperTick = findTickForPrice(req.upperPrice!, pool.exponentAtPriceOne, pool.tickSpacing, false) @@ -1425,6 +1427,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var token0_finalamount = '0' var token1_finalamount = '0' var poolshares = '0' + var positionId = '0' if (res?.code !== successfulTransaction){ res.token0_finalamount = token0_finalamount @@ -1467,6 +1470,9 @@ export class Osmosis extends CosmosBase implements Cosmosish{ if (attribute.key == 'liquidity'){ outbound_shares_string = attribute.value; } + else if (attribute.key == 'position_id'){ + positionId = attribute.value; + } } } } @@ -1506,6 +1512,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ res.token1_finalamount = token1_finalamount res.poolshares = poolshares res.poolId = Number(pool.id.toString()) + res.positionId = Number(positionId) res.poolAddress = pool.address res.gasPrice = gasPrice return res; @@ -1529,7 +1536,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ * @param wallet CosmosWallet * @param decreasePercent * @param address Wallet address - * @param poolId? Optional string specify poolId instead of search by tokens + * @param tokenId? Optional, can search by tokens if not used but please use. this is tokenId == positionId (CL) or poolId (GAMM) * @param allowedSlippage? Allowed slippage eg "1%" * @param feeTier_input? low/medium/high, overwrites feeTier specified in .yml * @param gasAdjustment_input? Gas offered multiplier, overwrites gasAdjustment specified in .yml @@ -1538,15 +1545,17 @@ export class Osmosis extends CosmosBase implements Cosmosish{ wallet: CosmosWallet, decreasePercent: number = 100, address: string, - poolId: number, + tokenId: number, allowedSlippage?: string, feeTier_input?: string, gasAdjustment_input?: number, ): Promise { - var slippage = Number(this.allowedSlippage.split('%')[0]); + var slippage = 0; if (allowedSlippage){ - slippage = Number(allowedSlippage.split('%')[0]); + slippage = this.getAllowedSlippage(allowedSlippage) + }else{ + slippage = this.getAllowedSlippage(this.allowedSlippage) } var feeTier = this.feeTier; if (feeTier_input){ @@ -1596,7 +1605,26 @@ export class Osmosis extends CosmosBase implements Cosmosish{ extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) ); - const currentPool = extendedPools.filter((pl) => pl.id.toString() == poolId.toString())[0]; + + // find out if this is CL or GAMM (positionId or poolId) + var final_poolId = tokenId! + if (tokenId){ + //@ts-ignore + var allCLPositions; + try{ + const allCLPositionsContainer = await this._provider.osmosis.concentratedliquidity.v1beta1.positionById({ + address: address, // doesn't actually check the address + positionId: tokenId + }) + if (allCLPositionsContainer.position.position.address == address){ // is this our position? + final_poolId = allCLPositionsContainer.position.position.poolId + } + } catch (error) { + console.debug(error); + } + } + + const currentPool = extendedPools.filter((pl) => pl.id.toString() == final_poolId.toString())[0]; const percent = decreasePercent; // total percent of pool shares var tokenOutMins: Coin[] = [] @@ -1604,7 +1632,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var myLiquidity; if (currentPool.$typeUrl!.includes('concentratedliquidity')){ var clPositions; - if (poolId){ + if (tokenId){ try{ const clPositionsContainer = await this._provider.osmosis.concentratedliquidity.v1beta1.userPositions({ address: address, @@ -1615,13 +1643,14 @@ export class Osmosis extends CosmosBase implements Cosmosish{ countTotal: false, reverse: false, }, - poolId: poolId!.toString() + poolId: final_poolId.toString() }) clPositions = clPositionsContainer.positions } catch (error) { console.debug(error); } } + // if no clPositions then throws error here myLiquidity = new BigNumber(clPositions[0].position.liquidity || 0).multipliedBy(percent) .div(100) .toString(); @@ -1867,6 +1896,226 @@ export class Osmosis extends CosmosBase implements Cosmosish{ ); } + + + /** + * Returns all pool positions data including number of user's shares, or for single specified poolId + * + * @param token0 + * @param token1 + * @param address Wallet address + */ + async collectRewardsIncentives( + wallet: CosmosWallet, + address: string, + tokenId?: number, // we can collect only for CL here so we need to verify this is a positionID + feeTier_input?: string, + gasAdjustment_input?: number, + ): Promise { + + var feeTier = this.feeTier; + if (feeTier_input){ + feeTier = feeTier_input; + } + var gasAdjustment = this.gasPriceConstant; + if (gasAdjustment_input){ + gasAdjustment = gasAdjustment_input; + } + + try{ + const keyWallet = await DirectSecp256k1Wallet.fromKey(wallet.privkey, 'osmo') + this.signingClient = await this.osmosisGetSigningStargateClient(this.rpcUrl, keyWallet); + + // find out if this is CL or GAMM (positionId or poolId) + var final_positionId = undefined + var final_poolId = undefined + if (tokenId){ + //@ts-ignore + var allCLPositions; + try{ + const allCLPositionsContainer = await this._provider.osmosis.concentratedliquidity.v1beta1.positionById({ + address: address, // doesn't actually check the address + positionId: tokenId + }) + if (allCLPositionsContainer.position.position.address == address){ // is this our position? + final_positionId = tokenId + final_poolId = allCLPositionsContainer.position.position.poolId + } + } catch (error) { + console.debug(error); + } + } + + + if (final_positionId != undefined){ + const poolsContainer = await this._provider.osmosis.poolmanager.v1beta1.allPools({}); + const pools: ExtendedPool[] = poolsContainer.pools; + var callImperatorWithTokens = undefined + if (this.chain == 'testnet'){ + callImperatorWithTokens = this.tokenList; + } + const prices = await getImperatorPriceHash(callImperatorWithTokens); + + // filter for CL + const filteredPools = filterPoolsSwapAndLP(this.tokenList, pools, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset + const currentPool = filteredPools.filter((pl) => pl.id.toString() == final_poolId!.toString())[0]; + + var msgs = [] + var positionIds: string[] = [final_positionId.toString()] + const msg1 = collectSpreadRewards({ + // @ts-ignore: bad osmojs models + positionIds: positionIds, + sender: address, + }); + const msg2 = collectIncentives({ + // @ts-ignore: bad osmojs models + positionIds: positionIds, + sender: address, + }); + msgs.push(msg1) + msgs.push(msg2) + + var enumFee = FEES.osmosis.exitPool(feeTier); + var gasToUse = enumFee.gas; + const gasPrice = await this.getLatestBasePrice(); + try{ + const gasEstimation = await this.signingClient.simulate( + address, + msgs, + ); + gasToUse = gasEstimation; + } catch (error) { + console.debug(error); + } + const calcedFee = calculateFee( + Math.round(Number(gasToUse) * (gasAdjustment || 1.5)), + GasPrice.fromString(gasPrice.toString() + this.manualGasPriceToken) + ); + + var res: ReduceLiquidityTransactionResponse | any = await this.signingClient.signAndBroadcast(address, msgs, calcedFee); + this.signingClient.disconnect(); + + var finalBalancesReceived: CoinAndSymbol[] = []; + var collect_strings: string[] = ['180000uosmo,293400000000000000ibc/0CD3A0285E1341859B5E86B6AB7682F023D03E97607CCC1DC95706411D866DF7']; + //@ts-ignore + res.events.filter((evt)=>evt.type='total_collect_spread_rewards').forEach((evt)=>{evt.attributes.forEach((atr)=>{ + if (atr.key=='tokens_out'){ + collect_strings.push(atr.value) + }})}) + //@ts-ignore + res.events.filter((evt)=>evt.type='total_collect_incentives').forEach((evt)=>{evt.attributes.forEach((atr)=>{ + if (atr.key=='tokens_out'){ + collect_strings.push(atr.value) + }})}) + + + if (res?.code !== successfulTransaction){ + res.balances = []; + return res; + } + + try { + collect_strings.forEach((cstr)=>{ + if (cstr.includes(',')){ + var coins_string_list = cstr.split(','); + for (var coin_string_idx=0; coin_string_idx { + if (coin_string.includes(asset.token.denom)){ + var token = this.getTokenByBase(asset.token.denom); + var amount = (new BigNumber(coin_string.replace(asset.token.denom,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = asset.token.denom + } + finalBalancesReceived.push({base: asset.token.denom, amount:amount, symbol:symbol}) + } + }) + } else{ + if (coin_string.includes(currentPool.token0)){ + var token = this.getTokenByBase(currentPool.token0); + var amount = (new BigNumber(coin_string.replace(currentPool.token0,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = currentPool.token0 + } + finalBalancesReceived.push({base: currentPool.token0, amount:amount, symbol:symbol}) + } + if (coin_string.includes(currentPool.token1)){ + var token = this.getTokenByBase(currentPool.token1); + var amount = (new BigNumber(coin_string.replace(currentPool.token1,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = currentPool.token1 + } + finalBalancesReceived.push({base: currentPool.token1, amount:amount, symbol:symbol}) + } + } + } + }else{ + var coin_string = cstr; + if (currentPool.poolAssets){ + currentPool.poolAssets.forEach((asset) => { + if (coin_string.includes(asset.token.denom)){ + var token = this.getTokenByBase(asset.token.denom); + var amount = (new BigNumber(coin_string.replace(asset.token.denom,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = asset.token.denom + } + finalBalancesReceived.push({base: asset.token.denom, amount:amount, symbol:symbol}) + } + }) + } else{ + if (coin_string.includes(currentPool.token0)){ + var token = this.getTokenByBase(currentPool.token0); + var amount = (new BigNumber(coin_string.replace(currentPool.token0,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = currentPool.token0 + } + finalBalancesReceived.push({base: currentPool.token0, amount:amount, symbol:symbol}) + } + if (coin_string.includes(currentPool.token1)){ + var token = this.getTokenByBase(currentPool.token1); + var amount = (new BigNumber(coin_string.replace(currentPool.token1,''))).shiftedBy(token!.decimals * -1).decimalPlaces(token!.decimals).toString(); + var symbol = token!.symbol; + if (!symbol){ + symbol = currentPool.token1 + } + finalBalancesReceived.push({base: currentPool.token1, amount:amount, symbol:symbol}) + } + } + } + + }) + + + } catch (error) { + console.debug(error); + } + + res.balances = finalBalancesReceived; + res.gasPrice = gasPrice + return res; + + }} + catch (error) { + console.debug(error); + } + throw new HttpException( + 500, + TRADE_FAILED_ERROR_MESSAGE, + TRADE_FAILED_ERROR_CODE + ); + + } + + + + + /** * Returns all pools and their prices for 2 tokens. Address used for balance query. * @@ -1970,6 +2219,8 @@ export class Osmosis extends CosmosBase implements Cosmosish{ /** * Returns all pool positions data including number of user's shares, or for single specified poolId + * we can't currently find CL positions without the pos_id (or pool_id) + * only going to return CL positions now * * @param token0 * @param token1 @@ -1977,13 +2228,28 @@ export class Osmosis extends CosmosBase implements Cosmosish{ */ async findPoolsPositions( address: string, - poolId?: number, + tokenId?: number, ): Promise { - try { + // find out if this is CL or GAMM (positionId or poolId) + var final_poolId = undefined + if (tokenId){ + try{ + const allCLPositionsContainer = await this._provider.osmosis.concentratedliquidity.v1beta1.positionById({ + address: address, // doesn't actually check the address + positionId: tokenId + }) + if (allCLPositionsContainer.position.position.address == address){ // is this our position? + final_poolId = allCLPositionsContainer.position.position.poolId + } + } catch (error) { + console.debug(error); + } + } + try { var clPositions; - if (poolId){ + if (final_poolId){ try{ const clPositionsContainer = await this._provider.osmosis.concentratedliquidity.v1beta1.userPositions({ address: address, @@ -1994,7 +2260,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ countTotal: false, reverse: false, }, - poolId: poolId!.toString() + poolId: final_poolId.toString() }) clPositions = clPositionsContainer.positions } catch (error) { @@ -2032,7 +2298,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ const prices = await getImperatorPriceHash(callImperatorWithTokens); // filter for CL - const filteredPools = filterPoolsSwapAndLP(this.tokenList, pools, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset + const filteredPools = filterPoolsLP(this.tokenList, pools, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset const extendedPools = filteredPools.map((pool) => extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) @@ -2042,24 +2308,19 @@ export class Osmosis extends CosmosBase implements Cosmosish{ // however it's not returning that for CL pool positions (only GAMM).. so we can't match the pool address to anything here var returnPools: SerializableExtendedPool[] = []; extendedPools.forEach(function (cPool) { - if (poolId){ - if ((cPool.id && cPool.id.toString() == poolId.toString()) || (cPool.poolId && cPool.poolId.toString() == poolId.toString())){ - returnPools.push(new SerializableExtendedPool(cPool)); - } - }else{ - - if ((cPool.myLiquidity && cPool.myLiquidity != '0') || (cPool.bonded && cPool.bonded != '0')) - { + if ((cPool.myLiquidity && cPool.myLiquidity != '0') || (cPool.bonded && cPool.bonded != '0')) + { + returnPools.push(new SerializableExtendedPool(cPool)); + } + else if (tokenId){ + if ((cPool.id && cPool.id.toString() == tokenId.toString()) || (cPool.poolId && cPool.poolId.toString() == tokenId.toString())){ returnPools.push(new SerializableExtendedPool(cPool)); } } - }); - var returnObj: PositionInfo = {'pools':returnPools} - // if we're passed a poolId (tokenId), we used it to search for CLPositions // so (if we can) let's pretend we match the existing model and just return the first position for that poolId if (clPositions && clPositions.length > 0){ @@ -2072,23 +2333,21 @@ export class Osmosis extends CosmosBase implements Cosmosish{ returnObj.lowerPrice = clPosition.position.lowerTick.toString(); returnObj.upperPrice = clPosition.position.upperTick.toString(); returnObj.poolShares = clPosition.position.liquidity - + returnObj.unclaimedToken0 = '0' + returnObj.unclaimedToken1 = '0' const clPositionPool = extendedPools.find((pl) => pl.id.toString() === clPosition.position.poolId.toString()); returnObj.fee = clPositionPool?.fees7D.toString() } - else if (poolId && returnPools.length > 0){ // we got a poolId but it was for a GAMM pool - so yes poolShares - var firstPool: SerializableExtendedPool = returnPools[0]!; - - returnObj.token0 = firstPool.poolAssets![0].token.denom; - returnObj.token1 = firstPool.poolAssets![1].token.denom; - - returnObj.amount0 = firstPool.poolAssets![0].token.amount; - returnObj.amount1 = firstPool.poolAssets![1].token.amount; - - returnObj.fee = firstPool.fees_spent_7d.toString() - - returnObj.poolShares = firstPool.myLiquidityShares.toString() - } + // not returning GAMM positons here; problematic for strat + // else if (tokenId && returnPools.length > 0){ // we got a poolId but it was for a GAMM pool - so yes poolShares + // var firstPool: SerializableExtendedPool = returnPools[0]!; + // returnObj.token0 = firstPool.poolAssets![0].token.denom; + // returnObj.token1 = firstPool.poolAssets![1].token.denom; + // returnObj.amount0 = firstPool.poolAssets![0].token.amount; + // returnObj.amount1 = firstPool.poolAssets![1].token.amount; + // returnObj.fee = firstPool.fees_spent_7d.toString() + // returnObj.poolShares = firstPool.myLiquidityShares.toString() + // } return returnObj; diff --git a/src/chains/osmosis/osmosis.types.ts b/src/chains/osmosis/osmosis.types.ts index e41d430b7a..b94c72c122 100755 --- a/src/chains/osmosis/osmosis.types.ts +++ b/src/chains/osmosis/osmosis.types.ts @@ -215,6 +215,7 @@ export interface ReduceLiquidityTransactionResponse extends TransactionResponse gasPrice: number; } +// returned from transfer() export interface TransactionResponse { transactionHash: string; code: number; @@ -226,14 +227,66 @@ export interface TransactionResponse { rawLog: string; } + + +// poll() +export interface PollTxResponse { + code: number; + codespace: string; + data: string; + events: TransactionEvent[]; + gasUsed: string | bigint; + gasWanted: string | bigint; + height: string | bigint; + info: string; + rawLog: string; + timestamp: string; + txhash: string; +} + + +// export interface PollResponse { +// network: string; +// timestamp: number; +// currentBlock: number; +// txHash: string; +// txStatus: number; +// txBlock: number; +// txData: CustomTransactionResponse | null; +// txReceipt: CustomTransactionReceipt | null; +// } + +// export interface CustomTransactionResponse +// extends Omit< +// ethers.providers.TransactionResponse, +// 'gasPrice' | 'gasLimit' | 'value' +// > { +// gasPrice: string | null; +// gasLimit: string; +// value: string; +// } + +// export interface CustomTransactionReceipt +// extends Omit< +// ethers.providers.TransactionReceipt, +// 'gasUsed' | 'cumulativeGasUsed' | 'effectiveGasPrice' +// > { +// gasUsed: string; +// cumulativeGasUsed: string; +// effectiveGasPrice: string | null; +// status: string; +// } + + export interface AddPositionTransactionResponse extends TransactionResponse { rawLog: string; - poolId: number; + poolId: number; // this is GAMM only (sort of, we find it ourselves based on positonId for reducePosition()) poolAddress: string; token0_finalamount: string; token1_finalamount: string; poolshares: string; gasPrice: number; + positionId?: number; // this is CL only } export interface TransactionEvent { diff --git a/src/network/network.requests.ts b/src/network/network.requests.ts index 306057dae9..3289218fef 100644 --- a/src/network/network.requests.ts +++ b/src/network/network.requests.ts @@ -32,6 +32,7 @@ export interface PollResponse { txBlock: number; txData: CustomTransactionResponse | null; txReceipt: CustomTransactionReceipt | null; + tokenId?: number; // filling for cosmos because we don't have a standard txReceipt, so pulling this from controller } export interface StatusRequest { diff --git a/src/templates/osmosis.yml b/src/templates/osmosis.yml index 5094472c8e..cfb4b6e78f 100755 --- a/src/templates/osmosis.yml +++ b/src/templates/osmosis.yml @@ -15,7 +15,7 @@ nativeCurrencySymbol: OSMO feeTier: medium gasAdjustment: 1.7 gasLimitTransaction: 2000000 -allowedSlippage: 2% +allowedSlippage: "20/100" manualGasPrice: 0.025 manualGasPriceToken: uosmo diff --git a/test-bronze/chains/osmosis/osmosis.test.ts b/test-bronze/chains/osmosis/osmosis.test.ts index d3eba772d0..1cf5fe0d45 100755 --- a/test-bronze/chains/osmosis/osmosis.test.ts +++ b/test-bronze/chains/osmosis/osmosis.test.ts @@ -172,6 +172,7 @@ describe('controllers - price + trade', () => { }); +// we're not testing poll() since transactions seem to 404 after a week or so describe('controllers - CL Pools + Liquidity', () => { From 3db15530929f3cdc597c4e9635c9f4013355e43c Mon Sep 17 00:00:00 2001 From: chasevoorhees Date: Mon, 11 Mar 2024 20:22:45 -0700 Subject: [PATCH 33/35] Osmosis: Removed GAAM from poolPositions, fixed interactions with amm.lp strat --- src/chains/cosmos/cosmos-base.ts | 4 +- src/chains/osmosis/osmosis.controllers.ts | 9 ++- src/chains/osmosis/osmosis.ts | 84 ++++++++++++++-------- src/chains/osmosis/osmosis.types.ts | 2 +- src/chains/osmosis/osmosis.utils.ts | 23 +++++- test-bronze/chains/osmosis/osmosis.test.ts | 33 ++------- 6 files changed, 91 insertions(+), 64 deletions(-) diff --git a/src/chains/cosmos/cosmos-base.ts b/src/chains/cosmos/cosmos-base.ts index bf62f1616f..0b16e31c37 100644 --- a/src/chains/cosmos/cosmos-base.ts +++ b/src/chains/cosmos/cosmos-base.ts @@ -509,12 +509,12 @@ export class CosmosBase { public getAllowedSlippage(allowedSlippageStr?: string): number { if (allowedSlippageStr != null && isFractionString(allowedSlippageStr)) { const fractionSplit = allowedSlippageStr.split('/'); - return Number(fractionSplit[0]) / Number(fractionSplit[1]); + return 100 * (Number(fractionSplit[0]) / Number(fractionSplit[1])); } const allowedSlippage = RefConfig.config.allowedSlippage; const nd = allowedSlippage.match(percentRegexp); - if (nd) return Number(nd[1]) / Number(nd[2]); + if (nd) return 100 * (Number(nd[1]) / Number(nd[2])); throw new Error( 'Encountered a malformed percent string in the config for ALLOWED_SLIPPAGE.' ); diff --git a/src/chains/osmosis/osmosis.controllers.ts b/src/chains/osmosis/osmosis.controllers.ts index 07e3fe39eb..ab90642ae1 100755 --- a/src/chains/osmosis/osmosis.controllers.ts +++ b/src/chains/osmosis/osmosis.controllers.ts @@ -548,7 +548,7 @@ export class OsmosisController { latency: latency(startTimestamp, Date.now()), token0: req.token0, token1: req.token1, - prices: [priceAndPools.price], + prices: priceAndPools.prices, pools: priceAndPools.pools, //CosmosExtendedPool[]; }; } @@ -697,7 +697,10 @@ export class OsmosisController { } }) } - var tokenId = position_id ? position_id!=undefined : pool_id; + var tokenId = position_id; + if (position_id == undefined){ + tokenId = pool_id; + } var txStatus = unconfirmedTransaction; //@ts-ignore cosmojs models again @@ -712,7 +715,7 @@ export class OsmosisController { return { txStatus: txStatus, txReceipt: null, - tokenId: Number(tokenId ? tokenId != undefined : -1), + tokenId: Number(tokenId), txHash: req.txHash, currentBlock, //@ts-ignore cosmojs models again diff --git a/src/chains/osmosis/osmosis.ts b/src/chains/osmosis/osmosis.ts index 6e9317a4dd..c1a23d0f90 100755 --- a/src/chains/osmosis/osmosis.ts +++ b/src/chains/osmosis/osmosis.ts @@ -51,7 +51,7 @@ import { Pool as CLPool } from 'osmo-query/dist/codegen/osmosis/concentrated-liq import { TradeInfo } from './osmosis.controllers'; import { HttpException, TRADE_FAILED_ERROR_CODE, TRADE_FAILED_ERROR_MESSAGE, GAS_LIMIT_EXCEEDED_ERROR_MESSAGE, GAS_LIMIT_EXCEEDED_ERROR_CODE, AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_MESSAGE, AMOUNT_LESS_THAN_MIN_AMOUNT_ERROR_CODE } from '../../services/error-handler'; import { extendPool, filterPoolsSwap, filterPoolsLP, filterPoolsSwapAndLP } from './osmosis.lp.utils'; -import { fetchFees, findTickForPrice } from './osmosis.utils'; +import { fetchFees, findTickForPrice, tickToPrice } from './osmosis.utils'; import { getImperatorPriceHash } from './osmosis.prices'; import { GasPrice, calculateFee, setupIbcExtension, SigningStargateClient, AminoTypes } from '@cosmjs/stargate'; import { CosmWasmClient } from "@cosmjs/cosmwasm-stargate"; @@ -1148,12 +1148,13 @@ export class Osmosis extends CosmosBase implements Cosmosish{ var amount0 = req.amount0; var amount1 = req.amount1; - var slippage = 0; - if (req.allowedSlippage){ - slippage = this.getAllowedSlippage(req.allowedSlippage) - }else{ - slippage = this.getAllowedSlippage(this.allowedSlippage) - } + // set slippage for this to 100 because the pools are too unbalanced + var slippage = 100; + // if (req.allowedSlippage){ + // slippage = this.getAllowedSlippage(req.allowedSlippage) + // }else{ + // slippage = this.getAllowedSlippage(this.allowedSlippage) + // } var feeTier = this.feeTier; if (feeTier_input){ feeTier = feeTier_input; @@ -1347,19 +1348,20 @@ export class Osmosis extends CosmosBase implements Cosmosish{ .shiftedBy(this.getExponentByBase(token1.base)) .toString()}); - // var token0_bignumber = new BigNumber(amount0) - // var token1_bignumber = new BigNumber(amount1) + var token0_bignumber = new BigNumber(amount0) + var token1_bignumber = new BigNumber(amount1) var tokenMinAmount0; var tokenMinAmount1; - // if (slippage == 100){ - tokenMinAmount0 = '0'; - tokenMinAmount1 = '0'; - // }else{ - // tokenMinAmount0 = token0_bignumber.shiftedBy(this.getExponentByBase(token0.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) - // tokenMinAmount1 = token1_bignumber.shiftedBy(this.getExponentByBase(token1.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) - // } - const lowerTick = findTickForPrice(req.lowerPrice!, pool.exponentAtPriceOne, pool.tickSpacing, true) + if (slippage == 100){ + tokenMinAmount0 = '0'; + tokenMinAmount1 = '0'; + }else{ + tokenMinAmount0 = token0_bignumber.shiftedBy(this.getExponentByBase(token0.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) + tokenMinAmount1 = token1_bignumber.shiftedBy(this.getExponentByBase(token1.base)).multipliedBy(100-slippage).dividedBy(100).integerValue(BigNumber.ROUND_CEIL) + } + + const lowerTick = findTickForPrice(req.lowerPrice!, pool.exponentAtPriceOne, pool.tickSpacing, true) // pool.currentTick, const upperTick = findTickForPrice(req.upperPrice!, pool.exponentAtPriceOne, pool.tickSpacing, false) var tokenMinAmount0_final = tokenMinAmount0.toString() @@ -1528,7 +1530,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ TRADE_FAILED_ERROR_MESSAGE, TRADE_FAILED_ERROR_CODE ); -} + } /** * exchange pool liquidity shares for amounts of tokens from a pool @@ -1996,7 +1998,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ this.signingClient.disconnect(); var finalBalancesReceived: CoinAndSymbol[] = []; - var collect_strings: string[] = ['180000uosmo,293400000000000000ibc/0CD3A0285E1341859B5E86B6AB7682F023D03E97607CCC1DC95706411D866DF7']; + var collect_strings: string[] = []; //@ts-ignore res.events.filter((evt)=>evt.type='total_collect_spread_rewards').forEach((evt)=>{evt.attributes.forEach((atr)=>{ if (atr.key=='tokens_out'){ @@ -2163,12 +2165,15 @@ export class Osmosis extends CosmosBase implements Cosmosish{ const prices = await getImperatorPriceHash(callImperatorWithTokens); // filter for CL - const filteredPools = filterPoolsSwapAndLP(this.tokenList, pools, prices); // removes stableswap, !token.denom.startsWith('gamm/pool'), has price, has osmosisAsset - + const filteredPools = filterPoolsLP(this.tokenList, pools, prices); + const extendedPools = filteredPools.map((pool) => extendPool(this.tokenList, { pool, fees, balances, lockedCoins, prices:prices }) ); + const exponentToken0 = this.getExponentByBase(token0.base) + const exponentToken1 = this.getExponentByBase(token1.base) + var pricesOut: string[] = []; var returnPools: SerializableExtendedPool[] = []; extendedPools.forEach(function (cPool) { var foundToken0 = false; @@ -2197,11 +2202,12 @@ export class Osmosis extends CosmosBase implements Cosmosish{ if (foundToken0 && foundToken1){ returnPools.push(new SerializableExtendedPool(cPool)); + // @ts-ignore + pricesOut.push(tickToPrice(exponentToken0, exponentToken1, cPool.currentTick.toString(), cPool.exponentAtPriceOne.toString())) } }); - var price_out = new BigNumber(prices[token0.base]).dividedBy(new BigNumber(prices[token1.base])).toString() - var returnPriceAndPools = {'pools':returnPools, 'price':price_out} + var returnPriceAndPools = {'pools':returnPools, 'prices':pricesOut} return returnPriceAndPools; @@ -2232,7 +2238,7 @@ export class Osmosis extends CosmosBase implements Cosmosish{ ): Promise { // find out if this is CL or GAMM (positionId or poolId) - var final_poolId = undefined + var final_poolId = tokenId if (tokenId){ try{ const allCLPositionsContainer = await this._provider.osmosis.concentratedliquidity.v1beta1.positionById({ @@ -2312,8 +2318,8 @@ export class Osmosis extends CosmosBase implements Cosmosish{ { returnPools.push(new SerializableExtendedPool(cPool)); } - else if (tokenId){ - if ((cPool.id && cPool.id.toString() == tokenId.toString()) || (cPool.poolId && cPool.poolId.toString() == tokenId.toString())){ + else if (final_poolId){ + if ((cPool.id && cPool.id.toString() == final_poolId.toString()) || (cPool.poolId && cPool.poolId.toString() == final_poolId.toString())){ returnPools.push(new SerializableExtendedPool(cPool)); } } @@ -2325,6 +2331,26 @@ export class Osmosis extends CosmosBase implements Cosmosish{ // so (if we can) let's pretend we match the existing model and just return the first position for that poolId if (clPositions && clPositions.length > 0){ const clPosition = clPositions[0]; + var unclaimedToken0 = new BigNumber(0) + var unclaimedToken1 = new BigNumber(0) + clPosition.claimableIncentives.forEach((element: { amount: number; denom: string;}) => { + if (new BigNumber(element.amount).isGreaterThan(0)){ + if (element.denom == clPosition.asset0.denom){ + unclaimedToken0 = unclaimedToken0.plus(new BigNumber(element.amount)) + }else{ + unclaimedToken1 = unclaimedToken1.plus(new BigNumber(element.amount)) + } + } + }); + clPosition.claimableSpreadRewards.forEach((element: { amount: number; denom: string;}) => { + if (new BigNumber(element.amount).isGreaterThan(0)){ + if (element.denom == clPosition.asset0.denom){ + unclaimedToken0 = unclaimedToken0.plus(new BigNumber(element.amount)) + }else{ + unclaimedToken1 = unclaimedToken1.plus(new BigNumber(element.amount)) + } + } + }); returnObj.token0 = clPosition.asset0.denom; returnObj.token1 = clPosition.asset1.denom; @@ -2333,12 +2359,12 @@ export class Osmosis extends CosmosBase implements Cosmosish{ returnObj.lowerPrice = clPosition.position.lowerTick.toString(); returnObj.upperPrice = clPosition.position.upperTick.toString(); returnObj.poolShares = clPosition.position.liquidity - returnObj.unclaimedToken0 = '0' - returnObj.unclaimedToken1 = '0' + returnObj.unclaimedToken0 = unclaimedToken0.toString() + returnObj.unclaimedToken1 = unclaimedToken1.toString() const clPositionPool = extendedPools.find((pl) => pl.id.toString() === clPosition.position.poolId.toString()); returnObj.fee = clPositionPool?.fees7D.toString() } - // not returning GAMM positons here; problematic for strat + // not returning GAMM positons here; problematic for strat and apparently this is amm-liquidity route only // else if (tokenId && returnPools.length > 0){ // we got a poolId but it was for a GAMM pool - so yes poolShares // var firstPool: SerializableExtendedPool = returnPools[0]!; // returnObj.token0 = firstPool.poolAssets![0].token.denom; diff --git a/src/chains/osmosis/osmosis.types.ts b/src/chains/osmosis/osmosis.types.ts index b94c72c122..9a359e0ff2 100755 --- a/src/chains/osmosis/osmosis.types.ts +++ b/src/chains/osmosis/osmosis.types.ts @@ -300,7 +300,7 @@ export interface TransactionEventAttribute { export interface PriceAndSerializableExtendedPools{ pools: SerializableExtendedPool[]; - price: string; + prices: string[]; } export class SerializableExtendedPool { diff --git a/src/chains/osmosis/osmosis.utils.ts b/src/chains/osmosis/osmosis.utils.ts index cc90113471..b54d387d0a 100755 --- a/src/chains/osmosis/osmosis.utils.ts +++ b/src/chains/osmosis/osmosis.utils.ts @@ -39,6 +39,26 @@ export const fetchRewards = async (address: string): Promise => { .then((res) => res.json()); }; +export function tickToPrice(exponentToken0: number, exponentToken1: number, currentTickIn: string, exponentAtPriceOne: string): string { + const currentTick = new BigNumber(currentTickIn) + var exponent = new BigNumber(exponentAtPriceOne); // -6 + + var geoExponentIncrementTicks = new BigNumber(9).multipliedBy(new BigNumber(10).exponentiatedBy(exponent.multipliedBy(-1))) // 9e6 + var geoExponentDelta; + geoExponentDelta = currentTick.dividedBy(geoExponentIncrementTicks).integerValue(BigNumber.ROUND_FLOOR) + + var exponentAtCurrentTick = new BigNumber(exponentAtPriceOne).plus(geoExponentDelta) + var currentAddIncrementTicks = new BigNumber(10).exponentiatedBy(exponentAtCurrentTick) // 10e-6 + + var numAdditiveTicks = currentTick.minus((geoExponentDelta.multipliedBy(geoExponentIncrementTicks))) + + var price = new BigNumber(10).exponentiatedBy(geoExponentDelta).plus((numAdditiveTicks.multipliedBy(currentAddIncrementTicks))) + + price = price.dividedBy((new BigNumber(10).exponentiatedBy(exponentToken1)).dividedBy((new BigNumber(10).exponentiatedBy(exponentToken0)))) + + return price.toString() +} + export function findTickForPrice(desiredPriceString: string, exponentAtPriceOne: number, tickSpacing: number, is_lowerBound: boolean): string{ var desiredPrice = new BigNumber(desiredPriceString) var exponent = new BigNumber(exponentAtPriceOne); // -6 @@ -62,7 +82,7 @@ export function findTickForPrice(desiredPriceString: string, exponentAtPriceOne: var ticksToBeFulfilledByExponentAtCurrentTick = (desiredPrice.minus(totalPrice)).dividedBy(currentAddIncrementTicks) var tickIndex = ticksPassed.plus(ticksToBeFulfilledByExponentAtCurrentTick) - + var returnTick if (is_lowerBound){ returnTick = tickIndex.dividedBy(tickSpacing).integerValue(BigNumber.ROUND_DOWN).multipliedBy(tickSpacing) @@ -70,7 +90,6 @@ export function findTickForPrice(desiredPriceString: string, exponentAtPriceOne: else{ returnTick = tickIndex.dividedBy(tickSpacing).integerValue(BigNumber.ROUND_CEIL).multipliedBy(tickSpacing) } - return returnTick.toString() } diff --git a/test-bronze/chains/osmosis/osmosis.test.ts b/test-bronze/chains/osmosis/osmosis.test.ts index 1cf5fe0d45..d9d5f1d0f0 100755 --- a/test-bronze/chains/osmosis/osmosis.test.ts +++ b/test-bronze/chains/osmosis/osmosis.test.ts @@ -152,19 +152,19 @@ describe('controllers - price + trade', () => { it('price', async () => { // slippage must be high on testnet due to price mismatch with pool ratios - const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':network}; + const priceRequest1 = {'quote':'ION', 'base':'OSMO', 'amount':'1', 'side':'BUY' as Side, 'allowedSlippage':'100/100', 'chain':'osmosis', 'network':network}; const priceResponse1 = await osmosis.controller.price(osmosis, priceRequest1) expect(priceResponse1.base).toEqual('OSMO') }); it('trade', async () => { - const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; + const tradeRequest = {'quote':'ION', 'base':'OSMO', 'amount':'0.01', 'side':'BUY' as Side, 'allowedSlippage':'100/100', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) expect(tradeResponse.base).toEqual('uosmo') }); it('trade back', async () => { - const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':'100%', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; + const tradeRequest = {'quote':'OSMO', 'base':'ION', 'amount':'0.00001', 'side':'BUY' as Side, 'allowedSlippage':'100/100', 'chain':'osmosis', 'network':network, 'address':osmosisAddress, }; const tradeResponse = await osmosis.controller.trade(osmosis, tradeRequest) expect(tradeResponse.base).toEqual('uion') }); @@ -188,33 +188,12 @@ describe('controllers - CL Pools + Liquidity', () => { var poolIdCL: number; it('addLiquidity CL', async () => { - const addLiquidityRequestFunction = {'allowedSlippage':'100%', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.000401', 'amount1':'0.1', 'chain':'osmosis', 'network':network, 'address':osmosisAddress}; + const addLiquidityRequestFunction = {'allowedSlippage':'100/100', 'lowerPrice':'100', 'upperPrice':'500', 'fee': 'high', 'token0':'ION', 'token1':'OSMO', 'amount0':'0.000401', 'amount1':'0.1', 'chain':'osmosis', 'network':network, 'address':osmosisAddress}; var addLiquidityResponse = await osmosis.controller.addLiquidity(osmosis, addLiquidityRequestFunction) poolIdCL = addLiquidityResponse.tokenId; expect(addLiquidityResponse.tokenId).toBeDefined(); }); - it('positionsRequest ALL in Cosmos pool format', async () => { - const positionsRequest1 = { - chain:'osmosis', - network:network, - address: osmosisAddress, - } - var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) - expect(positionsResponse1.pools!.length).toBeGreaterThan(0) - }); - - it('positionsRequest GAMM', async () => { - const positionsRequest1 = { - chain:'osmosis', - network:network, - address: osmosisAddress, - tokenId: poolIdGAMM // GAMM - } - var positionsResponse1 = await osmosis.controller.poolPositions(osmosis, positionsRequest1) - expect(positionsResponse1.pools!.length).toBeGreaterThan(0) - }); - it('positionsRequest CL', async () => { const positionsRequest1 = { chain:'osmosis', @@ -227,13 +206,13 @@ describe('controllers - CL Pools + Liquidity', () => { }); it('removeLiquidity GAMM', async () => { - const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdGAMM, 'chain':'osmosis', 'network':network, 'address':osmosisAddress, 'allowedSlippage':'100%'}; + const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdGAMM, 'chain':'osmosis', 'network':network, 'address':osmosisAddress, 'allowedSlippage':'100/100'}; var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) expect(removeLiquidityResponse.txHash).toBeDefined(); }); it('removeLiquidity CL', async () => { - const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdCL, 'chain':'osmosis', 'network':network, 'address':osmosisAddress, 'allowedSlippage':'100%'}; + const removeLiquidityRequest = {'decreasePercent':100, 'tokenId':poolIdCL, 'chain':'osmosis', 'network':network, 'address':osmosisAddress, 'allowedSlippage':'100/100'}; var removeLiquidityResponse = await osmosis.controller.removeLiquidity(osmosis, removeLiquidityRequest) expect(removeLiquidityResponse.txHash).toBeDefined(); }); From 69c4c5028720ac7c76e91d2a8987d50da0bb2ef3 Mon Sep 17 00:00:00 2001 From: nikspz <83953535+nikspz@users.noreply.github.com> Date: Wed, 20 Mar 2024 20:50:28 +0700 Subject: [PATCH 34/35] fix-update-gw-version-to-1.26.0 --- src/app.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.ts b/src/app.ts index 78d25640ee..8266e1d4cd 100644 --- a/src/app.ts +++ b/src/app.ts @@ -112,7 +112,7 @@ export const startSwagger = async () => { export const startGateway = async () => { const port = ConfigManagerV2.getInstance().get('server.port'); - const gateway_version="dev-1.26.0"; // gateway version + const gateway_version="1.26.0"; // gateway version if (!ConfigManagerV2.getInstance().get('server.id')) { ConfigManagerV2.getInstance().set( 'server.id', From a6a5c41e3c12eca6f0ef3a53e646698fb4498d4d Mon Sep 17 00:00:00 2001 From: nikspz <83953535+nikspz@users.noreply.github.com> Date: Wed, 20 Mar 2024 20:51:08 +0700 Subject: [PATCH 35/35] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index da9ebfce7b..40028efb8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hummingbot-gateway", - "version": "dev-1.26.0", + "version": "1.26.0", "description": "Middleware that helps Hummingbot clients access standardized DEX API endpoints on different blockchain networks", "main": "index.js", "license": "Apache-2.0",