diff --git a/.gitbook/building-dapps/configuring-nuxt.md b/.gitbook/building-dapps/configuring-nuxt.md index 4bd927422..fe0c895a7 100644 --- a/.gitbook/building-dapps/configuring-nuxt.md +++ b/.gitbook/building-dapps/configuring-nuxt.md @@ -30,8 +30,7 @@ $ yarn add @bangjelkoski/node-stdlib-browser $ yarn add -D @bangjelkoski/vite-plugin-node-polyfills ``` -Make sure you are using the `vue-tsc@1.8.8 -`, `nuxt@^3.8.1`, `typescript@^5.0.4` versions. +Make sure you are using the `vue-tsc@1.8.8` , `nuxt@^3.8.1`, `typescript@^5.0.4` versions. **Buffer** @@ -134,15 +133,10 @@ export default defineNuxtConfig({ // Vite related config vite: { - define: { - "process.env": JSON.stringify({}), - "process.env.DEBUG": JSON.stringify(process.env.DEBUG), - }, - plugins: [ // setting up node + crypto polyfils + vite TS path resolution tsconfigPaths(), nodePolyfills({ protocolImports: false }) - ], + ], build: { sourcemap: false, // we don't generate diff --git a/.gitbook/core-modules/auction.md b/.gitbook/core-modules/auction.md index 965e3c02a..4d53b918d 100644 --- a/.gitbook/core-modules/auction.md +++ b/.gitbook/core-modules/auction.md @@ -71,8 +71,8 @@ How to find the subaccountId that you will be transferring from: How to use funds that are currently associated with your Injective Address in bank module: -* If you have existing non-default subaccounts, you'll want to do a [MsgDeposit](broken-reference) to one of your existing non-default subaccountIds and use that subaccountId as the `srcSubaccountId` below. -* If you don't have existing non-default subaccounts, you can do a [MsgDeposit](broken-reference) to a new default subaccountId, which would be done via importing `getSubaccountId` from `sdk-ts` and setting the `subaccountId` field in [MsgDeposit](broken-reference) to `getSubaccountId(injectiveAddress, 1)`. +* If you have existing non-default subaccounts, you'll want to do a[ MsgDeposit ](exchange.md#msgdeposit)to one of your existing non-default subaccountIds and use that subaccountId as the `srcSubaccountId` below. +* If you don't have existing non-default subaccounts, you can do a [MsgDeposit](exchange.md#msgdeposit) to a new default subaccountId, which would be done via importing `getSubaccountId` from `sdk-ts` and setting the `subaccountId` field in [MsgDeposit](exchange.md#msgdeposit) to `getSubaccountId(injectiveAddress, 1)`. For more info, check out the [burn auction pool docs](https://docs.injective.network/develop/tech-concepts/auction\_pool/). diff --git a/.gitbook/core-modules/token-factory.md b/.gitbook/core-modules/token-factory.md index db25b4c88..02276ee99 100644 --- a/.gitbook/core-modules/token-factory.md +++ b/.gitbook/core-modules/token-factory.md @@ -31,6 +31,8 @@ const subdenom = "inj-test"; const msg = MsgCreateDenom.fromJSON({ subdenom, + symbol: 'InjTest', + name: 'Inj Testing', sender: injectiveAddress, }); diff --git a/.gitbook/readme/token-metadata/README.md b/.gitbook/readme/token-metadata/README.md index ff9b6e507..94e872e0f 100644 --- a/.gitbook/readme/token-metadata/README.md +++ b/.gitbook/readme/token-metadata/README.md @@ -56,7 +56,8 @@ There are other ways to define a token metadata for a denom on Injective and we' Verifying your token's metadata can be done in a couple of ways. Here are the verification levels and what they mean: -* **Verified** -> Your asset metadata has been added to the `@injectivelabs/token-metadata` package. You can find a tutorial on how to add your token's metadata to the package [here](../../../packages/token-metadata/CONTRIBUTING.md). +* **Verified** -> Your asset metadata has been **submitted and verified** to the `@injectivelabs/token-metadata` package. You can find a tutorial on how to add your token's metadata to the package [here](../../../packages/token-metadata/CONTRIBUTING.md). +* **Submitted** -> Your asset metadata has been **submitted** to the `@injectivelabs/token-metadata` package. You can find a tutorial on how to add your token's metadata to the package [here](../../../packages/token-metadata/CONTRIBUTING.md). * **Internal** -> Your asset's metadata has been verified on-chain using the `MsgSetDenomMetadata` message, as explained [here](https://docs.ts.injective.network/core-modules/token-factory#msgsetdenommetadata). * **External** -> Your asset's metadata has been verified on some external source like from Ethereum's contract details, etc. * **Unverified** -> Your asset's metadata has not been provided anywhere. diff --git a/.gitbook/transactions/transactions-cosmos/README.md b/.gitbook/transactions/transactions-cosmos/README.md index 1d7a2fad8..6b3ed8e70 100644 --- a/.gitbook/transactions/transactions-cosmos/README.md +++ b/.gitbook/transactions/transactions-cosmos/README.md @@ -16,63 +16,60 @@ Getting a private key from cosmos wallets is usually done by taking the current import { MsgSend, BaseAccount, - DEFAULT_STD_FEE, ChainRestAuthApi, createTransaction, ChainRestTendermintApi, -} from '@injectivelabs/sdk-ts' -import { - DEFAULT_STD_FEE, - DEFAULT_BLOCK_TIMEOUT_HEIGHT, -} from '@injectivelabs/utils' -import { ChainId } from '@injectivelabs/ts-types' -import { Network, getNetworkEndpoints } from '@injectivelabs/networks' - -const injectiveAddress = 'inj1' -const chainId = 'injective-1' /* ChainId.Mainnet */ -const restEndpoint = - 'https://lcd.injective.network' /* getNetworkEndpoints(Network.Mainnet).rest */ -const amount = { - amount: new BigNumberInBase(0.01).toWei().toFixed(), - denom: 'inj', -} +} from "@injectivelabs/sdk-ts"; +import { BigNumberInBase } from "@injectivelabs/utils"; +import { getStdFee, DEFAULT_BLOCK_TIMEOUT_HEIGHT } from "@injectivelabs/utils"; + +(async () => { + const injectiveAddress = "inj1"; + const chainId = "injective-1"; /* ChainId.Mainnet */ + const restEndpoint = + "https://sentry.lcd.injective.network"; /* getNetworkEndpoints(Network.MainnetSentry).rest */ + const amount = { + amount: new BigNumberInBase(0.01).toWei().toFixed(), + denom: "inj", + }; + + /** Account Details **/ + const chainRestAuthApi = new ChainRestAuthApi(restEndpoint); + const accountDetailsResponse = await chainRestAuthApi.fetchAccount( + injectiveAddress + ); + const baseAccount = BaseAccount.fromRestApi(accountDetailsResponse); + + /** Block Details */ + const chainRestTendermintApi = new ChainRestTendermintApi(restEndpoint); + const latestBlock = await chainRestTendermintApi.fetchLatestBlock(); + const latestHeight = latestBlock.header.height; + const timeoutHeight = new BigNumberInBase(latestHeight).plus( + DEFAULT_BLOCK_TIMEOUT_HEIGHT + ); + + /** Preparing the transaction */ + const msg = MsgSend.fromJSON({ + amount, + srcInjectiveAddress: injectiveAddress, + dstInjectiveAddress: injectiveAddress, + }); + + /** Get the PubKey of the Signer from the Wallet/Private Key */ + const pubKey = await getPubKey(); + + /** Prepare the Transaction **/ + const { txRaw, signDoc } = createTransaction({ + pubKey, + chainId, + fee: getStdFee({}), + message: msg, + sequence: baseAccount.sequence, + timeoutHeight: timeoutHeight.toNumber(), + accountNumber: baseAccount.accountNumber, + }); +})(); -/** Account Details **/ -const chainRestAuthApi = new ChainRestAuthApi(restEndpoint) -const accountDetailsResponse = await chainRestAuthApi.fetchAccount( - injectiveAddress, -) -const baseAccount = BaseAccount.fromRestApi(accountDetailsResponse) -const accountDetails = baseAccount.toAccountDetails() - -/** Block Details */ -const chainRestTendermintApi = new ChainRestTendermintApi(restEndpoint) -const latestBlock = await chainRestTendermintApi.fetchLatestBlock() -const latestHeight = latestBlock.header.height -const timeoutHeight = new BigNumberInBase(latestHeight).plus( - DEFAULT_BLOCK_TIMEOUT_HEIGHT, -) - -/** Preparing the transaction */ -const msg = MsgSend.fromJSON({ - amount, - srcInjectiveAddress: injectiveAddress, - dstInjectiveAddress: injectiveAddress, -}) - -/** Get the PubKey of the Signer from the Wallet/Private Key */ -const pubKey = await getPubKey() - -/** Prepare the Transaction **/ -const { txRaw, signDoc } = createTransaction({ - pubKey, - chainId, - fee: DEFAULT_STD_FEE, - message: msgs, - sequence: baseAccount.sequence, - timeoutHeight: timeoutHeight.toNumber(), - accountNumber: baseAccount.accountNumber, -}) ``` ### Signing a transaction @@ -81,8 +78,9 @@ Once we have prepared the transaction, we proceed to signing. Once you get the ` ```ts import { ChainId } from '@injectivelabs/ts-types' +import { SignDoc } from '@keplr-wallet/types' -const getKeplr = async (chainId) => { +const getKeplr = async (chainId: string) => { await window.keplr.enable(chainId); const offlineSigner = window.keplr.getOfflineSigner(chainId); @@ -92,29 +90,30 @@ const getKeplr = async (chainId) => { return { offlineSigner, accounts, key } } -const { offlineSigner, accounts, key } = await getKeplr(ChainId.Mainnet) +const { offlineSigner } = await getKeplr(ChainId.Mainnet) /* Sign the Transaction */ -const address = 'inj1' +const address = 'inj1...' const signDoc = /* From the previous step */ -const directSignResponse = await offlineSigner.signDirect(address, signDoc) +const directSignResponse = await offlineSigner.signDirect(address, signDoc as SignDoc) ``` -You can also use our `@injectivelabs/wallet-ts` package to get out-of-the-box wallet provides that will give you abstracted methods which you can use to sign transaction. Refer to the documentation of the package, its really simple to setup and use. **This is the recommended way as you have access to more than one wallet to use in your dApp. The `WalletStrategy` provides more than just signing transaction abstractions.** +You can also use our `@injectivelabs/wallet-ts` package to get out-of-the-box wallet provides that will give you abstracted methods that you can use to sign transactions. Refer to the documentation of the package, its straightforward to setup and use. **This is the recommended way as you have access to more than one wallet to use in your dApp. The `WalletStrategy` provides more than just signing transaction abstractions.** ### Broadcasting a transaction -Once we have the signature ready, we need to broadcast the transaction to the Injective chain itself. After getting the signature from the second step, we need to include that signature in the signed transaction and broadcast it to the chain. +Once we have the signature ready, we need to broadcast the transaction to the Injective chain itself. After getting the signature from the second step, we need to include it in the signed transaction and broadcast it to the chain. ```ts import { ChainId } from '@injectivelabs/ts-types' import { - BroadcastModeKeplr, + TxRestClient, CosmosTxV1Beta1Tx, + BroadcastModeKeplr, getTxRawFromTxRawOrDirectSignResponse, - TxRestClient + TxRaw, } from '@injectivelabs/sdk-ts' -import { Network, getNetworkEndpoints } from '@injectivelabs/networks' +import { TransactionException } from '@injectivelabs/exceptions' /** * IMPORTANT NOTE: @@ -128,11 +127,11 @@ import { Network, getNetworkEndpoints } from '@injectivelabs/networks' * transaction (i.e change gas limit or gas prices) and the transaction * that get's signed and the one that gets broadcasted are not the same. */ -const directSignResponse = /* From the second step above */ +const directSignResponse = /* From the second step above */; const txRaw = getTxRawFromTxRawOrDirectSignResponse(directSignResponse) -const broadcastTx = async (chainId, txRaw) => { - const getKeplr = async (chainId) => { +const broadcastTx = async (chainId: String, txRaw: TxRaw) => { + const getKeplr = async (chainId: string) => { await window.keplr.enable(chainId); return window.keplr @@ -163,7 +162,7 @@ const txHash = await broadcastTx(ChainId.Mainnet, txRaw) * it can happen that it's still in the mempool so we need to query * the chain to see when the transaction will be included */ -const restEndpoint = 'https://lcd.injective.network' /* getNetworkEndpoints(Network.Mainnet).rest */ +const restEndpoint = 'https://sentry.lcd.injective.network' /* getNetworkEndpoints(Network.MainnetSentry).rest */ const txRestClient = new TxRestClient(restEndpoint) /** This will poll querying the transaction and await for it's inclusion in the block */ @@ -176,102 +175,106 @@ Let's have a look at the whole flow (using Keplr as a signing wallet) ```ts import { + TxRaw, MsgSend, BaseAccount, - DEFAULT_STD_FEE, + TxRestClient, ChainRestAuthApi, createTransaction, CosmosTxV1Beta1Tx, BroadcastModeKeplr, ChainRestTendermintApi, -} from '@injectivelabs/sdk-ts' -import { - DEFAULT_STD_FEE, - DEFAULT_BLOCK_TIMEOUT_HEIGHT, -} from '@injectivelabs/utils' -import { ChainId } from '@injectivelabs/ts-types' -import { Network, getNetworkEndpoints } from '@injectivelabs/networks' - -const getKeplr = async (chainId) => { - await window.keplr.enable(chainId) + getTxRawFromTxRawOrDirectSignResponse, +} from "@injectivelabs/sdk-ts"; +import { getStdFee, DEFAULT_BLOCK_TIMEOUT_HEIGHT } from "@injectivelabs/utils"; +import { ChainId } from "@injectivelabs/ts-types"; +import { BigNumberInBase } from "@injectivelabs/utils"; +import { TransactionException } from "@injectivelabs/exceptions"; +import { SignDoc } from "@keplr-wallet/types"; + +const getKeplr = async (chainId: string) => { + await window.keplr.enable(chainId); - const offlineSigner = window.keplr.getOfflineSigner(chainId) - const accounts = await offlineSigner.getAccounts() - const key = await window.keplr.getKey(chainId) + const offlineSigner = window.keplr.getOfflineSigner(chainId); + const accounts = await offlineSigner.getAccounts(); + const key = await window.keplr.getKey(chainId); - return { offlineSigner, accounts, key } -} + return { offlineSigner, accounts, key }; +}; -const broadcastTx = async (chainId, txRaw) => { - const keplr = await getKeplr(ChainId.Mainnet) +const broadcastTx = async (chainId: string, txRaw: TxRaw) => { + const keplr = await getKeplr(ChainId.Mainnet); const result = await keplr.sendTx( chainId, CosmosTxV1Beta1Tx.TxRaw.encode(txRaw).finish(), - BroadcastModeKeplr.Sync, - ) + BroadcastModeKeplr.Sync + ); if (!result || result.length === 0) { throw new TransactionException( - new Error('Transaction failed to be broadcasted'), - { contextModule: 'Keplr' }, - ) + new Error("Transaction failed to be broadcasted"), + { contextModule: "Keplr" } + ); } - return Buffer.from(result).toString('hex') -} - -const chainId = 'injective-1' /* ChainId.Mainnet */ -const { key } = await getKeplr(chainId) -const pubKey = Buffer.from(key.pubKey).toString('base64') -const injectiveAddress = key.bech32Address -const restEndpoint = - 'https://lcd.injective.network' /* getNetworkEndpoints(Network.Mainnet).rest */ -const amount = { - amount: new BigNumberInBase(0.01).toWei().toFixed(), - denom: 'inj', -} - -/** Account Details **/ -const chainRestAuthApi = new ChainRestAuthApi(restEndpoint) -const accountDetailsResponse = await chainRestAuthApi.fetchAccount( - injectiveAddress, -) -const baseAccount = BaseAccount.fromRestApi(accountDetailsResponse) -const accountDetails = baseAccount.toAccountDetails() - -/** Block Details */ -const chainRestTendermintApi = new ChainRestTendermintApi(restEndpoint) -const latestBlock = await chainRestTendermintApi.fetchLatestBlock() -const latestHeight = latestBlock.header.height -const timeoutHeight = new BigNumberInBase(latestHeight).plus( - DEFAULT_BLOCK_TIMEOUT_HEIGHT, -) - -/** Preparing the transaction */ -const msg = MsgSend.fromJSON({ - amount, - srcInjectiveAddress: injectiveAddress, - dstInjectiveAddress: injectiveAddress, -}) - -/** Prepare the Transaction **/ -const { txRaw, signDoc } = createTransaction({ - pubKey, - chainId, - fee: DEFAULT_STD_FEE, - message: msgs, - sequence: baseAccount.sequence, - timeoutHeight: timeoutHeight.toNumber(), - accountNumber: baseAccount.accountNumber, -}) - -const directSignResponse = await offlineSigner.signDirect( - injectiveAddress, - signDoc, -) -const txRaw = getTxRawFromTxRawOrDirectSignResponse(directSignResponse) -const txHash = await broadcastTx(ChainId.Mainnet, txRaw) -const response = await new TxRestClient(restEndpoint).fetchTxPoll(txHash) + return Buffer.from(result).toString("hex"); +}; + +(async () => { + const chainId = "injective-1"; /* ChainId.Mainnet */ + const { key, offlineSigner } = await getKeplr(chainId); + const pubKey = Buffer.from(key.pubKey).toString("base64"); + const injectiveAddress = key.bech32Address; + const restEndpoint = + "https://sentry.lcd.injective.network"; /* getNetworkEndpoints(Network.MainnetSentry).rest */ + const amount = { + amount: new BigNumberInBase(0.01).toWei().toFixed(), + denom: "inj", + }; + + /** Account Details **/ + const chainRestAuthApi = new ChainRestAuthApi(restEndpoint); + const accountDetailsResponse = await chainRestAuthApi.fetchAccount( + injectiveAddress + ); + const baseAccount = BaseAccount.fromRestApi(accountDetailsResponse); + + /** Block Details */ + const chainRestTendermintApi = new ChainRestTendermintApi(restEndpoint); + const latestBlock = await chainRestTendermintApi.fetchLatestBlock(); + const latestHeight = latestBlock.header.height; + const timeoutHeight = new BigNumberInBase(latestHeight).plus( + DEFAULT_BLOCK_TIMEOUT_HEIGHT + ); + + /** Preparing the transaction */ + const msg = MsgSend.fromJSON({ + amount, + srcInjectiveAddress: injectiveAddress, + dstInjectiveAddress: injectiveAddress, + }); + + /** Prepare the Transaction **/ + const { signDoc } = createTransaction({ + pubKey, + chainId, + fee: getStdFee({}), + message: msg, + sequence: baseAccount.sequence, + timeoutHeight: timeoutHeight.toNumber(), + accountNumber: baseAccount.accountNumber, + }); + + const directSignResponse = await offlineSigner.signDirect( + injectiveAddress, + signDoc as SignDoc + ); + const txRaw = getTxRawFromTxRawOrDirectSignResponse(directSignResponse); + const txHash = await broadcastTx(ChainId.Mainnet, txRaw); + const response = await new TxRestClient(restEndpoint).fetchTxPoll(txHash); + + console.log(response); +})(); ``` ### Example with WalletStrategy (Prepare + Sign + Broadcast) diff --git a/.gitbook/wallet/wallet-wallet-strategy.md b/.gitbook/wallet/wallet-wallet-strategy.md index 5879dad39..c665ae10e 100644 --- a/.gitbook/wallet/wallet-wallet-strategy.md +++ b/.gitbook/wallet/wallet-wallet-strategy.md @@ -51,7 +51,8 @@ _Note:_ When we wanna use the `sendTransaction` on Ethereum native wallets along ```ts import { WalletStrategy } from '@injectivelabs/wallet-ts' import { EthereumChainId, ChainId } from '@injectivelabs/ts-types' -import { CHAIN_ID, ETHEREUM_CHAIN_ID, IS_TESTNET } from '~/app/utils/constants' +import { TxRaw } from '@injectivelabs/sdk-ts' +import { Web3Exception } from '@injectivelabs/exceptions' export const alchemyRpcEndpoint = `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_KEY}` @@ -68,7 +69,7 @@ export const getAddresses = async (): Promise => { const addresses = await walletStrategy.getAddresses() if (addresses.length === 0) { - throw new Web3Exception('There are no addresses linked in this wallet.') + throw new Web3Exception(new Error('There are no addresses linked in this wallet.')) } return addresses @@ -77,17 +78,17 @@ export const getAddresses = async (): Promise => { // Sign an Injective transaction export const signTransaction = async (tx: TxRaw): Promise => { const response = await walletStrategy.signCosmosTransaction( - transaction: { txRaw: tx; accountNumber: /* */; chainId: 'injective-1' }, - address: 'inj1...', + /*transaction:*/ { txRaw: tx, accountNumber: /* */, chainId: 'injective-1' }, + /*address: */ 'inj1...', ) return response } // Send an Injective transaction -export const signTransaction = async (tx: TxRaw): Promise => { +export const sendTransaction = async (tx: TxRaw): Promise => { const response = await walletStrategy.sendTransaction( - txRaw, + tx, // `sentryEndpoint` needed if Ethereum wallets are used {address: 'inj1...', chainId: 'injective-1', sentryEndpoint: 'https://grpc.injective.network' } ) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 25d3fa81b..d986c9065 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -40,10 +40,6 @@ jobs: env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: 'Commit ibcTokenMetadata.json if changed' - run: | - git diff --exit-code -- packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json || (git add packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json && git commit -m "Automatically update ibcTokenMetadata.json") - - name: Version and publish env: GH_TOKEN: ${{ secrets.GH_TOKEN }} diff --git a/.github/workflows/dev.yaml b/.github/workflows/dev.yaml index 2e1a6d374..602e1117a 100644 --- a/.github/workflows/dev.yaml +++ b/.github/workflows/dev.yaml @@ -10,8 +10,10 @@ jobs: if: true runs-on: ubuntu-latest + permissions: write-all + steps: - - name: 'Checkout' # Download code from the repository + - name: Checkout # Download code from the repository uses: actions/checkout@v2 # Public action with: fetch-depth: 0 # Checkout all branches and tags @@ -21,7 +23,7 @@ jobs: with: node-version: '16.18.1' - - name: 'Setup lerna@6.6.1' + - name: Setup lerna@6.6.1 run: yarn global add lerna@6.6.1 --ignore-engines - name: Set up Git user @@ -31,27 +33,36 @@ jobs: - name: Build dependencies run: | + lerna clean --yes node etc/bootstrapEnv yarn install --ignore-engines yarn build - - name: 'Setup npm' - run: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc + - name: Setup npm + run: | + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc + npm whoami env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Get IBC Tokens + run: yarn --cwd packages/sdk-ui-ts get-ibc-tokens || true + - name: 'Commit ibcTokenMetadata.json if changed' run: | git diff --exit-code -- packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json || (git add packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json && git commit -m "Automatically update ibcTokenMetadata.json") - name: Version and publish - env: - GH_TOKEN: ${{ secrets.GH_TOKEN }} run: | lerna version prerelease --preid beta --force-git-tag --no-changelog --yes lerna publish from-git --force-git-tag --dist-tag next --yes --summary-file - - name: 'Broadcast published versions on Slack' + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + + - name: Broadcast published versions on Slack run: node etc/slack --api=$SLACK_API --actor=$GIT_ACTOR --commit-message=$GIT_LATEST_COMMIT_MESSAGE env: GIT_ACTOR: ${{ github.actor }} diff --git a/.github/workflows/stable.yaml b/.github/workflows/stable.yaml index 67668630e..2c49f5461 100644 --- a/.github/workflows/stable.yaml +++ b/.github/workflows/stable.yaml @@ -40,10 +40,6 @@ jobs: env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: 'Commit ibcTokenMetadata.json if changed' - run: | - git diff --exit-code -- packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json || (git add packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json && git commit -m "Automatically update ibcTokenMetadata.json") - - name: Version and publish env: GH_TOKEN: ${{ secrets.GH_TOKEN }} diff --git a/packages/bridge-ts/CHANGELOG.md b/packages/bridge-ts/CHANGELOG.md index d1ccb328a..8dc664a2c 100644 --- a/packages/bridge-ts/CHANGELOG.md +++ b/packages/bridge-ts/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.4-beta.3...@injectivelabs/bridge-ts@1.14.4) (2023-11-20) +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.8...@injectivelabs/bridge-ts@1.14.10) (2024-03-03) **Note:** Version bump only for package @injectivelabs/bridge-ts @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.3-beta.23...@injectivelabs/bridge-ts@1.14.3) (2023-11-17) +## [1.14.8](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.7...@injectivelabs/bridge-ts@1.14.8) (2024-03-03) **Note:** Version bump only for package @injectivelabs/bridge-ts @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.2-beta.13...@injectivelabs/bridge-ts@1.14.2) (2023-11-07) +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.7-beta.2...@injectivelabs/bridge-ts@1.14.7) (2024-03-03) **Note:** Version bump only for package @injectivelabs/bridge-ts @@ -27,13 +27,33 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.1-beta.24...@injectivelabs/bridge-ts@1.14.1) (2023-10-27) +## [1.14.7-beta.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.7-beta.0...@injectivelabs/bridge-ts@1.14.7-beta.1) (2024-03-02) + +**Note:** Version bump only for package @injectivelabs/bridge-ts + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.6-beta.59...@injectivelabs/bridge-ts@1.14.6) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/bridge-ts + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.5-beta.69...@injectivelabs/bridge-ts@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/bridge-ts + +## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.4-beta.3...@injectivelabs/bridge-ts@1.14.4) (2023-11-20) **Note:** Version bump only for package @injectivelabs/bridge-ts +## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.3-beta.23...@injectivelabs/bridge-ts@1.14.3) (2023-11-17) +**Note:** Version bump only for package @injectivelabs/bridge-ts +## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.2-beta.13...@injectivelabs/bridge-ts@1.14.2) (2023-11-07) +**Note:** Version bump only for package @injectivelabs/bridge-ts + +## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.1-beta.24...@injectivelabs/bridge-ts@1.14.1) (2023-10-27) + +**Note:** Version bump only for package @injectivelabs/bridge-ts ## [1.14.1-beta.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/bridge-ts@1.14.1-beta.1...@injectivelabs/bridge-ts@1.14.1-beta.2) (2023-09-24) diff --git a/packages/bridge-ts/package.json b/packages/bridge-ts/package.json index 8e0c1dc5b..af119c802 100644 --- a/packages/bridge-ts/package.json +++ b/packages/bridge-ts/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/bridge-ts", "description": "Bridge utilities and abstractions in TypeScript to be used in Injective products", - "version": "1.14.5-beta.65", + "version": "1.14.11-beta.1", "sideEffects": false, "author": { "name": "Bojan Angjelkoski", @@ -32,15 +32,15 @@ }, "dependencies": { "@axelar-network/axelarjs-sdk": "0.13.6", - "@injectivelabs/exceptions": "^1.14.5-beta.5", - "@injectivelabs/networks": "^1.14.5-beta.8", - "@injectivelabs/sdk-ts": "^1.14.5-beta.63", - "@injectivelabs/ts-types": "^1.14.5-beta.0", - "@injectivelabs/utils": "^1.14.5-beta.5", - "@injectivelabs/wormhole-sdk": "^1.12.0-beta.0", - "@solana/spl-token": "^0.3.6", - "@solana/wallet-adapter-base": "^0.9.18", - "@solana/web3.js": "^1.66.2", + "@injectivelabs/exceptions": "^1.14.10", + "@injectivelabs/networks": "^1.14.10", + "@injectivelabs/sdk-ts": "^1.14.11-beta.1", + "@injectivelabs/ts-types": "^1.14.10", + "@injectivelabs/utils": "^1.14.10", + "@injectivelabs/wormhole-sdk": "1.14.6", + "@solana/spl-token": "^0.4.0", + "@solana/wallet-adapter-base": "^0.9.23", + "@solana/web3.js": "^1.89.1", "bech32": "^2.0.0", "ethers": "^5.7.2", "js-base64": "^3.7.5", diff --git a/packages/bridge-ts/src/wormhole/clients/EvmWormholeClient.ts b/packages/bridge-ts/src/wormhole/clients/EvmWormholeClient.ts index 16b0a5a4f..ffd43533e 100644 --- a/packages/bridge-ts/src/wormhole/clients/EvmWormholeClient.ts +++ b/packages/bridge-ts/src/wormhole/clients/EvmWormholeClient.ts @@ -8,8 +8,6 @@ import { redeemOnEth, getSignedVAA, transferFromEth, - hexToUint8Array, - uint8ArrayToHex, redeemOnEthNative, getEmitterAddressEth, getSignedVAAWithRetry, @@ -372,7 +370,7 @@ export class EvmWormholeClient ).toString() } - private async transferToken(args: TransferMsgArgs) { + protected async transferToken(args: TransferMsgArgs) { const { network, wormholeRpcUrl, wormholeRestUrl, wormholeSource } = this const { amount, recipient, tokenAddress } = args @@ -416,9 +414,7 @@ export class EvmWormholeClient tokenAddress, amount, WORMHOLE_CHAINS.injective, - hexToUint8Array( - uint8ArrayToHex(zeroPad(cosmos.canonicalAddress(recipient), 32)), - ), + zeroPad(cosmos.canonicalAddress(recipient), 32), ) if (!transferReceipt) { @@ -435,7 +431,7 @@ export class EvmWormholeClient } } - private async transferNative(args: TransferMsgArgs) { + protected async transferNative(args: TransferMsgArgs) { const { network, wormholeRpcUrl, wormholeRestUrl, wormholeSource } = this const { amount, recipient } = args @@ -461,9 +457,7 @@ export class EvmWormholeClient signer, amount, WORMHOLE_CHAINS.injective, - hexToUint8Array( - uint8ArrayToHex(zeroPad(cosmos.canonicalAddress(recipient), 32)), - ), + zeroPad(cosmos.canonicalAddress(recipient), 32), ) if (!transferReceipt) { @@ -480,7 +474,7 @@ export class EvmWormholeClient } } - private async getProvider() { + protected async getProvider() { const { provider } = this if (this.singletonProvider) { @@ -493,7 +487,7 @@ export class EvmWormholeClient return this.singletonProvider } - private async getProviderAndChainIdCheck() { + protected async getProviderAndChainIdCheck() { const provider = await this.getProvider() const signer = provider.getSigner() const chainId = await signer.getChainId() diff --git a/packages/bridge-ts/src/wormhole/clients/InjectiveWormholeClient.ts b/packages/bridge-ts/src/wormhole/clients/InjectiveWormholeClient.ts index 62c99dce3..05294d78d 100644 --- a/packages/bridge-ts/src/wormhole/clients/InjectiveWormholeClient.ts +++ b/packages/bridge-ts/src/wormhole/clients/InjectiveWormholeClient.ts @@ -3,10 +3,10 @@ import { TxResponse, getGrpcTransport, ChainGrpcWasmApi, - MsgExecuteContractCompat, ChainGrpcBankApi, - IndexerRestExplorerApi, getInjectiveAddress, + MsgExecuteContractCompat, + IndexerRestExplorerApi, } from '@injectivelabs/sdk-ts' import { GeneralException } from '@injectivelabs/exceptions' import { @@ -40,7 +40,6 @@ interface WalletStrategy { interface MsgBroadcaster { broadcast: (params: any) => Promise - broadcastOld: (params: any) => Promise } interface Provider { @@ -161,7 +160,7 @@ export class InjectiveWormholeClient tryNativeToUint8Array(recipient, associatedChain), ) - const txResponse = (await provider.msgBroadcaster.broadcastOld({ + const txResponse = (await provider.msgBroadcaster.broadcast({ msgs: [...additionalMsgs, ...messages], injectiveAddress: signer, })) as TxResponse diff --git a/packages/bridge-ts/src/wormhole/clients/SolanaWormholeClient.ts b/packages/bridge-ts/src/wormhole/clients/SolanaWormholeClient.ts index a3cae9b75..06328cda5 100644 --- a/packages/bridge-ts/src/wormhole/clients/SolanaWormholeClient.ts +++ b/packages/bridge-ts/src/wormhole/clients/SolanaWormholeClient.ts @@ -1,41 +1,42 @@ -import { getNetworkEndpoints, Network } from '@injectivelabs/networks' -import { getGrpcTransport, ChainGrpcWasmApi } from '@injectivelabs/sdk-ts' +import { + Network, + NetworkEndpoints, + getNetworkEndpoints, +} from '@injectivelabs/networks' +import { ChainGrpcWasmApi, getGrpcTransport } from '@injectivelabs/sdk-ts' import { GeneralException } from '@injectivelabs/exceptions' import { cosmos, + ChainId, getSignedVAA, redeemOnSolana, - hexToUint8Array, - uint8ArrayToHex, transferNativeSol, transferFromSolana, - tryNativeToHexString, - parseSequenceFromLogSolana, - getEmitterAddressSolana, getSignedVAAWithRetry, + tryNativeToUint8Array, + getForeignAssetSolana, postVaaSolanaWithRetry, redeemAndUnwrapOnSolana, + getEmitterAddressSolana, + parseSequenceFromLogSolana, getIsTransferCompletedSolana, - tryNativeToUint8Array, - ChainId, - getForeignAssetSolana, } from '@injectivelabs/wormhole-sdk' import { getAssociatedTokenAddress, createAssociatedTokenAccountInstruction, } from '@solana/spl-token' -import { - getForeignAssetInjective, - getOriginalAssetInjective, -} from '../injective' import { PublicKey, Connection, Transaction, + SignatureResult, TransactionResponse, + TransactionSignature, + RpcResponseAndContext, + TransactionExpiredTimeoutError, + TransactionExpiredBlockheightExceededError, } from '@solana/web3.js' import { BaseMessageSignerWalletAdapter } from '@solana/wallet-adapter-base' -import { TransactionSignatureAndResponse } from '@injectivelabs/wormhole-sdk/lib/cjs/solana' import { zeroPad } from 'ethers/lib/utils' import { sleep } from '@injectivelabs/utils' import { WORMHOLE_CHAINS } from '../constants' @@ -43,6 +44,12 @@ import { TransferMsgArgs, WormholeClient, WormholeSource } from '../types' import { getContractAddresses, getSolanaTransactionInfo } from '../utils' import { BaseWormholeClient } from '../WormholeClient' import { PhantomWalletAdapter } from '@solana/wallet-adapter-wallets' +import { getOriginalAssetInjective } from '../injective' + +export interface TransactionSignatureAndResponse { + signature: TransactionSignature + response: RpcResponseAndContext +} const TIMEOUT_BETWEEN_RETRIES = 5000 @@ -127,9 +134,7 @@ export class SolanaWormholeClient const { network, wormholeRpcUrl } = this if (!wormholeRpcUrl) { - throw new GeneralException( - new Error(`Please provide wormholeRpcUrl`), - ) + throw new GeneralException(new Error(`Please provide wormholeRpcUrl`)) } const { associatedChainContractAddresses } = getContractAddresses(network) @@ -166,9 +171,7 @@ export class SolanaWormholeClient const { network, wormholeRpcUrl } = this if (!wormholeRpcUrl) { - throw new GeneralException( - new Error(`Please provide wormholeRpcUrl`), - ) + throw new GeneralException(new Error(`Please provide wormholeRpcUrl`)) } const { associatedChainContractAddresses } = getContractAddresses(network) @@ -337,23 +340,26 @@ export class SolanaWormholeClient ) } - async createAssociatedTokenAddress(tokenAddress: string) { + async createAssociatedTokenAddress( + tokenAddress: string, + networkEndpoints?: NetworkEndpoints, + ) { const { solanaHostUrl, network } = this - const endpoints = getNetworkEndpoints(network) if (!solanaHostUrl) { throw new GeneralException(new Error(`Please provide solanaHostUrl`)) } + const endpoints = networkEndpoints || getNetworkEndpoints(network) const provider = await this.getProvider() - const chainGrpcWasmApi = new ChainGrpcWasmApi(endpoints.grpc) const connection = new Connection(solanaHostUrl, 'confirmed') const solanaPublicKey = new PublicKey(provider.publicKey || '') const originalAsset = await getOriginalAssetInjective( tokenAddress, - chainGrpcWasmApi, + new ChainGrpcWasmApi(endpoints.grpc), ) + const solanaMintKey = new PublicKey(originalAsset.assetAddress) const recipient = await getAssociatedTokenAddress( solanaMintKey, @@ -398,35 +404,7 @@ export class SolanaWormholeClient return recipient.toString() } - async signSendAndConfirmTransaction(transaction: Transaction) { - const { solanaHostUrl } = this - - if (!solanaHostUrl) { - throw new GeneralException(new Error(`Please provide solanaHostUrl`)) - } - - const provider = await this.getProvider() - const connection = new Connection(solanaHostUrl, 'confirmed') - - const signed = await provider.signTransaction(transaction) - const transactionId = await connection.sendRawTransaction( - signed.serialize(), - ) - - const txResponse = await getSolanaTransactionInfo(transactionId, connection) - - if (!txResponse) { - throw new GeneralException( - new Error('An error occurred while fetching the transaction info'), - ) - } - - return { txHash: transactionId, ...txResponse } as TransactionResponse & { - txHash: string - } - } - - private async getNativeTokenBalance(address: string | PublicKey) { + protected async getNativeTokenBalance(address: string | PublicKey) { const { solanaHostUrl } = this const connection = new Connection(solanaHostUrl || '') @@ -441,7 +419,7 @@ export class SolanaWormholeClient } } - private async getSplTokenBalance( + protected async getSplTokenBalance( address: string | PublicKey, tokenAddress: string, ) { @@ -469,10 +447,9 @@ export class SolanaWormholeClient } } - private async transferToken(args: TransferMsgArgs) { + protected async transferToken(args: TransferMsgArgs) { const { network, solanaHostUrl, wormholeRestUrl, wormholeRpcUrl } = this const { amount, recipient, signer } = args - const endpoints = getNetworkEndpoints(network) const provider = await this.getProvider() const pubKey = provider.publicKey || new PublicKey(signer || '') @@ -494,26 +471,7 @@ export class SolanaWormholeClient throw new GeneralException(new Error(`Please provide signerPubKey`)) } - const { injectiveContractAddresses, associatedChainContractAddresses } = - getContractAddresses(network) - - const chainGrpcWasmApi = new ChainGrpcWasmApi(endpoints.grpc) - - const originAssetHex = tryNativeToHexString( - args.tokenAddress, - WORMHOLE_CHAINS.solana, - ) - const foreignAsset = await getForeignAssetInjective( - injectiveContractAddresses.token_bridge, - // @ts-ignore - chainGrpcWasmApi, - WORMHOLE_CHAINS.solana, - hexToUint8Array(originAssetHex), - ) - - if (!foreignAsset) { - throw new GeneralException(new Error(`Foreign Injective asset not found`)) - } + const { associatedChainContractAddresses } = getContractAddresses(network) const connection = new Connection(solanaHostUrl, 'confirmed') const fromAddress = ( @@ -528,31 +486,18 @@ export class SolanaWormholeClient fromAddress, args.tokenAddress, BigInt(amount), - hexToUint8Array( - uint8ArrayToHex(zeroPad(cosmos.canonicalAddress(recipient), 32)), - ), + zeroPad(cosmos.canonicalAddress(recipient), 32), WORMHOLE_CHAINS.injective, ) - const signed = await provider.signTransaction(transaction) - const transactionId = await connection.sendRawTransaction( - signed.serialize(), - ) - - const txResponse = await getSolanaTransactionInfo(transactionId, connection) + const txResponse = await this.signSendAndConfirmTransaction(transaction) - if (!txResponse) { - throw new GeneralException( - new Error('An error occurred while fetching the transaction info'), - ) - } - - return { txHash: transactionId, ...txResponse } as TransactionResponse & { + return txResponse as TransactionResponse & { txHash: string } } - private async transferNative(args: TransferMsgArgs) { + protected async transferNative(args: TransferMsgArgs) { const { network, solanaHostUrl, wormholeRestUrl, wormholeRpcUrl } = this const { amount, recipient, signer } = args @@ -581,31 +526,18 @@ export class SolanaWormholeClient associatedChainContractAddresses.token_bridge, pubKey, BigInt(amount), - hexToUint8Array( - uint8ArrayToHex(zeroPad(cosmos.canonicalAddress(recipient), 32)), - ), + zeroPad(cosmos.canonicalAddress(recipient), 32), WORMHOLE_CHAINS.injective, ) - const signed = await provider.signTransaction(transaction) - const transactionId = await connection.sendRawTransaction( - signed.serialize(), - ) - - const txResponse = await getSolanaTransactionInfo(transactionId, connection) - - if (!txResponse) { - throw new GeneralException( - new Error('An error occurred while fetching the transaction info'), - ) - } + const txResponse = await this.signSendAndConfirmTransaction(transaction) - return { txHash: transactionId, ...txResponse } as TransactionResponse & { + return txResponse as TransactionResponse & { txHash: string } } - private async getProvider(): Promise< + protected async getProvider(): Promise< BaseMessageSignerWalletAdapter<'Phantom'> > { try { @@ -624,4 +556,63 @@ export class SolanaWormholeClient throw new GeneralException(new Error(e as any)) } } + + async signSendAndConfirmTransaction(transaction: Transaction) { + const { solanaHostUrl } = this + + if (!solanaHostUrl) { + throw new GeneralException(new Error(`Please provide solanaHostUrl`)) + } + + const provider = await this.getProvider() + const connection = new Connection(solanaHostUrl, 'confirmed') + + const signed = await provider.signTransaction(transaction) + const transactionId = await connection.sendRawTransaction( + signed.serialize(), + ) + + try { + const result = await connection.confirmTransaction(transactionId) + + if (result.value.err) { + throw new TransactionExpiredBlockheightExceededError( + result.value.err.toString(), + ) + } + + const txResponse = await getSolanaTransactionInfo( + transactionId, + connection, + ) + + if (!txResponse) { + throw new GeneralException( + new Error('An error occurred while fetching the transaction info'), + ) + } + + return { txHash: transactionId, ...txResponse } as TransactionResponse & { + txHash: string + } + } catch (e) { + if (e instanceof TransactionExpiredBlockheightExceededError) { + throw new GeneralException( + new Error( + 'Transaction was not included in a block before expiration. Please retry.', + ), + ) + } + + if (e instanceof TransactionExpiredTimeoutError) { + throw new GeneralException( + new Error( + 'Transaction was not included in a block before expiration. Please retry.', + ), + ) + } + + throw e + } + } } diff --git a/packages/bridge-ts/src/wormhole/constants.ts b/packages/bridge-ts/src/wormhole/constants.ts index cca9dae4d..b5aed1fbc 100644 --- a/packages/bridge-ts/src/wormhole/constants.ts +++ b/packages/bridge-ts/src/wormhole/constants.ts @@ -66,6 +66,24 @@ export const WORMHOLE_APTOS_CONTRACT_BY_NETWORK = (network: Network) => { return CONTRACTS.MAINNET.aptos } +export const WORMHOLE_WORMCHAIN_CONTRACT_BY_NETWORK = (network: Network) => { + if (isTestnet(network) || isDevnet(network)) { + return CONTRACTS.TESTNET.wormchain + } + + return CONTRACTS.MAINNET.wormchain +} + +export const WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK = ( + network: Network, +) => { + if (isTestnet(network) || isDevnet(network)) { + return 'wormhole1ctnjk7an90lz5wjfvr3cf6x984a8cjnv8dpmztmlpcq4xteaa2xs9pwmzk' + } + + return 'wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx' +} + export const WORMHOLE_CHAINS = CHAINS export const WORMHOLE_CONTRACTS = CONTRACTS diff --git a/packages/bridge-ts/src/wormhole/gateway-clients/EvmWormholeGatewayClient.ts b/packages/bridge-ts/src/wormhole/gateway-clients/EvmWormholeGatewayClient.ts new file mode 100644 index 000000000..bc00002a7 --- /dev/null +++ b/packages/bridge-ts/src/wormhole/gateway-clients/EvmWormholeGatewayClient.ts @@ -0,0 +1,156 @@ +import { GeneralException } from '@injectivelabs/exceptions' +import { + cosmos, + approveEth, + transferFromEth, + transferFromEthNative, +} from '@injectivelabs/wormhole-sdk' +import { BigNumber } from '@injectivelabs/utils' +import { ethers } from 'ethers' +import { zeroPad } from 'ethers/lib/utils' +import { + WORMHOLE_CHAINS, + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK, +} from '../constants' +import { WormholeClient, TransferMsgArgs } from '../types' +import { getContractAddresses } from '../utils' +import { + EvmWormholeClient, + isNativeTokenAddress, +} from '../clients/EvmWormholeClient' +import { getTransferDetailsUint8Array } from '../injective' + +export class EvmWormholeGatewayClient + extends EvmWormholeClient + implements + WormholeClient< + ethers.ContractReceipt & { txHash: string }, + ethers.providers.TransactionReceipt + > +{ + async transfer(args: TransferMsgArgs) { + return args.tokenAddress && !isNativeTokenAddress(args.tokenAddress) + ? this.transferToken(args) + : this.transferNative(args) + } + + protected async transferToken(args: TransferMsgArgs) { + const { network, wormholeRpcUrl, wormholeRestUrl, wormholeSource } = this + const { amount, recipient, tokenAddress } = args + + if (!wormholeRpcUrl && !wormholeRestUrl) { + throw new GeneralException( + new Error(`Please provide wormholeRpcUrl | wormholeRestUrl`), + ) + } + + if (!tokenAddress) { + throw new GeneralException(new Error(`Please provide tokenAddress`)) + } + + if (!recipient) { + throw new GeneralException(new Error(`Please provide recipient`)) + } + + const signer = await this.getProviderAndChainIdCheck() + const { associatedChainContractAddresses } = getContractAddresses( + network, + wormholeSource, + ) + + const allowance = await this.getTokenAllowance({ + address: await signer.getAddress(), + tokenAddress, + }) + + if (new BigNumber(allowance).lt(amount)) { + await approveEth( + associatedChainContractAddresses.token_bridge, + tokenAddress, + signer, + new BigNumber(2).pow(256).minus(1).toFixed(), + ) + } + + const transferReceipt = await transferFromEth( + associatedChainContractAddresses.token_bridge, + signer, + tokenAddress, + amount, + WORMHOLE_CHAINS.wormchain, + zeroPad( + cosmos.canonicalAddress( + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK(network), + ), + 32, + ), + undefined, + undefined, + getTransferDetailsUint8Array(recipient), + ) + + if (!transferReceipt) { + throw new GeneralException( + new Error('An error occurred while fetching the transaction info'), + ) + } + + return { + txHash: transferReceipt.transactionHash, + ...transferReceipt, + } as ethers.ContractReceipt & { + txHash: string + } + } + + protected async transferNative(args: TransferMsgArgs) { + const { network, wormholeRpcUrl, wormholeRestUrl, wormholeSource } = this + const { amount, recipient } = args + + if (!wormholeRpcUrl && !wormholeRestUrl) { + throw new GeneralException( + new Error(`Please provide wormholeRpcUrl | wormholeRestUrl`), + ) + } + + if (!recipient) { + throw new GeneralException(new Error(`Please provide recipient`)) + } + + const signer = await this.getProviderAndChainIdCheck() + + const { associatedChainContractAddresses } = getContractAddresses( + network, + wormholeSource, + ) + + const transferReceipt = await transferFromEthNative( + associatedChainContractAddresses.token_bridge, + signer, + amount, + WORMHOLE_CHAINS.wormchain, + zeroPad( + cosmos.canonicalAddress( + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK(network), + ), + 32, + ), + undefined, + undefined, + getTransferDetailsUint8Array(recipient), + ) + + if (!transferReceipt) { + throw new GeneralException( + new Error('An error occurred while fetching the transaction info'), + ) + } + + return { + txHash: transferReceipt.transactionHash, + ...transferReceipt, + } as ethers.ContractReceipt & { + txHash: string + } + } +} diff --git a/packages/bridge-ts/src/wormhole/gateway-clients/InjectiveWormholeGatewayClient.ts b/packages/bridge-ts/src/wormhole/gateway-clients/InjectiveWormholeGatewayClient.ts new file mode 100644 index 000000000..e0cf9b208 --- /dev/null +++ b/packages/bridge-ts/src/wormhole/gateway-clients/InjectiveWormholeGatewayClient.ts @@ -0,0 +1,182 @@ +import { TxResponse, MsgExecuteContractCompat } from '@injectivelabs/sdk-ts' +import { GeneralException } from '@injectivelabs/exceptions' +import { cosmos } from '@injectivelabs/wormhole-sdk' +import { + getTransferDetailsUint8Array, + transferFromInjective, + transferFromInjectiveUsingIbc, +} from '../injective' +import { TransferMsgArgs, WormholeClient, WormholeSource } from '../types' +import { + getAssociatedChain, + getAssociatedChainRecipientIbc, + getContractAddresses, +} from '../utils' +import { InjectiveWormholeClient } from '../clients/InjectiveWormholeClient' +import { + WORMHOLE_CHAINS, + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK, +} from '../constants' +import { zeroPad } from 'ethers/lib/utils' + +export class InjectiveWormholeGatewayClient + extends InjectiveWormholeClient + implements WormholeClient +{ + async transfer( + args: TransferMsgArgs & { + // The destination chain where we transfer to + destination?: WormholeSource + // The channel id of the IBC connection + channelId?: string + }, + ) { + const { network, wormholeRpcUrl, wormholeRestUrl, provider } = this + const { + amount, + signer, + recipient: recipientArg, + destination = WormholeSource.Solana, + } = args + + const associatedChain = getAssociatedChain(destination) + const recipient = getAssociatedChainRecipientIbc(recipientArg, destination) + + if (!args.tokenAddress) { + throw new GeneralException(new Error(`Please provide tokenAddress`)) + } + + if (!wormholeRpcUrl && !wormholeRestUrl) { + throw new GeneralException( + new Error(`Please provide wormholeRpcUrl | wormholeRestUrl`), + ) + } + + if (!recipient) { + throw new GeneralException( + new Error(`Please provide the associatedChain provider`), + ) + } + + if (!provider) { + throw new GeneralException( + new Error(`Please provide Injective wallet provider`), + ) + } + + if (!signer) { + throw new GeneralException(new Error(`Please provide signer`)) + } + + const associatedChainBlock = { + header: { + height: 9_999_999_999_999, + version: { + block: 11, + }, + }, + } + + + const messages = await transferFromInjectiveUsingIbc( + args.channelId || 'channel-183', + associatedChain, + signer, + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK(network), + args.tokenAddress, + amount, + Buffer.from(recipient).toString('base64'), + associatedChainBlock, + ) + + const txResponse = (await provider.msgBroadcaster.broadcast({ + msgs: messages, + injectiveAddress: signer, + })) as TxResponse + + if (!txResponse) { + throw new GeneralException(new Error('Transaction can not be found!')) + } + + return txResponse + } + + /** + * Used to migrate existing + * tokens from Injective to + * Wormhole Gateway thought IBC + */ + async migrate( + args: TransferMsgArgs & { + /** + * Additional messages that we run before the bridge, an example + * could be redeeming from the token factory to CW20 + */ + additionalMsgs?: MsgExecuteContractCompat[] + /** + * The destination chain where we transfer to + */ + destination?: WormholeSource + }, + ) { + const { network, wormholeRpcUrl, wormholeRestUrl, provider } = this + const { + amount, + signer, + additionalMsgs = [], + destination = WormholeSource.Wormchain, + } = args + + if (!args.tokenAddress) { + throw new GeneralException(new Error(`Please provide tokenAddress`)) + } + + if (!wormholeRpcUrl && !wormholeRestUrl) { + throw new GeneralException( + new Error(`Please provide wormholeRpcUrl | wormholeRestUrl`), + ) + } + + if (!provider) { + throw new GeneralException( + new Error(`Please provide Injective wallet provider`), + ) + } + + if (!signer) { + throw new GeneralException(new Error(`Please provide signer`)) + } + + const { injectiveContractAddresses } = getContractAddresses( + network, + destination, + ) + + const messages = await transferFromInjective( + signer, + injectiveContractAddresses.token_bridge, + args.tokenAddress, + amount, + WORMHOLE_CHAINS.wormchain, + zeroPad( + cosmos.canonicalAddress( + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK(network), + ), + 32, + ), + '0', + getTransferDetailsUint8Array(signer), + ) + + const txResponse = (await provider.msgBroadcaster.broadcast({ + msgs: [...additionalMsgs, ...messages], + injectiveAddress: signer, + })) as TxResponse + + if (!txResponse) { + throw new GeneralException(new Error('Transaction can not be found!')) + } + + return txResponse + } +} diff --git a/packages/bridge-ts/src/wormhole/gateway-clients/SolanaWormholeGatewayClient.ts b/packages/bridge-ts/src/wormhole/gateway-clients/SolanaWormholeGatewayClient.ts new file mode 100644 index 000000000..448ae8c04 --- /dev/null +++ b/packages/bridge-ts/src/wormhole/gateway-clients/SolanaWormholeGatewayClient.ts @@ -0,0 +1,140 @@ +import { GeneralException } from '@injectivelabs/exceptions' +import { + cosmos, + transferNativeSol, + transferFromSolana, +} from '@injectivelabs/wormhole-sdk' +import { getAssociatedTokenAddress } from '@solana/spl-token' +import { + PublicKey, + Connection, + Transaction, + TransactionResponse, +} from '@solana/web3.js' +import { zeroPad } from 'ethers/lib/utils' +import { + WORMHOLE_CHAINS, + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK, +} from '../constants' +import { TransferMsgArgs, WormholeClient } from '../types' +import { getContractAddresses } from '../utils' +import { SolanaWormholeClient } from '../clients/SolanaWormholeClient' +import { getTransferDetailsUint8Array } from '../injective' + +export class SolanaWormholeGatewayClient + extends SolanaWormholeClient + implements WormholeClient +{ + async transfer(args: TransferMsgArgs) { + return args.tokenAddress + ? this.transferToken(args) + : this.transferNative(args) + } + + protected async transferToken(args: TransferMsgArgs) { + const { network, solanaHostUrl, wormholeRestUrl, wormholeRpcUrl } = this + const { amount, recipient, signer } = args + + const provider = await this.getProvider() + const pubKey = provider.publicKey || new PublicKey(signer || '') + + if (!solanaHostUrl) { + throw new GeneralException(new Error(`Please provide solanaHostUrl`)) + } + + if (!wormholeRpcUrl && !wormholeRestUrl) { + throw new GeneralException( + new Error(`Please provide wormholeRpcUrl | wormholeRestUrl`), + ) + } + if (!args.tokenAddress) { + throw new GeneralException(new Error(`Please provide tokenAddress`)) + } + + if (pubKey.toBuffer().length === 0) { + throw new GeneralException(new Error(`Please provide signerPubKey`)) + } + + const { associatedChainContractAddresses } = getContractAddresses(network) + + const connection = new Connection(solanaHostUrl, 'confirmed') + const fromAddress = ( + await getAssociatedTokenAddress(new PublicKey(args.tokenAddress), pubKey) + ).toString() + + const transaction = await transferFromSolana( + connection, + associatedChainContractAddresses.core, + associatedChainContractAddresses.token_bridge, + pubKey, + fromAddress, + args.tokenAddress, + BigInt(amount), + zeroPad( + cosmos.canonicalAddress( + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK(network), + ), + 32, + ), + WORMHOLE_CHAINS.wormchain, + undefined, + undefined, + undefined, + undefined, + getTransferDetailsUint8Array(recipient), + ) + + const txResponse = await this.signSendAndConfirmTransaction(transaction) + + return txResponse as TransactionResponse & { + txHash: string + } + } + + protected async transferNative(args: TransferMsgArgs) { + const { network, solanaHostUrl, wormholeRestUrl, wormholeRpcUrl } = this + const { amount, recipient, signer } = args + + const provider = await this.getProvider() + const pubKey = provider.publicKey || new PublicKey(signer || '') + + if (!solanaHostUrl) { + throw new GeneralException(new Error(`Please provide solanaHostUrl`)) + } + + if (pubKey.toBuffer().length === 0) { + throw new GeneralException(new Error(`Please provide signerPubKey`)) + } + + if (!wormholeRpcUrl && !wormholeRestUrl) { + throw new GeneralException( + new Error(`Please provide wormholeRpcUrl | wormholeRestUrl`), + ) + } + const { associatedChainContractAddresses } = getContractAddresses(network) + + const connection = new Connection(solanaHostUrl, 'confirmed') + const transaction = await transferNativeSol( + connection, + associatedChainContractAddresses.core, + associatedChainContractAddresses.token_bridge, + pubKey, + BigInt(amount), + zeroPad( + cosmos.canonicalAddress( + WORMHOLE_WORMCHAIN_IBC_TRANSLATOR_BY_NETWORK(network), + ), + 32, + ), + WORMHOLE_CHAINS.wormchain, + undefined, + getTransferDetailsUint8Array(recipient), + ) + + const txResponse = await this.signSendAndConfirmTransaction(transaction) + + return txResponse as TransactionResponse & { + txHash: string + } + } +} diff --git a/packages/bridge-ts/src/wormhole/gateway-clients/index.ts b/packages/bridge-ts/src/wormhole/gateway-clients/index.ts new file mode 100644 index 000000000..520de977b --- /dev/null +++ b/packages/bridge-ts/src/wormhole/gateway-clients/index.ts @@ -0,0 +1,3 @@ +export * from './EvmWormholeGatewayClient' +export * from './SolanaWormholeGatewayClient' +export * from './InjectiveWormholeGatewayClient' diff --git a/packages/bridge-ts/src/wormhole/index.ts b/packages/bridge-ts/src/wormhole/index.ts index 40e9f4914..3aa8550e9 100644 --- a/packages/bridge-ts/src/wormhole/index.ts +++ b/packages/bridge-ts/src/wormhole/index.ts @@ -1,4 +1,5 @@ export * from './clients' +export * from './gateway-clients' export * from './injective' export * from './strategy' export * from './constants' diff --git a/packages/bridge-ts/src/wormhole/injective/asset.ts b/packages/bridge-ts/src/wormhole/injective/asset.ts index 860f1a05e..54dd22de0 100644 --- a/packages/bridge-ts/src/wormhole/injective/asset.ts +++ b/packages/bridge-ts/src/wormhole/injective/asset.ts @@ -104,6 +104,7 @@ export async function getOriginalAssetInjective( ).toString('base64'), ) const parsed = parseSmartContractStateResponse(response) + return { isWrapped: true, chainId: parsed.asset_chain, diff --git a/packages/bridge-ts/src/wormhole/injective/transfer.ts b/packages/bridge-ts/src/wormhole/injective/transfer.ts index b287e6992..adc630ecc 100644 --- a/packages/bridge-ts/src/wormhole/injective/transfer.ts +++ b/packages/bridge-ts/src/wormhole/injective/transfer.ts @@ -1,8 +1,10 @@ import { ChainGrpcWasmApi, MsgExecuteContractCompat, + MsgTransfer, + makeTimeoutTimestampInNs, } from '@injectivelabs/sdk-ts' -import { parseSmartContractStateResponse } from './utils' +import { getIbcTransferDetails, parseSmartContractStateResponse } from './utils' import { ChainId, ChainName, @@ -10,6 +12,7 @@ import { isNativeDenomInjective, } from '@injectivelabs/wormhole-sdk' import { fromUint8Array } from 'js-base64' +import { BigNumberInBase } from '@injectivelabs/utils' /** * Return if the VAA has been redeemed or not @@ -106,7 +109,7 @@ export async function transferFromInjective( recipient: Buffer.from(recipientAddress).toString('base64'), fee: relayerFee, nonce, - payload, + payload: Buffer.from(payload).toString('base64'), } : { asset: { @@ -168,3 +171,43 @@ export async function transferFromInjective( }), ] } + +export async function transferFromInjectiveUsingIbc( + channelId: string, + associatedChain: ChainId, + walletAddress: string, + ibcTranslatorAddress: string, + denom: string, + amount: string, + recipientAddress: string /* in base 64 */, + destinationLatestBlock: any, +) { + const memo = JSON.stringify({ + gateway_ibc_token_bridge_payload: getIbcTransferDetails( + recipientAddress, + associatedChain, + ), + }) + const timeoutTimestamp = makeTimeoutTimestampInNs() + + return MsgTransfer.fromJSON({ + port: 'transfer', + memo: memo, + sender: walletAddress, + receiver: ibcTranslatorAddress, + channelId: channelId, + timeout: timeoutTimestamp, + height: { + revisionHeight: new BigNumberInBase(destinationLatestBlock.header.height) + .plus(100) + .toNumber(), + revisionNumber: new BigNumberInBase( + destinationLatestBlock.header.version.block, + ).toNumber(), + }, + amount: { + denom, + amount, + }, + }) +} diff --git a/packages/bridge-ts/src/wormhole/injective/utils.ts b/packages/bridge-ts/src/wormhole/injective/utils.ts index 5db844f2e..02de262f3 100644 --- a/packages/bridge-ts/src/wormhole/injective/utils.ts +++ b/packages/bridge-ts/src/wormhole/injective/utils.ts @@ -2,6 +2,8 @@ import { CosmwasmWasmV1Query } from '@injectivelabs/core-proto-ts' import { zeroPad } from 'ethers/lib/utils' import { bech32 } from 'bech32' import { toUtf8 } from '@injectivelabs/sdk-ts' +import { WORMHOLE_CHAINS } from '../constants' +import { ChainId } from '@injectivelabs/wormhole-sdk' export const parseSmartContractStateResponse: any = ( response: CosmwasmWasmV1Query.QuerySmartContractStateResponse, @@ -43,3 +45,42 @@ export async function getEmitterAddressInjective(programAddress: string) { zeroPad(bech32.fromWords(bech32.decode(programAddress).words), 32), ).toString('hex') } + +export const getTransferDetails = ( + recipient: string, + chainId: ChainId = WORMHOLE_CHAINS.injective, +) => { + return { + gateway_transfer: { + chain: chainId, + recipient: Buffer.from(toUtf8(recipient)).toString('base64'), + fee: '0', + nonce: 0, + }, + } +} + +export const getIbcTransferDetails = ( + recipient: string, + chainId: ChainId = WORMHOLE_CHAINS.injective, +) => { + const nonce = Math.round(Math.random() * 10000) + + return { + gateway_transfer: { + chain: chainId, + nonce: nonce, + recipient: recipient /** already encoded to base64 */, + fee: '0', + }, + } +} + +export const getTransferDetailsUint8Array = ( + recipient: string, + chainId: ChainId = WORMHOLE_CHAINS.injective, +) => { + return new Uint8Array( + Buffer.from(JSON.stringify(getTransferDetails(recipient, chainId))), + ) +} diff --git a/packages/bridge-ts/src/wormhole/strategy/EvmWormholeGatewayClientStrategy.ts b/packages/bridge-ts/src/wormhole/strategy/EvmWormholeGatewayClientStrategy.ts new file mode 100644 index 000000000..77162896d --- /dev/null +++ b/packages/bridge-ts/src/wormhole/strategy/EvmWormholeGatewayClientStrategy.ts @@ -0,0 +1,44 @@ +import { Network } from '@injectivelabs/networks' +import { EvmWormholeGatewayClient } from '../gateway-clients/EvmWormholeGatewayClient' +import { Provider, WormholeClient, WormholeSource } from '..' +import { ethers } from 'ethers' +import { EvmWormholeClientStrategy } from './EvmWormholeClientStrategy' + +export class EvmWormholeGatewayClientStrategy + extends EvmWormholeClientStrategy + implements + WormholeClient< + ethers.ContractReceipt & { txHash: string }, + ethers.providers.TransactionReceipt + > +{ + public wormholeSource: WormholeSource = WormholeSource.Ethereum + + public strategies: { [key in WormholeSource]?: EvmWormholeGatewayClient } + + constructor(args: { + network: Network + wormholeRpcUrl?: string + wormholeRestUrl?: string + provider: Provider + wormholeSource?: WormholeSource + }) { + super(args) + + this.wormholeSource = args.wormholeSource || WormholeSource.Ethereum + this.strategies = { + [WormholeSource.Ethereum]: new EvmWormholeGatewayClient({ + ...args, + wormholeSource: WormholeSource.Ethereum, + }), + [WormholeSource.Polygon]: new EvmWormholeGatewayClient({ + ...args, + wormholeSource: WormholeSource.Polygon, + }), + [WormholeSource.Arbitrum]: new EvmWormholeGatewayClient({ + ...args, + wormholeSource: WormholeSource.Arbitrum, + }), + } + } +} diff --git a/packages/bridge-ts/src/wormhole/strategy/index.ts b/packages/bridge-ts/src/wormhole/strategy/index.ts index f47ca3843..d076f7e66 100644 --- a/packages/bridge-ts/src/wormhole/strategy/index.ts +++ b/packages/bridge-ts/src/wormhole/strategy/index.ts @@ -1 +1,2 @@ export * from './EvmWormholeClientStrategy' +export * from './EvmWormholeGatewayClientStrategy' diff --git a/packages/bridge-ts/src/wormhole/types.ts b/packages/bridge-ts/src/wormhole/types.ts index 7cc4ead00..a1f791cbc 100644 --- a/packages/bridge-ts/src/wormhole/types.ts +++ b/packages/bridge-ts/src/wormhole/types.ts @@ -14,6 +14,7 @@ export interface TransferMsgArgs { } export type WormholeContractAddresses = typeof CONTRACTS.MAINNET.injective +export type WormholeWormchainContractAddresses = typeof CONTRACTS.MAINNET.wormchain export type WormholeSolanaContractAddresses = typeof CONTRACTS.MAINNET.solana export type WormholeArbitrumContractAddresses = typeof CONTRACTS.MAINNET.arbitrum @@ -32,6 +33,7 @@ export enum WormholeSource { Sui = 'sui', Klaytn = 'klaytn', Aptos = 'aptos', + Wormchain = 'wormchain' } export interface WormholeClient< diff --git a/packages/bridge-ts/src/wormhole/utils.test.ts b/packages/bridge-ts/src/wormhole/utils.test.ts deleted file mode 100644 index c8edd96db..000000000 --- a/packages/bridge-ts/src/wormhole/utils.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -// import { -// CHAIN_ID_INJECTIVE, -// tryHexToNativeString, -// } from '@injectivelabs/wormhole-sdk' - -describe('tryHexToNativeString', () => { - it('converts properly', () => { - // - }) -}) diff --git a/packages/bridge-ts/src/wormhole/utils.ts b/packages/bridge-ts/src/wormhole/utils.ts index 555e08912..cbfe659dd 100644 --- a/packages/bridge-ts/src/wormhole/utils.ts +++ b/packages/bridge-ts/src/wormhole/utils.ts @@ -10,20 +10,23 @@ import { WormholeSolanaContractAddresses, WormholeArbitrumContractAddresses, WormholeEthereumContractAddresses, + WormholeWormchainContractAddresses, WormholePolygonContractAddresses, } from './types' import { WORMHOLE_CHAINS, WORMHOLE_CONTRACT_BY_NETWORK, + WORMHOLE_NATIVE_WRAPPED_ADDRESS, WORMHOLE_SUI_CONTRACT_BY_NETWORK, WORMHOLE_APTOS_CONTRACT_BY_NETWORK, WORMHOLE_SOLANA_CONTRACT_BY_NETWORK, WORMHOLE_KLAYTN_CONTRACT_BY_NETWORK, WORMHOLE_POLYGON_CONTRACT_BY_NETWORK, WORMHOLE_ARBITRUM_CONTRACT_BY_NETWORK, + WORMHOLE_WORMCHAIN_CONTRACT_BY_NETWORK, WORMHOLE_ETHEREUM_CONTRACT_BY_NETWORK, - WORMHOLE_NATIVE_WRAPPED_ADDRESS, } from './constants' +import { arrayify, zeroPad } from 'ethers/lib/utils' export const getSolanaTransactionInfo = async ( transactionId: string, @@ -315,6 +318,45 @@ export const getAptosContractAddresses = (network: Network) => { } } +export const getWormchainContractAddresses = (network: Network) => { + const associatedChainContractAddresses = + WORMHOLE_WORMCHAIN_CONTRACT_BY_NETWORK( + network, + ) as WormholeWormchainContractAddresses + const injectiveContractAddresses = WORMHOLE_CONTRACT_BY_NETWORK( + network, + ) as WormholeContractAddresses + + if (!injectiveContractAddresses) { + throw new GeneralException( + new Error(`Contracts for ${network} on Injective not found`), + ) + } + + if (!associatedChainContractAddresses) { + throw new GeneralException( + new Error(`Contracts for ${network} on Wormchain not found`), + ) + } + + if (!injectiveContractAddresses.token_bridge) { + throw new GeneralException( + new Error(`Token Bridge Address for ${network} on Injective not found`), + ) + } + + if (!associatedChainContractAddresses.token_bridge) { + throw new GeneralException( + new Error(`Token Bridge Address for ${network} on Wormchain not found`), + ) + } + + return { + injectiveContractAddresses, + associatedChainContractAddresses, + } +} + export const getContractAddresses = ( network: Network, source: WormholeSource = WormholeSource.Solana, @@ -334,6 +376,8 @@ export const getContractAddresses = ( return getKlaytnContractAddresses(network) case WormholeSource.Aptos: return getAptosContractAddresses(network) + case WormholeSource.Wormchain: + return getWormchainContractAddresses(network) default: return getSolanaContractAddresses(network) } @@ -357,6 +401,8 @@ export const getAssociatedChain = ( return WORMHOLE_CHAINS.klaytn case WormholeSource.Aptos: return WORMHOLE_CHAINS.aptos + case WormholeSource.Wormchain: + return WORMHOLE_CHAINS.wormchain default: return WORMHOLE_CHAINS.solana } @@ -381,11 +427,45 @@ export const getAssociatedChainRecipient = ( throw Error('Aptos not yet implemented') case WormholeSource.Sui: throw Error('Sui not yet implemented') + case WormholeSource.Wormchain: + return Buffer.from(recipient).toString('base64') default: return new SolanaPublicKey(recipient).toString() } } +export const getAssociatedChainRecipientIbc = ( + recipient: string, + source: WormholeSource = WormholeSource.Solana, +) => { + switch (source) { + case WormholeSource.Solana: + const addr = + typeof recipient === 'string' && recipient.startsWith('0x') + ? arrayify(recipient) + : recipient + + return arrayify(zeroPad(new SolanaPublicKey(addr).toBytes(), 32)) + + case WormholeSource.Ethereum: + return arrayify(Buffer.from(zeroPad(recipient, 32))) + case WormholeSource.Arbitrum: + return arrayify(Buffer.from(zeroPad(recipient, 32))) + case WormholeSource.Polygon: + return arrayify(Buffer.from(zeroPad(recipient, 32))) + case WormholeSource.Klaytn: + return arrayify(Buffer.from(zeroPad(recipient, 32))) + case WormholeSource.Aptos: + throw Error('Aptos not yet implemented') + case WormholeSource.Sui: + throw Error('Sui not yet implemented') + case WormholeSource.Wormchain: + return arrayify(Buffer.from(recipient)) + default: + throw Error('Default Not yet implemented') + } +} + export const getEvmNativeAddress = ( network: Network, source: WormholeSource = WormholeSource.Ethereum, diff --git a/packages/contracts/CHANGELOG.md b/packages/contracts/CHANGELOG.md index 4a93b05f5..ba654f7b3 100644 --- a/packages/contracts/CHANGELOG.md +++ b/packages/contracts/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/contracts@1.14.7...@injectivelabs/contracts@1.14.10) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/contracts + + + + + +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/contracts@1.14.6...@injectivelabs/contracts@1.14.7) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/contracts + + + + + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/contracts@1.14.6-beta.13...@injectivelabs/contracts@1.14.6) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/contracts + + + + + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/contracts@1.14.5-beta.9...@injectivelabs/contracts@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/contracts + + + + + ## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/contracts@1.14.4-beta.0...@injectivelabs/contracts@1.14.4) (2023-11-20) **Note:** Version bump only for package @injectivelabs/contracts diff --git a/packages/contracts/package.json b/packages/contracts/package.json index c7b92f7e7..9924ccbca 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/contracts", "description": "Contracts wrapper that can be reused throughout Injective's projects.", - "version": "1.14.5-beta.8", + "version": "1.14.10", "sideEffects": false, "license": "Apache-2.0", "main": "dist/cjs/index.js", @@ -31,10 +31,10 @@ "start": "node dist/index.js" }, "dependencies": { - "@injectivelabs/exceptions": "^1.14.5-beta.5", - "@injectivelabs/networks": "^1.14.5-beta.8", - "@injectivelabs/ts-types": "^1.14.5-beta.0", - "@injectivelabs/utils": "^1.14.5-beta.5", + "@injectivelabs/exceptions": "^1.14.10", + "@injectivelabs/networks": "^1.14.10", + "@injectivelabs/ts-types": "^1.14.10", + "@injectivelabs/utils": "^1.14.10", "ethers": "^5.7.2", "link-module-alias": "^1.2.0", "shx": "^0.3.3" diff --git a/packages/contracts/src/addresses.ts b/packages/contracts/src/addresses.ts index 1f377ff3b..97dec5f21 100644 --- a/packages/contracts/src/addresses.ts +++ b/packages/contracts/src/addresses.ts @@ -60,7 +60,7 @@ export const contractAddressesByNetwork: ContractAddressesForNetwork = { peggy: '0xF955C57f9EA9Dc8781965FEaE0b6A2acE2BAD6f3', injective: '0xe28b3B32B6c345A34Ff64674606124Dd5Aceca30', }, - [Network.Public]: { + [Network.MainnetOld]: { peggy: '0xF955C57f9EA9Dc8781965FEaE0b6A2acE2BAD6f3', injective: '0xe28b3B32B6c345A34Ff64674606124Dd5Aceca30', }, diff --git a/packages/exceptions/CHANGELOG.md b/packages/exceptions/CHANGELOG.md index 204c222e5..736694003 100644 --- a/packages/exceptions/CHANGELOG.md +++ b/packages/exceptions/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/exceptions@1.14.7...@injectivelabs/exceptions@1.14.10) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/exceptions + + + + + +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/exceptions@1.14.6...@injectivelabs/exceptions@1.14.7) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/exceptions + + + + + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/exceptions@1.14.6-beta.9...@injectivelabs/exceptions@1.14.6) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/exceptions + + + + + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/exceptions@1.14.5-beta.6...@injectivelabs/exceptions@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/exceptions + + + + + ## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/exceptions@1.14.4-beta.0...@injectivelabs/exceptions@1.14.4) (2023-11-20) **Note:** Version bump only for package @injectivelabs/exceptions diff --git a/packages/exceptions/package.json b/packages/exceptions/package.json index 97d32a79a..b70f2f176 100644 --- a/packages/exceptions/package.json +++ b/packages/exceptions/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/exceptions", "description": "List of exceptions that can be reused throughout Injective's projects.", - "version": "1.14.5-beta.5", + "version": "1.14.10", "sideEffects": false, "license": "Apache-2.0", "main": "dist/cjs/index.js", @@ -32,7 +32,7 @@ }, "dependencies": { "@injectivelabs/grpc-web": "^0.0.1", - "@injectivelabs/ts-types": "^1.14.5-beta.0", + "@injectivelabs/ts-types": "^1.14.10", "http-status-codes": "^2.2.0", "link-module-alias": "^1.2.0", "shx": "^0.3.2" diff --git a/packages/exceptions/src/exception.ts b/packages/exceptions/src/exception.ts index 8be9e7034..9ddd23592 100644 --- a/packages/exceptions/src/exception.ts +++ b/packages/exceptions/src/exception.ts @@ -119,8 +119,11 @@ export abstract class ConcreteException extends Error implements Exception { } public setStack(stack: string) { - super.stack = stack - this.stack = stack + try { + this.stack = stack + } catch (e) { + // throw nothing here + } } public setName(name: string) { diff --git a/packages/exceptions/src/exceptions/GrpcUnaryRequestException.ts b/packages/exceptions/src/exceptions/GrpcUnaryRequestException.ts index abefb09aa..d4c88eeb6 100644 --- a/packages/exceptions/src/exceptions/GrpcUnaryRequestException.ts +++ b/packages/exceptions/src/exceptions/GrpcUnaryRequestException.ts @@ -1,5 +1,5 @@ import { ConcreteException } from '../exception' -import { ErrorContext, ErrorType } from '../types' +import { ErrorContext, ErrorType, GRPC_REQUEST_FAILED } from '../types' export class GrpcUnaryRequestException extends ConcreteException { public errorClass: string = 'GrpcUnaryRequestException' @@ -15,11 +15,9 @@ export class GrpcUnaryRequestException extends ConcreteException { if (message.toLowerCase().includes('response closed without headers')) { this.setMessage( - 'Product is under heavy load, refresh the page in a few seconds.', - ) - this.setOriginalMessage( - `The product is experiencing higher than usual demand. Hang tight, engineers are doing their best to improve the performance and efficiency.`, + 'The request has failed. The server has closed the connection without sending any headers.', ) + this.setContextCode(GRPC_REQUEST_FAILED) } } } diff --git a/packages/exceptions/src/exceptions/LedgerCosmosException.ts b/packages/exceptions/src/exceptions/LedgerCosmosException.ts new file mode 100644 index 000000000..dbb21de7e --- /dev/null +++ b/packages/exceptions/src/exceptions/LedgerCosmosException.ts @@ -0,0 +1,58 @@ +import { ConcreteException } from '../exception' +import { ErrorContext, ErrorType } from '../types' +import { isCommonLockedError } from '../utils/helpers' + +export class LedgerCosmosException extends ConcreteException { + public errorClass: string = 'LedgerCosmosException' + + constructor(error: Error, context?: ErrorContext) { + super(error, context) + + this.type = ErrorType.WalletError + } + + public parse(): void { + const { message } = this + + if (isCommonLockedError(message)) { + this.setMessage( + 'Please ensure your Ledger is connected, unlocked and your Cosmos app is open.', + ) + } + + if (message.includes('No device selected.')) { + this.setMessage( + 'Please make sure your Ledger device is connected, unlocked and your Cosmos app is open', + ) + } + + if (message.includes('Unable to set device configuration.')) { + this.setMessage( + 'Please restart your Ledger device and try connecting again', + ) + } + + if (message.includes('Cannot read properties of undefined')) { + this.setMessage('Please make sure your Ledger device is connected') + } + + if (message.toLowerCase().includes('locked')) { + this.setMessage( + 'Please make sure your Ledger device is connected, unlocked and your Cosmos app is open', + ) + } + + if ( + message.includes('Condition of use not satisfied') || + message.includes('0x6985') + ) { + this.setMessage('The request has been rejected') + } + + if (message.includes('U2F browser support is needed for Ledger.')) { + this.setMessage( + 'Please use the latest Chrome/Firefox browser versions to connect with your Ledger device', + ) + } + } +} diff --git a/packages/exceptions/src/exceptions/OkxWalletException.ts b/packages/exceptions/src/exceptions/OkxWalletException.ts new file mode 100644 index 000000000..470434000 --- /dev/null +++ b/packages/exceptions/src/exceptions/OkxWalletException.ts @@ -0,0 +1,25 @@ +import { ConcreteException } from '../exception' +import { ErrorContext, ErrorType } from '../types' +import { mapMetamaskMessage } from '../utils/maps' + +const removeOkxWalletFromErrorString = (message: string): string => + message + .replaceAll('OkxWallet', '') + .replaceAll('Okx', '') + .replaceAll('OkxWallet:', '') + +export class OkxWalletException extends ConcreteException { + public errorClass: string = 'OkxWalletException' + + constructor(error: Error, context?: ErrorContext) { + super(error, context) + + this.type = ErrorType.WalletError + } + + public parse(): void { + const { message } = this + + this.setMessage(mapMetamaskMessage(removeOkxWalletFromErrorString(message))) + } +} diff --git a/packages/exceptions/src/exceptions/index.ts b/packages/exceptions/src/exceptions/index.ts index 1356059dc..b0828ecfb 100644 --- a/packages/exceptions/src/exceptions/index.ts +++ b/packages/exceptions/src/exceptions/index.ts @@ -3,8 +3,10 @@ import { HttpRequestException } from './HttpRequestException' import { Web3Exception } from './Web3Exception' import { GeneralException } from './GeneralException' import { LedgerException } from './LedgerException' +import { LedgerCosmosException } from './LedgerCosmosException' import { MetamaskException } from './MetamaskException' import { TrustWalletException } from './TrustWalletException' +import { OkxWalletException } from './OkxWalletException' import { TrezorException } from './TrezorException' import { CosmosWalletException } from './CosmosWalletException' import { TransactionException } from './TransactionException' @@ -20,10 +22,12 @@ export type ThrownException = | LedgerException | MetamaskException | TrustWalletException + | OkxWalletException | TrezorException | CosmosWalletException | TransactionException | WalletException + | LedgerCosmosException export const isThrownException = (exception: Error | Exception): boolean => { if (exception instanceof ConcreteException) { @@ -37,12 +41,14 @@ export const isThrownException = (exception: Error | Exception): boolean => { 'Web3Exception', 'GeneralException', 'LedgerException', + 'LedgerCosmosException', 'MetamaskException', 'TrezorException', 'CosmosWalletException', 'TransactionException', 'WalletException', 'TrustWalletException', + 'OkxWalletException', ].includes(exception.constructor.name) ) { return true @@ -52,15 +58,17 @@ export const isThrownException = (exception: Error | Exception): boolean => { } export { - GrpcUnaryRequestException, - HttpRequestException, Web3Exception, - GeneralException, LedgerException, - MetamaskException, TrezorException, + WalletException, + GeneralException, + MetamaskException, + TransactionException, TrustWalletException, + OkxWalletException, + HttpRequestException, + LedgerCosmosException, CosmosWalletException, - TransactionException, - WalletException, + GrpcUnaryRequestException, } diff --git a/packages/exceptions/src/messages.ts b/packages/exceptions/src/messages.ts index 4ec9d0b76..a638d5346 100644 --- a/packages/exceptions/src/messages.ts +++ b/packages/exceptions/src/messages.ts @@ -522,7 +522,7 @@ const govErrorMap = { [ChainGovErrorCodes.ErrNoProposalHandlerExists]: 'no handler exists for proposal type', [ChainGovErrorCodes.ErrUnroutableProposalMsg]: - 'proposal message not recogized by router', + 'proposal message not recognized by router', [ChainGovErrorCodes.ErrNoProposalMsgs]: 'no messages proposed', [ChainGovErrorCodes.ErrInvalidProposalMsg]: 'invalid proposal message', [ChainGovErrorCodes.ErrInvalidSigner]: @@ -1813,8 +1813,8 @@ export const chainErrorMessagesMap: Record< module: TransactionChainErrorModule.Gov, }, - 'proposal message not recogized by router': { - message: 'proposal message not recogized by router', + 'proposal message not recognized by router': { + message: 'proposal message not recognized by router', code: ChainGovErrorCodes.ErrUnroutableProposalMsg, module: TransactionChainErrorModule.Gov, }, diff --git a/packages/exceptions/src/types/codes.ts b/packages/exceptions/src/types/codes.ts index f2733f3e7..f226c8581 100644 --- a/packages/exceptions/src/types/codes.ts +++ b/packages/exceptions/src/types/codes.ts @@ -1,4 +1,4 @@ -import type { grpc } from '@injectivelabs/grpc-web' +import { grpc } from '@injectivelabs/grpc-web' import { StatusCodes } from 'http-status-codes' export enum TransactionChainErrorModule { @@ -648,7 +648,7 @@ export enum ChainGovErrorCodes { ErrInvalidGenesis = 8, // "no handler exists for proosal type") ErrNoProposalHandlerExists = 9, - // "proposal message not recogized by router") + // "proposal message not recognized by router") ErrUnroutableProposalMsg = 10, // "no messages proposed" ErrNoProposalMsgs = 11, @@ -768,6 +768,7 @@ export type IndexerApiErrorCode = number export const UnspecifiedErrorCode = -1 export type ErrorCode = StatusCodes | typeof UnspecifiedErrorCode | grpc.Code +export const GRPC_REQUEST_FAILED = grpc.Code.Unavailable; export type ErrorContextCode = | ChainAuctionErrorCodes @@ -785,4 +786,5 @@ export type ErrorContextCode = | ChainGovErrorCodes | ChainStakingErrorCodes | ChainWasmErrorCodes + | ErrorCode | typeof UnspecifiedErrorCode diff --git a/packages/exceptions/src/utils/helpers.ts b/packages/exceptions/src/utils/helpers.ts index 2f28aa9d8..d471e7178 100644 --- a/packages/exceptions/src/utils/helpers.ts +++ b/packages/exceptions/src/utils/helpers.ts @@ -9,13 +9,13 @@ export const isCommonLockedError = (error: string) => { 'Failed to open the device', 'Failed to open the device', 'Ledger Device is busy', + 'Ledger device', 'UNKNOWN_ERROR', ] return ( commonMessages.some((m) => m.includes(error)) || - commonMessages - .map((m) => m.toLowerCase()) - .some((m) => m.includes(error.toLowerCase())) + commonMessages.some((m) => error.toLowerCase().includes(m)) || + commonMessages.some((m) => m.toLowerCase().includes(error.toLowerCase())) ) } diff --git a/packages/exceptions/src/utils/maps.ts b/packages/exceptions/src/utils/maps.ts index a6805724b..ba908506c 100644 --- a/packages/exceptions/src/utils/maps.ts +++ b/packages/exceptions/src/utils/maps.ts @@ -149,5 +149,21 @@ export const mapMetamaskMessage = (message: string): string => { return 'Your Metamask selected network is incorrect' } - return message + if ( + parsedMessage + .toLowerCase() + .includes('missing or invalid parameters'.toLowerCase()) + ) { + return 'Please make sure you are using Metamask' + } + + if ( + parsedMessage + .toLowerCase() + .includes('Keyring Controller signTypedMessage'.toLowerCase()) + ) { + return 'Please ensure your Ledger is connected, unlocked and your Ethereum app is open.' + } + + return message.replaceAll('Keyring Controller signTypedMessage:', '') } diff --git a/packages/networks/CHANGELOG.md b/packages/networks/CHANGELOG.md index 354a9e616..e84de7adc 100644 --- a/packages/networks/CHANGELOG.md +++ b/packages/networks/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/networks@1.14.7...@injectivelabs/networks@1.14.10) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/networks + + + + + +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/networks@1.14.6...@injectivelabs/networks@1.14.7) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/networks + + + + + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/networks@1.14.6-beta.13...@injectivelabs/networks@1.14.6) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/networks + + + + + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/networks@1.14.5-beta.9...@injectivelabs/networks@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/networks + + + + + ## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/networks@1.14.4-beta.0...@injectivelabs/networks@1.14.4) (2023-11-20) **Note:** Version bump only for package @injectivelabs/networks diff --git a/packages/networks/package.json b/packages/networks/package.json index 64a57a723..49f80ca78 100644 --- a/packages/networks/package.json +++ b/packages/networks/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/networks", "description": "Endpoints, networks, etc. Can be reused throughout Injective's projects.", - "version": "1.14.5-beta.8", + "version": "1.14.10", "sideEffects": false, "license": "Apache-2.0", "author": { @@ -31,9 +31,9 @@ "start": "node dist/index.js" }, "dependencies": { - "@injectivelabs/exceptions": "^1.14.5-beta.5", - "@injectivelabs/ts-types": "^1.14.5-beta.0", - "@injectivelabs/utils": "^1.14.5-beta.5", + "@injectivelabs/exceptions": "^1.14.10", + "@injectivelabs/ts-types": "^1.14.10", + "@injectivelabs/utils": "^1.14.10", "link-module-alias": "^1.2.0", "shx": "^0.3.2" }, diff --git a/packages/networks/src/constants.ts b/packages/networks/src/constants.ts index 657ced2ee..abbbc70ea 100644 --- a/packages/networks/src/constants.ts +++ b/packages/networks/src/constants.ts @@ -3,9 +3,9 @@ import { Network } from './types' export const CW20_ADAPTER_CONTRACT_BY_NETWORK = { [Network.Mainnet]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', [Network.MainnetLB]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', + [Network.MainnetOld]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', [Network.MainnetK8s]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', [Network.MainnetSentry]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', - [Network.Public]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', [Network.Staging]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', [Network.Internal]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', [Network.Testnet]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', @@ -21,10 +21,10 @@ export const CW20_ADAPTER_CONTRACT_BY_NETWORK = { export const CW20_SWAP_CONTRACT_BY_NETWORK = { [Network.Mainnet]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', [Network.MainnetLB]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', + [Network.MainnetOld]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', [Network.MainnetK8s]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', [Network.MainnetSentry]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.Public]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.Staging]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', + [Network.Staging]: 'inj12yj3mtjarujkhcp6lg3klxjjfrx2v7v8yswgp9', [Network.Internal]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', [Network.Testnet]: 'inj14d7h5j6ddq6pqppl65z24w7xrtmpcrqjxj8d43', [Network.TestnetK8s]: 'inj14d7h5j6ddq6pqppl65z24w7xrtmpcrqjxj8d43', @@ -39,9 +39,9 @@ export const CW20_SWAP_CONTRACT_BY_NETWORK = { export const INCENTIVES_CONTRACT_BY_NETWORK = { [Network.Mainnet]: '', [Network.MainnetLB]: '', + [Network.MainnetOld]: '', [Network.MainnetK8s]: '', [Network.MainnetSentry]: '', - [Network.Public]: '', [Network.Staging]: '', [Network.Internal]: '', [Network.Testnet]: 'inj16twru668nsl7tqzahxd9q033swhr6a5xuslpkt', @@ -59,7 +59,7 @@ export const INJ_NAME_REGISTRY_CONTRACT_BY_NETWORK = { [Network.MainnetLB]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', [Network.MainnetK8s]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', [Network.MainnetSentry]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', - [Network.Public]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', + [Network.MainnetOld]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', [Network.Staging]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', [Network.Internal]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', [Network.Testnet]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', @@ -77,7 +77,7 @@ export const INJ_NAME_REVERSE_RESOLVER_CONTRACT_BY_NETWORK = { [Network.MainnetLB]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', [Network.MainnetK8s]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', [Network.MainnetSentry]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', - [Network.Public]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', + [Network.MainnetOld]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', [Network.Staging]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', [Network.Internal]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', [Network.Testnet]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', @@ -99,7 +99,7 @@ export const PEGGY_GRAPH_URL_BY_NETWORK = { 'https://api.thegraph.com/subgraphs/name/injectivelabs/injective-peggo-mainnet', [Network.MainnetSentry]: 'https://api.thegraph.com/subgraphs/name/injectivelabs/injective-peggo-mainnet', - [Network.Public]: + [Network.MainnetOld]: 'https://api.thegraph.com/subgraphs/name/injectivelabs/injective-peggo-mainnet', [Network.Staging]: 'https://api.thegraph.com/subgraphs/name/injectivelabs/injective-peggo-mainnet', @@ -132,7 +132,7 @@ export const ASSET_PRICE_URL_BY_NETWORK = { 'https://k8s.mainnet.asset.injective.network/asset-price/v1', [Network.MainnetSentry]: 'https://k8s.mainnet.asset.injective.network/asset-price/v1', - [Network.Public]: + [Network.MainnetOld]: 'https://k8s.mainnet.asset.injective.network/asset-price/v1', [Network.Staging]: 'https://k8s.mainnet.asset.injective.network/asset-price/v1', diff --git a/packages/networks/src/endpoints.ts b/packages/networks/src/endpoints.ts index 7c676ce4e..b1b9256f9 100644 --- a/packages/networks/src/endpoints.ts +++ b/packages/networks/src/endpoints.ts @@ -7,41 +7,13 @@ export const endpointsMainnetSentry: NetworkEndpoints = { rest: 'https://sentry.lcd.injective.network', chronos: 'https://sentry.exchange.grpc-web.injective.network', explorer: 'https://sentry.exchange.grpc-web.injective.network', - cache: 'https://staging.gateway.grpc-web.injective.network', + cacheGrpc: 'https://sentry.chain.grpc-web.injective.network', + cacheRest: 'https://staging.gateway.grpc-web.injective.network', web3gw: 'https://sentry.exchange.grpc-web.injective.network', } -export const endpointsMainnetK8s: NetworkEndpoints = { - indexer: 'https://k8s.mainnet.exchange.grpc-web.injective.network', - grpc: 'https://k8s.mainnet.chain.grpc-web.injective.network', - rpc: 'https://k8s.mainnet.tm.injective.network', - rest: 'https://k8s.mainnet.lcd.injective.network', - chronos: 'https://k8s.mainnet.exchange.grpc-web.injective.network', - explorer: 'https://k8s.mainnet.exchange.grpc-web.injective.network', - cache: 'https://k8s.mainnet.exchange.grpc-web.injective.network', - web3gw: 'https://k8s.mainnet.exchange.grpc-web.injective.network', -} - -export const endpointsMainnetLB: NetworkEndpoints = { - indexer: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', - grpc: 'https://k8s.global.mainnet.chain.grpc-web.injective.network', - rpc: 'https://k8s.global.mainnet.tm.injective.network', - rest: 'https://k8s.global.mainnet.lcd.injective.network', - chronos: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', - explorer: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', - cache: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', - web3gw: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', -} - export const endpointsMainnet: NetworkEndpoints = { - indexer: 'https://api.injective.network', - grpc: 'https://grpc.injective.network', - rpc: 'https://tm.injective.network', - rest: 'https://lcd.injective.network', - chronos: 'https://api.injective.network', - explorer: 'https://api.injective.network', - cache: 'https://api.injective.network', - web3gw: 'https://api.injective.network', + ...endpointsMainnetSentry, } export const endpointsStaging: NetworkEndpoints = { @@ -51,14 +23,11 @@ export const endpointsStaging: NetworkEndpoints = { rest: 'https://staging.lcd.injective.network', chronos: 'https://staging.api.injective.network', explorer: 'https://staging.api.injective.network', - cache: 'https://staging.api.injective.network', + cacheGrpc: 'https://staging.grpc.injective.network', + cacheRest: 'https://staging.gateway.grpc-web.injective.network', web3gw: 'https://staging.api.injective.network', } -export const endpointsPublic: NetworkEndpoints = { - ...endpointsStaging, -} - export const endpointsInternal: NetworkEndpoints = { indexer: 'https://products.exchange.grpc-web.injective.network', grpc: 'https://products.chain.grpc-web.injective.network', @@ -66,7 +35,8 @@ export const endpointsInternal: NetworkEndpoints = { rest: 'https://products.lcd.injective.network', chronos: 'https://products.chronos.grpc-web.injective.network', explorer: 'https://products.explorer.grpc-web.injective.network', - cache: 'https://staging.gateway.grpc-web.injective.network', + cacheGrpc: 'https://products.chain.grpc-web.injective.network', + cacheRest: 'https://staging.gateway.grpc-web.injective.network', web3gw: 'https://products.web3-gateway.injective.network', } @@ -77,41 +47,13 @@ export const endpointsTestnetSentry: NetworkEndpoints = { rest: 'https://testnet.sentry.lcd.injective.network', chronos: 'https://testnet.sentry.exchange.grpc-web.injective.network', explorer: 'https://testnet.sentry.exchange.grpc-web.injective.network', - cache: 'https://testnet.sentry.exchange.grpc-web.injective.network', + cacheGrpc: 'https://testnet.sentry.chain.grpc-web.injective.network', + cacheRest: 'https://testnet.sentry.exchange.grpc-web.injective.network', web3gw: 'https://testnet.sentry.exchange.grpc-web.injective.network', } -export const endpointsTestnetK8s: NetworkEndpoints = { - indexer: 'https://k8s.testnet.exchange.grpc-web.injective.network', - grpc: 'https://k8s.testnet.chain.grpc-web.injective.network', - rpc: 'https://k8s.testnet.tm.injective.network', - rest: 'https://k8s.testnet.lcd.injective.network', - chronos: 'https://k8s.testnet.exchange.grpc-web.injective.network', - explorer: 'https://k8s.testnet.explorer.grpc-web.injective.network', - cache: 'https://k8s.testnet.gateway.grpc-web.injective.network', - web3gw: 'https://k8s.testnet.exchange.grpc-web.injective.network', -} - export const endpointsTestnet: NetworkEndpoints = { - indexer: 'https://testnet.exchange.grpc-web.injective.network', - grpc: 'https://testnet.chain.grpc-web.injective.network', - rpc: 'https://testnet.tm.injective.network', - rest: 'https://testnet.lcd.injective.network', - chronos: 'https://testnet.exchange.grpc-web.injective.network', - explorer: 'https://testnet.exchange.grpc-web.injective.network', - web3gw: 'https://testnet.exchange.grpc-web.injective.network', - cache: 'https://testnet.exchange.grpc-web.injective.network', -} - -export const endpointsTestnetOld: NetworkEndpoints = { - indexer: 'https://testnet.exchange.grpc-web.injective.dev', - grpc: 'https://testnet.chain.grpc-web.injective.dev', - rpc: 'https://testnet.tm.injective.dev', - rest: 'https://testnet.lcd.injective.dev', - chronos: 'https://testnet.exchange.grpc-web.injective.dev', - explorer: 'https://testnet.exchange.grpc-web.injective.dev', - cache: 'https://testnet.exchange.grpc-web.injective.dev', - web3gw: 'https://testnet.exchange.grpc-web.injective.dev', + ...endpointsTestnetSentry, } export const endpointsDevnet: NetworkEndpoints = { @@ -121,7 +63,8 @@ export const endpointsDevnet: NetworkEndpoints = { rest: 'https://devnet.lcd.injective.dev', chronos: 'https://devnet.api.injective.dev', explorer: 'https://devnet.api.injective.dev', - cache: 'https://devnet.api.injective.dev', + cacheGrpc: 'https://devnet.grpc.injective.dev', + cacheRest: 'https://devnet.api.injective.dev', web3gw: 'https://devnet.api.injective.dev', } @@ -132,7 +75,8 @@ export const endpointsDevnet1: NetworkEndpoints = { rest: 'https://devnet-1.lcd.injective.dev', chronos: 'https://devnet-1.api.injective.dev', explorer: 'https://devnet-1.api.injective.dev', - cache: 'https://devnet-1.api.injective.dev', + cacheGrpc: 'https://devnet-1.grpc.injective.dev', + cacheRest: 'https://devnet-1.api.injective.dev', web3gw: 'https://devnet-1.api.injective.dev', } @@ -143,7 +87,8 @@ export const endpointsDevnet2: NetworkEndpoints = { rest: 'https://devnet-2.lcd.injective.dev', chronos: 'https://devnet-2.api.injective.dev', explorer: 'https://devnet-2.api.injective.dev', - cache: 'https://devnet-2.api.injective.dev', + cacheGrpc: 'https://devnet-2.grpc.injective.dev', + cacheRest: 'https://devnet-2.api.injective.dev', web3gw: 'https://devnet-2.api.injective.dev', } @@ -153,7 +98,83 @@ export const endpointsLocal: NetworkEndpoints = { rpc: 'http://localhost:9091', rest: 'http://localhost:9091', chronos: 'https://localhost:4445', - explorer: 'https://localhost:4446', - cache: 'https://localhost:4444', + explorer: 'http://localhost:4446', + cacheGrpc: 'http://localhost:9091', + cacheRest: 'https://localhost:4444', web3gw: 'https://localhost:4444', } + +/** + * @deprecated use TestnetSentry instead + */ +export const endpointsTestnetOld: NetworkEndpoints = { + indexer: 'https://testnet.exchange.grpc-web.injective.network', + grpc: 'https://testnet.chain.grpc-web.injective.network', + rpc: 'https://testnet.tm.injective.network', + rest: 'https://testnet.lcd.injective.network', + chronos: 'https://testnet.exchange.grpc-web.injective.network', + explorer: 'https://testnet.exchange.grpc-web.injective.network', + web3gw: 'https://testnet.exchange.grpc-web.injective.network', + cacheGrpc: 'https://testnet.exchange.grpc-web.injective.network/', + cacheRest: 'https://testnet.exchange.grpc-web.injective.network', +} + +/** + * @deprecated use TestnetSentry instead + */ +export const endpointsTestnetK8s: NetworkEndpoints = { + indexer: 'https://k8s.testnet.exchange.grpc-web.injective.network', + grpc: 'https://k8s.testnet.chain.grpc-web.injective.network', + rpc: 'https://k8s.testnet.tm.injective.network', + rest: 'https://k8s.testnet.lcd.injective.network', + chronos: 'https://k8s.testnet.exchange.grpc-web.injective.network', + explorer: 'https://k8s.testnet.explorer.grpc-web.injective.network', + cacheGrpc: 'https://k8s.testnet.gateway.grpc.injective.network', + cacheRest: 'https://k8s.testnet.gateway.grpc-web.injective.network', + web3gw: 'https://k8s.testnet.exchange.grpc-web.injective.network', +} + +/** + * @deprecated use MainnetSentry instead + */ +export const endpointsMainnetLB: NetworkEndpoints = { + indexer: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', + grpc: 'https://k8s.global.mainnet.chain.grpc-web.injective.network', + rpc: 'https://k8s.global.mainnet.tm.injective.network', + rest: 'https://k8s.global.mainnet.lcd.injective.network', + chronos: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', + explorer: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', + cacheGrpc: 'https://k8s.global.mainnet.chain.grpc-web.injective.network', + cacheRest: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', + web3gw: 'https://k8s.global.mainnet.exchange.grpc-web.injective.network', +} + +/** + * @deprecated use MainnetSentry instead + */ +export const endpointsMainnetOld: NetworkEndpoints = { + indexer: 'https://api.injective.network', + grpc: 'https://grpc.injective.network', + cacheGrpc: 'https://grpc.injective.network', + rpc: 'https://tm.injective.network', + rest: 'https://lcd.injective.network', + cacheRest: 'https://api.injective.network', + chronos: 'https://api.injective.network', + explorer: 'https://api.injective.network', + web3gw: 'https://api.injective.network', +} + +/** + * @deprecated use MainnetSentry instead + */ +export const endpointsMainnetK8s: NetworkEndpoints = { + indexer: 'https://k8s.mainnet.exchange.grpc-web.injective.network', + grpc: 'https://k8s.mainnet.chain.grpc-web.injective.network', + rpc: 'https://k8s.mainnet.tm.injective.network', + rest: 'https://k8s.mainnet.lcd.injective.network', + chronos: 'https://k8s.mainnet.exchange.grpc-web.injective.network', + explorer: 'https://k8s.mainnet.exchange.grpc-web.injective.network', + cacheGrpc: 'https://k8s.mainnet.chain.grpc-web.injective.network', + cacheRest: 'https://k8s.mainnet.exchange.grpc-web.injective.network', + web3gw: 'https://k8s.mainnet.exchange.grpc-web.injective.network', +} diff --git a/packages/networks/src/network.ts b/packages/networks/src/network.ts index 7d4a3fc34..b7d78a623 100644 --- a/packages/networks/src/network.ts +++ b/packages/networks/src/network.ts @@ -6,7 +6,6 @@ import { } from './chainInfos' import { endpointsLocal, - endpointsPublic, endpointsDevnet, endpointsTestnet, endpointsMainnet, @@ -18,6 +17,7 @@ import { endpointsTestnetK8s, endpointsTestnetOld, endpointsMainnetK8s, + endpointsMainnetOld, endpointsMainnetSentry, endpointsTestnetSentry, } from './endpoints' @@ -27,9 +27,9 @@ export const networkEndpoints: Record = { [Network.MainnetLB]: endpointsMainnetLB, [Network.MainnetK8s]: endpointsMainnetK8s, [Network.MainnetSentry]: endpointsMainnetSentry, + [Network.MainnetOld]: endpointsMainnetOld, [Network.Staging]: endpointsStaging, [Network.Mainnet]: endpointsMainnet, - [Network.Public]: endpointsPublic, [Network.Internal]: endpointsInternal, [Network.Devnet]: endpointsDevnet, [Network.Devnet1]: endpointsDevnet1, @@ -45,9 +45,9 @@ export const chainInfos: Record = { [Network.MainnetLB]: mainnetChainInfo, [Network.MainnetK8s]: mainnetChainInfo, [Network.MainnetSentry]: mainnetChainInfo, + [Network.MainnetOld]: mainnetChainInfo, [Network.Staging]: mainnetChainInfo, [Network.Mainnet]: mainnetChainInfo, - [Network.Public]: mainnetChainInfo, [Network.Internal]: mainnetChainInfo, [Network.Devnet]: devnetChainInfo, [Network.Devnet1]: devnetChainInfo, @@ -82,9 +82,9 @@ export const getNetworkInfo = ( export const isMainnet = (network: Network) => [ - Network.Public, Network.Staging, Network.Mainnet, + Network.MainnetOld, Network.MainnetK8s, Network.MainnetSentry, Network.Internal, diff --git a/packages/networks/src/types.ts b/packages/networks/src/types.ts index 619c7979f..f6e4cbbc7 100644 --- a/packages/networks/src/types.ts +++ b/packages/networks/src/types.ts @@ -5,8 +5,8 @@ export enum Network { MainnetLB = 'mainnetLB', Mainnet = 'mainnet', MainnetSentry = 'mainnetSentry', + MainnetOld = 'mainnetOld', Staging = 'staging', - Public = 'public', Internal = 'internal', // @deprecated TestnetK8s = 'testnetK8s', TestnetOld = 'testnetOld', @@ -23,7 +23,8 @@ export type NetworkEndpoints = { grpc: string // Sentry gRPC rest: string // LCD rpc?: string // Tendermint - cache?: string // Cache Service + cacheGrpc?: string // Cache gRPC service + cacheRest?: string // Cache LCD service chronos?: string // Chronos Service web3gw?: string // Web3Gateway Service explorer?: string // Explorer Service diff --git a/packages/sdk-ts/CHANGELOG.md b/packages/sdk-ts/CHANGELOG.md index affa55cc9..8c2d31649 100644 --- a/packages/sdk-ts/CHANGELOG.md +++ b/packages/sdk-ts/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.4-beta.3...@injectivelabs/sdk-ts@1.14.4) (2023-11-20) +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.8...@injectivelabs/sdk-ts@1.14.10) (2024-03-03) **Note:** Version bump only for package @injectivelabs/sdk-ts @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.3-beta.22...@injectivelabs/sdk-ts@1.14.3) (2023-11-17) +## [1.14.8](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.7...@injectivelabs/sdk-ts@1.14.8) (2024-03-03) **Note:** Version bump only for package @injectivelabs/sdk-ts @@ -19,24 +19,45 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.2-beta.13...@injectivelabs/sdk-ts@1.14.2) (2023-11-07) +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.7-beta.2...@injectivelabs/sdk-ts@1.14.7) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/sdk-ts -### Reverts -* faulty version ([6e25b3f](https://github.com/InjectiveLabs/injective-ts/commit/6e25b3f156d964666db8bc7885df653166aac523)) +## [1.14.7-beta.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.7-beta.0...@injectivelabs/sdk-ts@1.14.7-beta.1) (2024-03-02) +**Note:** Version bump only for package @injectivelabs/sdk-ts +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.6-beta.58...@injectivelabs/sdk-ts@1.14.6) (2024-03-01) -## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.1-beta.24...@injectivelabs/sdk-ts@1.14.1) (2023-10-27) +**Note:** Version bump only for package @injectivelabs/sdk-ts + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.5-beta.67...@injectivelabs/sdk-ts@1.14.5) (2024-01-11) + +### Features + +- cid ([b286316](https://github.com/InjectiveLabs/injective-ts/commit/b286316549a80ba64af9ba946d9166e1cd638fd7)) + +## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.4-beta.3...@injectivelabs/sdk-ts@1.14.4) (2023-11-20) + +**Note:** Version bump only for package @injectivelabs/sdk-ts + +## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.3-beta.22...@injectivelabs/sdk-ts@1.14.3) (2023-11-17) **Note:** Version bump only for package @injectivelabs/sdk-ts +## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.2-beta.13...@injectivelabs/sdk-ts@1.14.2) (2023-11-07) + +### Reverts +- faulty version ([6e25b3f](https://github.com/InjectiveLabs/injective-ts/commit/6e25b3f156d964666db8bc7885df653166aac523)) +## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.1-beta.24...@injectivelabs/sdk-ts@1.14.1) (2023-10-27) +**Note:** Version bump only for package @injectivelabs/sdk-ts ## [1.14.1-beta.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ts@1.14.1-beta.1...@injectivelabs/sdk-ts@1.14.1-beta.2) (2023-09-24) diff --git a/packages/sdk-ts/package.json b/packages/sdk-ts/package.json index 1161a5e87..afadb496d 100644 --- a/packages/sdk-ts/package.json +++ b/packages/sdk-ts/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/sdk-ts", "description": "SDK in TypeScript for building Injective applications in a browser, node, and react native environment.", - "version": "1.14.5-beta.63", + "version": "1.14.11-beta.1", "sideEffects": false, "license": "Apache-2.0", "author": { @@ -32,30 +32,30 @@ }, "dependencies": { "@apollo/client": "^3.5.8", - "@cosmjs/amino": "^0.31.3", - "@cosmjs/proto-signing": "^0.31.3", - "@cosmjs/stargate": "^0.31.3", + "@cosmjs/amino": "^0.32.2", + "@cosmjs/proto-signing": "^0.32.2", + "@cosmjs/stargate": "^0.32.2", "@ensdomains/ens-validation": "^0.1.0", "@ensdomains/eth-ens-namehash": "^2.0.15", "@ethersproject/bytes": "^5.7.0", "@injectivelabs/core-proto-ts": "^0.0.21", "@injectivelabs/dmm-proto-ts": "1.0.19", - "@injectivelabs/exceptions": "^1.14.5-beta.5", + "@injectivelabs/exceptions": "^1.14.10", "@injectivelabs/grpc-web": "^0.0.1", "@injectivelabs/grpc-web-node-http-transport": "^0.0.2", "@injectivelabs/grpc-web-react-native-transport": "^0.0.2", - "@injectivelabs/indexer-proto-ts": "1.11.32", - "@injectivelabs/mito-proto-ts": "1.0.55", - "@injectivelabs/networks": "^1.14.5-beta.8", + "@injectivelabs/indexer-proto-ts": "1.11.37", + "@injectivelabs/mito-proto-ts": "1.0.62", + "@injectivelabs/networks": "^1.14.10", "@injectivelabs/test-utils": "^1.14.3", - "@injectivelabs/token-metadata": "^1.14.5-beta.42", - "@injectivelabs/ts-types": "^1.14.5-beta.0", - "@injectivelabs/utils": "^1.14.5-beta.5", + "@injectivelabs/token-metadata": "^1.14.11-beta.0", + "@injectivelabs/ts-types": "^1.14.10", + "@injectivelabs/utils": "^1.14.10", "@metamask/eth-sig-util": "^4.0.0", "axios": "^0.27.2", "bech32": "^2.0.0", "bip39": "^3.0.4", - "cosmjs-types": "^0.7.1", + "cosmjs-types": "^0.9.0", "ethereumjs-util": "^7.1.4", "ethers": "^5.7.2", "google-protobuf": "^3.21.0", diff --git a/packages/sdk-ts/src/client/chain/transformers/ChainGrpcAuthTransformer.ts b/packages/sdk-ts/src/client/chain/transformers/ChainGrpcAuthTransformer.ts index d58d32c7d..1a6a7c092 100644 --- a/packages/sdk-ts/src/client/chain/transformers/ChainGrpcAuthTransformer.ts +++ b/packages/sdk-ts/src/client/chain/transformers/ChainGrpcAuthTransformer.ts @@ -2,9 +2,10 @@ import { grpcPaginationToPagination } from '../../../utils/pagination' import { uint8ArrayToString } from '../../../utils' import { Account, AuthModuleParams } from '../types/auth' import { - CosmosAuthV1Beta1Query, GoogleProtobufAny, + CosmosAuthV1Beta1Query, InjectiveTypesV1Beta1Account, + InjectiveCryptoV1Beta1Ethsecp256k1Keys, } from '@injectivelabs/core-proto-ts' /** @@ -38,7 +39,11 @@ export class ChainGrpcAuthTransformer { address: baseAccount.address, pubKey: pubKey ? { - key: uint8ArrayToString(pubKey.value), + key: Buffer.from( + InjectiveCryptoV1Beta1Ethsecp256k1Keys.PubKey.decode( + pubKey.value, + ).key, + ).toString('base64'), typeUrl: pubKey.typeUrl, } : undefined, diff --git a/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcCampaignApi.ts b/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcCampaignApi.ts index 77654fa75..76b31a04d 100644 --- a/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcCampaignApi.ts +++ b/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcCampaignApi.ts @@ -30,17 +30,18 @@ export class IndexerGrpcCampaignApi extends BaseGrpcConsumer { marketId, campaignId, accountAddress, + contractAddress, }: { skip?: string limit?: number marketId?: string campaignId: string accountAddress?: string + contractAddress?: string }) { const request = InjectiveCampaignRpc.RankingRequest.create() request.campaignId = campaignId - if (skip) { request.skip = skip } @@ -57,6 +58,10 @@ export class IndexerGrpcCampaignApi extends BaseGrpcConsumer { request.accountAddress = accountAddress } + if (contractAddress) { + request.contractAddress = contractAddress + } + try { const response = await this.retry( () => this.client.Ranking(request), @@ -82,10 +87,14 @@ export class IndexerGrpcCampaignApi extends BaseGrpcConsumer { async fetchRound({ roundId, + toRoundId, accountAddress, + contractAddress, }: { roundId?: string + toRoundId?: number accountAddress?: string + contractAddress?: string }) { const request = InjectiveCampaignRpc.CampaignsRequest.create() @@ -97,12 +106,20 @@ export class IndexerGrpcCampaignApi extends BaseGrpcConsumer { request.accountAddress = accountAddress } + if (toRoundId) { + request.toRoundId = toRoundId + } + + if (contractAddress) { + request.contractAddress = contractAddress + } + try { const response = await this.retry( () => this.client.Campaigns(request), ) - return response + return IndexerCampaignTransformer.RoundsResponseToRounds(response) } catch (e: unknown) { if (e instanceof InjectiveCampaignRpc.GrpcWebError) { throw new GrpcUnaryRequestException(new Error(e.toString()), { diff --git a/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcMitoApi.spec.ts b/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcMitoApi.spec.ts index 98c103414..b6a5bf849 100644 --- a/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcMitoApi.spec.ts +++ b/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcMitoApi.spec.ts @@ -462,4 +462,30 @@ describe('IndexerGrpcMitoApi', () => { ) } }) + + test('fetchClaimReferences', async () => { + try { + const response = await indexerGrpcMitoApi.fetchClaimReferences({ + idoAddress, + accountAddress: injectiveAddress, + }) + + if (response.claimReferences.length === 0) { + console.warn('fetchClaimReferences.responseIsEmptyArray') + } + + expect(response).toBeDefined() + expect(response).toEqual( + expect.objectContaining< + ReturnType< + typeof IndexerGrpcMitoTransformer.claimReferencesResponseToClaimReferences + > + >(response), + ) + } catch (e) { + console.error( + 'IndexerGrpcMitoApi.fetchClaimReferences => ' + (e as any).message, + ) + } + }) }) diff --git a/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcMitoApi.ts b/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcMitoApi.ts index ab2fe923c..b3adc8295 100644 --- a/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcMitoApi.ts +++ b/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcMitoApi.ts @@ -949,4 +949,53 @@ export class IndexerGrpcMitoApi extends BaseGrpcConsumer { }) } } + + async fetchClaimReferences({ + skip, + limit, + idoAddress, + accountAddress, + }: { + skip?: number + limit?: number + idoAddress: string + accountAddress: string + }) { + const request = MitoApi.GetClaimReferencesRequest.create() + + request.idoAddress = idoAddress + request.accountAddress = accountAddress + + if (skip) { + request.skip = skip + } + + if (limit) { + request.limit = limit + } + + try { + const response = await this.retry( + () => this.client.GetClaimReferences(request), + ) + + return IndexerGrpcMitoTransformer.claimReferencesResponseToClaimReferences( + response, + ) + } catch (e: unknown) { + if (e instanceof InjectiveMetaRpc.GrpcWebError) { + throw new GrpcUnaryRequestException(new Error(e.toString()), { + code: e.code, + context: 'GetClaimReferences', + contextModule: this.module, + }) + } + + throw new GrpcUnaryRequestException(e as Error, { + code: UnspecifiedErrorCode, + context: 'GetClaimReferences', + contextModule: this.module, + }) + } + } } diff --git a/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcTradingApi.ts b/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcTradingApi.ts index 807ae5fed..49f1d85ea 100644 --- a/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcTradingApi.ts +++ b/packages/sdk-ts/src/client/indexer/grpc/IndexerGrpcTradingApi.ts @@ -27,11 +27,15 @@ export class IndexerGrpcTradingApi extends BaseGrpcConsumer { subaccountId, state, marketId, + limit, + skip, }: { accountAddress?: string subaccountId?: string state?: string marketId?: string + limit?: number + skip?: number }) { const request = InjectiveTradingRpc.ListTradingStrategiesRequest.create() @@ -47,6 +51,14 @@ export class IndexerGrpcTradingApi extends BaseGrpcConsumer { request.state = state } + if (limit) { + request.limit = limit + } + + if (skip) { + request.skip = skip.toString() + } + if (marketId) { request.marketId = marketId } diff --git a/packages/sdk-ts/src/client/indexer/transformers/IndexerCampaignTransformer.ts b/packages/sdk-ts/src/client/indexer/transformers/IndexerCampaignTransformer.ts index f6dc45262..503ad7cae 100644 --- a/packages/sdk-ts/src/client/indexer/transformers/IndexerCampaignTransformer.ts +++ b/packages/sdk-ts/src/client/indexer/transformers/IndexerCampaignTransformer.ts @@ -45,6 +45,12 @@ export class IndexerCampaignTransformer { startDate: parseInt(campaign.startDate, 10), endDate: parseInt(campaign.endDate, 10), isClaimable: campaign.isClaimable, + rewards: campaign.rewards, + roundId: campaign.roundId, + userClaimed: campaign.userClaimed, + userScore: campaign.userScore, + rewardContract: campaign.rewardContract, + version: campaign.version, } } @@ -121,6 +127,18 @@ export class IndexerCampaignTransformer { } } + static RoundsResponseToRounds( + response: InjectiveCampaignRpc.CampaignsResponse, + ) { + return { + campaigns: response.campaigns.map((campaign) => + IndexerCampaignTransformer.GrpcCampaignToCampaign(campaign), + ), + accumulatedRewards: response.accumulatedRewards, + rewardCount: response.rewardCount, + } + } + static GuildsResponseToGuilds( response: InjectiveCampaignRpc.ListGuildsResponse, ) { diff --git a/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcDerivativeTransformer.ts b/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcDerivativeTransformer.ts index d6e356b90..075c0fd32 100644 --- a/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcDerivativeTransformer.ts +++ b/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcDerivativeTransformer.ts @@ -44,6 +44,7 @@ import { } from '../types/exchange' import { grpcPagingToPaging } from '../../../utils/pagination' import { InjectiveDerivativeExchangeRpc } from '@injectivelabs/indexer-proto-ts' +import { TokenType } from '@injectivelabs/token-metadata' const zeroPositionDelta = () => ({ tradeDirection: TradeDirection.Buy, @@ -71,6 +72,7 @@ export class IndexerGrpcDerivativeTransformer { decimals: tokenMeta.decimals, updatedAt: tokenMeta.updatedAt, coinGeckoId: '', + tokenType: TokenType.Unknown, } } @@ -455,6 +457,7 @@ export class IndexerGrpcDerivativeTransformer { orderHash: order.orderHash, orderSide: order.orderSide as OrderSide, marketId: order.marketId, + cid: order.cid, subaccountId: order.subaccountId, isReduceOnly: order.isReduceOnly, margin: order.margin, @@ -489,6 +492,7 @@ export class IndexerGrpcDerivativeTransformer { return { orderHash: orderHistory.orderHash, marketId: orderHistory.marketId, + cid: orderHistory.cid, isActive: orderHistory.isActive, subaccountId: orderHistory.subaccountId, executionType: orderHistory.executionType, diff --git a/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcMitoTransformer.ts b/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcMitoTransformer.ts index 6bc8c22b9..45aef55fb 100644 --- a/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcMitoTransformer.ts +++ b/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcMitoTransformer.ts @@ -16,8 +16,11 @@ import { MitoSubscription, MitoIDOSubscriber, MitoPriceSnapshot, + MitoClaimReference, MitoIDOSubscription, MitoWhitelistAccount, + MitoVestingConfig, + MitoVestingConfigMap, MitoLeaderboardEpoch, MitoSubaccountBalance, MitoMissionLeaderboard, @@ -119,6 +122,9 @@ export class IndexerGrpcMitoTransformer { updatedAt: parseInt(vault.updatedAt, 10), createdAt: parseInt(vault.createdAt, 10), apy: vault.apy, + apyue: vault.apyue, + apy7D: vault.apy7D, + apy7DFq: vault.apy7DFq, profits: IndexerGrpcMitoTransformer.changesResponseToChanges( vault.profits, ), @@ -345,9 +351,11 @@ export class IndexerGrpcMitoTransformer { capPerAddress: IDO.capPerAddress, contractAddress: IDO.contractAddress, subscribedAmount: IDO.subscribedAmount, + isLaunchWithVault: IDO.isLaunchWithVault, targetAmountInUsd: IDO.targetAmountInUsd, projectTokenAmount: IDO.projectTokenAmount, isAccountWhiteListed: IDO.isAccountWhiteListed, + isVestingScheduleEnabled: IDO.isVestingScheduleEnabled, targetAmountInQuoteDenom: IDO.targetAmountInQuoteDenom, endTime: parseInt(IDO.endTime, 10), startTime: parseInt(IDO.startTime, 10), @@ -364,6 +372,10 @@ export class IndexerGrpcMitoTransformer { stakeToSubscription: IDO.stakeToSubscription.map( IndexerGrpcMitoTransformer.mitoStakedToSubscriptionToStakedToSubscription, ), + vestingConfig: + IndexerGrpcMitoTransformer.mitoIDOInitParamsToIDOVestingConfig( + IDO.initParams, + ), } } @@ -448,11 +460,66 @@ export class IndexerGrpcMitoTransformer { account: MitoApi.WhitelistAccount, ): MitoWhitelistAccount { return { + weight: account.weight, accountAddress: account.accountAddress, updatedAt: parseInt(account.updatedAt, 10), } } + static mitoClaimReferenceToClaimReference( + claimReference: MitoApi.ClaimReference, + ): MitoClaimReference { + return { + denom: claimReference.denom, + claimedAmount: claimReference.claimedAmount, + accountAddress: claimReference.accountAddress, + claimableAmount: claimReference.claimableAmount, + cwContractAddress: claimReference.cwContractAddress, + idoContractAddress: claimReference.idoContractAddress, + vestingDurationSeconds: parseInt( + claimReference.vestingDurationSeconds, + 10, + ), + updatedAt: parseInt(claimReference.updatedAt, 10), + startVestingTime: parseInt(claimReference.startVestingTime, 10), + } + } + + static mitoVestingCOonfigToVestingConfig( + config?: MitoApi.VestingConfig, + ): MitoVestingConfig { + return { + schedule: config?.schedule || '', + vestingDurationSeconds: parseInt( + config?.vestingDurationSeconds || '0', + 10, + ), + vestingStartDelaySeconds: parseInt( + config?.vestingDurationSeconds || '0', + 10, + ), + } + } + + static mitoIDOInitParamsToIDOVestingConfig( + initParams?: MitoApi.InitParams, + ): MitoVestingConfigMap | undefined { + if (!initParams || !initParams.vestingConfig) { + return + } + + return { + projectOwnerQuote: + IndexerGrpcMitoTransformer.mitoVestingCOonfigToVestingConfig( + initParams.vestingConfig.projectOwnerQuote, + ), + usersProjectToken: + IndexerGrpcMitoTransformer.mitoVestingCOonfigToVestingConfig( + initParams.vestingConfig.usersProjectToken, + ), + } + } + static vaultResponseToVault(response: MitoApi.GetVaultResponse): MitoVault { const [vault] = response.vault @@ -659,4 +726,22 @@ export class IndexerGrpcMitoTransformer { ), } } + + static claimReferencesResponseToClaimReferences( + response: MitoApi.GetClaimReferencesResponse, + ): { + claimReferences: MitoClaimReference[] + pagination?: MitoPagination + } { + return { + claimReferences: response.claimReferences + ? response.claimReferences.map( + IndexerGrpcMitoTransformer.mitoClaimReferenceToClaimReference, + ) + : [], + pagination: IndexerGrpcMitoTransformer.mitoPaginationToPagination( + response.pagination, + ), + } + } } diff --git a/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcSpotTransformer.ts b/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcSpotTransformer.ts index 52ed5738f..f07029077 100644 --- a/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcSpotTransformer.ts +++ b/packages/sdk-ts/src/client/indexer/transformers/IndexerGrpcSpotTransformer.ts @@ -28,6 +28,7 @@ import { } from '../types/exchange' import { grpcPagingToPaging } from '../../../utils/pagination' import { InjectiveSpotExchangeRpc } from '@injectivelabs/indexer-proto-ts' +import { TokenType } from '@injectivelabs/token-metadata' const zeroPriceLevel = () => ({ price: '0', @@ -54,6 +55,7 @@ export class IndexerGrpcSpotTransformer { decimals: tokenMeta.decimals, updatedAt: tokenMeta.updatedAt, coinGeckoId: '', + tokenType: TokenType.Unknown, } } @@ -228,6 +230,7 @@ export class IndexerGrpcSpotTransformer { orderHash: order.orderHash, orderSide: order.orderSide as OrderSide, marketId: order.marketId, + cid: order.cid, subaccountId: order.subaccountId, price: order.price, state: order.state as OrderState, @@ -252,6 +255,7 @@ export class IndexerGrpcSpotTransformer { return { orderHash: orderHistory.orderHash, marketId: orderHistory.marketId, + cid: orderHistory.cid, active: orderHistory.isActive, subaccountId: orderHistory.subaccountId, executionType: orderHistory.executionType, diff --git a/packages/sdk-ts/src/client/indexer/transformers/IndexerRestExplorerTransformer.ts b/packages/sdk-ts/src/client/indexer/transformers/IndexerRestExplorerTransformer.ts index 5f23cb046..17f447a84 100644 --- a/packages/sdk-ts/src/client/indexer/transformers/IndexerRestExplorerTransformer.ts +++ b/packages/sdk-ts/src/client/indexer/transformers/IndexerRestExplorerTransformer.ts @@ -112,7 +112,7 @@ export class IndexerRestExplorerTransformer { })), logs: transaction.logs, errorLog: transaction.error_log, - claimIds: transaction.claim_id || [] + claimIds: transaction.claim_id || [], } } @@ -291,8 +291,8 @@ export class IndexerRestExplorerTransformer { logo: marketing_info ? marketing_info.logo || '' : '', cw20: { decimals, + symbol, address: balance.contract_address, - tokenType: TokenType.Cw20, }, coinGeckoId: name, tokenType: TokenType.Cw20, diff --git a/packages/sdk-ts/src/client/indexer/types/campaign.ts b/packages/sdk-ts/src/client/indexer/types/campaign.ts index 488e0c734..f36e1cbe5 100644 --- a/packages/sdk-ts/src/client/indexer/types/campaign.ts +++ b/packages/sdk-ts/src/client/indexer/types/campaign.ts @@ -9,6 +9,12 @@ export interface Campaign { startDate: number endDate: number isClaimable: boolean + rewards: Coin[] + roundId: number + userClaimed: boolean + userScore: string + rewardContract: string + version: string } export interface CampaignUser { diff --git a/packages/sdk-ts/src/client/indexer/types/derivatives.ts b/packages/sdk-ts/src/client/indexer/types/derivatives.ts index e0f50dcb2..2971e5ec5 100644 --- a/packages/sdk-ts/src/client/indexer/types/derivatives.ts +++ b/packages/sdk-ts/src/client/indexer/types/derivatives.ts @@ -117,6 +117,7 @@ export interface DerivativeLimitOrder { orderHash: string orderSide: OrderSide marketId: string + cid: string subaccountId: string isReduceOnly: boolean margin: string @@ -139,6 +140,7 @@ export interface DerivativeLimitOrder { export interface DerivativeOrderHistory { orderHash: string marketId: string + cid: string isActive: boolean subaccountId: string executionType: string diff --git a/packages/sdk-ts/src/client/indexer/types/exchange.ts b/packages/sdk-ts/src/client/indexer/types/exchange.ts index 6d41fdc8d..0ee993143 100644 --- a/packages/sdk-ts/src/client/indexer/types/exchange.ts +++ b/packages/sdk-ts/src/client/indexer/types/exchange.ts @@ -1,4 +1,5 @@ import { InjectiveSpotExchangeRpc } from '@injectivelabs/indexer-proto-ts' +import { TokenType } from '@injectivelabs/token-metadata' export interface PriceLevel { price: string @@ -17,9 +18,10 @@ export interface OrderbookWithSequence { sells: PriceLevel[] } +export type GrpcTokenMeta = InjectiveSpotExchangeRpc.TokenMeta +export type GrpcPriceLevel = InjectiveSpotExchangeRpc.PriceLevel + export interface IndexerTokenMeta extends GrpcTokenMeta { coinGeckoId: string + tokenType: TokenType } - -export type GrpcTokenMeta = InjectiveSpotExchangeRpc.TokenMeta -export type GrpcPriceLevel = InjectiveSpotExchangeRpc.PriceLevel diff --git a/packages/sdk-ts/src/client/indexer/types/mito.ts b/packages/sdk-ts/src/client/indexer/types/mito.ts index 4b6418930..c76fccb52 100644 --- a/packages/sdk-ts/src/client/indexer/types/mito.ts +++ b/packages/sdk-ts/src/client/indexer/types/mito.ts @@ -55,6 +55,9 @@ export interface MitoVault { notionalValueCap: string tvlChanges?: MitoChanges apy: number + apy7D: number + apy7DFq: number + apyue: number } export interface MitoSubscription { @@ -188,6 +191,22 @@ export interface MitoStakeToSubscription { subscribableAmount: string } +export interface MitoVestingConfig { + vestingDurationSeconds?: number + vestingStartDelaySeconds?: number + schedule?: string +} + +export interface MitoVestingConfigMap { + projectOwnerQuote?: MitoVestingConfig + projectOwnerLpTokens?: MitoVestingConfig + usersProjectToken?: MitoVestingConfig +} + +export interface MitoIDOInitParams { + vestingConfig?: MitoVestingConfigMap +} + export interface MitoIDO { startTime: number endTime: number @@ -203,6 +222,8 @@ export interface MitoIDO { targetAmountInUsd: string tokenPrice: number isAccountWhiteListed: boolean + isLaunchWithVault: boolean + isVestingScheduleEnabled: boolean name: string progress: MitoIDOProgress[] quoteDenom: string @@ -210,6 +231,7 @@ export interface MitoIDO { useWhitelist: boolean marketId: string vaultAddress: string + vestingConfig?: MitoVestingConfigMap } export interface MitoIDOSubscriber { @@ -248,6 +270,19 @@ export interface MitoIDOSubscription { export interface MitoWhitelistAccount { accountAddress: string updatedAt: number + weight: string +} + +export interface MitoClaimReference { + denom: string + updatedAt: number + claimedAmount: string + claimableAmount: string + accountAddress: string + cwContractAddress: string + idoContractAddress: string + startVestingTime: number + vestingDurationSeconds: number } export type GrpcMitoIDO = MitoApi.IDO @@ -264,6 +299,7 @@ export type GrpcMitoDenomBalance = MitoApi.DenomBalance export type GrpcMitoSubscription = MitoApi.Subscription export type GrpcMitoPriceSnapshot = MitoApi.PriceSnapshot export type GrpcMitoIDOSubscriber = MitoApi.IDOSubscriber +export type GrpcMitoClaimReference = MitoApi.ClaimReference export type GrpcMitoIDOSubscription = MitoApi.IDOSubscription export type GrpcMitoLeaderboardEntry = MitoApi.LeaderboardEntry export type GrpcMitoLeaderboardEpoch = MitoApi.LeaderboardEpoch diff --git a/packages/sdk-ts/src/client/indexer/types/spot.ts b/packages/sdk-ts/src/client/indexer/types/spot.ts index dcd29dc6f..953b30910 100644 --- a/packages/sdk-ts/src/client/indexer/types/spot.ts +++ b/packages/sdk-ts/src/client/indexer/types/spot.ts @@ -27,6 +27,7 @@ export interface SpotMarket { } export interface SpotLimitOrder { + cid: string orderHash: string orderSide: OrderSide marketId: string @@ -44,6 +45,7 @@ export interface SpotLimitOrder { export interface SpotOrderHistory { orderHash: string marketId: string + cid: string active: boolean subaccountId: string executionType: string diff --git a/packages/sdk-ts/src/client/wasm/index.ts b/packages/sdk-ts/src/client/wasm/index.ts index cedc2a149..ee5d1a42e 100644 --- a/packages/sdk-ts/src/client/wasm/index.ts +++ b/packages/sdk-ts/src/client/wasm/index.ts @@ -2,3 +2,4 @@ export * from './swap' export * from './types' export * from './incentives' export * from './nameservice' +export * from './trading_strategies' diff --git a/packages/sdk-ts/src/client/wasm/trading_strategies/index.ts b/packages/sdk-ts/src/client/wasm/trading_strategies/index.ts new file mode 100644 index 000000000..1fa837263 --- /dev/null +++ b/packages/sdk-ts/src/client/wasm/trading_strategies/index.ts @@ -0,0 +1 @@ +export * from './queries' diff --git a/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractConfig.ts b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractConfig.ts new file mode 100644 index 000000000..c855ac67a --- /dev/null +++ b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractConfig.ts @@ -0,0 +1,12 @@ +import { BaseWasmQuery } from '../../BaseWasmQuery' +import { toBase64 } from '../../../../utils' + +export declare namespace QueryTradingStrategyContractConfig { + export interface Params {} +} + +export class QueryTradingStrategyContractConfig extends BaseWasmQuery { + toPayload() { + return toBase64({}) + } +} diff --git a/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractStrategies.ts b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractStrategies.ts new file mode 100644 index 000000000..85107a3cc --- /dev/null +++ b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractStrategies.ts @@ -0,0 +1,18 @@ +import { BaseWasmQuery } from '../../BaseWasmQuery' +import { toBase64 } from '../../../../utils' + +export declare namespace QueryTradingStrategyContractStrategies { + export interface Params { + startAfter?: string + limit?: number + } +} + +export class QueryTradingStrategyContractStrategies extends BaseWasmQuery { + toPayload() { + return toBase64({ + start_after: this.params.startAfter, + limit: this.params.limit, + }) + } +} diff --git a/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractTotalStrategies.ts b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractTotalStrategies.ts new file mode 100644 index 000000000..e1b7c4953 --- /dev/null +++ b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractTotalStrategies.ts @@ -0,0 +1,16 @@ +import { BaseWasmQuery } from '../../BaseWasmQuery' +import { toBase64 } from '../../../../utils' + +export declare namespace QueryTradingStrategyContractTotalStrategies { + export interface Params { + user: string + } +} + +export class QueryTradingStrategyContractTotalStrategies extends BaseWasmQuery { + toPayload() { + return toBase64({ + user: this.params.user, + }) + } +} diff --git a/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractUserStrategies.ts b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractUserStrategies.ts new file mode 100644 index 000000000..ea7edd294 --- /dev/null +++ b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/QueryTradingStrategyContractUserStrategies.ts @@ -0,0 +1,16 @@ +import { BaseWasmQuery } from '../../BaseWasmQuery' +import { toBase64 } from '../../../../utils' + +export declare namespace QueryTradingStrategyContractUserStrategies { + export interface Params { + user: string + } +} + +export class QueryTradingStrategyContractUserStrategies extends BaseWasmQuery { + toPayload() { + return toBase64({ + user: this.params.user, + }) + } +} diff --git a/packages/sdk-ts/src/client/wasm/trading_strategies/queries/index.ts b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/index.ts new file mode 100644 index 000000000..a99f9efdb --- /dev/null +++ b/packages/sdk-ts/src/client/wasm/trading_strategies/queries/index.ts @@ -0,0 +1,4 @@ +export { QueryTradingStrategyContractConfig } from './QueryTradingStrategyContractConfig' +export { QueryTradingStrategyContractStrategies } from './QueryTradingStrategyContractStrategies' +export { QueryTradingStrategyContractUserStrategies } from './QueryTradingStrategyContractUserStrategies' +export { QueryTradingStrategyContractTotalStrategies } from './QueryTradingStrategyContractTotalStrategies' diff --git a/packages/sdk-ts/src/client/wasm/trading_strategies/types.ts b/packages/sdk-ts/src/client/wasm/trading_strategies/types.ts new file mode 100644 index 000000000..39996231d --- /dev/null +++ b/packages/sdk-ts/src/client/wasm/trading_strategies/types.ts @@ -0,0 +1,40 @@ +import { + ExitConfig, + ExitType, + StrategyType, + TrailingArithmetic, +} from '../../../core/modules/wasm/types' + +export type QueryTradingStrategyContractSrategyResponse = { + user: string + subaccount_id: string + info: { + lower_bound: string + upper_bound: string + levels: number + prices: string[] + } + stop_loss?: ExitConfig + take_profit?: ExitConfig + target_value_per_order: string + exit_type: ExitType + order_state: { + buy_orders: number + sell_orders: number + omit_order: 'buy' | 'sell' + } + retry_count: number + strategy_type: StrategyType | TrailingArithmetic +} + +export type QueryTradingStrategyContractConfigResponse = { + owner: string + base_decimals: number + quote_decimals: number + market_id: string + small_order_threshold: string + maximum_order_value_deviation: string + maximum_rebalance_retries: number + default_slippage: string + version: string +} diff --git a/packages/sdk-ts/src/core/accounts/PublicKey.ts b/packages/sdk-ts/src/core/accounts/PublicKey.ts index e7b57aef5..c30aa86fd 100644 --- a/packages/sdk-ts/src/core/accounts/PublicKey.ts +++ b/packages/sdk-ts/src/core/accounts/PublicKey.ts @@ -54,7 +54,10 @@ export class PublicKey { } public toBech32(): string { - return bech32.encode(BECH32_PUBKEY_ACC_PREFIX, this.key) + return bech32.encode( + BECH32_PUBKEY_ACC_PREFIX, + bech32.toWords(Buffer.from(this.toHex(), 'hex')), + ) } public toAddress(): Address { diff --git a/packages/sdk-ts/src/core/accounts/signers/DirectEthSecp256k1Wallet.ts b/packages/sdk-ts/src/core/accounts/signers/DirectEthSecp256k1Wallet.ts index 601cb10c2..747c1ed20 100644 --- a/packages/sdk-ts/src/core/accounts/signers/DirectEthSecp256k1Wallet.ts +++ b/packages/sdk-ts/src/core/accounts/signers/DirectEthSecp256k1Wallet.ts @@ -3,7 +3,6 @@ import { PrivateKey } from '../PrivateKey' import { PublicKey } from '../PublicKey' import { AccountData, OfflineDirectSigner } from './types/proto-signer' import { CosmosTxV1Beta1Tx } from '@injectivelabs/core-proto-ts' -import Long from 'long' export class DirectEthSecp256k1Wallet implements OfflineDirectSigner { /** @@ -52,7 +51,7 @@ export class DirectEthSecp256k1Wallet implements OfflineDirectSigner { public async signDirect( address: string, signDoc: Omit & { - accountNumber: Long + accountNumber: bigint }, ): Promise { const signBytes = makeSignBytes(signDoc) diff --git a/packages/sdk-ts/src/core/modules/exchange/index.ts b/packages/sdk-ts/src/core/modules/exchange/index.ts index 81c38a468..97e1d5dda 100644 --- a/packages/sdk-ts/src/core/modules/exchange/index.ts +++ b/packages/sdk-ts/src/core/modules/exchange/index.ts @@ -3,6 +3,7 @@ import MsgWithdraw from './msgs/MsgWithdraw' import MsgRewardsOptOut from './msgs/MsgRewardsOptOut' import MsgCancelSpotOrder from './msgs/MsgCancelSpotOrder' import MsgExternalTransfer from './msgs/MsgExternalTransfer' +import MsgLiquidatePosition from './msgs/MsgLiquidatePosition' import MsgBatchUpdateOrders from './msgs/MsgBatchUpdateOrders' import MsgReclaimLockedFunds from './msgs/MsgReclaimLockedFunds' import MsgCreateSpotLimitOrder from './msgs/MsgCreateSpotLimitOrder' @@ -26,6 +27,7 @@ export { MsgRewardsOptOut, MsgCancelSpotOrder, MsgExternalTransfer, + MsgLiquidatePosition, MsgBatchUpdateOrders, MsgReclaimLockedFunds, MsgCreateSpotLimitOrder, diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelBinaryOptionsOrders.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelBinaryOptionsOrders.spec.ts index e5e9f8c58..6e43a1eb5 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelBinaryOptionsOrders.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelBinaryOptionsOrders.spec.ts @@ -9,11 +9,13 @@ const params: MsgBatchCancelDerivativeOrders['params'] = { marketId: mockFactory.injUsdtDerivativeMarket.marketId, orderHash: mockFactory.orderHash, subaccountId: mockFactory.subaccountId, + cid: '', }, { marketId: mockFactory.injUsdtDerivativeMarket.marketId, orderHash: mockFactory.orderHash2, subaccountId: mockFactory.subaccountId, + cid: '', }, ], } diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelBinaryOptionsOrders.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelBinaryOptionsOrders.ts index 07936cbd6..3322946ce 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelBinaryOptionsOrders.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelBinaryOptionsOrders.ts @@ -11,8 +11,9 @@ export declare namespace MsgBatchCancelBinaryOptionsOrders { orders: { marketId: string subaccountId: string - orderHash: string + orderHash?: string orderMask?: InjectiveExchangeV1Beta1Exchange.OrderMask + cid?: string }[] } @@ -39,9 +40,16 @@ export default class MsgBatchCancelBinaryOptionsOrders extends MsgBase< const orderDataList = params.orders.map((order) => { const orderData = InjectiveExchangeV1Beta1Tx.OrderData.create() orderData.marketId = order.marketId - orderData.orderHash = order.orderHash orderData.subaccountId = order.subaccountId + if (order.orderHash) { + orderData.orderHash = order.orderHash + } + + if (order.cid) { + orderData.cid = order.cid + } + // TODO: Send order.orderMask instead when chain handles order mask properly. orderData.orderMask = InjectiveExchangeV1Beta1Exchange.OrderMask.ANY diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelDerivativeOrders.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelDerivativeOrders.spec.ts index e5e9f8c58..6e43a1eb5 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelDerivativeOrders.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelDerivativeOrders.spec.ts @@ -9,11 +9,13 @@ const params: MsgBatchCancelDerivativeOrders['params'] = { marketId: mockFactory.injUsdtDerivativeMarket.marketId, orderHash: mockFactory.orderHash, subaccountId: mockFactory.subaccountId, + cid: '', }, { marketId: mockFactory.injUsdtDerivativeMarket.marketId, orderHash: mockFactory.orderHash2, subaccountId: mockFactory.subaccountId, + cid: '', }, ], } diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelDerivativeOrders.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelDerivativeOrders.ts index 1aa1cc357..92fc887f2 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelDerivativeOrders.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelDerivativeOrders.ts @@ -11,8 +11,9 @@ export declare namespace MsgBatchCancelDerivativeOrders { orders: { marketId: string subaccountId: string - orderHash: string + orderHash?: string orderMask?: InjectiveExchangeV1Beta1Exchange.OrderMask + cid?: string }[] } @@ -38,9 +39,16 @@ export default class MsgBatchCancelDerivativeOrders extends MsgBase< const orderDataList = params.orders.map((order) => { const orderData = InjectiveExchangeV1Beta1Tx.OrderData.create() orderData.marketId = order.marketId - orderData.orderHash = order.orderHash orderData.subaccountId = order.subaccountId + if (order.cid) { + orderData.cid = order.cid + } + + if (order.orderHash) { + orderData.orderHash = order.orderHash + } + // TODO: Send order.orderMask instead when chain handles order mask properly. orderData.orderMask = InjectiveExchangeV1Beta1Exchange.OrderMask.ANY diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelSpotOrders.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelSpotOrders.spec.ts index 56fae6eee..5c1e12681 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelSpotOrders.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelSpotOrders.spec.ts @@ -9,11 +9,13 @@ const params: MsgBatchCancelSpotOrders['params'] = { marketId: mockFactory.injUsdtSpotMarket.marketId, orderHash: mockFactory.orderHash, subaccountId: mockFactory.subaccountId, + cid: '', }, { marketId: mockFactory.injUsdtSpotMarket.marketId, orderHash: mockFactory.orderHash2, subaccountId: mockFactory.subaccountId, + cid: '', }, ], } diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelSpotOrders.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelSpotOrders.ts index 5bec98fff..1f8e6756e 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelSpotOrders.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchCancelSpotOrders.ts @@ -11,8 +11,9 @@ export declare namespace MsgBatchCancelSpotOrders { orders: { marketId: string subaccountId: string - orderHash: string + orderHash?: string orderMask?: InjectiveExchangeV1Beta1Exchange.OrderMask + cid?: string }[] } @@ -38,9 +39,16 @@ export default class MsgBatchCancelSpotOrders extends MsgBase< const orderDataList = params.orders.map((order) => { const orderData = InjectiveExchangeV1Beta1Tx.OrderData.create() orderData.marketId = order.marketId - orderData.orderHash = order.orderHash orderData.subaccountId = order.subaccountId + if (order.orderHash) { + orderData.orderHash = order.orderHash + } + + if (order.cid) { + orderData.cid = order.cid + } + // TODO: Send order.orderMask instead when chain handles order mask properly. orderData.orderMask = InjectiveExchangeV1Beta1Exchange.OrderMask.ANY diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchUpdateOrders.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchUpdateOrders.ts index 67152f663..121e5c1df 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchUpdateOrders.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgBatchUpdateOrders.ts @@ -15,17 +15,20 @@ export declare namespace MsgBatchUpdateOrders { spotOrdersToCancel?: { marketId: string subaccountId: string - orderHash: string + orderHash?: string + cid?: string }[] derivativeOrdersToCancel?: { marketId: string subaccountId: string - orderHash: string + orderHash?: string + cid?: string }[] binaryOptionsOrdersToCancel?: { marketId: string subaccountId: string - orderHash: string + orderHash?: string + cid?: string }[] spotOrdersToCreate?: { orderType: InjectiveExchangeV1Beta1Exchange.OrderType @@ -34,6 +37,7 @@ export declare namespace MsgBatchUpdateOrders { feeRecipient: string price: string quantity: string + cid?: string }[] derivativeOrdersToCreate?: { orderType: InjectiveExchangeV1Beta1Exchange.OrderType @@ -43,6 +47,7 @@ export declare namespace MsgBatchUpdateOrders { price: string margin: string quantity: string + cid?: string }[] binaryOptionsOrdersToCreate?: { orderType: InjectiveExchangeV1Beta1Exchange.OrderType @@ -52,6 +57,7 @@ export declare namespace MsgBatchUpdateOrders { price: string margin: string quantity: string + cid?: string }[] injectiveAddress: string } @@ -104,11 +110,18 @@ export default class MsgBatchUpdateOrders extends MsgBase< if (params.spotOrdersToCancel && params.spotOrdersToCancel.length > 0) { const orderData = params.spotOrdersToCancel.map( - ({ marketId, subaccountId, orderHash }) => { + ({ marketId, subaccountId, orderHash, cid }) => { const orderData = InjectiveExchangeV1Beta1Tx.OrderData.create() orderData.marketId = marketId orderData.subaccountId = subaccountId - orderData.orderHash = orderHash + + if (orderHash) { + orderData.orderHash = orderHash + } + + if (cid) { + orderData.cid = cid + } return orderData }, @@ -122,11 +135,18 @@ export default class MsgBatchUpdateOrders extends MsgBase< params.derivativeOrdersToCancel.length > 0 ) { const orderData = params.derivativeOrdersToCancel.map( - ({ marketId, subaccountId, orderHash }) => { + ({ marketId, subaccountId, orderHash, cid }) => { const orderData = InjectiveExchangeV1Beta1Tx.OrderData.create() orderData.marketId = marketId orderData.subaccountId = subaccountId - orderData.orderHash = orderHash + + if (orderHash) { + orderData.orderHash = orderHash + } + + if (cid) { + orderData.cid = cid + } return orderData }, @@ -139,11 +159,18 @@ export default class MsgBatchUpdateOrders extends MsgBase< params.binaryOptionsOrdersToCancel.length > 0 ) { const orderData = params.binaryOptionsOrdersToCancel.map( - ({ marketId, subaccountId, orderHash }) => { + ({ marketId, subaccountId, orderHash, cid }) => { const orderData = InjectiveExchangeV1Beta1Tx.OrderData.create() orderData.marketId = marketId orderData.subaccountId = subaccountId - orderData.orderHash = orderHash + + if (orderHash) { + orderData.orderHash = orderHash + } + + if (cid) { + orderData.cid = cid + } return orderData }, @@ -169,6 +196,10 @@ export default class MsgBatchUpdateOrders extends MsgBase< orderInfo.price = paramsFromArgs.price orderInfo.quantity = paramsFromArgs.quantity + if (paramsFromArgs.cid) { + orderInfo.cid = paramsFromArgs.cid + } + const order = InjectiveExchangeV1Beta1Exchange.SpotOrder.create() order.marketId = paramsFromArgs.marketId order.orderType = paramsFromArgs.orderType @@ -205,6 +236,10 @@ export default class MsgBatchUpdateOrders extends MsgBase< orderInfo.price = paramsFromArgs.price orderInfo.quantity = paramsFromArgs.quantity + if (paramsFromArgs.cid) { + orderInfo.cid = paramsFromArgs.cid + } + const order = InjectiveExchangeV1Beta1Exchange.DerivativeOrder.create() order.marketId = paramsFromArgs.marketId order.orderType = paramsFromArgs.orderType @@ -240,6 +275,10 @@ export default class MsgBatchUpdateOrders extends MsgBase< orderInfo.price = paramsFromArgs.price orderInfo.quantity = paramsFromArgs.quantity + if (paramsFromArgs.cid) { + orderInfo.cid = paramsFromArgs.cid + } + const order = InjectiveExchangeV1Beta1Exchange.DerivativeOrder.create() order.marketId = paramsFromArgs.marketId order.orderType = paramsFromArgs.orderType diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelBinaryOptionsOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelBinaryOptionsOrder.spec.ts index 9ef973129..4596ee182 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelBinaryOptionsOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelBinaryOptionsOrder.spec.ts @@ -7,6 +7,7 @@ const params: MsgCancelBinaryOptionsOrder['params'] = { marketId: mockFactory.injUsdtDerivativeMarket.marketId, orderHash: mockFactory.orderHash, subaccountId: mockFactory.subaccountId, + cid: '', } const protoType = '/injective.exchange.v1beta1.MsgCancelBinaryOptionsOrder' @@ -16,6 +17,7 @@ const protoParams = { marketId: params.marketId, orderHash: params.orderHash, subaccountId: params.subaccountId, + cid: params.cid, orderMask: 1, } const protoParamsAmino = snakecaseKeys(protoParams) diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelBinaryOptionsOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelBinaryOptionsOrder.ts index 61762663f..9fade4ca3 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelBinaryOptionsOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelBinaryOptionsOrder.ts @@ -10,8 +10,9 @@ export declare namespace MsgCancelBinaryOptionsOrder { marketId: string subaccountId: string injectiveAddress: string - orderHash: string + orderHash?: string orderMask?: InjectiveExchangeV1Beta1Exchange.OrderMask + cid?: string } export type Proto = InjectiveExchangeV1Beta1Tx.MsgCancelBinaryOptionsOrder @@ -37,9 +38,16 @@ export default class MsgCancelBinaryOptionsOrder extends MsgBase< InjectiveExchangeV1Beta1Tx.MsgCancelBinaryOptionsOrder.create() message.sender = params.injectiveAddress message.marketId = params.marketId - message.orderHash = params.orderHash message.subaccountId = params.subaccountId + if (params.orderHash) { + message.orderHash = params.orderHash + } + + if (params.cid) { + message.cid = params.cid + } + // TODO: Send order.orderMask instead when chain handles order mask properly. message.orderMask = InjectiveExchangeV1Beta1Exchange.OrderMask.ANY diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelDerivativeOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelDerivativeOrder.spec.ts index c4b32522a..96b7d09b9 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelDerivativeOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelDerivativeOrder.spec.ts @@ -7,6 +7,7 @@ const params: MsgCancelDerivativeOrder['params'] = { marketId: mockFactory.injUsdtDerivativeMarket.marketId, orderHash: mockFactory.orderHash, subaccountId: mockFactory.subaccountId, + cid: '', } const protoType = '/injective.exchange.v1beta1.MsgCancelDerivativeOrder' @@ -17,6 +18,7 @@ const protoParams = { orderHash: params.orderHash, subaccountId: params.subaccountId, orderMask: 1, + cid: params.cid, } const protoParamsAmino = snakecaseKeys(protoParams) diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelDerivativeOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelDerivativeOrder.ts index d860699c3..502e90359 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelDerivativeOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelDerivativeOrder.ts @@ -10,8 +10,9 @@ export declare namespace MsgCancelDerivativeOrder { marketId: string subaccountId: string injectiveAddress: string - orderHash: string + orderHash?: string orderMask?: InjectiveExchangeV1Beta1Exchange.OrderMask + cid?: string } export type Proto = InjectiveExchangeV1Beta1Tx.MsgCancelDerivativeOrder @@ -33,9 +34,17 @@ export default class MsgCancelDerivativeOrder extends MsgBase< const message = InjectiveExchangeV1Beta1Tx.MsgCancelDerivativeOrder.create() message.sender = params.injectiveAddress message.marketId = params.marketId - message.orderHash = params.orderHash + message.subaccountId = params.subaccountId + if (params.orderHash) { + message.orderHash = params.orderHash + } + + if (params.cid) { + message.cid = params.cid + } + // TODO: Send order.orderMask instead when chain handles order mask properly. message.orderMask = InjectiveExchangeV1Beta1Exchange.OrderMask.ANY diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelSpotOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelSpotOrder.spec.ts index 0a65a8376..56c228f5a 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelSpotOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelSpotOrder.spec.ts @@ -7,6 +7,7 @@ const params: MsgCancelSpotOrder['params'] = { marketId: mockFactory.injUsdtSpotMarket.marketId, orderHash: mockFactory.orderHash, subaccountId: mockFactory.subaccountId, + cid: '', } const protoType = '/injective.exchange.v1beta1.MsgCancelSpotOrder' @@ -16,6 +17,7 @@ const protoParams = { marketId: params.marketId, orderHash: params.orderHash, subaccountId: params.subaccountId, + cid: params.cid, } const protoParamsAmino = snakecaseKeys(protoParams) diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelSpotOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelSpotOrder.ts index 5d72761a2..8de03e919 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelSpotOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCancelSpotOrder.ts @@ -7,7 +7,8 @@ export declare namespace MsgCancelSpotOrder { marketId: string subaccountId: string injectiveAddress: string - orderHash: string + orderHash?: string + cid?: string } export type Proto = InjectiveExchangeV1Beta1Tx.MsgCancelSpotOrder @@ -30,9 +31,16 @@ export default class MsgCancelSpotOrder extends MsgBase< const message = InjectiveExchangeV1Beta1Tx.MsgCancelSpotOrder.create() message.sender = params.injectiveAddress message.marketId = params.marketId - message.orderHash = params.orderHash message.subaccountId = params.subaccountId + if (params.orderHash) { + message.orderHash = params.orderHash + } + + if (params.cid) { + message.cid = params.cid + } + // TODO: message.setOrderMask does not exist yet, enable this once it does. return InjectiveExchangeV1Beta1Tx.MsgCancelSpotOrder.fromPartial(message) diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsLimitOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsLimitOrder.spec.ts index 48dabfa72..c151f8447 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsLimitOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsLimitOrder.spec.ts @@ -12,6 +12,7 @@ const params: MsgCreateBinaryOptionsLimitOrder['params'] = { quantity: '100', subaccountId: mockFactory.subaccountId, triggerPrice: '0', + cid: '', } const protoType = '/injective.exchange.v1beta1.MsgCreateBinaryOptionsLimitOrder' @@ -25,6 +26,7 @@ const protoParams = { price: params.price, quantity: params.quantity, subaccountId: params.subaccountId, + cid: params.cid, }, orderType: params.orderType, margin: params.margin, diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsLimitOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsLimitOrder.ts index 8a01b64e1..360cdf678 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsLimitOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsLimitOrder.ts @@ -17,6 +17,7 @@ export declare namespace MsgCreateBinaryOptionsLimitOrder { price: string margin: string quantity: string + cid?: string } export type Proto = @@ -30,6 +31,10 @@ const createLimitOrder = (params: MsgCreateBinaryOptionsLimitOrder.Params) => { orderInfo.price = params.price orderInfo.quantity = params.quantity + if (params.cid) { + orderInfo.cid = params.cid + } + const derivativeOrder = InjectiveExchangeV1Beta1Exchange.DerivativeOrder.create() derivativeOrder.marketId = params.marketId diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsMarketOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsMarketOrder.spec.ts index 4bc321760..7fcc287c8 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsMarketOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsMarketOrder.spec.ts @@ -11,6 +11,7 @@ const params: MsgCreateBinaryOptionsMarketOrder['params'] = { price: '1765000', quantity: '100', subaccountId: mockFactory.subaccountId, + cid: '', triggerPrice: '0', } @@ -27,6 +28,7 @@ const protoParams = { price: params.price, quantity: params.quantity, subaccountId: params.subaccountId, + cid: params.cid, }, orderType: params.orderType, triggerPrice: params.triggerPrice, diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsMarketOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsMarketOrder.ts index f07c5365e..5a84f40cd 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsMarketOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateBinaryOptionsMarketOrder.ts @@ -17,6 +17,7 @@ export declare namespace MsgCreateBinaryOptionsMarketOrder { price: string margin: string quantity: string + cid?: string } export type Proto = @@ -32,6 +33,10 @@ const createMarketOrder = ( orderInfo.price = params.price orderInfo.quantity = params.quantity + if (params.cid) { + orderInfo.cid = params.cid + } + const derivativeOrder = InjectiveExchangeV1Beta1Exchange.DerivativeOrder.create() derivativeOrder.marketId = params.marketId diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeLimitOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeLimitOrder.spec.ts index 9f63d77e4..e00f479d1 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeLimitOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeLimitOrder.spec.ts @@ -11,6 +11,7 @@ const params: MsgCreateDerivativeLimitOrder['params'] = { price: '1500000', quantity: '100', subaccountId: mockFactory.subaccountId, + cid: '', triggerPrice: '0', } @@ -25,6 +26,7 @@ const protoParams = { price: params.price, quantity: params.quantity, subaccountId: params.subaccountId, + cid: params.cid, }, orderType: params.orderType, margin: params.margin, diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeLimitOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeLimitOrder.ts index 7ffc9cfa9..92fcfd406 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeLimitOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeLimitOrder.ts @@ -17,6 +17,7 @@ export declare namespace MsgCreateDerivativeLimitOrder { price: string margin: string quantity: string + cid?: string } export type Proto = InjectiveExchangeV1Beta1Tx.MsgCreateDerivativeLimitOrder @@ -29,6 +30,10 @@ const createLimitOrder = (params: MsgCreateDerivativeLimitOrder.Params) => { orderInfo.price = params.price orderInfo.quantity = params.quantity + if (params.cid) { + orderInfo.cid = params.cid + } + const derivativeOrder = InjectiveExchangeV1Beta1Exchange.DerivativeOrder.create() derivativeOrder.marketId = params.marketId diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeMarketOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeMarketOrder.spec.ts index efe5dd913..20ced2326 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeMarketOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeMarketOrder.spec.ts @@ -11,6 +11,7 @@ const params: MsgCreateDerivativeMarketOrder['params'] = { price: '1765000', quantity: '100', subaccountId: mockFactory.subaccountId, + cid: '', triggerPrice: '0', } @@ -25,6 +26,7 @@ const protoParams = { price: params.price, quantity: params.quantity, subaccountId: params.subaccountId, + cid: params.cid, }, orderType: params.orderType, margin: params.margin, diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeMarketOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeMarketOrder.ts index 419bbff7c..7bdb324fe 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeMarketOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateDerivativeMarketOrder.ts @@ -17,6 +17,7 @@ export declare namespace MsgCreateDerivativeMarketOrder { price: string margin: string quantity: string + cid?: string } export type Proto = InjectiveExchangeV1Beta1Tx.MsgCreateDerivativeMarketOrder @@ -29,6 +30,10 @@ const createMarketOrder = (params: MsgCreateDerivativeMarketOrder.Params) => { orderInfo.price = params.price orderInfo.quantity = params.quantity + if (params.cid) { + orderInfo.cid = params.cid + } + const derivativeOrder = InjectiveExchangeV1Beta1Exchange.DerivativeOrder.create() derivativeOrder.marketId = params.marketId diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotLimitOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotLimitOrder.spec.ts index 47edc3af6..b5556b480 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotLimitOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotLimitOrder.spec.ts @@ -10,6 +10,7 @@ const params: MsgCreateSpotLimitOrder['params'] = { price: '1500000', quantity: '100', subaccountId: mockFactory.subaccountId, + cid: '', triggerPrice: '0', } @@ -24,6 +25,7 @@ const protoParams = { price: params.price, quantity: params.quantity, subaccountId: params.subaccountId, + cid: params.cid, }, orderType: params.orderType, triggerPrice: params.triggerPrice, diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotLimitOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotLimitOrder.ts index efc9dd2b9..b7167f3c2 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotLimitOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotLimitOrder.ts @@ -16,6 +16,7 @@ export declare namespace MsgCreateSpotLimitOrder { feeRecipient: string price: string quantity: string + cid?: string } export type Proto = InjectiveExchangeV1Beta1Tx.MsgCreateSpotLimitOrder @@ -28,6 +29,10 @@ const createLimitOrder = (params: MsgCreateSpotLimitOrder.Params) => { orderInfo.price = params.price orderInfo.quantity = params.quantity + if (params.cid) { + orderInfo.cid = params.cid + } + const spotOrder = InjectiveExchangeV1Beta1Exchange.SpotOrder.create() spotOrder.marketId = params.marketId spotOrder.orderType = params.orderType diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotMarketOrder.spec.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotMarketOrder.spec.ts index fc6ea5d72..00ef442d2 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotMarketOrder.spec.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotMarketOrder.spec.ts @@ -10,6 +10,7 @@ const params: MsgCreateSpotMarketOrder['params'] = { price: '1765000', quantity: '100', subaccountId: mockFactory.subaccountId, + cid: '', triggerPrice: '0', } @@ -24,6 +25,7 @@ const protoParams = { price: params.price, quantity: params.quantity, subaccountId: params.subaccountId, + cid: params.cid, }, orderType: params.orderType, triggerPrice: params.triggerPrice, diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotMarketOrder.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotMarketOrder.ts index 7b4afd516..9ed367cde 100644 --- a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotMarketOrder.ts +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgCreateSpotMarketOrder.ts @@ -16,6 +16,7 @@ export declare namespace MsgCreateSpotMarketOrder { feeRecipient: string price: string quantity: string + cid?: string } export type Proto = InjectiveExchangeV1Beta1Tx.MsgCreateSpotMarketOrder @@ -28,6 +29,10 @@ const createMarketOrder = (params: MsgCreateSpotMarketOrder.Params) => { orderInfo.price = params.price orderInfo.quantity = params.quantity + if (params.cid) { + orderInfo.cid = params.cid + } + const spotOrder = InjectiveExchangeV1Beta1Exchange.SpotOrder.create() spotOrder.marketId = params.marketId spotOrder.orderType = params.orderType diff --git a/packages/sdk-ts/src/core/modules/exchange/msgs/MsgLiquidatePosition.ts b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgLiquidatePosition.ts new file mode 100644 index 000000000..8820d9fb6 --- /dev/null +++ b/packages/sdk-ts/src/core/modules/exchange/msgs/MsgLiquidatePosition.ts @@ -0,0 +1,116 @@ +import { + InjectiveExchangeV1Beta1Exchange, + InjectiveExchangeV1Beta1Tx, +} from '@injectivelabs/core-proto-ts' +import { MsgBase } from '../../MsgBase' +import snakecaseKeys from 'snakecase-keys' + +export declare namespace MsgLiquidatePosition { + export interface Params { + subaccountId: string + injectiveAddress: string + marketId: string + + /** optional order to provide for liquidation */ + order?: { + marketId: string + subaccountId: string + orderType: InjectiveExchangeV1Beta1Exchange.OrderType + triggerPrice?: string + feeRecipient: string + price: string + margin: string + quantity: string + cid?: string + } + } + + export type Proto = InjectiveExchangeV1Beta1Tx.MsgLiquidatePosition +} + +/** + * @category Messages + */ +export default class MsgLiquidatePosition extends MsgBase< + MsgLiquidatePosition.Params, + MsgLiquidatePosition.Proto +> { + static fromJSON(params: MsgLiquidatePosition.Params): MsgLiquidatePosition { + return new MsgLiquidatePosition(params) + } + + public toProto() { + const { params } = this + + const message = InjectiveExchangeV1Beta1Tx.MsgLiquidatePosition.create() + message.sender = params.injectiveAddress + message.subaccountId = params.subaccountId + message.marketId = params.marketId + + if (params.order) { + const orderInfo = InjectiveExchangeV1Beta1Exchange.OrderInfo.create() + orderInfo.subaccountId = params.order.subaccountId + orderInfo.feeRecipient = params.order.feeRecipient + orderInfo.price = params.order.price + orderInfo.quantity = params.order.quantity + + if (params.order.cid) { + orderInfo.cid = params.order.cid + } + + const order = InjectiveExchangeV1Beta1Exchange.DerivativeOrder.create() + + order.marketId = params.order.marketId + order.margin = params.order.margin + order.triggerPrice = params.order.triggerPrice || '0' + } + + return InjectiveExchangeV1Beta1Tx.MsgLiquidatePosition.fromPartial(message) + } + + public toData() { + const proto = this.toProto() + + return { + '@type': '/injective.exchange.v1beta1.MsgLiquidatePosition', + ...proto, + } + } + + public toAmino() { + const proto = this.toProto() + const message = { + ...snakecaseKeys(proto), + } + + return { + type: 'exchange/MsgLiquidatePosition', + value: message, + } + } + + public toWeb3() { + const amino = this.toAmino() + const { value } = amino + + return { + '@type': '/injective.exchange.v1beta1.MsgLiquidatePosition', + ...value, + } + } + + public toDirectSign() { + const proto = this.toProto() + + return { + type: '/injective.exchange.v1beta1.MsgLiquidatePosition', + message: proto, + } + } + + public toBinary(): Uint8Array { + return InjectiveExchangeV1Beta1Tx.MsgLiquidatePosition.encode( + this.toProto(), + ).finish() + } +} diff --git a/packages/sdk-ts/src/core/modules/ibc/msgs/MsgTransferCosmjs.ts b/packages/sdk-ts/src/core/modules/ibc/msgs/MsgTransferCosmjs.ts index c023066c7..6b2d6607b 100644 --- a/packages/sdk-ts/src/core/modules/ibc/msgs/MsgTransferCosmjs.ts +++ b/packages/sdk-ts/src/core/modules/ibc/msgs/MsgTransferCosmjs.ts @@ -24,7 +24,7 @@ export declare namespace MsgTransferCosmjs { /** * @category Messages * - * @deprected use MsgTransfer with SIGN_DIRECT and a Cosmos wallet + * @deprecated use MsgTransfer with SIGN_DIRECT and a Cosmos wallet */ export default class MsgTransferCosmjs { params: MsgTransferCosmjs.Params @@ -56,8 +56,13 @@ export default class MsgTransferCosmjs { sender: params.sender, receiver: params.receiver, token: params.amount, - timeoutHeight: params.height, - timeoutTimestamp: params.timeout, + timeoutHeight: params.height + ? { + revisionHeight: BigInt(params.height.revisionHeight), + revisionNumber: BigInt(params.height.revisionNumber), + } + : undefined, + timeoutTimestamp: params.timeout ? BigInt(params.timeout) : undefined, }), } diff --git a/packages/sdk-ts/src/core/modules/msgs.ts b/packages/sdk-ts/src/core/modules/msgs.ts index 3ce85b6ec..b899cca9c 100644 --- a/packages/sdk-ts/src/core/modules/msgs.ts +++ b/packages/sdk-ts/src/core/modules/msgs.ts @@ -53,6 +53,7 @@ import MsgCreateDenom from './tokenfactory/msgs/MsgCreateDenom' import MsgMint from './tokenfactory/msgs/MsgMint' import MsgSetDenomMetadata from './tokenfactory/msgs/MsgSetDenomMetadata' import MsgExternalTransfer from './exchange/msgs/MsgExternalTransfer' +import MsgLiquidatePosition from './exchange/msgs/MsgLiquidatePosition' import { MsgSubmitProposal } from './gov' /** @@ -115,6 +116,7 @@ export type Msgs = | MsgSetDenomMetadata | MsgGrantAllowance | MsgRevokeAllowance + | MsgLiquidatePosition /** * @category Messages @@ -142,3 +144,4 @@ export type ExchangeMsgs = | MsgExternalTransfer | MsgStoreCode | MsgRewardsOptOut + | MsgLiquidatePosition diff --git a/packages/sdk-ts/src/core/modules/tokenfactory/msgs/MsgCreateDenom.ts b/packages/sdk-ts/src/core/modules/tokenfactory/msgs/MsgCreateDenom.ts index dc04747d1..098daf805 100644 --- a/packages/sdk-ts/src/core/modules/tokenfactory/msgs/MsgCreateDenom.ts +++ b/packages/sdk-ts/src/core/modules/tokenfactory/msgs/MsgCreateDenom.ts @@ -6,6 +6,8 @@ export declare namespace MsgCreateDenom { export interface Params { sender: string subdenom: string + name?: string + symbol?: string } export type Proto = InjectiveTokenFactoryV1Beta1Tx.MsgCreateDenom @@ -28,6 +30,8 @@ export default class MsgCreateDenom extends MsgBase< const message = InjectiveTokenFactoryV1Beta1Tx.MsgCreateDenom.create() message.sender = params.sender message.subdenom = params.subdenom + message.name = params.name || '' + message.symbol = params.symbol || '' return InjectiveTokenFactoryV1Beta1Tx.MsgCreateDenom.fromPartial(message) } diff --git a/packages/sdk-ts/src/core/modules/tx/api/TxGrpcApi.ts b/packages/sdk-ts/src/core/modules/tx/api/TxGrpcApi.ts index 5ccd178bd..7e85f9c51 100644 --- a/packages/sdk-ts/src/core/modules/tx/api/TxGrpcApi.ts +++ b/packages/sdk-ts/src/core/modules/tx/api/TxGrpcApi.ts @@ -11,6 +11,8 @@ import { import { DEFAULT_TX_BLOCK_INCLUSION_TIMEOUT_IN_MS, DEFAULT_BLOCK_TIME_IN_SECONDS, + DEFAULT_BLOCK_TIMEOUT_HEIGHT, + BigNumberInBase, } from '@injectivelabs/utils' import { TxResponse } from '../types/tx' import BaseGrpcWebConsumer from '../../../../client/base/BaseGrpcWebConsumer' @@ -168,10 +170,13 @@ export class TxGrpcApi implements TxConcreteApi { options?: TxClientBroadcastOptions, ): Promise { const { txService } = this - const { mode, timeout } = options || { - mode: CosmosTxV1Beta1Service.BroadcastMode.BROADCAST_MODE_SYNC, - timeout: DEFAULT_TX_BLOCK_INCLUSION_TIMEOUT_IN_MS || 60000, - } + const mode = + options?.mode || CosmosTxV1Beta1Service.BroadcastMode.BROADCAST_MODE_SYNC + const timeout = + options?.timeout || + new BigNumberInBase(options?.txTimeout || DEFAULT_BLOCK_TIMEOUT_HEIGHT) + .times(DEFAULT_BLOCK_TIME_IN_SECONDS * 1000) + .toNumber() const broadcastTxRequest = CosmosTxV1Beta1Service.BroadcastTxRequest.create() diff --git a/packages/sdk-ts/src/core/modules/tx/api/TxRestApi.ts b/packages/sdk-ts/src/core/modules/tx/api/TxRestApi.ts index 82e38a567..bfa5abc0b 100644 --- a/packages/sdk-ts/src/core/modules/tx/api/TxRestApi.ts +++ b/packages/sdk-ts/src/core/modules/tx/api/TxRestApi.ts @@ -2,6 +2,8 @@ import { HttpClient, DEFAULT_BLOCK_TIME_IN_SECONDS, DEFAULT_TX_BLOCK_INCLUSION_TIMEOUT_IN_MS, + BigNumberInBase, + DEFAULT_BLOCK_TIMEOUT_HEIGHT, } from '@injectivelabs/utils' import { BroadcastMode, @@ -164,9 +166,11 @@ export class TxRestApi implements TxConcreteApi { tx: CosmosTxV1Beta1Tx.TxRaw, options?: TxClientBroadcastOptions, ): Promise { - const { timeout } = options || { - timeout: DEFAULT_TX_BLOCK_INCLUSION_TIMEOUT_IN_MS || 60000, - } + const timeout = + options?.timeout || + new BigNumberInBase(options?.txTimeout || DEFAULT_BLOCK_TIMEOUT_HEIGHT) + .times(DEFAULT_BLOCK_TIME_IN_SECONDS * 1000) + .toNumber() try { const { tx_response: txResponse } = await this.broadcastTx<{ diff --git a/packages/sdk-ts/src/core/modules/tx/api/index.ts b/packages/sdk-ts/src/core/modules/tx/api/index.ts index a2060182b..6137fe780 100644 --- a/packages/sdk-ts/src/core/modules/tx/api/index.ts +++ b/packages/sdk-ts/src/core/modules/tx/api/index.ts @@ -3,6 +3,7 @@ import { TxGrpcApi } from '../api/TxGrpcApi' export * from './TxGrpcApi' export * from './TxRestApi' +export * from './utils' /** * @deprecated use TxRestApi and TxGrpcApi diff --git a/packages/sdk-ts/src/core/modules/tx/api/utils.ts b/packages/sdk-ts/src/core/modules/tx/api/utils.ts new file mode 100644 index 000000000..2aa6e4a38 --- /dev/null +++ b/packages/sdk-ts/src/core/modules/tx/api/utils.ts @@ -0,0 +1,23 @@ +import { + BigNumberInBase, + DEFAULT_BLOCK_TIMEOUT_HEIGHT, + DEFAULT_BLOCK_TIME_IN_SECONDS, +} from '@injectivelabs/utils' +import { TxResponse } from '../types' +import { TxGrpcApi } from './TxGrpcApi' +import { TxRestApi } from './TxRestApi' + +export const waitTxBroadcasted = ( + txHash: string, + options: { endpoints: { grpc?: string; rest: string }; txTimeout?: number }, +): Promise => { + const timeout = new BigNumberInBase( + options?.txTimeout || DEFAULT_BLOCK_TIMEOUT_HEIGHT, + ) + .times(DEFAULT_BLOCK_TIME_IN_SECONDS * 1000) + .toNumber() + + return options.endpoints.grpc + ? new TxGrpcApi(options.endpoints.grpc).fetchTxPoll(txHash, timeout) + : new TxRestApi(options.endpoints.rest).fetchTxPoll(txHash, timeout) +} diff --git a/packages/sdk-ts/src/core/modules/tx/broadcaster/MsgBroadcasterWithPk.ts b/packages/sdk-ts/src/core/modules/tx/broadcaster/MsgBroadcasterWithPk.ts index 9a4b244e1..2ade1987a 100644 --- a/packages/sdk-ts/src/core/modules/tx/broadcaster/MsgBroadcasterWithPk.ts +++ b/packages/sdk-ts/src/core/modules/tx/broadcaster/MsgBroadcasterWithPk.ts @@ -53,6 +53,7 @@ interface MsgBroadcasterWithPkOptions { ethereumChainId?: EthereumChainId simulateTx?: boolean loggingEnabled?: boolean + txTimeout?: number // blocks to wait for tx to be included in a block gasBufferCoefficient?: number } @@ -77,6 +78,8 @@ export class MsgBroadcasterWithPk { public gasBufferCoefficient: number = 1.1 + public txTimeout = DEFAULT_BLOCK_TIMEOUT_HEIGHT + constructor(options: MsgBroadcasterWithPkOptions) { const networkInfo = getNetworkInfo(options.network) const endpoints = getNetworkEndpoints(options.network) @@ -84,6 +87,7 @@ export class MsgBroadcasterWithPk { this.gasBufferCoefficient = options.gasBufferCoefficient || 1.1 this.simulateTx = options.simulateTx || false this.chainId = networkInfo.chainId + this.txTimeout = options.txTimeout || DEFAULT_BLOCK_TIMEOUT_HEIGHT this.ethereumChainId = options.ethereumChainId || networkInfo.ethereumChainId this.endpoints = { ...endpoints, ...(options.endpoints || {}) } @@ -257,7 +261,7 @@ export class MsgBroadcasterWithPk { transaction: MsgBroadcasterTxOptions, accountDetails?: AccountDetails, ) { - const { chainId, privateKey, endpoints } = this + const { chainId, privateKey, endpoints, txTimeout } = this const msgs = Array.isArray(transaction.msgs) ? transaction.msgs : [transaction.msgs] @@ -276,9 +280,7 @@ export class MsgBroadcasterWithPk { endpoints.grpc, ).fetchLatestBlock() const latestHeight = latestBlock!.header!.height - const timeoutHeight = new BigNumberInBase(latestHeight).plus( - DEFAULT_BLOCK_TIMEOUT_HEIGHT, - ) + const timeoutHeight = new BigNumberInBase(latestHeight).plus(txTimeout) const gas = ( transaction.gas?.gas || getGasPriceBasedOnMessage(msgs) @@ -319,8 +321,10 @@ export class MsgBroadcasterWithPk { } private async broadcastTxRaw(txRaw: CosmosTxV1Beta1Tx.TxRaw) { - const { endpoints } = this - const txResponse = await new TxGrpcApi(endpoints.grpc).broadcast(txRaw) + const { endpoints, txTimeout } = this + const txResponse = await new TxGrpcApi(endpoints.grpc).broadcast(txRaw, { + txTimeout, + }) if (txResponse.code !== 0) { throw new GeneralException( diff --git a/packages/sdk-ts/src/core/modules/tx/eip712/maps.ts b/packages/sdk-ts/src/core/modules/tx/eip712/maps.ts index 9e517163c..55d6607e5 100644 --- a/packages/sdk-ts/src/core/modules/tx/eip712/maps.ts +++ b/packages/sdk-ts/src/core/modules/tx/eip712/maps.ts @@ -30,6 +30,12 @@ export const objectKeysToEip712Types = ({ 'proposal_id', 'creation_height', ] + const stringFieldsWithNumberValue = [ + 'timeout_timestamp', + 'revision_height', + 'revision_number', + ] + const stringFieldsToOmitIfEmpty = ['cid'] const output = new Map() const types = new Array() @@ -54,6 +60,19 @@ export const objectKeysToEip712Types = ({ type: numberTypeToReflectionNumberType(property), }) } else if (type === 'string') { + if (stringFieldsToOmitIfEmpty.includes(property) && !propertyValue) { + continue + } + + if (stringFieldsWithNumberValue.includes(property)) { + types.push({ + name: property, + type: stringTypeToReflectionStringType(property), + }) + + continue + } + types.push({ name: property, type: 'string' }) } else if (type === 'object') { if (Array.isArray(propertyValue) && propertyValue.length === 0) { @@ -150,6 +169,12 @@ export const numberTypeToReflectionNumberType = (property?: string) => { switch (property) { case 'order_mask': return 'int32' + case 'timeout_timestamp': + return 'timeout_timestamp' + case 'revision_number': + return 'uint64' + case 'revision_height': + return 'uint64' case 'order_type': return 'int32' case 'oracle_type': @@ -172,6 +197,24 @@ export const numberTypeToReflectionNumberType = (property?: string) => { return 'uint64' } } +/** + * JavaScript doesn't know the exact string types that + * we represent these fields on chain so we have to map + * them in their chain representation from the string value + * that is available in JavaScript + */ +export const stringTypeToReflectionStringType = (property?: string) => { + switch (property) { + case 'timeout_timestamp': + return 'uint64' + case 'revision_number': + return 'uint64' + case 'revision_height': + return 'uint64' + default: + return 'uint64' + } +} /** * We need to represent some of the values in a proper format acceptable by the chain. diff --git a/packages/sdk-ts/src/core/modules/tx/tx.ts b/packages/sdk-ts/src/core/modules/tx/tx.ts index f62603706..8f68ad87e 100644 --- a/packages/sdk-ts/src/core/modules/tx/tx.ts +++ b/packages/sdk-ts/src/core/modules/tx/tx.ts @@ -17,7 +17,10 @@ import { DirectSignResponse } from '@cosmjs/proto-signing' import { BigNumberInBase } from '@injectivelabs/utils' import { Msgs } from '../msgs' import { GeneralException } from '@injectivelabs/exceptions' -import { DEFAULT_BLOCK_TIMEOUT_HEIGHT } from '@injectivelabs/utils' +import { + getStdFeeFromString, + DEFAULT_BLOCK_TIMEOUT_HEIGHT, +} from '@injectivelabs/utils' import { ChainRestAuthApi, ChainRestTendermintApi } from '../../../client' import { CosmosTxV1Beta1Tx } from '@injectivelabs/core-proto-ts' import { BaseAccount } from '../../accounts' @@ -56,11 +59,12 @@ export const createTransactionWithSigners = ({ const [signer] = actualSigners const body = createBody({ message, memo, timeoutHeight }) + const actualFee = typeof fee === 'string' ? getStdFeeFromString(fee) : fee const feeMessage = createFee({ - fee: fee.amount[0], - payer: fee.payer, - granter: fee.granter, - gasLimit: parseInt(fee.gas, 10), + fee: actualFee.amount[0], + payer: actualFee.payer, + granter: actualFee.granter, + gasLimit: parseInt(actualFee.gas, 10), }) const signInfo = createSigners({ diff --git a/packages/sdk-ts/src/core/modules/tx/types/tx.ts b/packages/sdk-ts/src/core/modules/tx/types/tx.ts index 5cb04ab0a..55236dce1 100644 --- a/packages/sdk-ts/src/core/modules/tx/types/tx.ts +++ b/packages/sdk-ts/src/core/modules/tx/types/tx.ts @@ -8,8 +8,9 @@ import { } from '@injectivelabs/core-proto-ts' export interface TxClientBroadcastOptions { - mode: CosmosTxV1Beta1Service.BroadcastMode - timeout: number + mode?: CosmosTxV1Beta1Service.BroadcastMode + timeout?: number // timeout in ms + txTimeout?: number // blocks to wait for tx to be included in a block } export interface TxClientBroadcastResponse { @@ -70,7 +71,7 @@ export interface SignerDetails { /** @type {CreateTransactionWithSignersArgs} */ export interface CreateTransactionWithSignersArgs { - fee?: StdFee // the fee to include in the transaction + fee?: StdFee | string // the fee to include in the transaction memo?: string // the memo to include in the transaction chainId: string // the chain id of the chain that the transaction is going to be broadcasted to message: Msgs | Msgs[] // the message that should be packed into the transaction diff --git a/packages/sdk-ts/src/core/modules/tx/utils/tx.ts b/packages/sdk-ts/src/core/modules/tx/utils/tx.ts index a0efe0236..3eacced47 100644 --- a/packages/sdk-ts/src/core/modules/tx/utils/tx.ts +++ b/packages/sdk-ts/src/core/modules/tx/utils/tx.ts @@ -205,7 +205,7 @@ export const createCosmosSignDocFromSignDoc = ( return SignDoc.fromPartial({ bodyBytes: signDoc.bodyBytes, authInfoBytes: signDoc.authInfoBytes, - accountNumber: signDoc.accountNumber, + accountNumber: BigInt(signDoc.accountNumber), chainId: signDoc.chainId, }) } diff --git a/packages/sdk-ts/src/core/modules/wasm/exec-args.ts b/packages/sdk-ts/src/core/modules/wasm/exec-args.ts index fb5335c29..596083bae 100644 --- a/packages/sdk-ts/src/core/modules/wasm/exec-args.ts +++ b/packages/sdk-ts/src/core/modules/wasm/exec-args.ts @@ -11,6 +11,7 @@ import ExecArgInitiateTransfer from './exec-args/ExecArgInitiateTransfer' import ExecArgIncreaseAllowance from './exec-args/ExecArgIncreaseAllowance' import ExecArgRemoveGridStrategy from './exec-args/ExecArgRemoveGridStrategy' import ExecArgCreateSpotGridStrategy from './exec-args/ExecArgCreateSpotGridStrategy' +import ExecArgCreatePerpGridStrategy from './exec-args/ExecArgCreatePerpGridStrategy' import ExecArgCW20AdapterRedeemAndTransfer from './exec-args/ExecArgCW20AdapterRedeemAndTransfer' @@ -33,6 +34,7 @@ export type ExecArgs = | ExecArgIncreaseAllowance | ExecArgRemoveGridStrategy | ExecArgCreateSpotGridStrategy + | ExecArgCreatePerpGridStrategy | ExecArgCW20AdapterRedeemAndTransfer export type ExecPrivilegedArgs = diff --git a/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCW20Send.ts b/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCW20Send.ts index 24bc7109d..a26be8589 100644 --- a/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCW20Send.ts +++ b/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCW20Send.ts @@ -23,7 +23,7 @@ export declare namespace ExecArgCW20Send { contractAddress: string amount: string /** - * This object represents the underyling method + * This object represents the underlying method * that we want to execute on the CW20 smart contract */ msg?: object diff --git a/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCreatePerpGridStrategy.ts b/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCreatePerpGridStrategy.ts new file mode 100644 index 000000000..b7c848ea8 --- /dev/null +++ b/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCreatePerpGridStrategy.ts @@ -0,0 +1,79 @@ +import { + dataToExecData, + ExecArgBase, + ExecDataRepresentation, +} from '../ExecArgBase' + +import { ExitConfig, ExitType } from '../types' +export declare namespace ExecArgCreatePerpGridStrategy { + export interface Params { + subaccountId: string + lowerBound: string + upperBound: string + levels: number + slippage?: string + stopLoss?: string + takeProfit?: string + marginRatio: string + } + + export interface Data { + subaccount_id: string + bounds: [string, string] + slippage?: string + stop_loss?: ExitConfig + take_profit?: ExitConfig + levels: number + strategy_type: { + perpetual: { + margin_ratio: string + } + } + } +} + +/** + * @category Contract Exec Arguments + */ +export default class ExecArgCreatePerpGridStrategy extends ExecArgBase< + ExecArgCreatePerpGridStrategy.Params, + ExecArgCreatePerpGridStrategy.Data +> { + static fromJSON( + params: ExecArgCreatePerpGridStrategy.Params, + ): ExecArgCreatePerpGridStrategy { + return new ExecArgCreatePerpGridStrategy(params) + } + + toData(): ExecArgCreatePerpGridStrategy.Data { + const { params } = this + + return { + subaccount_id: params.subaccountId, + bounds: [params.lowerBound, params.upperBound], + levels: params.levels, + slippage: params.slippage, + strategy_type: { + perpetual: { + margin_ratio: params.marginRatio, + }, + }, + stop_loss: params.stopLoss + ? { + exitType: ExitType.Default, + exitPrice: params.stopLoss, + } + : undefined, + take_profit: params.takeProfit + ? { + exitType: ExitType.Default, + exitPrice: params.takeProfit, + } + : undefined, + } + } + + toExecData(): ExecDataRepresentation { + return dataToExecData('create_strategy', this.toData()) + } +} diff --git a/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCreateSpotGridStrategy.ts b/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCreateSpotGridStrategy.ts index 4691e38b1..f2075ab3c 100644 --- a/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCreateSpotGridStrategy.ts +++ b/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgCreateSpotGridStrategy.ts @@ -4,6 +4,12 @@ import { ExecDataRepresentation, } from '../ExecArgBase' +import { + ExitType, + ExitConfig, + StrategyType, + TrailingArithmetic, +} from '../types' export declare namespace ExecArgCreateSpotGridStrategy { export interface Params { subaccountId: string @@ -11,9 +17,11 @@ export declare namespace ExecArgCreateSpotGridStrategy { upperBound: string levels: number slippage?: string - stopLoss?: string - takeProfit?: string - shouldExitWithQuoteOnly?: boolean + stopLoss?: ExitConfig + takeProfit?: ExitConfig + exitType?: ExitType + strategyType?: StrategyType + trailingArithmetic?: TrailingArithmetic } export interface Data { @@ -21,9 +29,16 @@ export declare namespace ExecArgCreateSpotGridStrategy { bounds: [string, string] levels: number slippage?: string - stop_loss?: string - take_profit?: string - should_exit_with_quote_only: boolean + stop_loss?: { + exit_type: ExitType + exit_price: string + } + take_profit?: { + exit_type: ExitType + exit_price: string + } + exit_type?: ExitType + strategy_type?: StrategyType | TrailingArithmetic } } @@ -48,9 +63,20 @@ export default class ExecArgCreateSpotGridStrategy extends ExecArgBase< levels: params.levels, bounds: [params.lowerBound, params.upperBound], slippage: params.slippage, - stop_loss: params.stopLoss, - take_profit: params.takeProfit, - should_exit_with_quote_only: !!params.shouldExitWithQuoteOnly, + exit_type: params.exitType, + stop_loss: params.stopLoss + ? { + exit_type: params.stopLoss.exitType, + exit_price: params.stopLoss.exitPrice, + } + : undefined, + take_profit: params.takeProfit + ? { + exit_type: params.takeProfit.exitType, + exit_price: params.takeProfit.exitPrice, + } + : undefined, + strategy_type: params.trailingArithmetic ?? params.strategyType, } } diff --git a/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgRemoveGridStrategy.ts b/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgRemoveGridStrategy.ts index e3a384a36..dd718886f 100644 --- a/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgRemoveGridStrategy.ts +++ b/packages/sdk-ts/src/core/modules/wasm/exec-args/ExecArgRemoveGridStrategy.ts @@ -5,9 +5,13 @@ import { } from '../ExecArgBase' export declare namespace ExecArgRemoveGridStrategy { - export interface Params {} + export interface Params { + subaccountId?: string + } - export interface Data {} + export interface Data { + subaccount_id?: string + } } /** @@ -24,9 +28,11 @@ export default class ExecArgRemoveGridStrategy extends ExecArgBase< } toData(): ExecArgRemoveGridStrategy.Data { - // const { params } = this + const { params } = this - return {} + return { + subaccount_id: params.subaccountId, + } } toExecData(): ExecDataRepresentation { diff --git a/packages/sdk-ts/src/core/modules/wasm/index.ts b/packages/sdk-ts/src/core/modules/wasm/index.ts index bc96f3422..8e92fb2f0 100644 --- a/packages/sdk-ts/src/core/modules/wasm/index.ts +++ b/packages/sdk-ts/src/core/modules/wasm/index.ts @@ -11,6 +11,7 @@ import ExecArgInitiateTransfer from './exec-args/ExecArgInitiateTransfer' import ExecArgIncreaseAllowance from './exec-args/ExecArgIncreaseAllowance' import ExecArgRemoveGridStrategy from './exec-args/ExecArgRemoveGridStrategy' import ExecArgCreateSpotGridStrategy from './exec-args/ExecArgCreateSpotGridStrategy' +import ExecArgCreatePerpGridStrategy from './exec-args/ExecArgCreatePerpGridStrategy' import ExecArgCW20AdapterRedeemAndTransfer from './exec-args/ExecArgCW20AdapterRedeemAndTransfer' import MsgStoreCode from './msgs/MsgStoreCode' @@ -26,6 +27,7 @@ import ExecPrivilegedArgVaultSubscribe from './exec-priv-args/ExecPrivilegedArgV import ExecPrivilegedArgOffChainVaultRedeem from './exec-priv-args/ExecPrivilegedArgOffChainVaultRedeem' import ExecPrivilegedArgOffChainVaultSubscribe from './exec-priv-args/ExecPrivilegedArgOffChainVaultSubscribe' +export * from './types' export * from './exec-args' export { @@ -42,6 +44,7 @@ export { ExecArgIncreaseAllowance, ExecArgRemoveGridStrategy, ExecArgCreateSpotGridStrategy, + ExecArgCreatePerpGridStrategy, ExecArgCW20AdapterRedeemAndTransfer, // MsgStoreCode, diff --git a/packages/sdk-ts/src/core/modules/wasm/types.ts b/packages/sdk-ts/src/core/modules/wasm/types.ts new file mode 100644 index 000000000..fa2940cda --- /dev/null +++ b/packages/sdk-ts/src/core/modules/wasm/types.ts @@ -0,0 +1,22 @@ +export enum ExitType { + Default = 'default', + Quote = 'quote', + Base = 'base', +} + +export enum StrategyType { + Arithmetic = 'arithmetic', + Geometric = 'geometric', +} + +export type TrailingArithmetic = { + trailing_arithmetic: { + lower_trailing_bound: string + upper_trailing_bound: string + } +} + +export type ExitConfig = { + exitType: ExitType + exitPrice: string +} diff --git a/packages/sdk-ts/src/core/stargate/SigningStargateClient.ts b/packages/sdk-ts/src/core/stargate/SigningStargateClient.ts index 274934045..ff5aa6280 100644 --- a/packages/sdk-ts/src/core/stargate/SigningStargateClient.ts +++ b/packages/sdk-ts/src/core/stargate/SigningStargateClient.ts @@ -17,8 +17,8 @@ import { } from '@cosmjs/proto-signing' import { HttpEndpoint, - Tendermint34Client, - TendermintClient, + Tendermint37Client, + CometClient, } from '@cosmjs/tendermint-rpc' import { assert, assertDefined } from '@cosmjs/utils' import { Coin } from 'cosmjs-types/cosmos/base/v1beta1/coin' @@ -31,7 +31,6 @@ import { SignMode } from 'cosmjs-types/cosmos/tx/signing/v1beta1/signing' import { TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx' import { MsgTransfer } from 'cosmjs-types/ibc/applications/transfer/v1/tx' import { Height } from 'cosmjs-types/ibc/core/client/v1/client' -import Long from 'long' import { AminoConverters, AminoTypes } from '@cosmjs/stargate' import { calculateFee, GasPrice } from '@cosmjs/stargate' import { @@ -111,16 +110,16 @@ export class SigningStargateClient extends StargateClient { signer: OfflineSigner, options: SigningStargateClientOptions = {}, ): Promise { - const tmClient = await Tendermint34Client.connect(endpoint) + const tmClient = await Tendermint37Client.connect(endpoint) return SigningStargateClient.createWithSigner(tmClient, signer, options) } /** * Creates an instance from a manually created Tendermint client. - * Use this to use `Tendermint37Client` instead of `Tendermint34Client`. + * Use this to use `Tendermint37Client` instead of `Tendermint37Client`. */ public static async createWithSigner( - tmClient: TendermintClient, + tmClient: CometClient, signer: OfflineSigner, options: SigningStargateClientOptions = {}, ): Promise { @@ -144,7 +143,7 @@ export class SigningStargateClient extends StargateClient { } protected constructor( - tmClient: TendermintClient | undefined, + tmClient: CometClient | undefined, signer: OfflineSigner, options: SigningStargateClientOptions, ) { @@ -268,7 +267,7 @@ export class SigningStargateClient extends StargateClient { memo = '', ): Promise { const timeoutTimestampNanoseconds = timeoutTimestamp - ? Long.fromNumber(timeoutTimestamp).multiply(1_000_000_000) + ? BigInt(timeoutTimestamp) * BigInt(1_000_000_000) : undefined const transferMsg: MsgTransferEncodeObject = { typeUrl: '/ibc.applications.transfer.v1.MsgTransfer', diff --git a/packages/sdk-ts/src/core/utils/Denom/DenomClient.ts b/packages/sdk-ts/src/core/utils/Denom/DenomClient.ts index fd01f9ac3..e06282d4a 100644 --- a/packages/sdk-ts/src/core/utils/Denom/DenomClient.ts +++ b/packages/sdk-ts/src/core/utils/Denom/DenomClient.ts @@ -1,8 +1,7 @@ import { Token, - TokenInfo, - TokenMeta, TokenFactory, + TokenMetaBase, TokenMetaUtils, TokenMetaUtilsFactory, } from '@injectivelabs/token-metadata' @@ -28,10 +27,6 @@ export class DenomClient { this.tokenMetaUtils = TokenMetaUtilsFactory.make(network) } - getDenomTokenInfo(denom: string): TokenInfo | undefined { - return this.tokenFactory.toTokenInfo(denom) - } - getDenomToken(denom: string): Token | undefined { return this.tokenFactory.toToken(denom) } @@ -40,22 +35,14 @@ export class DenomClient { return denoms.map((denom) => this.getDenomToken(denom)) } - getDenomsTokenInfo(denoms: string[]): Array { - return denoms.map((denom) => this.getDenomTokenInfo(denom)) - } - - getTokenMetaDataBySymbol(symbol: string): TokenMeta | undefined { + getTokenMetaDataBySymbol(symbol: string): TokenMetaBase | undefined { return this.tokenMetaUtils.getMetaBySymbol(symbol) } - getTokenMetaDataByAddress(address: string): TokenMeta | undefined { + getTokenMetaDataByAddress(address: string): TokenMetaBase | undefined { return this.tokenMetaUtils.getMetaByAddress(address) } - getTokenMetaDataByName(name: string): TokenMeta | undefined { - return this.tokenMetaUtils.getMetaByName(name) - } - getCoinGeckoId(denom: string): string { return this.tokenMetaUtils.getCoinGeckoIdFromSymbol(denom) } diff --git a/packages/sdk-ts/src/core/utils/Denom/DenomClientSync.ts b/packages/sdk-ts/src/core/utils/Denom/DenomClientSync.ts index f66afca77..9087290b5 100644 --- a/packages/sdk-ts/src/core/utils/Denom/DenomClientSync.ts +++ b/packages/sdk-ts/src/core/utils/Denom/DenomClientSync.ts @@ -1,8 +1,7 @@ import { Token, - TokenInfo, - TokenMeta, TokenFactory, + TokenMetaBase, TokenMetaUtils, TokenMetaUtilsFactory, } from '@injectivelabs/token-metadata' @@ -26,10 +25,6 @@ export class DenomClientSync { this.tokenMetaUtils = TokenMetaUtilsFactory.make(network) } - getDenomTokenInfo(denom: string): TokenInfo | undefined { - return this.tokenFactory.toTokenInfo(denom) - } - getDenomToken(denom: string): Token | undefined { return this.tokenFactory.toToken(denom) } @@ -38,22 +33,14 @@ export class DenomClientSync { return denoms.map((denom) => this.getDenomToken(denom)) } - getDenomsTokenInfo(denoms: string[]): Array { - return denoms.map((denom) => this.getDenomTokenInfo(denom)) - } - - getTokenMetaDataBySymbol(symbol: string): TokenMeta | undefined { + getTokenMetaDataBySymbol(symbol: string): TokenMetaBase | undefined { return this.tokenMetaUtils.getMetaBySymbol(symbol) } - getTokenMetaDataByAddress(address: string): TokenMeta | undefined { + getTokenMetaDataByAddress(address: string): TokenMetaBase | undefined { return this.tokenMetaUtils.getMetaByAddress(address) } - getTokenMetaDataByName(name: string): TokenMeta | undefined { - return this.tokenMetaUtils.getMetaByName(name) - } - getCoinGeckoId(denom: string): string { return this.tokenMetaUtils.getCoinGeckoIdFromSymbol(denom) } diff --git a/packages/sdk-ts/src/utils/constants.ts b/packages/sdk-ts/src/utils/constants.ts index 615e6473a..f0821c084 100644 --- a/packages/sdk-ts/src/utils/constants.ts +++ b/packages/sdk-ts/src/utils/constants.ts @@ -1,4 +1,3 @@ -import { Network } from '@injectivelabs/networks' import { DEFAULT_STD_FEE, DEFAULT_STD_FEE_BY_DENOM } from '@injectivelabs/utils' export const BECH32_PUBKEY_ACC_PREFIX = 'injpub' @@ -11,99 +10,4 @@ export const BECH32_ADDR_CONS_PREFIX = 'injvalcons' export const DEFAULT_DERIVATION_PATH = "m/44'/60'/0'/0/0" -/** @deprecated - use the one in @injectivelabs/networks */ -export const CW20_ADAPTER_CONTRACT_BY_NETWORK = { - [Network.Mainnet]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', - [Network.MainnetLB]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', - [Network.MainnetK8s]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', - [Network.MainnetSentry]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', - [Network.Public]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', - [Network.Staging]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', - [Network.Internal]: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', - [Network.Testnet]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', - [Network.TestnetK8s]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', - [Network.TestnetSentry]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', - [Network.TestnetOld]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', - [Network.Devnet]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', - [Network.Devnet1]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', - [Network.Devnet2]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', - [Network.Local]: 'inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6', -} - -/** @deprecated - use the one in @injectivelabs/networks */ -export const CW20_SWAP_CONTRACT_BY_NETWORK = { - [Network.Mainnet]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.MainnetLB]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.MainnetK8s]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.MainnetSentry]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.Public]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.Staging]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.Internal]: 'inj1psk3468yr9teahgz73amwvpfjehnhczvkrhhqx', - [Network.Testnet]: 'inj14d7h5j6ddq6pqppl65z24w7xrtmpcrqjxj8d43', - [Network.TestnetK8s]: 'inj14d7h5j6ddq6pqppl65z24w7xrtmpcrqjxj8d43', - [Network.TestnetSentry]: 'inj14d7h5j6ddq6pqppl65z24w7xrtmpcrqjxj8d43', - [Network.TestnetOld]: 'inj14d7h5j6ddq6pqppl65z24w7xrtmpcrqjxj8d43', - [Network.Devnet]: 'inj177yh38g3ctu7cemxpa3c2kvwh2yslfxfmfa66h', - [Network.Devnet1]: 'inj177yh38g3ctu7cemxpa3c2kvwh2yslfxfmfa66h', - [Network.Devnet2]: 'inj177yh38g3ctu7cemxpa3c2kvwh2yslfxfmfa66h', - [Network.Local]: 'inj177yh38g3ctu7cemxpa3c2kvwh2yslfxfmfa66h', -} - -/** @deprecated - use the one in @injectivelabs/networks */ -export const INCENTIVES_CONTRACT_BY_NETWORK = { - [Network.Mainnet]: '', - [Network.MainnetLB]: '', - [Network.MainnetK8s]: '', - [Network.MainnetSentry]: '', - [Network.Public]: '', - [Network.Staging]: '', - [Network.Internal]: '', - [Network.Testnet]: 'inj16twru668nsl7tqzahxd9q033swhr6a5xuslpkt', - [Network.TestnetK8s]: 'inj16twru668nsl7tqzahxd9q033swhr6a5xuslpkt', - [Network.TestnetSentry]: 'inj16twru668nsl7tqzahxd9q033swhr6a5xuslpkt', - [Network.TestnetOld]: 'inj16twru668nsl7tqzahxd9q033swhr6a5xuslpkt', - [Network.Devnet]: '', - [Network.Devnet1]: '', - [Network.Devnet2]: '', - [Network.Local]: '', -} - -/** @deprecated - use the one in @injectivelabs/networks */ -export const INJ_NAME_REGISTRY_CONTRACT_BY_NETWORK = { - [Network.Mainnet]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', - [Network.MainnetLB]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', - [Network.MainnetK8s]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', - [Network.MainnetSentry]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', - [Network.Public]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', - [Network.Staging]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', - [Network.Internal]: 'inj1hm8vs8sr2h9nk0x66vctfs528wrp6k3gtgg275', - [Network.Testnet]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', - [Network.TestnetK8s]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', - [Network.TestnetSentry]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', - [Network.TestnetOld]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', - [Network.Devnet]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', - [Network.Devnet1]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', - [Network.Devnet2]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', - [Network.Local]: 'inj1aw59rkpd9afp2ws6rx23nz5mrvq8dlckeslwfa', -} - -/** @deprecated - use the one in @injectivelabs/networks */ -export const INJ_NAME_REVERSE_RESOLVER_CONTRACT_BY_NETWORK = { - [Network.Mainnet]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', - [Network.MainnetLB]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', - [Network.MainnetK8s]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', - [Network.MainnetSentry]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', - [Network.Public]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', - [Network.Staging]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', - [Network.Internal]: 'inj1x9m0hceug9qylcyrrtwqtytslv2jrph433thgu', - [Network.Testnet]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', - [Network.TestnetK8s]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', - [Network.TestnetSentry]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', - [Network.TestnetOld]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', - [Network.Devnet]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', - [Network.Devnet1]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', - [Network.Devnet2]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', - [Network.Local]: 'inj1knf6puyscuuqqhgqglskfc0k99d4885qw5uv7v', -} - export { DEFAULT_STD_FEE, DEFAULT_STD_FEE_BY_DENOM } diff --git a/packages/sdk-ts/src/utils/msgs.ts b/packages/sdk-ts/src/utils/msgs.ts index f3d0b3d8c..0ea7c3d8e 100644 --- a/packages/sdk-ts/src/utils/msgs.ts +++ b/packages/sdk-ts/src/utils/msgs.ts @@ -20,7 +20,7 @@ export const getGasPriceBasedOnMessage = (msgs: Msgs[]): number => { if (messageType.includes('MsgExecuteContract')) { return new BigNumberInBase(DEFAULT_GAS_LIMIT) - .times(2.5) + .times(3) .times(messages.length) .decimalPlaces(0) .toNumber() diff --git a/packages/sdk-ui-ts/CHANGELOG.md b/packages/sdk-ui-ts/CHANGELOG.md index c8a972568..7c37b2f90 100644 --- a/packages/sdk-ui-ts/CHANGELOG.md +++ b/packages/sdk-ui-ts/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.4-beta.3...@injectivelabs/sdk-ui-ts@1.14.4) (2023-11-20) +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.8...@injectivelabs/sdk-ui-ts@1.14.10) (2024-03-03) **Note:** Version bump only for package @injectivelabs/sdk-ui-ts @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.3-beta.29...@injectivelabs/sdk-ui-ts@1.14.3) (2023-11-17) +## [1.14.8](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.7...@injectivelabs/sdk-ui-ts@1.14.8) (2024-03-03) **Note:** Version bump only for package @injectivelabs/sdk-ui-ts @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.2-beta.16...@injectivelabs/sdk-ui-ts@1.14.2) (2023-11-07) +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.7-beta.2...@injectivelabs/sdk-ui-ts@1.14.7) (2024-03-03) **Note:** Version bump only for package @injectivelabs/sdk-ui-ts @@ -27,13 +27,33 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.1-beta.25...@injectivelabs/sdk-ui-ts@1.14.1) (2023-10-27) +## [1.14.7-beta.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.7-beta.0...@injectivelabs/sdk-ui-ts@1.14.7-beta.1) (2024-03-02) + +**Note:** Version bump only for package @injectivelabs/sdk-ui-ts + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.6-beta.65...@injectivelabs/sdk-ui-ts@1.14.6) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/sdk-ui-ts + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.5-beta.76...@injectivelabs/sdk-ui-ts@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/sdk-ui-ts + +## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.4-beta.3...@injectivelabs/sdk-ui-ts@1.14.4) (2023-11-20) **Note:** Version bump only for package @injectivelabs/sdk-ui-ts +## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.3-beta.29...@injectivelabs/sdk-ui-ts@1.14.3) (2023-11-17) +**Note:** Version bump only for package @injectivelabs/sdk-ui-ts +## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.2-beta.16...@injectivelabs/sdk-ui-ts@1.14.2) (2023-11-07) +**Note:** Version bump only for package @injectivelabs/sdk-ui-ts + +## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.1-beta.25...@injectivelabs/sdk-ui-ts@1.14.1) (2023-10-27) + +**Note:** Version bump only for package @injectivelabs/sdk-ui-ts ## [1.14.1-beta.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/sdk-ui-ts@1.14.1-beta.1...@injectivelabs/sdk-ui-ts@1.14.1-beta.2) (2023-09-24) diff --git a/packages/sdk-ui-ts/package.json b/packages/sdk-ui-ts/package.json index 737dceb9d..8b68aea1c 100644 --- a/packages/sdk-ui-ts/package.json +++ b/packages/sdk-ui-ts/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/sdk-ui-ts", "description": "SDK in TypeScript for building Injective UI applications in a browser environment.", - "version": "1.14.5-beta.72", + "version": "1.14.11-beta.1", "sideEffects": false, "license": "Apache-2.0", "author": { @@ -18,7 +18,7 @@ }, "scripts": { "postinstall": "link-module-alias", - "build": "tsc --build tsconfig.build.json && tsc --build tsconfig.build.esm.json && yarn build:post && link-module-alias && yarn copy-files && yarn get-ibc-tokens", + "build": "tsc --build tsconfig.build.json && tsc --build tsconfig.build.esm.json && yarn build:post && link-module-alias && yarn copy-files", "build:watch": "tsc --build -w tsconfig.build.json && tsc -w --build tsconfig.build.esm.json && yarn build:post && link-module-alias", "build:post": "shx cp ../../etc/stub/package.json.stub dist/cjs/package.json && shx cp ../../etc/stub/package.esm.json.stub dist/esm/package.json", "clean": "tsc --build tsconfig.build.json --clean && tsc --build tsconfig.build.esm.json --clean && shx rm -rf coverage *.log junit.xml dist && jest --clearCache && shx mkdir -p dist", @@ -35,14 +35,14 @@ "get-ibc-tokens": "ts-node-dev ./src/services/ibc/tokens.ts" }, "dependencies": { - "@injectivelabs/contracts": "^1.14.5-beta.8", - "@injectivelabs/exceptions": "^1.14.5-beta.5", - "@injectivelabs/networks": "^1.14.5-beta.8", - "@injectivelabs/sdk-ts": "^1.14.5-beta.63", - "@injectivelabs/token-metadata": "^1.14.5-beta.42", - "@injectivelabs/token-utils": "^1.14.5-beta.5", - "@injectivelabs/ts-types": "^1.14.5-beta.0", - "@injectivelabs/utils": "^1.14.5-beta.5", + "@injectivelabs/contracts": "^1.14.10", + "@injectivelabs/exceptions": "^1.14.10", + "@injectivelabs/networks": "^1.14.10", + "@injectivelabs/sdk-ts": "^1.14.11-beta.1", + "@injectivelabs/token-metadata": "^1.14.11-beta.0", + "@injectivelabs/token-utils": "^1.14.10", + "@injectivelabs/ts-types": "^1.14.10", + "@injectivelabs/utils": "^1.14.10", "alchemy-sdk": "^2.6.3", "copyfiles": "^2.4.1", "link-module-alias": "^1.2.0", diff --git a/packages/sdk-ui-ts/src/client/transformers/UiBridgeTransformer.ts b/packages/sdk-ui-ts/src/client/transformers/UiBridgeTransformer.ts index 2f012a53b..7445bb12b 100644 --- a/packages/sdk-ui-ts/src/client/transformers/UiBridgeTransformer.ts +++ b/packages/sdk-ui-ts/src/client/transformers/UiBridgeTransformer.ts @@ -81,6 +81,8 @@ export const convertCosmosWalletToUiBridgeTransaction = async ({ const bridgingNetwork = getNetworkFromAddress(sender) + const txPath = bridgingNetwork === BridgingNetwork.Andromeda ? 'tx' : 'txs' + return { amount, denom, @@ -89,9 +91,10 @@ export const convertCosmosWalletToUiBridgeTransaction = async ({ type: getBridgeTransactionType(bridgingNetwork, BridgingNetwork.Injective), timestamp: Date.now(), txHash: transaction.transactionHash, - explorerLink: `${getCosmosExplorerUrl(bridgingNetwork, network)}/txs/${ - transaction.transactionHash - }`, + explorerLink: `${getCosmosExplorerUrl( + bridgingNetwork, + network, + )}/${txPath}/${transaction.transactionHash}`, state: BridgeTransactionState.Submitted, timeoutTimestamp: packetTimeoutTimestamp.value, } @@ -179,7 +182,7 @@ export const convertPeggoToUiBridgeTransaction = async ({ ), amount: transaction.amount, blockHeight: transaction.blockHeight, - denom: transaction.tokenContract, + denom: `peggy${transaction.tokenContract}`, nonce: transaction.eventNonce, explorerLink: `${getEthereumExplorerUrl(network)}/tx/${txHash}`, receiver: getInjectiveAddress(receiver), diff --git a/packages/sdk-ui-ts/src/denom/DenomClientAsync.spec.ts b/packages/sdk-ui-ts/src/denom/DenomClientAsync.spec.ts index 3a56ad90c..e7a100cca 100644 --- a/packages/sdk-ui-ts/src/denom/DenomClientAsync.spec.ts +++ b/packages/sdk-ui-ts/src/denom/DenomClientAsync.spec.ts @@ -32,16 +32,12 @@ describe('DenomClientAsync', () => { 'factory/inj1zaem9jqplp08hkkd5vcl6vmvala9qury79vfj4/point', ) - console.log(token) - expect(token).toBeDefined() }) test('works for insurance funds denom', async () => { const token = await denomClient.getDenomToken('share1') - console.log(token) - expect(token).toBeDefined() }) }) diff --git a/packages/sdk-ui-ts/src/denom/DenomClientAsync.ts b/packages/sdk-ui-ts/src/denom/DenomClientAsync.ts index 71ff0fc99..ded28c87e 100644 --- a/packages/sdk-ui-ts/src/denom/DenomClientAsync.ts +++ b/packages/sdk-ui-ts/src/denom/DenomClientAsync.ts @@ -21,10 +21,10 @@ import { import { Web3Client } from '../services/web3/Web3Client' import type { Token } from '@injectivelabs/token-metadata' import { - TokenInfo, - TokenMeta, + TokenType, + TokenMetaBase, getUnknownTokenWithSymbol, - getIbcTokenMetaFromDenomTrace, + getIbcTokenFromDenomTrace, } from '@injectivelabs/token-metadata' import { getTokenFromAlchemyTokenMetaResponse } from '../utils/alchemy' import { @@ -39,7 +39,10 @@ import { awaitForAll } from '@injectivelabs/utils' // @ts-ignore import ibcTokenMetadata from '../services/ibc/ibcTokenMetadata.json' -const IGNORED_DENOMS = ['peggy0xB855dBC314C39BFa2583567E02a40CBB246CF82B'] +const IGNORED_DENOMS = [ + 'peggy0xB855dBC314C39BFa2583567E02a40CBB246CF82B', + 'peggy0x7C7aB80590708cD1B7cf15fE602301FE52BB1d18', +] export class DenomClientAsync { private denomClient: DenomClient @@ -111,7 +114,8 @@ export class DenomClientAsync { } /** - * Used to get all tokens even if they are not tracked on the token-metadata package + * Used to get all tokens even if they are not + * tracked on the token-metadata package * ERC20, CW20, IBC, etc */ async getDenomToken(denom: string): Promise { @@ -203,26 +207,35 @@ export class DenomClientAsync { return awaitForAll(denoms, (denom) => this.getDenomToken(denom)) } - getDenomTokenInfo(denom: string): TokenInfo | undefined { - return this.denomClient.getDenomTokenInfo(denom) - } - - getTokenMetaDataBySymbol(symbol: string): TokenMeta | undefined { + getTokenMetaDataBySymbol(symbol: string): TokenMetaBase | undefined { return this.denomClient.getTokenMetaDataBySymbol(symbol) } - getTokenMetaDataByAddress(address: string): TokenMeta | undefined { + getTokenMetaDataByAddress(address: string): TokenMetaBase | undefined { return this.denomClient.getTokenMetaDataByAddress(address) } - getTokenMetaDataByName(name: string): TokenMeta | undefined { - return this.denomClient.getTokenMetaDataByName(name) - } - getCoinGeckoId(denom: string): string { return this.denomClient.getCoinGeckoId(denom) } + /** + * TODO: refactor + */ + getTokenBySymbol(symbol: string): Token { + const tokenMeta = this.denomClient.getTokenMetaDataBySymbol(symbol) + + return { + denom: symbol, + tokenType: TokenType.Unknown, + decimals: tokenMeta?.decimals || 0, + logo: tokenMeta?.logo || 'unknown.png', + coinGeckoId: tokenMeta?.coinGeckoId || '', + name: tokenMeta?.name || symbol.toUpperCase(), + symbol: tokenMeta?.symbol || symbol.toUpperCase(), + } + } + private async getFactoryDenomMetadata( denom: string, ): Promise { @@ -285,11 +298,9 @@ export class DenomClientAsync { } return { - ...token, - ibc: getIbcTokenMetaFromDenomTrace({ - ...cachedDenomTrace, - decimals: token.decimals, - hash, + ...getIbcTokenFromDenomTrace({ + token, + denomTrace: cachedDenomTrace, }), denom, } @@ -306,12 +317,7 @@ export class DenomClientAsync { } return { - ...token, - ibc: getIbcTokenMetaFromDenomTrace({ - ...denomTrace, - decimals: token.decimals, - hash, - }), + ...getIbcTokenFromDenomTrace({ token, denomTrace }), denom, } } catch (e) { diff --git a/packages/sdk-ui-ts/src/services/bonfida/InjBonfidaNameService.ts b/packages/sdk-ui-ts/src/services/bonfida/InjBonfidaNameService.ts new file mode 100644 index 000000000..509d2987a --- /dev/null +++ b/packages/sdk-ui-ts/src/services/bonfida/InjBonfidaNameService.ts @@ -0,0 +1,48 @@ +import { GeneralException } from '@injectivelabs/exceptions' +import { + Network, + NetworkEndpoints, + getNetworkEndpoints, +} from '@injectivelabs/networks' +import { + toBase64, + binaryToBase64, + ChainGrpcWasmApi, +} from '@injectivelabs/sdk-ts' +import { getBonfidaContractAddress } from './utils' + +export class InjBonfidaNameService { + protected client: ChainGrpcWasmApi + + private contractAddress: string + + constructor( + network: Network = Network.MainnetSentry, + endpoints?: NetworkEndpoints, + ) { + const networkEndpoints = endpoints || getNetworkEndpoints(network) + + this.client = new ChainGrpcWasmApi(networkEndpoints.grpc) + this.contractAddress = getBonfidaContractAddress(network) + } + + async fetchInjAddress(name: string) { + const query = { + resolve: { + domain_name: name.replace('.sol', ''), + }, + } + const response = await this.client.fetchSmartContractState( + this.contractAddress, + toBase64(query), + ) + + return Buffer.from(binaryToBase64(response.data), 'base64') + .toString() + .replace(/["]/g, '') + } + + async fetchInjName(_address: string) { + throw new GeneralException(new Error(`Not suported for this name service`)) + } +} diff --git a/packages/sdk-ui-ts/src/services/bonfida/index.ts b/packages/sdk-ui-ts/src/services/bonfida/index.ts new file mode 100644 index 000000000..ccf3f75cd --- /dev/null +++ b/packages/sdk-ui-ts/src/services/bonfida/index.ts @@ -0,0 +1 @@ +export * from './InjBonfidaNameService' diff --git a/packages/sdk-ui-ts/src/services/bonfida/utils.ts b/packages/sdk-ui-ts/src/services/bonfida/utils.ts new file mode 100644 index 000000000..f89bbce22 --- /dev/null +++ b/packages/sdk-ui-ts/src/services/bonfida/utils.ts @@ -0,0 +1,9 @@ +import { Network, isTestnet } from '@injectivelabs/networks' + +export function getBonfidaContractAddress(network: Network): string { + if (isTestnet(network)) { + return 'inj1q79ujqyh72p43mhr2ldaly3x6d50rzp3354at3' + } + + return 'inj1v7chmgm7vmuwldjt80utmw9c95jkrch979ps8z' +} diff --git a/packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json b/packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json index fdf4aa0b3..1146846c7 100644 --- a/packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json +++ b/packages/sdk-ui-ts/src/services/ibc/ibcTokenMetadata.json @@ -1,876 +1,922 @@ [ { - "name": "Injective", - "denom": "inj", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png", - "symbol": "INJ", + "name": "Aave", + "denom": "ibc/49265FCAA6CC20B59652C0B45B2283A260BB19FC183DE95C29CCA8E01F8B004C", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/aave.svg", + "symbol": "AAVE", "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "inj", + "hash": "49265FCAA6CC20B59652C0B45B2283A260BB19FC183DE95C29CCA8E01F8B004C", "path": "", "channelId": "", "decimals": 18, - "symbol": "INJ", - "baseDenom": "INJ", - "isNative": false + "symbol": "AAVE", + "baseDenom": "AAVE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Amplified INJ", - "denom": "factory/inj1cdwt8g7nxgtg2k4fn8sj363mh9ahkw2qt0vrnc/ampINJ", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/ampinj.png", - "symbol": "ampINJ", + "name": "ADO", + "denom": "ibc/CF0C070562EC0816B09DDD9518328DCCFBE6C4388907EFF883FD4BE4E510005E", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/ADO.png", + "symbol": "ADO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "factory/inj1cdwt8g7nxgtg2k4fn8sj363mh9ahkw2qt0vrnc/ampINJ", + "hash": "CF0C070562EC0816B09DDD9518328DCCFBE6C4388907EFF883FD4BE4E510005E", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampINJ", - "baseDenom": "ampINJ", - "isNative": false + "symbol": "ADO", + "baseDenom": "ADO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Osmosis", - "denom": "ibc/92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", - "symbol": "OSMO", + "name": "alentejo.money", + "denom": "ibc/FE5CF6EA14A5A5EF61AFBD8294E7B245DF4523F6F3B38DE8CC65A916BCEA00B4", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/Alem.png", + "symbol": "ALEM", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333", + "hash": "FE5CF6EA14A5A5EF61AFBD8294E7B245DF4523F6F3B38DE8CC65A916BCEA00B4", "path": "", "channelId": "", "decimals": 6, - "symbol": "OSMO", - "baseDenom": "OSMO", - "isNative": false + "symbol": "ALEM", + "baseDenom": "ALEM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Ion DAO", - "denom": "ibc/1B2D7E4261A7E2130E8E3506058E3081D3154998413F0DB2F82B04035B3FE676", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", - "symbol": "ION", + "name": "ampKUJI", + "denom": "ibc/34E48C7C43383203519D996D1D93FE80ED50153E28FB6A9465DE463AEF2EC9EC", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/ampkuji.png", + "symbol": "ampKUJI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "1B2D7E4261A7E2130E8E3506058E3081D3154998413F0DB2F82B04035B3FE676", + "hash": "34E48C7C43383203519D996D1D93FE80ED50153E28FB6A9465DE463AEF2EC9EC", "path": "", "channelId": "", "decimals": 6, - "symbol": "ION", - "baseDenom": "ION", - "isNative": false + "symbol": "ampKUJI", + "baseDenom": "ampKUJI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "IBC Index", - "denom": "ibc/491C92BEEAFE513BABA355275C7AE3AC47AA7FD57285AC1D910CE874D2DC7CA0", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ibcx.svg", - "symbol": "IBCX", + "name": "ampWHALE", + "denom": "ibc/168C3904C45C6FE3539AE85A8892DF87371D00EA7942515AFC50AA43C4BB0A32", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/ampwhale.svg", + "symbol": "ampWHALE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "491C92BEEAFE513BABA355275C7AE3AC47AA7FD57285AC1D910CE874D2DC7CA0", + "hash": "168C3904C45C6FE3539AE85A8892DF87371D00EA7942515AFC50AA43C4BB0A32", "path": "", "channelId": "", "decimals": 6, - "symbol": "IBCX", - "baseDenom": "IBCX", - "isNative": false + "symbol": "ampWHALE", + "baseDenom": "ampWHALE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Staked IBCX", - "denom": "ibc/0A6B424A8207047D9FD499F59177BABD8DB08BBC2316B29B702A403BFB414419", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/stibcx.png", - "symbol": "stIBCX", - "decimals": 6, + "name": "ApeCoin", + "denom": "ibc/8A13F5DA968B4D526E9DC5AE20B584FE62462E80AF06B9D0EA0B0DB35ABBBF27", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/ape.svg", + "symbol": "APE", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "0A6B424A8207047D9FD499F59177BABD8DB08BBC2316B29B702A403BFB414419", + "hash": "8A13F5DA968B4D526E9DC5AE20B584FE62462E80AF06B9D0EA0B0DB35ABBBF27", "path": "", "channelId": "", - "decimals": 6, - "symbol": "stIBCX", - "baseDenom": "stIBCX", - "isNative": false + "decimals": 18, + "symbol": "APE", + "baseDenom": "APE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Amplified OSMO", - "denom": "ibc/012D069D557C4DD59A670AA17E809CB7A790D778E364D0BC0A3248105DA6432D", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/amposmo.png", - "symbol": "ampOSMO", + "name": "Apollo DAO", + "denom": "ibc/1D10FF873E3C5EC7263A7658CB116F9535EC0794185A8153F2DD662E0FA08CE5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/apollo.svg", + "symbol": "APOLLO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "012D069D557C4DD59A670AA17E809CB7A790D778E364D0BC0A3248105DA6432D", + "hash": "1D10FF873E3C5EC7263A7658CB116F9535EC0794185A8153F2DD662E0FA08CE5", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampOSMO", - "baseDenom": "ampOSMO", - "isNative": false + "symbol": "APOLLO", + "baseDenom": "APOLLO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "CDT Stablecoin", - "denom": "ibc/25288BA0C7D146D37373657ECA719B9AADD49DA9E514B4172D08F7C88D56C9EF", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/CDT.svg", - "symbol": "CDT", - "decimals": 6, + "name": "Aptos Coin (Wormhole)", + "denom": "ibc/D807D81AB6C2983C9DCC2E1268051C4195405A030E1999549C562BCB7E1251A5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/aptos/images/aptos.svg", + "symbol": "APT", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "25288BA0C7D146D37373657ECA719B9AADD49DA9E514B4172D08F7C88D56C9EF", + "hash": "D807D81AB6C2983C9DCC2E1268051C4195405A030E1999549C562BCB7E1251A5", "path": "", "channelId": "", - "decimals": 6, - "symbol": "CDT", - "baseDenom": "CDT", - "isNative": false + "decimals": 8, + "symbol": "APT", + "baseDenom": "APT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Membrane", - "denom": "ibc/7AF90EDF6F5328C6C33B03DB7E33445708A46FF006932472D00D5076F5504B67", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/MBRN.svg", - "symbol": "MBRN", - "decimals": 6, + "name": "Arbitrum", + "denom": "ibc/F28C5C931D2673B7A2F06FC74934F7BDC0D2906D2AF40D582ED27D1E5C48D475", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/arbitrum/images/arb.png", + "symbol": "ARB", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "7AF90EDF6F5328C6C33B03DB7E33445708A46FF006932472D00D5076F5504B67", + "hash": "F28C5C931D2673B7A2F06FC74934F7BDC0D2906D2AF40D582ED27D1E5C48D475", "path": "", "channelId": "", - "decimals": 6, - "symbol": "MBRN", - "baseDenom": "MBRN", - "isNative": false + "decimals": 18, + "symbol": "ARB", + "baseDenom": "ARB", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OSMO Squared", - "denom": "ibc/AFCDF4348DBDF92BCF631B1D38628F75683F45A8A0DCE304FC9AAD4F31609916", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqosmo.svg", - "symbol": "sqOSMO", - "decimals": 6, + "name": "Archway", + "denom": "ibc/9C6E75FE14DF8959B7CC6E77398DF825B9815C753BB49D2860E303EA2FD803DD", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/archway/images/archway.png", + "symbol": "ARCH", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "AFCDF4348DBDF92BCF631B1D38628F75683F45A8A0DCE304FC9AAD4F31609916", + "hash": "9C6E75FE14DF8959B7CC6E77398DF825B9815C753BB49D2860E303EA2FD803DD", "path": "", "channelId": "", - "decimals": 6, - "symbol": "sqOSMO", - "baseDenom": "sqOSMO", - "isNative": false + "decimals": 18, + "symbol": "ARCH", + "baseDenom": "ARCH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "BTC Squared", - "denom": "ibc/81C212661A115B9799C71173DD131B5077B14A3FBD26A8A9A0C669F76F434E23", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqbtc.svg", - "symbol": "sqBTC", + "name": "ARMANI", + "denom": "ibc/0C04597A68991F93CE8C9EF88EA795179CD020695041D00911E5CFF023D415CC", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/armani.png", + "symbol": "ARMANI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "81C212661A115B9799C71173DD131B5077B14A3FBD26A8A9A0C669F76F434E23", + "hash": "0C04597A68991F93CE8C9EF88EA795179CD020695041D00911E5CFF023D415CC", "path": "", "channelId": "", "decimals": 6, - "symbol": "sqBTC", - "baseDenom": "sqBTC", - "isNative": false + "symbol": "ARMANI", + "baseDenom": "ARMANI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ATOM Squared", - "denom": "ibc/C63E6285FA0EE014B89671A7A633E1CE7F62310312843B9AC7248910619143C6", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqatom.svg", - "symbol": "sqATOM", + "name": "ASH", + "denom": "ibc/EED40547772504DF629EFEC08892E689CD14498B1C0AD766CD5075BBBEE3D808", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/ash.svg", + "symbol": "ASH", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C63E6285FA0EE014B89671A7A633E1CE7F62310312843B9AC7248910619143C6", + "hash": "EED40547772504DF629EFEC08892E689CD14498B1C0AD766CD5075BBBEE3D808", "path": "", "channelId": "", "decimals": 6, - "symbol": "sqATOM", - "baseDenom": "sqATOM", - "isNative": false + "symbol": "ASH", + "baseDenom": "ASH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Levana", - "denom": "ibc/4971C5E4786D5995EC7EF894FCFA9CF2E127E95D5D53A982F6A062F3F410EDB8", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/levana.png", - "symbol": "LVN", + "name": "AstroPepe", + "denom": "ibc/03BC83F4E4972621EAE3144FC91AED13AF3541A90A51B690425C95D1E03850D9", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/astropepe.png", + "symbol": "ASTROPEPE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "4971C5E4786D5995EC7EF894FCFA9CF2E127E95D5D53A982F6A062F3F410EDB8", + "hash": "03BC83F4E4972621EAE3144FC91AED13AF3541A90A51B690425C95D1E03850D9", "path": "", "channelId": "", "decimals": 6, - "symbol": "LVN", - "baseDenom": "LVN", - "isNative": false + "symbol": "ASTROPEPE", + "baseDenom": "ASTROPEPE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "milkTIA", - "denom": "ibc/C2A70D6717D595F388B115200E789DC6E7EE409167B918B5F4E73838B8451A71", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/milktia.png", - "symbol": "milkTIA", + "name": "Astroport", + "denom": "ibc/EBD5A24C554198EBAF44979C5B4D2C2D312E6EBAB71962C92F735499C7575839", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra/images/astro.png", + "symbol": "ASTRO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C2A70D6717D595F388B115200E789DC6E7EE409167B918B5F4E73838B8451A71", + "hash": "EBD5A24C554198EBAF44979C5B4D2C2D312E6EBAB71962C92F735499C7575839", "path": "", "channelId": "", "decimals": 6, - "symbol": "milkTIA", - "baseDenom": "milkTIA", - "isNative": false + "symbol": "ASTRO", + "baseDenom": "ASTRO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride", - "denom": "ibc/3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/strd.png", - "symbol": "STRD", + "name": "AtomEconomicZone69JaeKwonInu", + "denom": "ibc/AEE5A4EF1B28693C4FF12F046C17197E509030B18F70FE3D74F6C3542BB008AD", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/circus.png", + "symbol": "CIRCUS", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25", + "hash": "AEE5A4EF1B28693C4FF12F046C17197E509030B18F70FE3D74F6C3542BB008AD", "path": "", "channelId": "", "decimals": 6, - "symbol": "STRD", - "baseDenom": "STRD", - "isNative": false + "symbol": "CIRCUS", + "baseDenom": "CIRCUS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked ATOM", - "denom": "ibc/A8F39212ED30B6A8C2AC736665835720D3D7BE4A1D18D68566525EC25ECF1C9B", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/statom.png", - "symbol": "stATOM", + "name": "ATOM Squared", + "denom": "ibc/C63E6285FA0EE014B89671A7A633E1CE7F62310312843B9AC7248910619143C6", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqatom.svg", + "symbol": "sqATOM", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "A8F39212ED30B6A8C2AC736665835720D3D7BE4A1D18D68566525EC25ECF1C9B", + "hash": "C63E6285FA0EE014B89671A7A633E1CE7F62310312843B9AC7248910619143C6", "path": "", "channelId": "", "decimals": 6, - "symbol": "stATOM", - "baseDenom": "stATOM", - "isNative": false + "symbol": "sqATOM", + "baseDenom": "sqATOM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked STARS", - "denom": "ibc/DD0F92D576A9A60487F17685A987AB6EDB359E661D281ED31F3AE560650ECFCB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/ststars.png", - "symbol": "stSTARS", + "name": "Autism", + "denom": "factory/inj14lf8xm6fcvlggpa7guxzjqwjmtr24gnvf56hvz/autism", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/autism.png", + "symbol": "AUTISM", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "DD0F92D576A9A60487F17685A987AB6EDB359E661D281ED31F3AE560650ECFCB", + "hash": "factory/inj14lf8xm6fcvlggpa7guxzjqwjmtr24gnvf56hvz/autism", "path": "", "channelId": "", "decimals": 6, - "symbol": "stSTARS", - "baseDenom": "stSTARS", - "isNative": false + "symbol": "AUTISM", + "baseDenom": "AUTISM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked OSMO", - "denom": "ibc/6D821F3CFAE78E9EBD872FAEC61C400C0D9B72E77FA14614CF1B775A528854FD", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stosmo.png", - "symbol": "stOSMO", + "name": "Avalanche USD Coin (Wormhole)", + "denom": "ibc/348633370BE07A623D7FC9CD229150936ADCD3A4E842DAD246BBA817D21FF6C7", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdc.svg", + "symbol": "avalanche.USDC.wh", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "6D821F3CFAE78E9EBD872FAEC61C400C0D9B72E77FA14614CF1B775A528854FD", + "hash": "348633370BE07A623D7FC9CD229150936ADCD3A4E842DAD246BBA817D21FF6C7", "path": "", "channelId": "", "decimals": 6, - "symbol": "stOSMO", - "baseDenom": "stOSMO", - "isNative": false + "symbol": "avalanche.USDC.wh", + "baseDenom": "avalanche.USDC.wh", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked JUNO", - "denom": "ibc/580E52A2C2DB126EE2160D1BDBBA33B5839D53B5E59D04D4FF438AE9BB7BFAAB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stjuno.png", - "symbol": "stJUNO", + "name": "Axelar", + "denom": "ibc/B68C1D2682A8B69E20BB921E34C6A3A2B6D1E13E3E8C0092E373826F546DEE65", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/axl.png", + "symbol": "AXL", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "580E52A2C2DB126EE2160D1BDBBA33B5839D53B5E59D04D4FF438AE9BB7BFAAB", + "hash": "B68C1D2682A8B69E20BB921E34C6A3A2B6D1E13E3E8C0092E373826F546DEE65", "path": "", "channelId": "", "decimals": 6, - "symbol": "stJUNO", - "baseDenom": "stJUNO", - "isNative": false + "symbol": "AXL", + "baseDenom": "AXL", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked LUNA", - "denom": "ibc/E98796F283A8B56A221011C2EDF7079BB62D1EA3EEF3E7CF4C679E91C6D97D08", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stluna.png", - "symbol": "stLUNA", - "decimals": 6, + "name": "Axie Infinity Shard", + "denom": "ibc/EB519ECF709F0DB6BA1359F91BA2DDC5A07FB9869E1768D377EFEF9DF33DC4AB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/axs.svg", + "symbol": "AXS", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E98796F283A8B56A221011C2EDF7079BB62D1EA3EEF3E7CF4C679E91C6D97D08", - "path": "", - "channelId": "", - "decimals": 6, - "symbol": "stLUNA", - "baseDenom": "stLUNA", - "isNative": false - } - }, - { - "name": "Stride Staked EVMOS", - "denom": "ibc/75F64E20A70C5059F8EA792F1C47260DC7C6CBAC69DBA60E151AD5416E93C34C", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stevmos.png", - "symbol": "stEVMOS", - "decimals": 18, - "coinGeckoId": "", - "tokenType": "ibc", - "tokenVerification": "external", - "ibc": { - "hash": "75F64E20A70C5059F8EA792F1C47260DC7C6CBAC69DBA60E151AD5416E93C34C", + "hash": "EB519ECF709F0DB6BA1359F91BA2DDC5A07FB9869E1768D377EFEF9DF33DC4AB", "path": "", "channelId": "", "decimals": 18, - "symbol": "stEVMOS", - "baseDenom": "stEVMOS", - "isNative": false + "symbol": "AXS", + "baseDenom": "AXS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked INJ", - "denom": "ibc/AC87717EA002B0123B10A05063E69BCA274BA2C44D842AEEB41558D2856DCE93", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stinj.png", - "symbol": "stINJ", - "decimals": 18, + "name": "axlWBTC", + "denom": "ibc/F57B53E102171E6DC254532ECC184228BB8E23B755AD55FA6FDCBD70464A9A54", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/wbtc.png", + "symbol": "axlWBTC", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "AC87717EA002B0123B10A05063E69BCA274BA2C44D842AEEB41558D2856DCE93", + "hash": "F57B53E102171E6DC254532ECC184228BB8E23B755AD55FA6FDCBD70464A9A54", "path": "", "channelId": "", - "decimals": 18, - "symbol": "stINJ", - "baseDenom": "stINJ", - "isNative": false + "decimals": 6, + "symbol": "axlWBTC", + "baseDenom": "axlWBTC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked UMEE", - "denom": "ibc/FC8E98DF998AE88129183094E49383F94B3E5F1844C939D380AF18061FEF41EB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stumee.png", - "symbol": "stUMEE", + "name": "Baby Corgi", + "denom": "ibc/9AC0F8299A5157831C7DF1AE52F178EFBA8D5E1826D4DD539441E3827FFCB873", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/babycorgi.png", + "symbol": "CORGI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "FC8E98DF998AE88129183094E49383F94B3E5F1844C939D380AF18061FEF41EB", + "hash": "9AC0F8299A5157831C7DF1AE52F178EFBA8D5E1826D4DD539441E3827FFCB873", "path": "", "channelId": "", "decimals": 6, - "symbol": "stUMEE", - "baseDenom": "stUMEE", - "isNative": false + "symbol": "CORGI", + "baseDenom": "CORGI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked CMDX", - "denom": "ibc/0CAB2CA45981598C95B6BE18252AEFE1E9E1691D8B4C661997AD7B836FD904D6", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stcmdx.png", - "symbol": "stCMDX", + "name": "Badcoin", + "denom": "ibc/C04478BE3CAA4A14EAF4A47967945E92ED2C39E02146E1577991FC5243E974BB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/bad.png", + "symbol": "BAD", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "0CAB2CA45981598C95B6BE18252AEFE1E9E1691D8B4C661997AD7B836FD904D6", + "hash": "C04478BE3CAA4A14EAF4A47967945E92ED2C39E02146E1577991FC5243E974BB", "path": "", "channelId": "", "decimals": 6, - "symbol": "stCMDX", - "baseDenom": "stCMDX", - "isNative": false + "symbol": "BAD", + "baseDenom": "BAD", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Stride Staked SOMM", - "denom": "ibc/9C234DA49B8DDAFB8F71F21BEB109F6255ECA146A32FD3A36CB9210647CBD037", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stsomm.png", - "symbol": "stSOMM", + "name": "BADKID", + "denom": "ibc/A0C5AD197FECAF6636F589071338DC7ECD6B0809CD3A5AB131EAAA5395E7E5E8", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/badkid.png", + "symbol": "BADKID", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "9C234DA49B8DDAFB8F71F21BEB109F6255ECA146A32FD3A36CB9210647CBD037", + "hash": "A0C5AD197FECAF6636F589071338DC7ECD6B0809CD3A5AB131EAAA5395E7E5E8", "path": "", "channelId": "", "decimals": 6, - "symbol": "stSOMM", - "baseDenom": "stSOMM", - "isNative": false + "symbol": "BADKID", + "baseDenom": "BADKID", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Evmos", - "denom": "ibc/16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png", - "symbol": "EVMOS", + "name": "Binance USD", + "denom": "ibc/A62F794AAEC56B6828541224D91DA3E21423AB0DC4D21ECB05E4588A07BD934C", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/busd.png", + "symbol": "BUSD", "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821", + "hash": "A62F794AAEC56B6828541224D91DA3E21423AB0DC4D21ECB05E4588A07BD934C", "path": "", "channelId": "", "decimals": 18, - "symbol": "EVMOS", - "baseDenom": "EVMOS", - "isNative": false + "symbol": "BUSD", + "baseDenom": "BUSD", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Neokingdom DAO", - "denom": "ibc/F6CC233E5C0EA36B1F74AB1AF98471A2D6A80E2542856639703E908B4D93E7C4", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/neok.png", - "symbol": "NEOK", - "decimals": 18, + "name": "Bitcosmos", + "denom": "ibc/E440667C70A0C9A5AD5A8D709731289AFB92301D64D70D0B33D18EF4FDD797FE", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/bitcosmos.png", + "symbol": "BTC", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F6CC233E5C0EA36B1F74AB1AF98471A2D6A80E2542856639703E908B4D93E7C4", + "hash": "E440667C70A0C9A5AD5A8D709731289AFB92301D64D70D0B33D18EF4FDD797FE", "path": "", "channelId": "", - "decimals": 18, - "symbol": "NEOK", - "baseDenom": "NEOK", - "isNative": false + "decimals": 6, + "symbol": "BTC", + "baseDenom": "BTC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Kujira", - "denom": "ibc/9A115B56E769B92621FFF90567E2D60EFD146E86E867491DB69EEDA9ADC36204", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/kuji.png", - "symbol": "KUJI", + "name": "Bitmos", + "denom": "ibc/D9353C3B1407A7F7FE0A5CCB7D06249B57337888C95C6648AEAF2C83F4F3074E", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/bitmos.png", + "symbol": "BMOS", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "9A115B56E769B92621FFF90567E2D60EFD146E86E867491DB69EEDA9ADC36204", + "hash": "D9353C3B1407A7F7FE0A5CCB7D06249B57337888C95C6648AEAF2C83F4F3074E", "path": "", "channelId": "", "decimals": 6, - "symbol": "KUJI", - "baseDenom": "KUJI", - "isNative": false + "symbol": "BMOS", + "baseDenom": "BMOS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "USK", - "denom": "ibc/58BC643F2EB5758C08D8B1569C7948A5DA796802576005F676BBFB7526E520EB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/usk.png", - "symbol": "USK", + "name": "BitzDAO", + "denom": "ibc/01A69EE21F6A76CAA8D0DB900AF2789BF665B5B67D89A7D69E7ECF7F513CD0CA", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/BITZ.png", + "symbol": "BITZ", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "58BC643F2EB5758C08D8B1569C7948A5DA796802576005F676BBFB7526E520EB", + "hash": "01A69EE21F6A76CAA8D0DB900AF2789BF665B5B67D89A7D69E7ECF7F513CD0CA", "path": "", "channelId": "", "decimals": 6, - "symbol": "USK", - "baseDenom": "USK", - "isNative": false + "symbol": "BITZ", + "baseDenom": "BITZ", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ampKUJI", - "denom": "ibc/34E48C7C43383203519D996D1D93FE80ED50153E28FB6A9465DE463AEF2EC9EC", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/ampkuji.png", - "symbol": "ampKUJI", + "name": "BLEND", + "denom": "ibc/45C0FE8ACE1C9C8BA38D3D6FDEBDE4F7198A434B6C63ADCEFC3D32D12443BB84", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/blend.svg", + "symbol": "BLEND", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "34E48C7C43383203519D996D1D93FE80ED50153E28FB6A9465DE463AEF2EC9EC", + "hash": "45C0FE8ACE1C9C8BA38D3D6FDEBDE4F7198A434B6C63ADCEFC3D32D12443BB84", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampKUJI", - "baseDenom": "ampKUJI", - "isNative": false + "symbol": "BLEND", + "baseDenom": "BLEND", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "MantaDAO", - "denom": "ibc/A4495880A4A2E3C242F63C710F447BAE072E1A4C2A22F1851E0BB7ABDD26B43D", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/mnta.png", - "symbol": "MNTA", + "name": "BLUE CUB DAO", + "denom": "ibc/B692197280D4E62F8D9F8E5C0B697DC4C2C680ED6DE8FFF0368E0552C9215607", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/blue.png", + "symbol": "BLUE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "A4495880A4A2E3C242F63C710F447BAE072E1A4C2A22F1851E0BB7ABDD26B43D", + "hash": "B692197280D4E62F8D9F8E5C0B697DC4C2C680ED6DE8FFF0368E0552C9215607", "path": "", "channelId": "", "decimals": 6, - "symbol": "MNTA", - "baseDenom": "MNTA", - "isNative": false + "symbol": "BLUE", + "baseDenom": "BLUE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "WINK", - "denom": "ibc/325300CEF4149AD1BBFEB540FF07699CDEEFBB653401E872532030CFB31CD767", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/wink.png", - "symbol": "WINK", + "name": "Bonded Crescent", + "denom": "ibc/D9E839DE6F40C036592B6CEDB73841EE9A18987BC099DD112762A46AFE72159B", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/crescent/images/bcre.png", + "symbol": "bCRE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "325300CEF4149AD1BBFEB540FF07699CDEEFBB653401E872532030CFB31CD767", + "hash": "D9E839DE6F40C036592B6CEDB73841EE9A18987BC099DD112762A46AFE72159B", "path": "", "channelId": "", "decimals": 6, - "symbol": "WINK", - "baseDenom": "WINK", - "isNative": false + "symbol": "bCRE", + "baseDenom": "bCRE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "BLEND", - "denom": "ibc/45C0FE8ACE1C9C8BA38D3D6FDEBDE4F7198A434B6C63ADCEFC3D32D12443BB84", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/blend.svg", - "symbol": "BLEND", + "name": "boneLuna", + "denom": "ibc/C9D55B62C9D9CA84DD94DC019009B840DDFD861BF2F33F7CF2A8A74933797680", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/boneluna.png", + "symbol": "bLUNA", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "45C0FE8ACE1C9C8BA38D3D6FDEBDE4F7198A434B6C63ADCEFC3D32D12443BB84", + "hash": "C9D55B62C9D9CA84DD94DC019009B840DDFD861BF2F33F7CF2A8A74933797680", "path": "", "channelId": "", "decimals": 6, - "symbol": "BLEND", - "baseDenom": "BLEND", - "isNative": false + "symbol": "bLUNA", + "baseDenom": "bLUNA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Amplified MNTA", - "denom": "ibc/A87178EAA371050DDFD80F78630AE622B176C7634160EE515C27CE62FCC8A0CC", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/ampmnta.png", - "symbol": "ampMNTA", + "name": "boneWHALE", + "denom": "ibc/ECB0AA28D6001EF985047558C410B65581FC85BD92D4E3CFCCA0D3D964C67CC2", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/bWHALE.png", + "symbol": "bWHALE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "A87178EAA371050DDFD80F78630AE622B176C7634160EE515C27CE62FCC8A0CC", + "hash": "ECB0AA28D6001EF985047558C410B65581FC85BD92D4E3CFCCA0D3D964C67CC2", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampMNTA", - "baseDenom": "ampMNTA", - "isNative": false + "symbol": "bWHALE", + "baseDenom": "bWHALE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "qcKUJI", - "denom": "ibc/B7C8418ABE8CF56B42A37215F6A715097FDD82AC322FE560CA589833FEE8C50D", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/qckuji.svg", - "symbol": "qcKUJI", - "decimals": 6, + "name": "Bonk (Wormhole)", + "denom": "ibc/C951FBB321708183F5A14811A3D099B3D73457D12E193E2B8429BDDCC6810D5A", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/solana/images/bonk.png", + "symbol": "Bonk", + "decimals": 5, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B7C8418ABE8CF56B42A37215F6A715097FDD82AC322FE560CA589833FEE8C50D", + "hash": "C951FBB321708183F5A14811A3D099B3D73457D12E193E2B8429BDDCC6810D5A", "path": "", "channelId": "", - "decimals": 6, - "symbol": "qcKUJI", - "baseDenom": "qcKUJI", - "isNative": false + "decimals": 5, + "symbol": "Bonk", + "baseDenom": "Bonk", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "qcMNTA", - "denom": "ibc/F770E830BC7E2992BC0DBECAC789432995B64BD6714C36EA092D877E28AA9493", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/qcmnta.svg", - "symbol": "qcMNTA", + "name": "boy", + "denom": "ibc/84DA08CF29CD08373ABB0E36F4E6E8DC2908EA9A8E529349EBDC08520527EFC2", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/boy.png", + "symbol": "BOY", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F770E830BC7E2992BC0DBECAC789432995B64BD6714C36EA092D877E28AA9493", + "hash": "84DA08CF29CD08373ABB0E36F4E6E8DC2908EA9A8E529349EBDC08520527EFC2", "path": "", "channelId": "", "decimals": 6, - "symbol": "qcMNTA", - "baseDenom": "qcMNTA", - "isNative": false + "symbol": "BOY", + "baseDenom": "BOY", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Fuzion", - "denom": "ibc/FE87E1E1BB401EC35CD02A57FE5DEF872FA309C018172C4E7DA07F194EAC6F19", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/fuzion.png", - "symbol": "FUZN", + "name": "BTC Squared", + "denom": "ibc/81C212661A115B9799C71173DD131B5077B14A3FBD26A8A9A0C669F76F434E23", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqbtc.svg", + "symbol": "sqBTC", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "FE87E1E1BB401EC35CD02A57FE5DEF872FA309C018172C4E7DA07F194EAC6F19", + "hash": "81C212661A115B9799C71173DD131B5077B14A3FBD26A8A9A0C669F76F434E23", "path": "", "channelId": "", "decimals": 6, - "symbol": "FUZN", - "baseDenom": "FUZN", - "isNative": false + "symbol": "sqBTC", + "baseDenom": "sqBTC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Fuzion Receipt", - "denom": "ibc/F5FFC37BBF4B24F94D920BC7DAFCCE5B9403B2DB33DF759B8CED76EA8A6E3E24", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/fuzionr.png", - "symbol": "rFUZN", - "decimals": 6, + "name": "Canto", + "denom": "ibc/D91A2C4EE7CD86BBAFCE0FA44A60DDD9AFBB7EEB5B2D46C0984DEBCC6FEDFAE8", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/canto/images/canto.png", + "symbol": "CANTO", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F5FFC37BBF4B24F94D920BC7DAFCCE5B9403B2DB33DF759B8CED76EA8A6E3E24", + "hash": "D91A2C4EE7CD86BBAFCE0FA44A60DDD9AFBB7EEB5B2D46C0984DEBCC6FEDFAE8", "path": "", "channelId": "", - "decimals": 6, - "symbol": "rFUZN", - "baseDenom": "rFUZN", - "isNative": false + "decimals": 18, + "symbol": "CANTO", + "baseDenom": "CANTO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Unstake Fi", - "denom": "ibc/35366063B530778DC37A16AAED4DDC14C0DCA161FBF55B5B69F5171FEE19BF93", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/nstk.svg", - "symbol": "NSTK", + "name": "cartel", + "denom": "ibc/FDD71937DFA4E18BBF16734EB0AD0EFA9F7F1B0F21D13FAF63F0B4F3EA7DEF28", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/cartel.png", + "symbol": "CARTEL", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "35366063B530778DC37A16AAED4DDC14C0DCA161FBF55B5B69F5171FEE19BF93", + "hash": "FDD71937DFA4E18BBF16734EB0AD0EFA9F7F1B0F21D13FAF63F0B4F3EA7DEF28", "path": "", "channelId": "", "decimals": 6, - "symbol": "NSTK", - "baseDenom": "NSTK", - "isNative": false + "symbol": "CARTEL", + "baseDenom": "CARTEL", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "LOCAL", - "denom": "ibc/FECCDCFA89278B117C76A11A946A7991A68E5DD12DED6EB938ADC1B1286AC591", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/local.png", - "symbol": "LOCAL", + "name": "CDT Stablecoin", + "denom": "ibc/25288BA0C7D146D37373657ECA719B9AADD49DA9E514B4172D08F7C88D56C9EF", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/CDT.svg", + "symbol": "CDT", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "FECCDCFA89278B117C76A11A946A7991A68E5DD12DED6EB938ADC1B1286AC591", + "hash": "25288BA0C7D146D37373657ECA719B9AADD49DA9E514B4172D08F7C88D56C9EF", "path": "", "channelId": "", "decimals": 6, - "symbol": "LOCAL", - "baseDenom": "LOCAL", - "isNative": false + "symbol": "CDT", + "baseDenom": "CDT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Fuzion Yield", - "denom": "ibc/71C297610507CCB7D42E49EA49AF2ECBBE2D4A83D139C4A441EB7A2693C0464A", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/fuziony.svg", - "symbol": "yFUZN", + "name": "Celestia", + "denom": "ibc/F51BB221BAA275F2EBF654F70B005627D7E713AFFD6D86AFD1E43CAA886149F4", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/celestia/images/celestia.png", + "symbol": "TIA", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "71C297610507CCB7D42E49EA49AF2ECBBE2D4A83D139C4A441EB7A2693C0464A", + "hash": "F51BB221BAA275F2EBF654F70B005627D7E713AFFD6D86AFD1E43CAA886149F4", "path": "", "channelId": "", "decimals": 6, - "symbol": "yFUZN", - "baseDenom": "yFUZN", - "isNative": false + "symbol": "TIA", + "baseDenom": "TIA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Umee", - "denom": "ibc/2FF3DC3A0265B9A220750E75E75E5D44ED2F716B8AC4EDC378A596CC958ABF6B", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/umee/images/umee.png", - "symbol": "UMEE", - "decimals": 6, + "name": "Chain", + "denom": "ibc/79D01DE88DFFC0610003439D38200E77A3D2A1CCCBE4B1958D685026ABB01814", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/xcn.svg", + "symbol": "XCN", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "2FF3DC3A0265B9A220750E75E75E5D44ED2F716B8AC4EDC378A596CC958ABF6B", + "hash": "79D01DE88DFFC0610003439D38200E77A3D2A1CCCBE4B1958D685026ABB01814", "path": "", "channelId": "", - "decimals": 6, - "symbol": "UMEE", - "baseDenom": "UMEE", - "isNative": false + "decimals": 18, + "symbol": "XCN", + "baseDenom": "XCN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Cosmos Hub Atom", - "denom": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", - "symbol": "ATOM", - "decimals": 6, + "name": "Chainlink", + "denom": "ibc/AC447F1D6EDAF817589C5FECECB6CD3B9E9EFFD33C7E16FE8820009F92A2F585", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/link.png", + "symbol": "LINK", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + "hash": "AC447F1D6EDAF817589C5FECECB6CD3B9E9EFFD33C7E16FE8820009F92A2F585", "path": "", "channelId": "", - "decimals": 6, - "symbol": "ATOM", - "baseDenom": "ATOM", - "isNative": false + "decimals": 18, + "symbol": "LINK", + "baseDenom": "LINK", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Axelar", - "denom": "ibc/B68C1D2682A8B69E20BB921E34C6A3A2B6D1E13E3E8C0092E373826F546DEE65", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/axl.png", - "symbol": "AXL", + "name": "Coinbase Wrapped Staked ETH", + "denom": "ibc/545E97C6EFB2633645720DEBCA78B2BE6F5382C4693EA7DEB2D4C456371EA4F0", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/cbeth.png", + "symbol": "cbETH", + "decimals": 18, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "545E97C6EFB2633645720DEBCA78B2BE6F5382C4693EA7DEB2D4C456371EA4F0", + "path": "", + "channelId": "", + "decimals": 18, + "symbol": "cbETH", + "baseDenom": "cbETH", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Cosmos Hub Atom", + "denom": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", + "symbol": "ATOM", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B68C1D2682A8B69E20BB921E34C6A3A2B6D1E13E3E8C0092E373826F546DEE65", + "hash": "C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", "path": "", "channelId": "", "decimals": 6, - "symbol": "AXL", - "baseDenom": "AXL", - "isNative": false + "symbol": "ATOM", + "baseDenom": "ATOM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "USD Coin", - "denom": "ibc/7E1AF94AD246BE522892751046F0C959B768642E5671CC3742264068D49553C0", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", - "symbol": "USDC", + "name": "Crescent", + "denom": "ibc/3A6DD3358D9F7ADD18CDE79BA10B400511A5DE4AE2C037D7C9639B52ADAF35C6", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/crescent/images/cre.png", + "symbol": "CRE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "7E1AF94AD246BE522892751046F0C959B768642E5671CC3742264068D49553C0", + "hash": "3A6DD3358D9F7ADD18CDE79BA10B400511A5DE4AE2C037D7C9639B52ADAF35C6", "path": "", "channelId": "", "decimals": 6, - "symbol": "USDC", - "baseDenom": "USDC", - "isNative": false + "symbol": "CRE", + "baseDenom": "CRE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Frax", - "denom": "ibc/3E5504815B2D69DCC32B1FF54CDAC28D7DA2C445BD29C496A83732DC1D52DB90", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/frax.svg", - "symbol": "FRAX", - "decimals": 18, + "name": "DAI", + "denom": "ibc/433133545CF68587777A01C3EFCF720EFE1B42F14AB2153D349DC4559984F2E8", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/dai.png", + "symbol": "DAI", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "3E5504815B2D69DCC32B1FF54CDAC28D7DA2C445BD29C496A83732DC1D52DB90", + "hash": "433133545CF68587777A01C3EFCF720EFE1B42F14AB2153D349DC4559984F2E8", "path": "", "channelId": "", - "decimals": 18, - "symbol": "FRAX", - "baseDenom": "FRAX", - "isNative": false + "decimals": 6, + "symbol": "DAI", + "baseDenom": "DAI", + "isNative": false, + "tokenType": "ibc" } }, { @@ -889,203 +935,934 @@ "decimals": 18, "symbol": "DAI", "baseDenom": "DAI", - "isNative": false + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Tether USD", - "denom": "ibc/90C6F06139D663CFD7949223D257C5B5D241E72ED61EBD12FFDDA6F068715E47", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdt.png", - "symbol": "USDT", - "decimals": 6, + "name": "Dai Stablecoin (Wormhole)", + "denom": "ibc/293F6074F0D8FF3D8A686F11BCA3DD459C54695B8F205C8867E4917A630634C2", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/dai.svg", + "symbol": "DAI", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "90C6F06139D663CFD7949223D257C5B5D241E72ED61EBD12FFDDA6F068715E47", + "hash": "293F6074F0D8FF3D8A686F11BCA3DD459C54695B8F205C8867E4917A630634C2", "path": "", "channelId": "", - "decimals": 6, - "symbol": "USDT", - "baseDenom": "USDT", - "isNative": false + "decimals": 8, + "symbol": "DAI", + "baseDenom": "DAI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped Ether", - "denom": "ibc/65A6973F7A4013335AE5FFE623FE019A78A1FEEE9B8982985099978837D764A7", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/weth.png", - "symbol": "WETH", + "name": "dinheiro", + "denom": "ibc/306269448B7ED8EC0DB6DC30BAEA279A9190E1D583572681749B9C0D44915DAB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/Dinheiros.png", + "symbol": "DINHEIROS", "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "65A6973F7A4013335AE5FFE623FE019A78A1FEEE9B8982985099978837D764A7", + "hash": "306269448B7ED8EC0DB6DC30BAEA279A9190E1D583572681749B9C0D44915DAB", "path": "", "channelId": "", "decimals": 18, - "symbol": "WETH", - "baseDenom": "WETH", - "isNative": false + "symbol": "DINHEIROS", + "baseDenom": "DINHEIROS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped Bitcoin", - "denom": "ibc/4C8A332AE4FDE42709649B5F9A2A336192158C4465DF74B4513F5AD0C583EA6F", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/wbtc.png", - "symbol": "WBTC", - "decimals": 8, + "name": "DNA", + "denom": "ibc/AE8E20F37C6A72187633E418169758A6974DD18AB460ABFC74820AAC364D2A13", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/DNA.png", + "symbol": "DNA", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "4C8A332AE4FDE42709649B5F9A2A336192158C4465DF74B4513F5AD0C583EA6F", + "hash": "AE8E20F37C6A72187633E418169758A6974DD18AB460ABFC74820AAC364D2A13", "path": "", "channelId": "", - "decimals": 8, - "symbol": "WBTC", - "baseDenom": "WBTC", - "isNative": false + "decimals": 6, + "symbol": "DNA", + "baseDenom": "DNA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Aave", - "denom": "ibc/49265FCAA6CC20B59652C0B45B2283A260BB19FC183DE95C29CCA8E01F8B004C", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/aave.svg", - "symbol": "AAVE", - "decimals": 18, + "name": "Dog wif nunchucks", + "denom": "factory/inj1xtel2knkt8hmc9dnzpjz6kdmacgcfmlv5f308w/ninja", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/ninja.png", + "symbol": "NINJA", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "49265FCAA6CC20B59652C0B45B2283A260BB19FC183DE95C29CCA8E01F8B004C", + "hash": "factory/inj1xtel2knkt8hmc9dnzpjz6kdmacgcfmlv5f308w/ninja", "path": "", "channelId": "", - "decimals": 18, - "symbol": "AAVE", - "baseDenom": "AAVE", - "isNative": false + "decimals": 6, + "symbol": "NINJA", + "baseDenom": "NINJA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ApeCoin", - "denom": "ibc/8A13F5DA968B4D526E9DC5AE20B584FE62462E80AF06B9D0EA0B0DB35ABBBF27", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/ape.svg", - "symbol": "APE", - "decimals": 18, + "name": "DOKI", + "denom": "ibc/EA7CE127E1CFD7822AD169019CAFDD63D0F5A278DCE974F438099BF16C99FB8B", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/doki_Logo.png", + "symbol": "DOKI", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "8A13F5DA968B4D526E9DC5AE20B584FE62462E80AF06B9D0EA0B0DB35ABBBF27", + "hash": "EA7CE127E1CFD7822AD169019CAFDD63D0F5A278DCE974F438099BF16C99FB8B", "path": "", "channelId": "", - "decimals": 18, - "symbol": "APE", - "baseDenom": "APE", - "isNative": false + "decimals": 6, + "symbol": "DOKI", + "baseDenom": "DOKI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Axie Infinity Shard", - "denom": "ibc/EB519ECF709F0DB6BA1359F91BA2DDC5A07FB9869E1768D377EFEF9DF33DC4AB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/axs.svg", - "symbol": "AXS", + "name": "Dora Vota", + "denom": "ibc/BC3AD52E42C6E1D13D2BDCEB497CF5AB9FEE24D804F5563B9E7DCFB825246947", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/doravota/images/dora.svg", + "symbol": "DORA", "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "EB519ECF709F0DB6BA1359F91BA2DDC5A07FB9869E1768D377EFEF9DF33DC4AB", + "hash": "BC3AD52E42C6E1D13D2BDCEB497CF5AB9FEE24D804F5563B9E7DCFB825246947", "path": "", "channelId": "", "decimals": 18, - "symbol": "AXS", - "baseDenom": "AXS", - "isNative": false + "symbol": "DORA", + "baseDenom": "DORA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Chainlink", - "denom": "ibc/AC447F1D6EDAF817589C5FECECB6CD3B9E9EFFD33C7E16FE8820009F92A2F585", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/link.png", - "symbol": "LINK", - "decimals": 18, + "name": "Dot", + "denom": "ibc/B0442E32E21ED4228301A2B1B247D3F3355B73BF288470F9643AAD0CA07DD593", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/polkadot/images/dot.png", + "symbol": "DOT", + "decimals": 10, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "AC447F1D6EDAF817589C5FECECB6CD3B9E9EFFD33C7E16FE8820009F92A2F585", + "hash": "B0442E32E21ED4228301A2B1B247D3F3355B73BF288470F9643AAD0CA07DD593", "path": "", "channelId": "", - "decimals": 18, - "symbol": "LINK", - "baseDenom": "LINK", - "isNative": false + "decimals": 10, + "symbol": "DOT", + "baseDenom": "DOT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Maker", - "denom": "ibc/E8C65EFAB7804152191B8311F61877A36779277E316883D8812D3CBEFC79AE4F", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/mkr.svg", - "symbol": "MKR", - "decimals": 18, + "name": "DROGO", + "denom": "ibc/565FE65B82C091F8BAD1379FA1B4560C036C07913355ED4BD8D156DA63F43712", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/drogo.png", + "symbol": "DROGO", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E8C65EFAB7804152191B8311F61877A36779277E316883D8812D3CBEFC79AE4F", + "hash": "565FE65B82C091F8BAD1379FA1B4560C036C07913355ED4BD8D156DA63F43712", "path": "", "channelId": "", - "decimals": 18, - "symbol": "MKR", - "baseDenom": "MKR", - "isNative": false + "decimals": 6, + "symbol": "DROGO", + "baseDenom": "DROGO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Rai Reflex Index", - "denom": "ibc/27817BAE3958FFB2BFBD8F4F6165153DFD230779994A7C42A91E0E45E8201768", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/rai.svg", - "symbol": "RAI", - "decimals": 18, + "name": "ERIS Alliance Staked ampWHALE", + "denom": "ibc/DF3225D7381562B58AA8BE107A87260DDDC7FA08E4B0898E3D795392CF844BBE", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/ampwhalet.svg", + "symbol": "ampWHALEt", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "27817BAE3958FFB2BFBD8F4F6165153DFD230779994A7C42A91E0E45E8201768", + "hash": "DF3225D7381562B58AA8BE107A87260DDDC7FA08E4B0898E3D795392CF844BBE", "path": "", "channelId": "", - "decimals": 18, - "symbol": "RAI", - "baseDenom": "RAI", - "isNative": false + "decimals": 6, + "symbol": "ampWHALEt", + "baseDenom": "ampWHALEt", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Shiba Inu", - "denom": "ibc/E68343A4DEF4AFBE7C5A9004D4C11888EE755A7B43B3F1AFA52F2C34C07990D5", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/shib.svg", - "symbol": "SHIB", - "decimals": 18, + "name": "ERIS Alliance Staked boneWHALE", + "denom": "ibc/F993B2C44A70D8B97B09581F12CF1A68A38DF8BBCFBA9F82016984138C718A57", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/bonewhalet.svg", + "symbol": "boneWHALEt", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E68343A4DEF4AFBE7C5A9004D4C11888EE755A7B43B3F1AFA52F2C34C07990D5", + "hash": "F993B2C44A70D8B97B09581F12CF1A68A38DF8BBCFBA9F82016984138C718A57", "path": "", "channelId": "", - "decimals": 18, - "symbol": "SHIB", - "baseDenom": "SHIB", - "isNative": false + "decimals": 6, + "symbol": "boneWHALEt", + "baseDenom": "boneWHALEt", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Lido Staked Ether", - "denom": "ibc/FB1B967C690FEA7E9AD7CF76AE2255169D4EA2937D6694B2C0E61A370F76D9FB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/steth.svg", + "name": "ERIS Amplified INJ", + "denom": "factory/inj1cdwt8g7nxgtg2k4fn8sj363mh9ahkw2qt0vrnc/ampINJ", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/ampinj.png", + "symbol": "ampINJ", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "factory/inj1cdwt8g7nxgtg2k4fn8sj363mh9ahkw2qt0vrnc/ampINJ", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ampINJ", + "baseDenom": "ampINJ", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "ERIS Amplified LUNA", + "denom": "ibc/751CCECAF75D686B1DC8708BE62F8C7411B211750E6009C6AC4C93881F0543E8", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/ampluna.svg", + "symbol": "ampLUNA", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "751CCECAF75D686B1DC8708BE62F8C7411B211750E6009C6AC4C93881F0543E8", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ampLUNA", + "baseDenom": "ampLUNA", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "ERIS Amplified MNTA", + "denom": "ibc/A87178EAA371050DDFD80F78630AE622B176C7634160EE515C27CE62FCC8A0CC", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/ampmnta.png", + "symbol": "ampMNTA", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "A87178EAA371050DDFD80F78630AE622B176C7634160EE515C27CE62FCC8A0CC", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ampMNTA", + "baseDenom": "ampMNTA", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "ERIS Amplified OSMO", + "denom": "ibc/012D069D557C4DD59A670AA17E809CB7A790D778E364D0BC0A3248105DA6432D", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/amposmo.png", + "symbol": "ampOSMO", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "012D069D557C4DD59A670AA17E809CB7A790D778E364D0BC0A3248105DA6432D", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ampOSMO", + "baseDenom": "ampOSMO", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "ERIS Amplified ROAR", + "denom": "ibc/7BE54594EAE77464217B9BB5171035946ED23DB309B030B5708E15C9455BB557", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/amproar.png", + "symbol": "ampROAR", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "7BE54594EAE77464217B9BB5171035946ED23DB309B030B5708E15C9455BB557", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ampROAR", + "baseDenom": "ampROAR", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "ERIS Amplified SEI", + "denom": "ibc/E175256127F32A27BB1FF863D15D8C4BB14968ED069B6A292723D485A33514A2", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/ampsei.svg", + "symbol": "ampSEI", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "E175256127F32A27BB1FF863D15D8C4BB14968ED069B6A292723D485A33514A2", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ampSEI", + "baseDenom": "ampSEI", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "ERIS Amplified SEI", + "denom": "ibc/9774771543D917853B9A9D108885C223DFF03ABC7BD39AD2783CA4E1F58CDC6E", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/ampsei.svg", + "symbol": "ampSEI", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "9774771543D917853B9A9D108885C223DFF03ABC7BD39AD2783CA4E1F58CDC6E", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ampSEI", + "baseDenom": "ampSEI", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "ERIS Amplified SEI", + "denom": "ibc/6293B8AAE79F71B7DA3E8DEE00BEE0740D6D8495DB9BAED2342949B0A90152A5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/ampsei.svg", + "symbol": "ampSEI", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "6293B8AAE79F71B7DA3E8DEE00BEE0740D6D8495DB9BAED2342949B0A90152A5", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ampSEI", + "baseDenom": "ampSEI", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "escudo", + "denom": "ibc/D1546953F51A43131EDB1E80447C823FD0B562C928496808801A57F374357CE5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/Escudos.png", + "symbol": "ESCUDOS", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "D1546953F51A43131EDB1E80447C823FD0B562C928496808801A57F374357CE5", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ESCUDOS", + "baseDenom": "ESCUDOS", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Evmos", + "denom": "ibc/16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/evmos.png", + "symbol": "EVMOS", + "decimals": 18, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821", + "path": "", + "channelId": "", + "decimals": 18, + "symbol": "EVMOS", + "baseDenom": "EVMOS", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "FABLE", + "denom": "ibc/5FE5E50EA0DF6D68C29EDFB7992EB81CD40B6780C33834A8AB3712FB148E1313", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/fable.svg", + "symbol": "FABLE", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "5FE5E50EA0DF6D68C29EDFB7992EB81CD40B6780C33834A8AB3712FB148E1313", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "FABLE", + "baseDenom": "FABLE", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Frax", + "denom": "ibc/3E5504815B2D69DCC32B1FF54CDAC28D7DA2C445BD29C496A83732DC1D52DB90", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/frax.svg", + "symbol": "FRAX", + "decimals": 18, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "3E5504815B2D69DCC32B1FF54CDAC28D7DA2C445BD29C496A83732DC1D52DB90", + "path": "", + "channelId": "", + "decimals": 18, + "symbol": "FRAX", + "baseDenom": "FRAX", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Frienzies", + "denom": "ibc/CDD7374B312BEF9723AAEBDE622206490E112CE2B5F49275683CCCD86C7D4BCE", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/frnz.png", + "symbol": "FRNZ", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "CDD7374B312BEF9723AAEBDE622206490E112CE2B5F49275683CCCD86C7D4BCE", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "FRNZ", + "baseDenom": "FRNZ", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Fuzion", + "denom": "ibc/FE87E1E1BB401EC35CD02A57FE5DEF872FA309C018172C4E7DA07F194EAC6F19", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/fuzion.png", + "symbol": "FUZN", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "FE87E1E1BB401EC35CD02A57FE5DEF872FA309C018172C4E7DA07F194EAC6F19", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "FUZN", + "baseDenom": "FUZN", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Fuzion Receipt", + "denom": "ibc/F5FFC37BBF4B24F94D920BC7DAFCCE5B9403B2DB33DF759B8CED76EA8A6E3E24", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/fuzionr.png", + "symbol": "rFUZN", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "F5FFC37BBF4B24F94D920BC7DAFCCE5B9403B2DB33DF759B8CED76EA8A6E3E24", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "rFUZN", + "baseDenom": "rFUZN", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Fuzion Yield", + "denom": "ibc/71C297610507CCB7D42E49EA49AF2ECBBE2D4A83D139C4A441EB7A2693C0464A", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/fuziony.svg", + "symbol": "yFUZN", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "71C297610507CCB7D42E49EA49AF2ECBBE2D4A83D139C4A441EB7A2693C0464A", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "yFUZN", + "baseDenom": "yFUZN", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Gelotto", + "denom": "peggy0xd73175f9eb15eee81745d367ae59309Ca2ceb5e2", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/juno/images/glto.png", + "symbol": "GLTO", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "peggy0xd73175f9eb15eee81745d367ae59309Ca2ceb5e2", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "GLTO", + "baseDenom": "GLTO", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "GEM DAO", + "denom": "ibc/8AE86084C0D921352F711EF42CCA7BA4C8238C244FE4CC3E4E995D9782FB0E2B", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/gem.png", + "symbol": "GEM", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "8AE86084C0D921352F711EF42CCA7BA4C8238C244FE4CC3E4E995D9782FB0E2B", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "GEM", + "baseDenom": "GEM", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "GEO", + "denom": "ibc/8E4953E506CF135A3ACDF6D6556ED1DB4F6A749F3910D2B4A77E2E851C4B2638", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/geo.png", + "symbol": "GEO", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "8E4953E506CF135A3ACDF6D6556ED1DB4F6A749F3910D2B4A77E2E851C4B2638", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "GEO", + "baseDenom": "GEO", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Goddard", + "denom": "ibc/CABB197E23D81F1D1A4CE56A304488C35830F81AC9647F817313AE657221420D", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/goddardntrn.png", + "symbol": "GODDARD", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "CABB197E23D81F1D1A4CE56A304488C35830F81AC9647F817313AE657221420D", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "GODDARD", + "baseDenom": "GODDARD", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Goddard", + "denom": "ibc/3E89FBB226585CF08EB2E3C2625D1D2B0156CCC2233CAB56165125CACCBE731A", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/goddard.svg", + "symbol": "GODDARD", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "3E89FBB226585CF08EB2E3C2625D1D2B0156CCC2233CAB56165125CACCBE731A", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "GODDARD", + "baseDenom": "GODDARD", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "GUGU", + "denom": "ibc/B1826CEA5AE790AB7FCAE84344F113F6C42E6AA3A357CAFEAC4A05BB7531927D", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/gugu.png", + "symbol": "GUGU", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "B1826CEA5AE790AB7FCAE84344F113F6C42E6AA3A357CAFEAC4A05BB7531927D", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "GUGU", + "baseDenom": "GUGU", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "GUPPY", + "denom": "ibc/F729B93A13133D7390455293338A0CEAAF876D0F180B7C154607989A1617DD45", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/guppy.png", + "symbol": "GUPPY", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "F729B93A13133D7390455293338A0CEAAF876D0F180B7C154607989A1617DD45", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "GUPPY", + "baseDenom": "GUPPY", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Hava Coin", + "denom": "factory/inj1h0ypsdtjfcjynqu3m75z2zwwz5mmrj8rtk2g52/uhava", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/hava.png", + "symbol": "HAVA", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "factory/inj1h0ypsdtjfcjynqu3m75z2zwwz5mmrj8rtk2g52/uhava", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "HAVA", + "baseDenom": "HAVA", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "IBC Index", + "denom": "ibc/491C92BEEAFE513BABA355275C7AE3AC47AA7FD57285AC1D910CE874D2DC7CA0", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ibcx.svg", + "symbol": "IBCX", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "491C92BEEAFE513BABA355275C7AE3AC47AA7FD57285AC1D910CE874D2DC7CA0", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "IBCX", + "baseDenom": "IBCX", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Injective", + "denom": "inj", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/inj.png", + "symbol": "INJ", + "decimals": 18, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "inj", + "path": "", + "channelId": "", + "decimals": 18, + "symbol": "INJ", + "baseDenom": "INJ", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Ion DAO", + "denom": "ibc/1B2D7E4261A7E2130E8E3506058E3081D3154998413F0DB2F82B04035B3FE676", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", + "symbol": "ION", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "1B2D7E4261A7E2130E8E3506058E3081D3154998413F0DB2F82B04035B3FE676", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ION", + "baseDenom": "ION", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "ito", + "denom": "ibc/E7140919F6B70594F89401B574DC198D206D923964184A9F79B39074301EB04F", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/I.png", + "symbol": "ITO", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "E7140919F6B70594F89401B574DC198D206D923964184A9F79B39074301EB04F", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ITO", + "baseDenom": "ITO", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "jimmy", + "denom": "ibc/BE0CC03465ABE696C3AE57F6FE166721DF79405DFC4F4E3DC09B50FACABB8888", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/jimmy.png", + "symbol": "JIMMY", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "BE0CC03465ABE696C3AE57F6FE166721DF79405DFC4F4E3DC09B50FACABB8888", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "JIMMY", + "baseDenom": "JIMMY", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Judo", + "denom": "inj16ukv8g2jcmml7gykxn5ws8ykhxjkugl4zhft5h", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/judo.png", + "symbol": "JUDO", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "inj16ukv8g2jcmml7gykxn5ws8ykhxjkugl4zhft5h", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "JUDO", + "baseDenom": "JUDO", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Kava", + "denom": "ibc/57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/kava.png", + "symbol": "KAVA", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "KAVA", + "baseDenom": "KAVA", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Kava Hard", + "denom": "ibc/D6C28E07F7343360AC41E15DDD44D79701DDCA2E0C2C41279739C8D4AE5264BC", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/hard.png", + "symbol": "HARD", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "D6C28E07F7343360AC41E15DDD44D79701DDCA2E0C2C41279739C8D4AE5264BC", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "HARD", + "baseDenom": "HARD", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Kava Swap", + "denom": "ibc/70CF1A54E23EA4E480DEDA9E12082D3FD5684C3483CBDCE190C5C807227688C5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/swp.png", + "symbol": "SWP", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "70CF1A54E23EA4E480DEDA9E12082D3FD5684C3483CBDCE190C5C807227688C5", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "SWP", + "baseDenom": "SWP", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Kava USDX", + "denom": "ibc/C78F65E1648A3DFE0BAEB6C4CDA69CC2A75437F1793C0E6386DFDA26393790AE", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/usdx.png", + "symbol": "USDX", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "C78F65E1648A3DFE0BAEB6C4CDA69CC2A75437F1793C0E6386DFDA26393790AE", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "USDX", + "baseDenom": "USDX", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Kujira", + "denom": "ibc/9A115B56E769B92621FFF90567E2D60EFD146E86E867491DB69EEDA9ADC36204", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/kuji.png", + "symbol": "KUJI", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "9A115B56E769B92621FFF90567E2D60EFD146E86E867491DB69EEDA9ADC36204", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "KUJI", + "baseDenom": "KUJI", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Levana", + "denom": "ibc/4971C5E4786D5995EC7EF894FCFA9CF2E127E95D5D53A982F6A062F3F410EDB8", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/levana.png", + "symbol": "LVN", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "4971C5E4786D5995EC7EF894FCFA9CF2E127E95D5D53A982F6A062F3F410EDB8", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "LVN", + "baseDenom": "LVN", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Lido Staked Ether", + "denom": "ibc/FB1B967C690FEA7E9AD7CF76AE2255169D4EA2937D6694B2C0E61A370F76D9FB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/steth.svg", "symbol": "stETH", "decimals": 18, "coinGeckoId": "", @@ -1098,691 +1875,908 @@ "decimals": 18, "symbol": "stETH", "baseDenom": "stETH", - "isNative": false + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Uniswap", - "denom": "ibc/3E3A8A403AE81114F4341962A6D73162D586C9DF4CE3BE7C7B459108430675F7", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/uni.svg", - "symbol": "UNI", + "name": "Lion Cub DAO", + "denom": "ibc/5CB35B165F689DD57F836C6C5ED3AB268493AA5A810740446C4F2141664714F4", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/cub.png", + "symbol": "CUB", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "5CB35B165F689DD57F836C6C5ED3AB268493AA5A810740446C4F2141664714F4", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "CUB", + "baseDenom": "CUB", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Lion DAO", + "denom": "ibc/E6CFB0AC1D339A8CBA3353DF0D7E080B4B14D026D1C90F63F666C223B04D548C", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/roar.png", + "symbol": "ROAR", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "E6CFB0AC1D339A8CBA3353DF0D7E080B4B14D026D1C90F63F666C223B04D548C", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "ROAR", + "baseDenom": "ROAR", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "LOCAL", + "denom": "ibc/FECCDCFA89278B117C76A11A946A7991A68E5DD12DED6EB938ADC1B1286AC591", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/local.png", + "symbol": "LOCAL", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "FECCDCFA89278B117C76A11A946A7991A68E5DD12DED6EB938ADC1B1286AC591", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "LOCAL", + "baseDenom": "LOCAL", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Luna", + "denom": "ibc/0DDC992F19041FC1D499CCA1486721479EBAA7270604E15EDDFABA89D1E772E5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/luna.png", + "symbol": "LUNA", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "0DDC992F19041FC1D499CCA1486721479EBAA7270604E15EDDFABA89D1E772E5", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "LUNA", + "baseDenom": "LUNA", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Maker", + "denom": "ibc/E8C65EFAB7804152191B8311F61877A36779277E316883D8812D3CBEFC79AE4F", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/mkr.svg", + "symbol": "MKR", "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "3E3A8A403AE81114F4341962A6D73162D586C9DF4CE3BE7C7B459108430675F7", + "hash": "E8C65EFAB7804152191B8311F61877A36779277E316883D8812D3CBEFC79AE4F", "path": "", "channelId": "", "decimals": 18, - "symbol": "UNI", - "baseDenom": "UNI", - "isNative": false + "symbol": "MKR", + "baseDenom": "MKR", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Chain", - "denom": "ibc/79D01DE88DFFC0610003439D38200E77A3D2A1CCCBE4B1958D685026ABB01814", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/xcn.svg", - "symbol": "XCN", + "name": "MantaDAO", + "denom": "ibc/A4495880A4A2E3C242F63C710F447BAE072E1A4C2A22F1851E0BB7ABDD26B43D", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/mnta.png", + "symbol": "MNTA", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "A4495880A4A2E3C242F63C710F447BAE072E1A4C2A22F1851E0BB7ABDD26B43D", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "MNTA", + "baseDenom": "MNTA", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Membrane", + "denom": "ibc/7AF90EDF6F5328C6C33B03DB7E33445708A46FF006932472D00D5076F5504B67", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/MBRN.svg", + "symbol": "MBRN", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "7AF90EDF6F5328C6C33B03DB7E33445708A46FF006932472D00D5076F5504B67", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "MBRN", + "baseDenom": "MBRN", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "milkTIA", + "denom": "ibc/C2A70D6717D595F388B115200E789DC6E7EE409167B918B5F4E73838B8451A71", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/milktia.png", + "symbol": "milkTIA", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "C2A70D6717D595F388B115200E789DC6E7EE409167B918B5F4E73838B8451A71", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "milkTIA", + "baseDenom": "milkTIA", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Multichain USDC", + "denom": "ibc/610D4A1B3F3198C35C09E9AF7C8FB81707912463357C9398B02C7F13049678A8", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", + "symbol": "USDC", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "610D4A1B3F3198C35C09E9AF7C8FB81707912463357C9398B02C7F13049678A8", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "USDC", + "baseDenom": "USDC", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "MYRK", + "denom": "ibc/48D1DA9AA68C949E27BAB39B409681292035ABF63EAB663017C7BEF98A3D118E", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/MYRK_Logo.png", + "symbol": "MYRK", + "decimals": 6, + "coinGeckoId": "", + "tokenType": "ibc", + "tokenVerification": "external", + "ibc": { + "hash": "48D1DA9AA68C949E27BAB39B409681292035ABF63EAB663017C7BEF98A3D118E", + "path": "", + "channelId": "", + "decimals": 6, + "symbol": "MYRK", + "baseDenom": "MYRK", + "isNative": false, + "tokenType": "ibc" + } + }, + { + "name": "Neokingdom DAO", + "denom": "ibc/F6CC233E5C0EA36B1F74AB1AF98471A2D6A80E2542856639703E908B4D93E7C4", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/evmos/images/neok.png", + "symbol": "NEOK", "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "79D01DE88DFFC0610003439D38200E77A3D2A1CCCBE4B1958D685026ABB01814", + "hash": "F6CC233E5C0EA36B1F74AB1AF98471A2D6A80E2542856639703E908B4D93E7C4", "path": "", "channelId": "", "decimals": 18, - "symbol": "XCN", - "baseDenom": "XCN", - "isNative": false + "symbol": "NEOK", + "baseDenom": "NEOK", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped Polkadot", - "denom": "ibc/624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/polkadot/images/dot.png", - "symbol": "DOT", - "decimals": 10, + "name": "Neutron", + "denom": "ibc/6488808F32B07F6E8DCE7B700B92D9F7287D0FA1D0F76A25B11276E09DB0E626", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", + "symbol": "NTRN", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4", + "hash": "6488808F32B07F6E8DCE7B700B92D9F7287D0FA1D0F76A25B11276E09DB0E626", "path": "", "channelId": "", - "decimals": 10, - "symbol": "DOT", - "baseDenom": "DOT", - "isNative": false + "decimals": 6, + "symbol": "NTRN", + "baseDenom": "NTRN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped Moonbeam", - "denom": "ibc/8FF72FB47F07B4AFA8649500A168683BEFCB9EE164BD331FA597D26224D51055", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/moonbeam/images/glmr.png", - "symbol": "WGLMR", - "decimals": 18, + "name": "Newt", + "denom": "ibc/B0A75E6F4606C844C05ED9E08335AFC50E814F210C03CABAD31562F606C69C46", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/newt.png", + "symbol": "NEWT", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "8FF72FB47F07B4AFA8649500A168683BEFCB9EE164BD331FA597D26224D51055", + "hash": "B0A75E6F4606C844C05ED9E08335AFC50E814F210C03CABAD31562F606C69C46", "path": "", "channelId": "", - "decimals": 18, - "symbol": "WGLMR", - "baseDenom": "WGLMR", - "isNative": false + "decimals": 6, + "symbol": "NEWT", + "baseDenom": "NEWT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped Matic", - "denom": "ibc/7E23647941230DA0AB4ED10F599647D9BE34E1C991D0DA032B5A1522941EBA73", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/polygon/images/wmatic.png", - "symbol": "WMATIC", - "decimals": 18, + "name": "Newtroll", + "denom": "ibc/4D228A037CE6EDD54034D9656AE5850BDE871EF71D6DD290E8EC81603AD40899", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/newtroll.svg", + "symbol": "NTRL", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "7E23647941230DA0AB4ED10F599647D9BE34E1C991D0DA032B5A1522941EBA73", + "hash": "4D228A037CE6EDD54034D9656AE5850BDE871EF71D6DD290E8EC81603AD40899", "path": "", "channelId": "", - "decimals": 18, - "symbol": "WMATIC", - "baseDenom": "WMATIC", - "isNative": false + "decimals": 6, + "symbol": "NTRL", + "baseDenom": "NTRL", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped BNB", - "denom": "ibc/B877B8EF095028B807370AB5C7790CA0C328777C9FF09AA7F5436BA7FAE4A86F", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/binancesmartchain/images/wbnb.png", - "symbol": "WBNB", + "name": "nico", + "denom": "ibc/EED3F204DCABACBEB858B0A56017070283098A81DEB49F1F9D6702309AA7F7DE", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/nicodao.png", + "symbol": "NICO", "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B877B8EF095028B807370AB5C7790CA0C328777C9FF09AA7F5436BA7FAE4A86F", + "hash": "EED3F204DCABACBEB858B0A56017070283098A81DEB49F1F9D6702309AA7F7DE", "path": "", "channelId": "", "decimals": 18, - "symbol": "WBNB", - "baseDenom": "WBNB", - "isNative": false + "symbol": "NICO", + "baseDenom": "NICO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Binance USD", - "denom": "ibc/A62F794AAEC56B6828541224D91DA3E21423AB0DC4D21ECB05E4588A07BD934C", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/busd.png", - "symbol": "BUSD", - "decimals": 18, + "name": "Ninpo", + "denom": "inj1sudjgsyhufqu95yp7rqad3g78ws8g6htf32h88", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/ninpo.png", + "symbol": "NINPO", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "A62F794AAEC56B6828541224D91DA3E21423AB0DC4D21ECB05E4588A07BD934C", + "hash": "inj1sudjgsyhufqu95yp7rqad3g78ws8g6htf32h88", "path": "", "channelId": "", - "decimals": 18, - "symbol": "BUSD", - "baseDenom": "BUSD", - "isNative": false + "decimals": 6, + "symbol": "NINPO", + "baseDenom": "NINPO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped AVAX", - "denom": "ibc/A4FF8E161D2835BA06A7522684E874EFC91004AD0CD14E038F37940562158D73", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/avalanche/images/wavax.svg", - "symbol": "WAVAX", - "decimals": 18, + "name": "Nois", + "denom": "ibc/DD9182E8E2B13C89D6B4707C7B43E8DB6193F9FF486AFA0E6CF86B427B0D231A", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nois/images/nois.png", + "symbol": "NOIS", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "A4FF8E161D2835BA06A7522684E874EFC91004AD0CD14E038F37940562158D73", + "hash": "DD9182E8E2B13C89D6B4707C7B43E8DB6193F9FF486AFA0E6CF86B427B0D231A", "path": "", "channelId": "", - "decimals": 18, - "symbol": "WAVAX", - "baseDenom": "WAVAX", - "isNative": false + "decimals": 6, + "symbol": "NOIS", + "baseDenom": "NOIS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped FTM", - "denom": "ibc/31E8DDA49D53535F358B29CFCBED1B9224DAAFE82788C0477930DCDE231DA878", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/fantom/images/ftm.png", - "symbol": "WFTM", - "decimals": 18, + "name": "O9W", + "denom": "ibc/AA206C13A2AD46401BD1E8E65F96EC9BF86051A8156A92DD08BEF70381D39CE2", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/o9w.png", + "symbol": "O9W", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "31E8DDA49D53535F358B29CFCBED1B9224DAAFE82788C0477930DCDE231DA878", + "hash": "AA206C13A2AD46401BD1E8E65F96EC9BF86051A8156A92DD08BEF70381D39CE2", "path": "", "channelId": "", - "decimals": 18, - "symbol": "WFTM", - "baseDenom": "WFTM", - "isNative": false + "decimals": 6, + "symbol": "O9W", + "baseDenom": "O9W", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "USD Coin from Polygon", - "denom": "ibc/2E93E8914CA07B73A794657DA76170A016057D1C6B0DC42D969918D4F22D95A3", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", - "symbol": "USDC", + "name": "ODIN", + "denom": "ibc/6ED95AEFA5D9A6F9EF9CDD05FED7D7C9D7F42D9892E7236EB9B251CE9E999701", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/odin/images/odin.png", + "symbol": "ODIN", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "2E93E8914CA07B73A794657DA76170A016057D1C6B0DC42D969918D4F22D95A3", + "hash": "6ED95AEFA5D9A6F9EF9CDD05FED7D7C9D7F42D9892E7236EB9B251CE9E999701", "path": "", "channelId": "", "decimals": 6, - "symbol": "USDC", - "baseDenom": "USDC", - "isNative": false + "symbol": "ODIN", + "baseDenom": "ODIN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "USD Coin from Avalanche", - "denom": "ibc/705E7E25F94467E363B2EB324A5A6FF4C683A4A6D20AAD2AEEABA2D9EB1B897F", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", - "symbol": "USDC", + "name": "OIN STORE OF VALUE", + "denom": "ibc/CDA55861E9E491479CB52D5C89F942F5EAF221F80B7CDDBBA8EE94D3658B03B4", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", + "symbol": "OIN", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "705E7E25F94467E363B2EB324A5A6FF4C683A4A6D20AAD2AEEABA2D9EB1B897F", + "hash": "CDA55861E9E491479CB52D5C89F942F5EAF221F80B7CDDBBA8EE94D3658B03B4", "path": "", "channelId": "", "decimals": 6, - "symbol": "USDC", - "baseDenom": "USDC", - "isNative": false + "symbol": "OIN", + "baseDenom": "OIN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped FIL from Filecoin", - "denom": "ibc/9D1889339AEC850B1D719CCF19BD813955C086BE1ED323ED68318A273922E40D", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/filecoin/images/wfil.png", - "symbol": "axlFIL", - "decimals": 18, + "name": "OIN STORE OF VALUE", + "denom": "ibc/64D95807CA13CD9EC5BEF9D3709138A14295DDBDFBC9EF58A9FFE34B911545E6", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", + "symbol": "OIN", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "9D1889339AEC850B1D719CCF19BD813955C086BE1ED323ED68318A273922E40D", + "hash": "64D95807CA13CD9EC5BEF9D3709138A14295DDBDFBC9EF58A9FFE34B911545E6", "path": "", "channelId": "", - "decimals": 18, - "symbol": "axlFIL", - "baseDenom": "axlFIL", - "isNative": false + "decimals": 6, + "symbol": "OIN", + "baseDenom": "OIN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Arbitrum", - "denom": "ibc/F28C5C931D2673B7A2F06FC74934F7BDC0D2906D2AF40D582ED27D1E5C48D475", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/arbitrum/images/arb.png", - "symbol": "ARB", - "decimals": 18, + "name": "OIN STORE OF VALUE", + "denom": "ibc/CA0B808874A9890C171944FA44B35287E9701402C732FE5B2C6371BA8113462C", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", + "symbol": "OIN", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F28C5C931D2673B7A2F06FC74934F7BDC0D2906D2AF40D582ED27D1E5C48D475", + "hash": "CA0B808874A9890C171944FA44B35287E9701402C732FE5B2C6371BA8113462C", "path": "", "channelId": "", - "decimals": 18, - "symbol": "ARB", - "baseDenom": "ARB", - "isNative": false + "decimals": 6, + "symbol": "OIN", + "baseDenom": "OIN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Pepe", - "denom": "ibc/9144D78830C5ABD7B7D9E219EA7600E3A0E0AD5FC50C007668160595E94789AB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/pepe.png", - "symbol": "PEPE", - "decimals": 18, + "name": "OIN STORE OF VALUE", + "denom": "ibc/09A596CF997F575F2D1E150DFECD7AAE4B44B119F4E45E0A2532EEBD1F8795FE", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", + "symbol": "OIN", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "9144D78830C5ABD7B7D9E219EA7600E3A0E0AD5FC50C007668160595E94789AB", + "hash": "09A596CF997F575F2D1E150DFECD7AAE4B44B119F4E45E0A2532EEBD1F8795FE", "path": "", "channelId": "", - "decimals": 18, - "symbol": "PEPE", - "baseDenom": "PEPE", - "isNative": false + "decimals": 6, + "symbol": "OIN", + "baseDenom": "OIN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Coinbase Wrapped Staked ETH", - "denom": "ibc/545E97C6EFB2633645720DEBCA78B2BE6F5382C4693EA7DEB2D4C456371EA4F0", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/cbeth.png", - "symbol": "cbETH", - "decimals": 18, + "name": "OIN STORE OF VALUE", + "denom": "ibc/486A0C3A5D9F8389FE01CF2656DF03DB119BC71C4164212F3541DD538A968B66", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", + "symbol": "OIN", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "545E97C6EFB2633645720DEBCA78B2BE6F5382C4693EA7DEB2D4C456371EA4F0", + "hash": "486A0C3A5D9F8389FE01CF2656DF03DB119BC71C4164212F3541DD538A968B66", "path": "", "channelId": "", - "decimals": 18, - "symbol": "cbETH", - "baseDenom": "cbETH", - "isNative": false + "decimals": 6, + "symbol": "OIN", + "baseDenom": "OIN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Rocket Pool Ether", - "denom": "ibc/8906BF683A89D1ABE075A49EFA35A3128D7E9D809775B8E9D5AEEAA55D2889DD", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/reth.png", - "symbol": "rETH", - "decimals": 18, + "name": "OIN STORE OF VALUE", + "denom": "ibc/ABF6109CA87727E3945C2DB5EA17D819D57041A91BFB0BC73320AFE097C230F5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", + "symbol": "OIN", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "8906BF683A89D1ABE075A49EFA35A3128D7E9D809775B8E9D5AEEAA55D2889DD", + "hash": "ABF6109CA87727E3945C2DB5EA17D819D57041A91BFB0BC73320AFE097C230F5", "path": "", "channelId": "", - "decimals": 18, - "symbol": "rETH", - "baseDenom": "rETH", - "isNative": false + "decimals": 6, + "symbol": "OIN", + "baseDenom": "OIN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Staked Frax Ether", - "denom": "ibc/E918585C09958BD328DD9E7215E4726623E7A9A94342FEA5BE126A2AAF920730", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/sfrxeth.svg", - "symbol": "sfrxETH", + "name": "Open Exchange Token", + "denom": "ibc/3DC896EFF521814E914264A691D9D462A7108E96E53DE135FC4D91A370F4CD77", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/ox.svg", + "symbol": "OX", "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E918585C09958BD328DD9E7215E4726623E7A9A94342FEA5BE126A2AAF920730", + "hash": "3DC896EFF521814E914264A691D9D462A7108E96E53DE135FC4D91A370F4CD77", "path": "", "channelId": "", "decimals": 18, - "symbol": "sfrxETH", - "baseDenom": "sfrxETH", - "isNative": false + "symbol": "OX", + "baseDenom": "OX", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped Lido Staked Ether", - "denom": "ibc/1E0FC59FB8495BF927B10E9D515661494B1BBEDAA15D80E52FE2BADA64656D16", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wsteth.svg", - "symbol": "wstETH", - "decimals": 18, + "name": "OPHIR", + "denom": "ibc/19DEC3C890D19A782A3CD0C62EA8F2F8CC09D0C9AAA8045263F40526088FEEDB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/ophir.png", + "symbol": "OPHIR", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "1E0FC59FB8495BF927B10E9D515661494B1BBEDAA15D80E52FE2BADA64656D16", + "hash": "19DEC3C890D19A782A3CD0C62EA8F2F8CC09D0C9AAA8045263F40526088FEEDB", "path": "", "channelId": "", - "decimals": 18, - "symbol": "wstETH", - "baseDenom": "wstETH", - "isNative": false + "decimals": 6, + "symbol": "OPHIR", + "baseDenom": "OPHIR", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Real Yield Eth", - "denom": "ibc/6B7E243C586784E1BE150B71F541A3880F0409E994365AF31FF63A2764B72556", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/yieldeth.png", - "symbol": "YieldETH", - "decimals": 18, + "name": "Oraichain", + "denom": "ibc/C20C0A822BD22B2CEF0D067400FCCFB6FAEEE9E91D360B4E0725BD522302D565", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/oraichain/images/orai-white.png", + "symbol": "ORAI", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "6B7E243C586784E1BE150B71F541A3880F0409E994365AF31FF63A2764B72556", + "hash": "C20C0A822BD22B2CEF0D067400FCCFB6FAEEE9E91D360B4E0725BD522302D565", "path": "", "channelId": "", - "decimals": 18, - "symbol": "YieldETH", - "baseDenom": "YieldETH", - "isNative": false + "decimals": 6, + "symbol": "ORAI", + "baseDenom": "ORAI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Persistence", - "denom": "ibc/B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/xprt.png", - "symbol": "XPRT", + "name": "Osmosis", + "denom": "ibc/92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", + "symbol": "OSMO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB", + "hash": "92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333", "path": "", "channelId": "", "decimals": 6, - "symbol": "XPRT", - "baseDenom": "XPRT", - "isNative": false + "symbol": "OSMO", + "baseDenom": "OSMO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "PSTAKE staked ATOM", - "denom": "ibc/B8E30AECB0FB5BA1B02747BE003E55934A9E42488495412C7E9934FBEC06B201", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkatom.png", - "symbol": "stkATOM", + "name": "OSMO Squared", + "denom": "ibc/AFCDF4348DBDF92BCF631B1D38628F75683F45A8A0DCE304FC9AAD4F31609916", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqosmo.svg", + "symbol": "sqOSMO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B8E30AECB0FB5BA1B02747BE003E55934A9E42488495412C7E9934FBEC06B201", + "hash": "AFCDF4348DBDF92BCF631B1D38628F75683F45A8A0DCE304FC9AAD4F31609916", "path": "", "channelId": "", "decimals": 6, - "symbol": "stkATOM", - "baseDenom": "stkATOM", - "isNative": false + "symbol": "sqOSMO", + "baseDenom": "sqOSMO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "PSTAKE staked OSMO", - "denom": "ibc/F60E1792296F6264E594B5F87C3B5CDE859A1D9B3421F203E986B7BA3C4E05F1", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkosmo.png", - "symbol": "stkOSMO", - "decimals": 6, + "name": "Pepe", + "denom": "ibc/9144D78830C5ABD7B7D9E219EA7600E3A0E0AD5FC50C007668160595E94789AB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/pepe.png", + "symbol": "PEPE", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F60E1792296F6264E594B5F87C3B5CDE859A1D9B3421F203E986B7BA3C4E05F1", + "hash": "9144D78830C5ABD7B7D9E219EA7600E3A0E0AD5FC50C007668160595E94789AB", "path": "", "channelId": "", - "decimals": 6, - "symbol": "stkOSMO", - "baseDenom": "stkOSMO", - "isNative": false + "decimals": 18, + "symbol": "PEPE", + "baseDenom": "PEPE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Kava", - "denom": "ibc/57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/kava.png", - "symbol": "KAVA", + "name": "Persistence", + "denom": "ibc/B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/xprt.png", + "symbol": "XPRT", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205", + "hash": "B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB", "path": "", "channelId": "", "decimals": 6, - "symbol": "KAVA", - "baseDenom": "KAVA", - "isNative": false + "symbol": "XPRT", + "baseDenom": "XPRT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Kava Hard", - "denom": "ibc/D6C28E07F7343360AC41E15DDD44D79701DDCA2E0C2C41279739C8D4AE5264BC", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/hard.png", - "symbol": "HARD", - "decimals": 6, + "name": "Pica", + "denom": "ibc/9C2212CB87241A8D038222CF66BBCFABDD08330DFA0AC9B451135287DCBDC7A8", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/composable/images/pica.svg", + "symbol": "PICA", + "decimals": 12, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "D6C28E07F7343360AC41E15DDD44D79701DDCA2E0C2C41279739C8D4AE5264BC", + "hash": "9C2212CB87241A8D038222CF66BBCFABDD08330DFA0AC9B451135287DCBDC7A8", "path": "", "channelId": "", - "decimals": 6, - "symbol": "HARD", - "baseDenom": "HARD", - "isNative": false + "decimals": 12, + "symbol": "PICA", + "baseDenom": "PICA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Kava Swap", - "denom": "ibc/70CF1A54E23EA4E480DEDA9E12082D3FD5684C3483CBDCE190C5C807227688C5", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/swp.png", - "symbol": "SWP", + "name": "Plankton", + "denom": "ibc/020098CDEC3D7555210CBC1593A175A6B24253823B0B711D072EC95F76FA4D42", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/PLNK_drk.png", + "symbol": "PLNK", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "70CF1A54E23EA4E480DEDA9E12082D3FD5684C3483CBDCE190C5C807227688C5", + "hash": "020098CDEC3D7555210CBC1593A175A6B24253823B0B711D072EC95F76FA4D42", "path": "", "channelId": "", "decimals": 6, - "symbol": "SWP", - "baseDenom": "SWP", - "isNative": false + "symbol": "PLNK", + "baseDenom": "PLNK", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Kava USDX", - "denom": "ibc/C78F65E1648A3DFE0BAEB6C4CDA69CC2A75437F1793C0E6386DFDA26393790AE", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kava/images/usdx.png", - "symbol": "USDX", + "name": "Popeye", + "denom": "ibc/C35A94A42FEDA8E01903CD7A78FB33AE60B2064C0007BF2E4FD5A6368BDBC546", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/popeye.png", + "symbol": "POPEYE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C78F65E1648A3DFE0BAEB6C4CDA69CC2A75437F1793C0E6386DFDA26393790AE", + "hash": "C35A94A42FEDA8E01903CD7A78FB33AE60B2064C0007BF2E4FD5A6368BDBC546", "path": "", "channelId": "", "decimals": 6, - "symbol": "USDX", - "baseDenom": "USDX", - "isNative": false + "symbol": "POPEYE", + "baseDenom": "POPEYE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Tether USD", - "denom": "ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdt.svg", - "symbol": "USDT", + "name": "Popeye", + "denom": "ibc/7E4EA08D14451712CC921456E2FBA57B54D4CA80AE9E471FAAF16610029B9145", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/popeye.png", + "symbol": "POPEYE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB", + "hash": "7E4EA08D14451712CC921456E2FBA57B54D4CA80AE9E471FAAF16610029B9145", "path": "", "channelId": "", "decimals": 6, - "symbol": "USDT", - "baseDenom": "USDT", - "isNative": false + "symbol": "POPEYE", + "baseDenom": "POPEYE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "DAI", - "denom": "ibc/433133545CF68587777A01C3EFCF720EFE1B42F14AB2153D349DC4559984F2E8", - "logo": "unknown.png", - "symbol": "DAI", + "name": "Popeye", + "denom": "ibc/833095AF2D530639121F8A07E24E5D02921CA19FF3192D082E9C80210515716C", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/popeye.png", + "symbol": "POPEYE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "433133545CF68587777A01C3EFCF720EFE1B42F14AB2153D349DC4559984F2E8", + "hash": "833095AF2D530639121F8A07E24E5D02921CA19FF3192D082E9C80210515716C", "path": "", "channelId": "", "decimals": 6, - "symbol": "DAI", - "baseDenom": "DAI", - "isNative": false + "symbol": "POPEYE", + "baseDenom": "POPEYE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "axlWBTC", - "denom": "ibc/F57B53E102171E6DC254532ECC184228BB8E23B755AD55FA6FDCBD70464A9A54", - "logo": "unknown.png", - "symbol": "axlWBTC", + "name": "PSTAKE staked ATOM", + "denom": "ibc/B8E30AECB0FB5BA1B02747BE003E55934A9E42488495412C7E9934FBEC06B201", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkatom.png", + "symbol": "stkATOM", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F57B53E102171E6DC254532ECC184228BB8E23B755AD55FA6FDCBD70464A9A54", + "hash": "B8E30AECB0FB5BA1B02747BE003E55934A9E42488495412C7E9934FBEC06B201", "path": "", "channelId": "", "decimals": 6, - "symbol": "axlWBTC", - "baseDenom": "axlWBTC", - "isNative": false + "symbol": "stkATOM", + "baseDenom": "stkATOM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "USDT", - "denom": "ibc/7965483148018AFAA12DC569959897E7A5E474F4B41A87FFC5513B552C108DB5", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdt.png", - "symbol": "USDT", - "decimals": 6, + "name": "PSTAKE staked DYDX", + "denom": "ibc/93948A8FB433293F1C89970EA4596C4E8D4DD7E9F041058C7C47F0760F7C9693", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkdydx.png", + "symbol": "stkDYDX", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "7965483148018AFAA12DC569959897E7A5E474F4B41A87FFC5513B552C108DB5", + "hash": "93948A8FB433293F1C89970EA4596C4E8D4DD7E9F041058C7C47F0760F7C9693", "path": "", "channelId": "", - "decimals": 6, - "symbol": "USDT", - "baseDenom": "USDT", - "isNative": false + "decimals": 18, + "symbol": "stkDYDX", + "baseDenom": "stkDYDX", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ATOM", - "denom": "ibc/8D311D92BCD4E87F145DEB9DDA339416DEF7E13571D92A3521CAB0BF62760FBE", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", - "symbol": "ATOM", + "name": "PSTAKE staked OSMO", + "denom": "ibc/F60E1792296F6264E594B5F87C3B5CDE859A1D9B3421F203E986B7BA3C4E05F1", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkosmo.png", + "symbol": "stkOSMO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "8D311D92BCD4E87F145DEB9DDA339416DEF7E13571D92A3521CAB0BF62760FBE", + "hash": "F60E1792296F6264E594B5F87C3B5CDE859A1D9B3421F203E986B7BA3C4E05F1", "path": "", "channelId": "", "decimals": 6, - "symbol": "ATOM", - "baseDenom": "ATOM", - "isNative": false + "symbol": "stkOSMO", + "baseDenom": "stkOSMO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "USDT", - "denom": "ibc/24E5D0825D3D71BF00C4A01CD8CA8F2D27B1DD32B7446CF633534AEA25379271", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdt.png", - "symbol": "USDT", + "name": "PSTAKE staked STARS", + "denom": "ibc/77F4E05BDB54051FAF0BE956FCE83D8E0E4227DD53F764BB32D8ECF685A93F55", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/persistence/images/stkstars.png", + "symbol": "stkSTARS", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "24E5D0825D3D71BF00C4A01CD8CA8F2D27B1DD32B7446CF633534AEA25379271", + "hash": "77F4E05BDB54051FAF0BE956FCE83D8E0E4227DD53F764BB32D8ECF685A93F55", "path": "", "channelId": "", "decimals": 6, - "symbol": "USDT", - "baseDenom": "USDT", - "isNative": false + "symbol": "stkSTARS", + "baseDenom": "stkSTARS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Whale", - "denom": "ibc/D6E6A20ABDD600742D22464340A7701558027759CE14D12590F8EA869CCCF445", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/white-whale.png", - "symbol": "WHALE", + "name": "Pyth Network", + "denom": "ibc/F3330C1B8BD1886FE9509B94C7B5398B892EA41420D2BC0B7C6A53CB8ED761D6", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/solana/images/pyth.svg", + "symbol": "PYTH", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "D6E6A20ABDD600742D22464340A7701558027759CE14D12590F8EA869CCCF445", + "hash": "F3330C1B8BD1886FE9509B94C7B5398B892EA41420D2BC0B7C6A53CB8ED761D6", "path": "", "channelId": "", "decimals": 6, - "symbol": "WHALE", - "baseDenom": "WHALE", - "isNative": false + "symbol": "PYTH", + "baseDenom": "PYTH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ampWHALE", - "denom": "ibc/168C3904C45C6FE3539AE85A8892DF87371D00EA7942515AFC50AA43C4BB0A32", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/ampwhale.svg", - "symbol": "ampWHALE", + "name": "qcFUZN", + "denom": "ibc/5E44326A289ED1CA0536517BC958881B611D21CBB33EBE068F1E04A502A9F548", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/qcfuzn.svg", + "symbol": "qcFUZN", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "168C3904C45C6FE3539AE85A8892DF87371D00EA7942515AFC50AA43C4BB0A32", + "hash": "5E44326A289ED1CA0536517BC958881B611D21CBB33EBE068F1E04A502A9F548", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampWHALE", - "baseDenom": "ampWHALE", - "isNative": false + "symbol": "qcFUZN", + "baseDenom": "qcFUZN", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "boneWHALE", - "denom": "ibc/ECB0AA28D6001EF985047558C410B65581FC85BD92D4E3CFCCA0D3D964C67CC2", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/bWHALE.png", - "symbol": "bWHALE", + "name": "qcKUJI", + "denom": "ibc/B7C8418ABE8CF56B42A37215F6A715097FDD82AC322FE560CA589833FEE8C50D", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/qckuji.svg", + "symbol": "qcKUJI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "ECB0AA28D6001EF985047558C410B65581FC85BD92D4E3CFCCA0D3D964C67CC2", + "hash": "B7C8418ABE8CF56B42A37215F6A715097FDD82AC322FE560CA589833FEE8C50D", "path": "", "channelId": "", "decimals": 6, - "symbol": "bWHALE", - "baseDenom": "bWHALE", - "isNative": false + "symbol": "qcKUJI", + "baseDenom": "qcKUJI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "FABLE", - "denom": "ibc/5FE5E50EA0DF6D68C29EDFB7992EB81CD40B6780C33834A8AB3712FB148E1313", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/fable.svg", - "symbol": "FABLE", + "name": "qcMNTA", + "denom": "ibc/F770E830BC7E2992BC0DBECAC789432995B64BD6714C36EA092D877E28AA9493", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/qcmnta.svg", + "symbol": "qcMNTA", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "5FE5E50EA0DF6D68C29EDFB7992EB81CD40B6780C33834A8AB3712FB148E1313", + "hash": "F770E830BC7E2992BC0DBECAC789432995B64BD6714C36EA092D877E28AA9493", "path": "", "channelId": "", "decimals": 6, - "symbol": "FABLE", - "baseDenom": "FABLE", - "isNative": false + "symbol": "qcMNTA", + "baseDenom": "qcMNTA", + "isNative": false, + "tokenType": "ibc" } }, { @@ -1801,1527 +2795,1588 @@ "decimals": 6, "symbol": "RAC", "baseDenom": "RAC", - "isNative": false - } - }, - { - "name": "ASH", - "denom": "ibc/EED40547772504DF629EFEC08892E689CD14498B1C0AD766CD5075BBBEE3D808", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/ash.svg", - "symbol": "ASH", - "decimals": 6, - "coinGeckoId": "", - "tokenType": "ibc", - "tokenVerification": "external", - "ibc": { - "hash": "EED40547772504DF629EFEC08892E689CD14498B1C0AD766CD5075BBBEE3D808", - "path": "", - "channelId": "", - "decimals": 6, - "symbol": "ASH", - "baseDenom": "ASH", - "isNative": false + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Sommelier", - "denom": "ibc/34346A60A95EB030D62D6F5BDD4B745BE18E8A693372A8A347D5D53DBBB1328B", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sommelier/images/somm.png", - "symbol": "SOMM", - "decimals": 6, + "name": "Rai Reflex Index", + "denom": "ibc/27817BAE3958FFB2BFBD8F4F6165153DFD230779994A7C42A91E0E45E8201768", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/rai.svg", + "symbol": "RAI", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "34346A60A95EB030D62D6F5BDD4B745BE18E8A693372A8A347D5D53DBBB1328B", + "hash": "27817BAE3958FFB2BFBD8F4F6165153DFD230779994A7C42A91E0E45E8201768", "path": "", "channelId": "", - "decimals": 6, - "symbol": "SOMM", - "baseDenom": "SOMM", - "isNative": false + "decimals": 18, + "symbol": "RAI", + "baseDenom": "RAI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Crescent", - "denom": "ibc/3A6DD3358D9F7ADD18CDE79BA10B400511A5DE4AE2C037D7C9639B52ADAF35C6", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/crescent/images/cre.png", - "symbol": "CRE", + "name": "RAPTR", + "denom": "ibc/592FDF11D4D958105B1E4620FAECAA6708655AB815F01A01C1540968893CDEBF", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/RAPTR.png", + "symbol": "RAPTR", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "3A6DD3358D9F7ADD18CDE79BA10B400511A5DE4AE2C037D7C9639B52ADAF35C6", + "hash": "592FDF11D4D958105B1E4620FAECAA6708655AB815F01A01C1540968893CDEBF", "path": "", "channelId": "", "decimals": 6, - "symbol": "CRE", - "baseDenom": "CRE", - "isNative": false + "symbol": "RAPTR", + "baseDenom": "RAPTR", + "isNative": false, + "tokenType": "ibc" } - }, - { - "name": "Bonded Crescent", - "denom": "ibc/D9E839DE6F40C036592B6CEDB73841EE9A18987BC099DD112762A46AFE72159B", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/crescent/images/bcre.png", - "symbol": "bCRE", + }, + { + "name": "real", + "denom": "ibc/444BCB7AC154587F5D4ABE36EF6D7D65369224509DCBCA2E27AD539519DD66BB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/Reis.png", + "symbol": "REIS", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "D9E839DE6F40C036592B6CEDB73841EE9A18987BC099DD112762A46AFE72159B", + "hash": "444BCB7AC154587F5D4ABE36EF6D7D65369224509DCBCA2E27AD539519DD66BB", "path": "", "channelId": "", "decimals": 6, - "symbol": "bCRE", - "baseDenom": "bCRE", - "isNative": false + "symbol": "REIS", + "baseDenom": "REIS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Secret Network", - "denom": "ibc/0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/scrt.png", - "symbol": "SCRT", - "decimals": 6, + "name": "Real Yield Eth", + "denom": "ibc/6B7E243C586784E1BE150B71F541A3880F0409E994365AF31FF63A2764B72556", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/yieldeth.png", + "symbol": "YieldETH", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A", + "hash": "6B7E243C586784E1BE150B71F541A3880F0409E994365AF31FF63A2764B72556", "path": "", "channelId": "", - "decimals": 6, - "symbol": "SCRT", - "baseDenom": "SCRT", - "isNative": false + "decimals": 18, + "symbol": "YieldETH", + "baseDenom": "YieldETH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Oraichain", - "denom": "ibc/C20C0A822BD22B2CEF0D067400FCCFB6FAEEE9E91D360B4E0725BD522302D565", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/oraichain/images/orai-white.png", - "symbol": "ORAI", + "name": "Retro", + "denom": "ibc/ACDEFBA440F37D89E2933AB2B42AA0855C30852588B7DF8CD5FBCEB0EB1471EB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/retro.svg", + "symbol": "RETRO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C20C0A822BD22B2CEF0D067400FCCFB6FAEEE9E91D360B4E0725BD522302D565", + "hash": "ACDEFBA440F37D89E2933AB2B42AA0855C30852588B7DF8CD5FBCEB0EB1471EB", "path": "", "channelId": "", "decimals": 6, - "symbol": "ORAI", - "baseDenom": "ORAI", - "isNative": false + "symbol": "RETRO", + "baseDenom": "RETRO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "USDC", - "denom": "ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", - "symbol": "USDC", - "decimals": 6, + "name": "Rocket Pool Ether", + "denom": "ibc/8906BF683A89D1ABE075A49EFA35A3128D7E9D809775B8E9D5AEEAA55D2889DD", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/reth.png", + "symbol": "rETH", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E", + "hash": "8906BF683A89D1ABE075A49EFA35A3128D7E9D809775B8E9D5AEEAA55D2889DD", "path": "", "channelId": "", - "decimals": 6, - "symbol": "USDC", - "baseDenom": "USDC", - "isNative": false + "decimals": 18, + "symbol": "rETH", + "baseDenom": "rETH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Frienzies", - "denom": "ibc/CDD7374B312BEF9723AAEBDE622206490E112CE2B5F49275683CCCD86C7D4BCE", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/noble/images/frnz.png", - "symbol": "FRNZ", + "name": "Sail", + "denom": "ibc/2718A31D59C81CD1F972C829F097BDBE32D7B84025F909FFB6163AAD314961B3", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sail.png", + "symbol": "SAIL", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "CDD7374B312BEF9723AAEBDE622206490E112CE2B5F49275683CCCD86C7D4BCE", + "hash": "2718A31D59C81CD1F972C829F097BDBE32D7B84025F909FFB6163AAD314961B3", "path": "", "channelId": "", "decimals": 6, - "symbol": "FRNZ", - "baseDenom": "FRNZ", - "isNative": false + "symbol": "SAIL", + "baseDenom": "SAIL", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Luna", - "denom": "ibc/0DDC992F19041FC1D499CCA1486721479EBAA7270604E15EDDFABA89D1E772E5", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/luna.png", - "symbol": "LUNA", + "name": "Sailing The SeaS DAO", + "denom": "ibc/FF5AC3E28E50C2C52063C18D0E2F742B3967BE5ACC6D7C8713118E54E1DEE4F6", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/SEAS.png", + "symbol": "SEAS", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "0DDC992F19041FC1D499CCA1486721479EBAA7270604E15EDDFABA89D1E772E5", + "hash": "FF5AC3E28E50C2C52063C18D0E2F742B3967BE5ACC6D7C8713118E54E1DEE4F6", "path": "", "channelId": "", "decimals": 6, - "symbol": "LUNA", - "baseDenom": "LUNA", - "isNative": false + "symbol": "SEAS", + "baseDenom": "SEAS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Alliance Staked ampWHALE", - "denom": "ibc/DF3225D7381562B58AA8BE107A87260DDDC7FA08E4B0898E3D795392CF844BBE", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/ampwhalet.svg", - "symbol": "ampWHALEt", + "name": "sayve", + "denom": "ibc/DF2B99CF1FEA6B292E79617BD6F7EF735C0B47CEF09D7104E270956E96C38B12", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/sayve.png", + "symbol": "SAYVE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "DF3225D7381562B58AA8BE107A87260DDDC7FA08E4B0898E3D795392CF844BBE", + "hash": "DF2B99CF1FEA6B292E79617BD6F7EF735C0B47CEF09D7104E270956E96C38B12", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampWHALEt", - "baseDenom": "ampWHALEt", - "isNative": false + "symbol": "SAYVE", + "baseDenom": "SAYVE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Alliance Staked boneWHALE", - "denom": "ibc/F993B2C44A70D8B97B09581F12CF1A68A38DF8BBCFBA9F82016984138C718A57", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/bonewhalet.svg", - "symbol": "boneWHALEt", + "name": "Secret Network", + "denom": "ibc/0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/scrt.png", + "symbol": "SCRT", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F993B2C44A70D8B97B09581F12CF1A68A38DF8BBCFBA9F82016984138C718A57", + "hash": "0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A", "path": "", "channelId": "", "decimals": 6, - "symbol": "boneWHALEt", - "baseDenom": "boneWHALEt", - "isNative": false + "symbol": "SCRT", + "baseDenom": "SCRT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Amplified ROAR", - "denom": "ibc/7BE54594EAE77464217B9BB5171035946ED23DB309B030B5708E15C9455BB557", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/amproar.png", - "symbol": "ampROAR", + "name": "Sei", + "denom": "ibc/0D0B98E80BA0158D325074100998A78FB6EC1BF394EFF632E570A5C890ED7CC2", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/sei.png", + "symbol": "SEI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "7BE54594EAE77464217B9BB5171035946ED23DB309B030B5708E15C9455BB557", + "hash": "0D0B98E80BA0158D325074100998A78FB6EC1BF394EFF632E570A5C890ED7CC2", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampROAR", - "baseDenom": "ampROAR", - "isNative": false + "symbol": "SEI", + "baseDenom": "SEI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Celestia", - "denom": "ibc/F51BB221BAA275F2EBF654F70B005627D7E713AFFD6D86AFD1E43CAA886149F4", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/celestia/images/celestia.png", - "symbol": "TIA", + "name": "Sei", + "denom": "ibc/BCE43BA530FBE35282B62C1E1EA4AD1F51522C61D40FB761005E1A02F18E0E58", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/sei.png", + "symbol": "SEI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F51BB221BAA275F2EBF654F70B005627D7E713AFFD6D86AFD1E43CAA886149F4", + "hash": "BCE43BA530FBE35282B62C1E1EA4AD1F51522C61D40FB761005E1A02F18E0E58", "path": "", "channelId": "", "decimals": 6, - "symbol": "TIA", - "baseDenom": "TIA", - "isNative": false + "symbol": "SEI", + "baseDenom": "SEI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "qcFUZN", - "denom": "ibc/5E44326A289ED1CA0536517BC958881B611D21CBB33EBE068F1E04A502A9F548", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/qcfuzn.svg", - "symbol": "qcFUZN", + "name": "Sei", + "denom": "ibc/45C1BDD0F44EA61B79E6F07C61F6FBC601E496B281316C867B542D7964A4BD82", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/sei.png", + "symbol": "SEI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "5E44326A289ED1CA0536517BC958881B611D21CBB33EBE068F1E04A502A9F548", + "hash": "45C1BDD0F44EA61B79E6F07C61F6FBC601E496B281316C867B542D7964A4BD82", "path": "", "channelId": "", "decimals": 6, - "symbol": "qcFUZN", - "baseDenom": "qcFUZN", - "isNative": false + "symbol": "SEI", + "baseDenom": "SEI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Nois", - "denom": "ibc/DD9182E8E2B13C89D6B4707C7B43E8DB6193F9FF486AFA0E6CF86B427B0D231A", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/nois/images/nois.png", - "symbol": "NOIS", + "name": "Sensei Dog", + "denom": "ibc/12612A3EBAD01200A7FBD893D4B0D71F3AD65C41B2AEE5B42EE190672EBE57E9", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/SenseiDog.png", + "symbol": "SENSEI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "DD9182E8E2B13C89D6B4707C7B43E8DB6193F9FF486AFA0E6CF86B427B0D231A", + "hash": "12612A3EBAD01200A7FBD893D4B0D71F3AD65C41B2AEE5B42EE190672EBE57E9", "path": "", "channelId": "", "decimals": 6, - "symbol": "NOIS", - "baseDenom": "NOIS", - "isNative": false + "symbol": "SENSEI", + "baseDenom": "SENSEI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Pica", - "denom": "ibc/9C2212CB87241A8D038222CF66BBCFABDD08330DFA0AC9B451135287DCBDC7A8", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/composable/images/pica.svg", - "symbol": "PICA", - "decimals": 12, + "name": "seul", + "denom": "ibc/1C17C28AEA3C5E03F1A586575C6BE426A18B03B48C11859B82242EF32D372FDA", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/seul.png", + "symbol": "SEUL", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "9C2212CB87241A8D038222CF66BBCFABDD08330DFA0AC9B451135287DCBDC7A8", + "hash": "1C17C28AEA3C5E03F1A586575C6BE426A18B03B48C11859B82242EF32D372FDA", "path": "", "channelId": "", - "decimals": 12, - "symbol": "PICA", - "baseDenom": "PICA", - "isNative": false + "decimals": 6, + "symbol": "SEUL", + "baseDenom": "SEUL", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OSMO", - "denom": "ibc/C2025C1D34ED74CD6F9DF86CD650D92219AF645E9D0ADFFACF4E2CBECE649536", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", - "symbol": "OSMO", + "name": "SHARK", + "denom": "ibc/08B66006A5DC289F8CB3D7695F16D211D8DDCA68E4701A1EB90BF641D8637ACE", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/shark.png", + "symbol": "SHARK", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C2025C1D34ED74CD6F9DF86CD650D92219AF645E9D0ADFFACF4E2CBECE649536", + "hash": "08B66006A5DC289F8CB3D7695F16D211D8DDCA68E4701A1EB90BF641D8637ACE", "path": "", "channelId": "", "decimals": 6, - "symbol": "OSMO", - "baseDenom": "OSMO", - "isNative": false + "symbol": "SHARK", + "baseDenom": "SHARK", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "STRD", - "denom": "ibc/02683677B1A58ECF74FFF25711E09735C44153FE9490BE5EF9FD21DE82BCB542", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/strd.png", - "symbol": "STRD", - "decimals": 6, + "name": "Shiba Inu", + "denom": "ibc/E68343A4DEF4AFBE7C5A9004D4C11888EE755A7B43B3F1AFA52F2C34C07990D5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/shib.svg", + "symbol": "SHIB", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "02683677B1A58ECF74FFF25711E09735C44153FE9490BE5EF9FD21DE82BCB542", + "hash": "E68343A4DEF4AFBE7C5A9004D4C11888EE755A7B43B3F1AFA52F2C34C07990D5", "path": "", "channelId": "", - "decimals": 6, - "symbol": "STRD", - "baseDenom": "STRD", - "isNative": false + "decimals": 18, + "symbol": "SHIB", + "baseDenom": "SHIB", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "BLD", - "denom": "ibc/B7933C59879BFE059942C6F76CAF4B1609D441AD22D54D42DAC00CE7918CAF1F", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/agoric/images/bld.png", - "symbol": "BLD", + "name": "Solana USD Coin (Wormhole)", + "denom": "ibc/FF3CF830E60679530072C4787A76D18E81C04F9725C3523F941DF0D8B7EB24F0", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdc.svg", + "symbol": "solana.USDC.wh", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B7933C59879BFE059942C6F76CAF4B1609D441AD22D54D42DAC00CE7918CAF1F", + "hash": "FF3CF830E60679530072C4787A76D18E81C04F9725C3523F941DF0D8B7EB24F0", "path": "", "channelId": "", "decimals": 6, - "symbol": "BLD", - "baseDenom": "BLD", - "isNative": false + "symbol": "solana.USDC.wh", + "baseDenom": "solana.USDC.wh", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "stATOM", - "denom": "ibc/B024EC4AE846F690CB46C1CE886BE7DCE27CBBB6CE1E4EFBA4AA764E07B81A69", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/statom.png", - "symbol": "stATOM", + "name": "Sommelier", + "denom": "ibc/34346A60A95EB030D62D6F5BDD4B745BE18E8A693372A8A347D5D53DBBB1328B", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sommelier/images/somm.png", + "symbol": "SOMM", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B024EC4AE846F690CB46C1CE886BE7DCE27CBBB6CE1E4EFBA4AA764E07B81A69", + "hash": "34346A60A95EB030D62D6F5BDD4B745BE18E8A693372A8A347D5D53DBBB1328B", "path": "", "channelId": "", "decimals": 6, - "symbol": "stATOM", - "baseDenom": "stATOM", - "isNative": false + "symbol": "SOMM", + "baseDenom": "SOMM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "NTRN", - "denom": "ibc/E8E84092B9063AAC97846712D43D6555928073B8A0BFFCC2549E55EE224F1610", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", - "symbol": "NTRN", - "decimals": 6, + "name": "Staked Frax Ether", + "denom": "ibc/E918585C09958BD328DD9E7215E4726623E7A9A94342FEA5BE126A2AAF920730", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/sfrxeth.svg", + "symbol": "sfrxETH", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E8E84092B9063AAC97846712D43D6555928073B8A0BFFCC2549E55EE224F1610", + "hash": "E918585C09958BD328DD9E7215E4726623E7A9A94342FEA5BE126A2AAF920730", "path": "", "channelId": "", - "decimals": 6, - "symbol": "NTRN", - "baseDenom": "NTRN", - "isNative": false + "decimals": 18, + "symbol": "sfrxETH", + "baseDenom": "sfrxETH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "UMEE", - "denom": "ibc/221E9E20795E6E250532A6A871E7F6310FCEDFC69B681037BBA6561270360D86", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/umee/images/umee.png", - "symbol": "UMEE", + "name": "Staked IBCX", + "denom": "ibc/0A6B424A8207047D9FD499F59177BABD8DB08BBC2316B29B702A403BFB414419", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/stibcx.png", + "symbol": "stIBCX", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "221E9E20795E6E250532A6A871E7F6310FCEDFC69B681037BBA6561270360D86", + "hash": "0A6B424A8207047D9FD499F59177BABD8DB08BBC2316B29B702A403BFB414419", "path": "", "channelId": "", "decimals": 6, - "symbol": "UMEE", - "baseDenom": "UMEE", - "isNative": false + "symbol": "stIBCX", + "baseDenom": "stIBCX", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "CRE", - "denom": "ibc/DDE000907D85FB1F358B3FBB1143452BE13F68E0BEA0DFFD8787095B76EEE0A1", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/crescent/images/cre.png", - "symbol": "CRE", + "name": "Stride", + "denom": "ibc/3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/strd.png", + "symbol": "STRD", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "DDE000907D85FB1F358B3FBB1143452BE13F68E0BEA0DFFD8787095B76EEE0A1", + "hash": "3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25", "path": "", "channelId": "", "decimals": 6, - "symbol": "CRE", - "baseDenom": "CRE", - "isNative": false + "symbol": "STRD", + "baseDenom": "STRD", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "SCRT", - "denom": "ibc/7C4A4847D6898FA8744A8F2A4FC287E98CA5A95E05842B897B3FB301103C8AB6", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/secretnetwork/images/scrt.png", - "symbol": "SCRT", + "name": "Stride Staked ATOM", + "denom": "ibc/A8F39212ED30B6A8C2AC736665835720D3D7BE4A1D18D68566525EC25ECF1C9B", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/statom.png", + "symbol": "stATOM", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "7C4A4847D6898FA8744A8F2A4FC287E98CA5A95E05842B897B3FB301103C8AB6", + "hash": "A8F39212ED30B6A8C2AC736665835720D3D7BE4A1D18D68566525EC25ECF1C9B", "path": "", "channelId": "", "decimals": 6, - "symbol": "SCRT", - "baseDenom": "SCRT", - "isNative": false + "symbol": "stATOM", + "baseDenom": "stATOM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "STARS", - "denom": "ibc/4D29F082A3C083C85C886B92A1EB438C3FC0632E5F9E4D875479BEB7B9511BD5", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stargaze/images/stars.png", - "symbol": "STARS", + "name": "Stride Staked CMDX", + "denom": "ibc/0CAB2CA45981598C95B6BE18252AEFE1E9E1691D8B4C661997AD7B836FD904D6", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stcmdx.png", + "symbol": "stCMDX", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "4D29F082A3C083C85C886B92A1EB438C3FC0632E5F9E4D875479BEB7B9511BD5", + "hash": "0CAB2CA45981598C95B6BE18252AEFE1E9E1691D8B4C661997AD7B836FD904D6", "path": "", "channelId": "", "decimals": 6, - "symbol": "STARS", - "baseDenom": "STARS", - "isNative": false + "symbol": "stCMDX", + "baseDenom": "stCMDX", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "bCRE", - "denom": "ibc/83D54420DD46764F2ED5EE511DAA63EC28012480A245D8E33AA1F7D1FB15D736", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/crescent/images/bcre.png", - "symbol": "bCRE", - "decimals": 6, + "name": "Stride Staked DYDX", + "denom": "ibc/9B324282388BEBD0E028749E9E10627BA2BA13ADBE7FF04274F2CFBDD271BA4B", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stdydx.png", + "symbol": "stDYDX", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "83D54420DD46764F2ED5EE511DAA63EC28012480A245D8E33AA1F7D1FB15D736", + "hash": "9B324282388BEBD0E028749E9E10627BA2BA13ADBE7FF04274F2CFBDD271BA4B", "path": "", "channelId": "", - "decimals": 6, - "symbol": "bCRE", - "baseDenom": "bCRE", - "isNative": false + "decimals": 18, + "symbol": "stDYDX", + "baseDenom": "stDYDX", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "HUAHUA", - "denom": "ibc/9D9B59CA222E54842555DBD81B22EEABE61796D4C6EC8AB47A97C388333AC340", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/chihuahua/images/huahua.png", - "symbol": "HUAHUA", - "decimals": 6, + "name": "Stride Staked EVMOS", + "denom": "ibc/75F64E20A70C5059F8EA792F1C47260DC7C6CBAC69DBA60E151AD5416E93C34C", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stevmos.png", + "symbol": "stEVMOS", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "9D9B59CA222E54842555DBD81B22EEABE61796D4C6EC8AB47A97C388333AC340", + "hash": "75F64E20A70C5059F8EA792F1C47260DC7C6CBAC69DBA60E151AD5416E93C34C", "path": "", "channelId": "", - "decimals": 6, - "symbol": "HUAHUA", - "baseDenom": "HUAHUA", - "isNative": false + "decimals": 18, + "symbol": "stEVMOS", + "baseDenom": "stEVMOS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ATOM", - "denom": "ibc/377F82FD1E4F6408B1CB7C8BFF9134A1F2C5D5E5CC2760BAD972AF0F7F6D4675", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/cosmoshub/images/atom.png", - "symbol": "ATOM", - "decimals": 6, + "name": "Stride Staked INJ", + "denom": "ibc/AC87717EA002B0123B10A05063E69BCA274BA2C44D842AEEB41558D2856DCE93", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stinj.png", + "symbol": "stINJ", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "377F82FD1E4F6408B1CB7C8BFF9134A1F2C5D5E5CC2760BAD972AF0F7F6D4675", + "hash": "AC87717EA002B0123B10A05063E69BCA274BA2C44D842AEEB41558D2856DCE93", "path": "", "channelId": "", - "decimals": 6, - "symbol": "ATOM", - "baseDenom": "ATOM", - "isNative": false + "decimals": 18, + "symbol": "stINJ", + "baseDenom": "stINJ", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "AtomEconomicZone69JaeKwonInu", - "denom": "ibc/AEE5A4EF1B28693C4FF12F046C17197E509030B18F70FE3D74F6C3542BB008AD", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/circus.png", - "symbol": "CIRCUS", + "name": "Stride Staked JUNO", + "denom": "ibc/580E52A2C2DB126EE2160D1BDBBA33B5839D53B5E59D04D4FF438AE9BB7BFAAB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stjuno.png", + "symbol": "stJUNO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "AEE5A4EF1B28693C4FF12F046C17197E509030B18F70FE3D74F6C3542BB008AD", + "hash": "580E52A2C2DB126EE2160D1BDBBA33B5839D53B5E59D04D4FF438AE9BB7BFAAB", "path": "", "channelId": "", "decimals": 6, - "symbol": "CIRCUS", - "baseDenom": "CIRCUS", - "isNative": false + "symbol": "stJUNO", + "baseDenom": "stJUNO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "USDC", - "denom": "ibc/DF32F083238097AD2CA5444BFB8F338534C32865EFE0696C5AF89AFB3A0144D6", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", - "symbol": "USDC", + "name": "Stride Staked LUNA", + "denom": "ibc/E98796F283A8B56A221011C2EDF7079BB62D1EA3EEF3E7CF4C679E91C6D97D08", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stluna.png", + "symbol": "stLUNA", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "DF32F083238097AD2CA5444BFB8F338534C32865EFE0696C5AF89AFB3A0144D6", + "hash": "E98796F283A8B56A221011C2EDF7079BB62D1EA3EEF3E7CF4C679E91C6D97D08", "path": "", "channelId": "", "decimals": 6, - "symbol": "USDC", - "baseDenom": "USDC", - "isNative": false + "symbol": "stLUNA", + "baseDenom": "stLUNA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Multichain USDC", - "denom": "ibc/610D4A1B3F3198C35C09E9AF7C8FB81707912463357C9398B02C7F13049678A8", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", - "symbol": "USDC", + "name": "Stride Staked OSMO", + "denom": "ibc/6D821F3CFAE78E9EBD872FAEC61C400C0D9B72E77FA14614CF1B775A528854FD", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stosmo.png", + "symbol": "stOSMO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "610D4A1B3F3198C35C09E9AF7C8FB81707912463357C9398B02C7F13049678A8", + "hash": "6D821F3CFAE78E9EBD872FAEC61C400C0D9B72E77FA14614CF1B775A528854FD", "path": "", "channelId": "", "decimals": 6, - "symbol": "USDC", - "baseDenom": "USDC", - "isNative": false + "symbol": "stOSMO", + "baseDenom": "stOSMO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Dot", - "denom": "ibc/B0442E32E21ED4228301A2B1B247D3F3355B73BF288470F9643AAD0CA07DD593", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/polkadot/images/dot.png", - "symbol": "DOT", - "decimals": 10, + "name": "Stride Staked SOMM", + "denom": "ibc/9C234DA49B8DDAFB8F71F21BEB109F6255ECA146A32FD3A36CB9210647CBD037", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stsomm.png", + "symbol": "stSOMM", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B0442E32E21ED4228301A2B1B247D3F3355B73BF288470F9643AAD0CA07DD593", + "hash": "9C234DA49B8DDAFB8F71F21BEB109F6255ECA146A32FD3A36CB9210647CBD037", "path": "", "channelId": "", - "decimals": 10, - "symbol": "DOT", - "baseDenom": "DOT", - "isNative": false + "decimals": 6, + "symbol": "stSOMM", + "baseDenom": "stSOMM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Plankton", - "denom": "ibc/020098CDEC3D7555210CBC1593A175A6B24253823B0B711D072EC95F76FA4D42", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/PLNK_drk.png", - "symbol": "PLNK", + "name": "Stride Staked STARS", + "denom": "ibc/DD0F92D576A9A60487F17685A987AB6EDB359E661D281ED31F3AE560650ECFCB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/ststars.png", + "symbol": "stSTARS", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "020098CDEC3D7555210CBC1593A175A6B24253823B0B711D072EC95F76FA4D42", + "hash": "DD0F92D576A9A60487F17685A987AB6EDB359E661D281ED31F3AE560650ECFCB", "path": "", "channelId": "", "decimals": 6, - "symbol": "PLNK", - "baseDenom": "PLNK", - "isNative": false + "symbol": "stSTARS", + "baseDenom": "stSTARS", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Lion DAO", - "denom": "ibc/E6CFB0AC1D339A8CBA3353DF0D7E080B4B14D026D1C90F63F666C223B04D548C", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/roar.png", - "symbol": "ROAR", + "name": "Stride Staked TIA", + "denom": "ibc/32F6EDA3E2B2A7F9C4A62F11935CF5D25948372A5A85281D7ABB9A2D0F0B7182", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/sttia.png", + "symbol": "stTIA", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E6CFB0AC1D339A8CBA3353DF0D7E080B4B14D026D1C90F63F666C223B04D548C", + "hash": "32F6EDA3E2B2A7F9C4A62F11935CF5D25948372A5A85281D7ABB9A2D0F0B7182", "path": "", "channelId": "", "decimals": 6, - "symbol": "ROAR", - "baseDenom": "ROAR", - "isNative": false + "symbol": "stTIA", + "baseDenom": "stTIA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "TheOnlyOne", - "denom": "ibc/C0B67C5C6E3D8ED32B5FEC0E5A4F4E5D0257C62B4FDE5E569AF425B6A0059CC4", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/xxx3.png", - "symbol": "xxx", - "decimals": 10, + "name": "Stride Staked UMEE", + "denom": "ibc/FC8E98DF998AE88129183094E49383F94B3E5F1844C939D380AF18061FEF41EB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/stride/images/stumee.png", + "symbol": "stUMEE", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C0B67C5C6E3D8ED32B5FEC0E5A4F4E5D0257C62B4FDE5E569AF425B6A0059CC4", + "hash": "FC8E98DF998AE88129183094E49383F94B3E5F1844C939D380AF18061FEF41EB", "path": "", "channelId": "", - "decimals": 10, - "symbol": "xxx", - "baseDenom": "xxx", - "isNative": false + "decimals": 6, + "symbol": "stUMEE", + "baseDenom": "stUMEE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Lion Cub DAO", - "denom": "ibc/5CB35B165F689DD57F836C6C5ED3AB268493AA5A810740446C4F2141664714F4", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/cub.png", - "symbol": "CUB", - "decimals": 6, + "name": "Sui (Wormhole)", + "denom": "ibc/F96C68219E987465D9EB253DACD385855827C5705164DAFDB0161429F8B95780", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/sui/images/sui.svg", + "symbol": "SUI", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "5CB35B165F689DD57F836C6C5ED3AB268493AA5A810740446C4F2141664714F4", + "hash": "F96C68219E987465D9EB253DACD385855827C5705164DAFDB0161429F8B95780", "path": "", "channelId": "", - "decimals": 6, - "symbol": "CUB", - "baseDenom": "CUB", - "isNative": false + "decimals": 8, + "symbol": "SUI", + "baseDenom": "SUI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Astroport", - "denom": "ibc/EBD5A24C554198EBAF44979C5B4D2C2D312E6EBAB71962C92F735499C7575839", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra/images/astro.png", - "symbol": "ASTRO", - "decimals": 6, + "name": "tBTC v2 (Wormhole)", + "denom": "ibc/CDF0747148A7E6FCF27143312A8A5B7F9AEF0EF8BD4FA4381815A5EDBFC9B87E", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/tbtc.svg", + "symbol": "tBTC", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "EBD5A24C554198EBAF44979C5B4D2C2D312E6EBAB71962C92F735499C7575839", + "hash": "CDF0747148A7E6FCF27143312A8A5B7F9AEF0EF8BD4FA4381815A5EDBFC9B87E", "path": "", "channelId": "", - "decimals": 6, - "symbol": "ASTRO", - "baseDenom": "ASTRO", - "isNative": false + "decimals": 8, + "symbol": "tBTC", + "baseDenom": "tBTC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "sayve", - "denom": "ibc/DF2B99CF1FEA6B292E79617BD6F7EF735C0B47CEF09D7104E270956E96C38B12", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/sayve.png", - "symbol": "SAYVE", + "name": "Test", + "denom": "ibc/A83851234A83F3FE51CDB44FF1A4435472A197C096EF9E7312B69E67C16B7FB7", + "logo": "unknown.png", + "symbol": "TEST", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "DF2B99CF1FEA6B292E79617BD6F7EF735C0B47CEF09D7104E270956E96C38B12", + "hash": "A83851234A83F3FE51CDB44FF1A4435472A197C096EF9E7312B69E67C16B7FB7", "path": "", "channelId": "", "decimals": 6, - "symbol": "SAYVE", - "baseDenom": "SAYVE", - "isNative": false + "symbol": "TEST", + "baseDenom": "TEST", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Amplified LUNA", - "denom": "ibc/751CCECAF75D686B1DC8708BE62F8C7411B211750E6009C6AC4C93881F0543E8", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/ampluna.svg", - "symbol": "ampLUNA", + "name": "Tether USD", + "denom": "ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdt.svg", + "symbol": "USDT", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "751CCECAF75D686B1DC8708BE62F8C7411B211750E6009C6AC4C93881F0543E8", + "hash": "4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampLUNA", - "baseDenom": "ampLUNA", - "isNative": false + "symbol": "USDT", + "baseDenom": "USDT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "boneLuna", - "denom": "ibc/C9D55B62C9D9CA84DD94DC019009B840DDFD861BF2F33F7CF2A8A74933797680", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/boneluna.png", - "symbol": "bLUNA", + "name": "Tether USD", + "denom": "ibc/90C6F06139D663CFD7949223D257C5B5D241E72ED61EBD12FFDDA6F068715E47", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdt.png", + "symbol": "USDT", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C9D55B62C9D9CA84DD94DC019009B840DDFD861BF2F33F7CF2A8A74933797680", + "hash": "90C6F06139D663CFD7949223D257C5B5D241E72ED61EBD12FFDDA6F068715E47", "path": "", "channelId": "", "decimals": 6, - "symbol": "bLUNA", - "baseDenom": "bLUNA", - "isNative": false + "symbol": "USDT", + "baseDenom": "USDT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "BLUE CUB DAO", - "denom": "ibc/B692197280D4E62F8D9F8E5C0B697DC4C2C680ED6DE8FFF0368E0552C9215607", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/blue.png", - "symbol": "BLUE", + "name": "Tether USD (Wormhole)", + "denom": "ibc/3384DCE14A72BBD0A47107C19A30EDD5FD1AC50909C632CB807680DBC798BB30", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdt.svg", + "symbol": "USDT", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B692197280D4E62F8D9F8E5C0B697DC4C2C680ED6DE8FFF0368E0552C9215607", + "hash": "3384DCE14A72BBD0A47107C19A30EDD5FD1AC50909C632CB807680DBC798BB30", "path": "", "channelId": "", "decimals": 6, - "symbol": "BLUE", - "baseDenom": "BLUE", - "isNative": false + "symbol": "USDT", + "baseDenom": "USDT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "dinheiro", - "denom": "ibc/306269448B7ED8EC0DB6DC30BAEA279A9190E1D583572681749B9C0D44915DAB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/Dinheiros.png", - "symbol": "DINHEIROS", - "decimals": 18, + "name": "TheOnlyOne", + "denom": "ibc/C0B67C5C6E3D8ED32B5FEC0E5A4F4E5D0257C62B4FDE5E569AF425B6A0059CC4", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/xxx3.png", + "symbol": "xxx", + "decimals": 10, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "306269448B7ED8EC0DB6DC30BAEA279A9190E1D583572681749B9C0D44915DAB", + "hash": "C0B67C5C6E3D8ED32B5FEC0E5A4F4E5D0257C62B4FDE5E569AF425B6A0059CC4", "path": "", "channelId": "", - "decimals": 18, - "symbol": "DINHEIROS", - "baseDenom": "DINHEIROS", - "isNative": false + "decimals": 10, + "symbol": "xxx", + "baseDenom": "xxx", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "real", - "denom": "ibc/444BCB7AC154587F5D4ABE36EF6D7D65369224509DCBCA2E27AD539519DD66BB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/Reis.png", - "symbol": "REIS", + "name": "TIA Squared", + "denom": "ibc/D2098712E1B9398AD8D05966A5766D4C32137D9A06CF839376221176CFD9AF0B", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/sqtia.svg", + "symbol": "sqTIA", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "444BCB7AC154587F5D4ABE36EF6D7D65369224509DCBCA2E27AD539519DD66BB", + "hash": "D2098712E1B9398AD8D05966A5766D4C32137D9A06CF839376221176CFD9AF0B", "path": "", "channelId": "", "decimals": 6, - "symbol": "REIS", - "baseDenom": "REIS", - "isNative": false + "symbol": "sqTIA", + "baseDenom": "sqTIA", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "escudo", - "denom": "ibc/D1546953F51A43131EDB1E80447C823FD0B562C928496808801A57F374357CE5", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/Escudos.png", - "symbol": "ESCUDOS", + "name": "Umee", + "denom": "ibc/2FF3DC3A0265B9A220750E75E75E5D44ED2F716B8AC4EDC378A596CC958ABF6B", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/umee/images/umee.png", + "symbol": "UMEE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "D1546953F51A43131EDB1E80447C823FD0B562C928496808801A57F374357CE5", + "hash": "2FF3DC3A0265B9A220750E75E75E5D44ED2F716B8AC4EDC378A596CC958ABF6B", "path": "", "channelId": "", "decimals": 6, - "symbol": "ESCUDOS", - "baseDenom": "ESCUDOS", - "isNative": false + "symbol": "UMEE", + "baseDenom": "UMEE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "alentejo.money", - "denom": "ibc/FE5CF6EA14A5A5EF61AFBD8294E7B245DF4523F6F3B38DE8CC65A916BCEA00B4", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/Alem.png", - "symbol": "ALEM", - "decimals": 6, + "name": "Uniswap", + "denom": "ibc/3E3A8A403AE81114F4341962A6D73162D586C9DF4CE3BE7C7B459108430675F7", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/uni.svg", + "symbol": "UNI", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "FE5CF6EA14A5A5EF61AFBD8294E7B245DF4523F6F3B38DE8CC65A916BCEA00B4", + "hash": "3E3A8A403AE81114F4341962A6D73162D586C9DF4CE3BE7C7B459108430675F7", "path": "", "channelId": "", - "decimals": 6, - "symbol": "ALEM", - "baseDenom": "ALEM", - "isNative": false + "decimals": 18, + "symbol": "UNI", + "baseDenom": "UNI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "GEM DAO", - "denom": "ibc/8AE86084C0D921352F711EF42CCA7BA4C8238C244FE4CC3E4E995D9782FB0E2B", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/gem.png", - "symbol": "GEM", + "name": "Unstake Fi", + "denom": "ibc/35366063B530778DC37A16AAED4DDC14C0DCA161FBF55B5B69F5171FEE19BF93", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/nstk.svg", + "symbol": "NSTK", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "8AE86084C0D921352F711EF42CCA7BA4C8238C244FE4CC3E4E995D9782FB0E2B", + "hash": "35366063B530778DC37A16AAED4DDC14C0DCA161FBF55B5B69F5171FEE19BF93", "path": "", "channelId": "", "decimals": 6, - "symbol": "GEM", - "baseDenom": "GEM", - "isNative": false + "symbol": "NSTK", + "baseDenom": "NSTK", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "nico", - "denom": "ibc/EED3F204DCABACBEB858B0A56017070283098A81DEB49F1F9D6702309AA7F7DE", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/nicodao.png", - "symbol": "NICO", - "decimals": 18, + "name": "USDC", + "denom": "ibc/DF32F083238097AD2CA5444BFB8F338534C32865EFE0696C5AF89AFB3A0144D6", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", + "symbol": "USDC", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "EED3F204DCABACBEB858B0A56017070283098A81DEB49F1F9D6702309AA7F7DE", + "hash": "DF32F083238097AD2CA5444BFB8F338534C32865EFE0696C5AF89AFB3A0144D6", "path": "", "channelId": "", - "decimals": 18, - "symbol": "NICO", - "baseDenom": "NICO", - "isNative": false + "decimals": 6, + "symbol": "USDC", + "baseDenom": "USDC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Sailing The SeaS DAO", - "denom": "ibc/FF5AC3E28E50C2C52063C18D0E2F742B3967BE5ACC6D7C8713118E54E1DEE4F6", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/SEAS.png", - "symbol": "SEAS", + "name": "USDC", + "denom": "ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", + "symbol": "USDC", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "FF5AC3E28E50C2C52063C18D0E2F742B3967BE5ACC6D7C8713118E54E1DEE4F6", + "hash": "2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E", "path": "", "channelId": "", "decimals": 6, - "symbol": "SEAS", - "baseDenom": "SEAS", - "isNative": false + "symbol": "USDC", + "baseDenom": "USDC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "BitzDAO", - "denom": "ibc/01A69EE21F6A76CAA8D0DB900AF2789BF665B5B67D89A7D69E7ECF7F513CD0CA", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/BITZ.png", - "symbol": "BITZ", + "name": "USD Coin", + "denom": "ibc/7E1AF94AD246BE522892751046F0C959B768642E5671CC3742264068D49553C0", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", + "symbol": "USDC", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "01A69EE21F6A76CAA8D0DB900AF2789BF665B5B67D89A7D69E7ECF7F513CD0CA", + "hash": "7E1AF94AD246BE522892751046F0C959B768642E5671CC3742264068D49553C0", "path": "", "channelId": "", "decimals": 6, - "symbol": "BITZ", - "baseDenom": "BITZ", - "isNative": false + "symbol": "USDC", + "baseDenom": "USDC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "seul", - "denom": "ibc/1C17C28AEA3C5E03F1A586575C6BE426A18B03B48C11859B82242EF32D372FDA", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/seul.png", - "symbol": "SEUL", + "name": "USD Coin from Avalanche", + "denom": "ibc/705E7E25F94467E363B2EB324A5A6FF4C683A4A6D20AAD2AEEABA2D9EB1B897F", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", + "symbol": "USDC", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "1C17C28AEA3C5E03F1A586575C6BE426A18B03B48C11859B82242EF32D372FDA", + "hash": "705E7E25F94467E363B2EB324A5A6FF4C683A4A6D20AAD2AEEABA2D9EB1B897F", "path": "", "channelId": "", "decimals": 6, - "symbol": "SEUL", - "baseDenom": "SEUL", - "isNative": false + "symbol": "USDC", + "baseDenom": "USDC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "xseul", - "denom": "ibc/CC381CB977B79239696AC471777FEC12816B9EF7F601EE2DAF17C00F51C25F6F", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/xseul.png", - "symbol": "xSEUL", + "name": "USD Coin from Polygon", + "denom": "ibc/2E93E8914CA07B73A794657DA76170A016057D1C6B0DC42D969918D4F22D95A3", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdc.png", + "symbol": "USDC", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "CC381CB977B79239696AC471777FEC12816B9EF7F601EE2DAF17C00F51C25F6F", + "hash": "2E93E8914CA07B73A794657DA76170A016057D1C6B0DC42D969918D4F22D95A3", "path": "", "channelId": "", "decimals": 6, - "symbol": "xSEUL", - "baseDenom": "xSEUL", - "isNative": false + "symbol": "USDC", + "baseDenom": "USDC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "$AUTISM exists to celebrate autism as a superior biological tech stack for a changing world", - "denom": "factory/inj14lf8xm6fcvlggpa7guxzjqwjmtr24gnvf56hvz/autism", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/autism.png", - "symbol": "AUTISM", + "name": "USD Coin (Wormhole)", + "denom": "ibc/7BE71BB68C781453F6BB10114F8E2DF8DC37BA791C502F5389EA10E7BEA68323", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdc.svg", + "symbol": "USDC", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "factory/inj14lf8xm6fcvlggpa7guxzjqwjmtr24gnvf56hvz/autism", + "hash": "7BE71BB68C781453F6BB10114F8E2DF8DC37BA791C502F5389EA10E7BEA68323", "path": "", "channelId": "", "decimals": 6, - "symbol": "AUTISM", - "baseDenom": "AUTISM", - "isNative": false + "symbol": "USDC", + "baseDenom": "USDC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "GUPPY", - "denom": "ibc/F729B93A13133D7390455293338A0CEAAF876D0F180B7C154607989A1617DD45", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/guppy.png", - "symbol": "GUPPY", + "name": "USDT", + "denom": "ibc/7965483148018AFAA12DC569959897E7A5E474F4B41A87FFC5513B552C108DB5", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdt.png", + "symbol": "USDT", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "F729B93A13133D7390455293338A0CEAAF876D0F180B7C154607989A1617DD45", + "hash": "7965483148018AFAA12DC569959897E7A5E474F4B41A87FFC5513B552C108DB5", "path": "", "channelId": "", "decimals": 6, - "symbol": "GUPPY", - "baseDenom": "GUPPY", - "isNative": false + "symbol": "USDT", + "baseDenom": "USDT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Neutron", - "denom": "ibc/6488808F32B07F6E8DCE7B700B92D9F7287D0FA1D0F76A25B11276E09DB0E626", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/ntrn.png", - "symbol": "NTRN", + "name": "USDT", + "denom": "ibc/24E5D0825D3D71BF00C4A01CD8CA8F2D27B1DD32B7446CF633534AEA25379271", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/usdt.png", + "symbol": "USDT", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "6488808F32B07F6E8DCE7B700B92D9F7287D0FA1D0F76A25B11276E09DB0E626", + "hash": "24E5D0825D3D71BF00C4A01CD8CA8F2D27B1DD32B7446CF633534AEA25379271", "path": "", "channelId": "", "decimals": 6, - "symbol": "NTRN", - "baseDenom": "NTRN", - "isNative": false + "symbol": "USDT", + "baseDenom": "USDT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "wstETH", - "denom": "ibc/E4BDC3A9935959C715961FFC6C12159EAD8FA4A5955D069EE19D0423FF810C6E", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wsteth.svg", - "symbol": "wstETH", - "decimals": 18, + "name": "USK", + "denom": "ibc/58BC643F2EB5758C08D8B1569C7948A5DA796802576005F676BBFB7526E520EB", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/usk.png", + "symbol": "USK", + "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E4BDC3A9935959C715961FFC6C12159EAD8FA4A5955D069EE19D0423FF810C6E", + "hash": "58BC643F2EB5758C08D8B1569C7948A5DA796802576005F676BBFB7526E520EB", "path": "", "channelId": "", - "decimals": 18, - "symbol": "wstETH", - "baseDenom": "wstETH", - "isNative": false + "decimals": 6, + "symbol": "USK", + "baseDenom": "USK", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "AstroPepe", - "denom": "ibc/03BC83F4E4972621EAE3144FC91AED13AF3541A90A51B690425C95D1E03850D9", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/astropepe.png", - "symbol": "ASTROPEPE", + "name": "WGMI", + "denom": "factory/inj1rmjzj9fn47kdmfk4f3z39qr6czexxe0yjyc546/WGMI", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/wgmi.png", + "symbol": "WGMI", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "03BC83F4E4972621EAE3144FC91AED13AF3541A90A51B690425C95D1E03850D9", + "hash": "factory/inj1rmjzj9fn47kdmfk4f3z39qr6czexxe0yjyc546/WGMI", "path": "", "channelId": "", "decimals": 6, - "symbol": "ASTROPEPE", - "baseDenom": "ASTROPEPE", - "isNative": false + "symbol": "WGMI", + "baseDenom": "WGMI", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Newt", - "denom": "ibc/B0A75E6F4606C844C05ED9E08335AFC50E814F210C03CABAD31562F606C69C46", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/newt.png", - "symbol": "NEWT", + "name": "Whale", + "denom": "ibc/D6E6A20ABDD600742D22464340A7701558027759CE14D12590F8EA869CCCF445", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/white-whale.png", + "symbol": "WHALE", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "B0A75E6F4606C844C05ED9E08335AFC50E814F210C03CABAD31562F606C69C46", + "hash": "D6E6A20ABDD600742D22464340A7701558027759CE14D12590F8EA869CCCF445", "path": "", "channelId": "", "decimals": 6, - "symbol": "NEWT", - "baseDenom": "NEWT", - "isNative": false + "symbol": "WHALE", + "baseDenom": "WHALE", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Baby Corgi", - "denom": "ibc/9AC0F8299A5157831C7DF1AE52F178EFBA8D5E1826D4DD539441E3827FFCB873", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/babycorgi.png", - "symbol": "CORGI", + "name": "WINK", + "denom": "ibc/325300CEF4149AD1BBFEB540FF07699CDEEFBB653401E872532030CFB31CD767", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/kujira/images/wink.png", + "symbol": "WINK", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "9AC0F8299A5157831C7DF1AE52F178EFBA8D5E1826D4DD539441E3827FFCB873", + "hash": "325300CEF4149AD1BBFEB540FF07699CDEEFBB653401E872532030CFB31CD767", "path": "", "channelId": "", "decimals": 6, - "symbol": "CORGI", - "baseDenom": "CORGI", - "isNative": false + "symbol": "WINK", + "baseDenom": "WINK", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Wrapped Bitcoin", - "denom": "ibc/64431EE79F3216B8F7773A630549ADA852EA8E4B545D22BD35B0BF56FD5D5201", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/wbtc.png", - "symbol": "WBTC", + "name": "Worm", + "denom": "ibc/13C9967E4F065F5E4946302C1F94EA5F21261F3F90DAC0212C4037FA3E058297", + "logo": "unknown.png", + "symbol": "WORM", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "64431EE79F3216B8F7773A630549ADA852EA8E4B545D22BD35B0BF56FD5D5201", + "hash": "13C9967E4F065F5E4946302C1F94EA5F21261F3F90DAC0212C4037FA3E058297", "path": "", "channelId": "", "decimals": 6, - "symbol": "WBTC", - "baseDenom": "WBTC", - "isNative": false + "symbol": "WORM", + "baseDenom": "WORM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OPHIR", - "denom": "ibc/19DEC3C890D19A782A3CD0C62EA8F2F8CC09D0C9AAA8045263F40526088FEEDB", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/migaloo/images/ophir.png", - "symbol": "OPHIR", + "name": "WOSMO", + "denom": "ibc/DD648F5D3CDA56D0D8D8820CF703D246B9FC4007725D8B38D23A21FF1A1477E3", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/WOSMO.png", + "symbol": "WOSMO", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "19DEC3C890D19A782A3CD0C62EA8F2F8CC09D0C9AAA8045263F40526088FEEDB", + "hash": "DD648F5D3CDA56D0D8D8820CF703D246B9FC4007725D8B38D23A21FF1A1477E3", "path": "", "channelId": "", "decimals": 6, - "symbol": "OPHIR", - "baseDenom": "OPHIR", - "isNative": false + "symbol": "WOSMO", + "baseDenom": "WOSMO", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ito", - "denom": "ibc/E7140919F6B70594F89401B574DC198D206D923964184A9F79B39074301EB04F", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/I.png", - "symbol": "ITO", - "decimals": 6, + "name": "Wrapped AVAX", + "denom": "ibc/A4FF8E161D2835BA06A7522684E874EFC91004AD0CD14E038F37940562158D73", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/avalanche/images/wavax.svg", + "symbol": "WAVAX", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E7140919F6B70594F89401B574DC198D206D923964184A9F79B39074301EB04F", + "hash": "A4FF8E161D2835BA06A7522684E874EFC91004AD0CD14E038F37940562158D73", "path": "", "channelId": "", - "decimals": 6, - "symbol": "ITO", - "baseDenom": "ITO", - "isNative": false + "decimals": 18, + "symbol": "WAVAX", + "baseDenom": "WAVAX", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ARMANI", - "denom": "ibc/0C04597A68991F93CE8C9EF88EA795179CD020695041D00911E5CFF023D415CC", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/armani.png", - "symbol": "ARMANI", - "decimals": 6, + "name": "Wrapped Bitcoin", + "denom": "ibc/A07BB73539F556DA5238F1B7E9471B34DD19897B1EE7050B959989F13EFE73B3", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wbtc.png", + "symbol": "WBTC", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "0C04597A68991F93CE8C9EF88EA795179CD020695041D00911E5CFF023D415CC", + "hash": "A07BB73539F556DA5238F1B7E9471B34DD19897B1EE7050B959989F13EFE73B3", "path": "", "channelId": "", - "decimals": 6, - "symbol": "ARMANI", - "baseDenom": "ARMANI", - "isNative": false + "decimals": 8, + "symbol": "WBTC", + "baseDenom": "WBTC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Dog wif nunchucks", - "denom": "factory/inj1xtel2knkt8hmc9dnzpjz6kdmacgcfmlv5f308w/ninja", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/ninja.png", - "symbol": "NINJA", + "name": "Wrapped Bitcoin", + "denom": "ibc/64431EE79F3216B8F7773A630549ADA852EA8E4B545D22BD35B0BF56FD5D5201", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/wbtc.png", + "symbol": "WBTC", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "factory/inj1xtel2knkt8hmc9dnzpjz6kdmacgcfmlv5f308w/ninja", + "hash": "64431EE79F3216B8F7773A630549ADA852EA8E4B545D22BD35B0BF56FD5D5201", "path": "", "channelId": "", "decimals": 6, - "symbol": "NINJA", - "baseDenom": "NINJA", - "isNative": false + "symbol": "WBTC", + "baseDenom": "WBTC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "WGMI", - "denom": "factory/inj1rmjzj9fn47kdmfk4f3z39qr6czexxe0yjyc546/WGMI", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/injective/images/wgmi.png", - "symbol": "WGMI", - "decimals": 6, + "name": "Wrapped Bitcoin", + "denom": "ibc/4C8A332AE4FDE42709649B5F9A2A336192158C4465DF74B4513F5AD0C583EA6F", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/wbtc.png", + "symbol": "WBTC", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "factory/inj1rmjzj9fn47kdmfk4f3z39qr6czexxe0yjyc546/WGMI", + "hash": "4C8A332AE4FDE42709649B5F9A2A336192158C4465DF74B4513F5AD0C583EA6F", "path": "", "channelId": "", - "decimals": 6, - "symbol": "WGMI", - "baseDenom": "WGMI", - "isNative": false + "decimals": 8, + "symbol": "WBTC", + "baseDenom": "WBTC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "DROGO", - "denom": "ibc/565FE65B82C091F8BAD1379FA1B4560C036C07913355ED4BD8D156DA63F43712", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/drogo.png", - "symbol": "DROGO", - "decimals": 6, + "name": "Wrapped BNB", + "denom": "ibc/B877B8EF095028B807370AB5C7790CA0C328777C9FF09AA7F5436BA7FAE4A86F", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/binancesmartchain/images/wbnb.png", + "symbol": "WBNB", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "565FE65B82C091F8BAD1379FA1B4560C036C07913355ED4BD8D156DA63F43712", + "hash": "B877B8EF095028B807370AB5C7790CA0C328777C9FF09AA7F5436BA7FAE4A86F", "path": "", "channelId": "", - "decimals": 6, - "symbol": "DROGO", - "baseDenom": "DROGO", - "isNative": false + "decimals": 18, + "symbol": "WBNB", + "baseDenom": "WBNB", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Sei", - "denom": "ibc/45C1BDD0F44EA61B79E6F07C61F6FBC601E496B281316C867B542D7964A4BD82", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/sei.png", - "symbol": "SEI", - "decimals": 6, + "name": "Wrapped BTC (Wormhole)", + "denom": "ibc/48E69ED9995415D94BEA06BE70E4A6C2BEA0F5E83996D1E17AF95126770E06B2", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wbtc.png", + "symbol": "WBTC", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "45C1BDD0F44EA61B79E6F07C61F6FBC601E496B281316C867B542D7964A4BD82", + "hash": "48E69ED9995415D94BEA06BE70E4A6C2BEA0F5E83996D1E17AF95126770E06B2", "path": "", "channelId": "", - "decimals": 6, - "symbol": "SEI", - "baseDenom": "SEI", - "isNative": false + "decimals": 8, + "symbol": "WBTC", + "baseDenom": "WBTC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OIN STORE OF VALUE", - "denom": "ibc/CDA55861E9E491479CB52D5C89F942F5EAF221F80B7CDDBBA8EE94D3658B03B4", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", - "symbol": "OIN", - "decimals": 6, + "name": "Wrapped Ether", + "denom": "ibc/65A6973F7A4013335AE5FFE623FE019A78A1FEEE9B8982985099978837D764A7", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/axelar/images/weth.png", + "symbol": "WETH", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "CDA55861E9E491479CB52D5C89F942F5EAF221F80B7CDDBBA8EE94D3658B03B4", + "hash": "65A6973F7A4013335AE5FFE623FE019A78A1FEEE9B8982985099978837D764A7", "path": "", "channelId": "", - "decimals": 6, - "symbol": "OIN", - "baseDenom": "OIN", - "isNative": false + "decimals": 18, + "symbol": "WETH", + "baseDenom": "WETH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OIN STORE OF VALUE", - "denom": "ibc/64D95807CA13CD9EC5BEF9D3709138A14295DDBDFBC9EF58A9FFE34B911545E6", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", - "symbol": "OIN", - "decimals": 6, + "name": "Wrapped Ether (Wormhole)", + "denom": "ibc/4AC4A819B0BFCB25497E83B92A7D124F24C4E8B32B0E4B45704CC4D224A085A0", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/eth-white.png", + "symbol": "WETH", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "64D95807CA13CD9EC5BEF9D3709138A14295DDBDFBC9EF58A9FFE34B911545E6", + "hash": "4AC4A819B0BFCB25497E83B92A7D124F24C4E8B32B0E4B45704CC4D224A085A0", "path": "", "channelId": "", - "decimals": 6, - "symbol": "OIN", - "baseDenom": "OIN", - "isNative": false + "decimals": 8, + "symbol": "WETH", + "baseDenom": "WETH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Amplified SEI", - "denom": "ibc/6293B8AAE79F71B7DA3E8DEE00BEE0740D6D8495DB9BAED2342949B0A90152A5", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/ampsei.svg", - "symbol": "ampSEI", - "decimals": 6, + "name": "Wrapped FIL from Filecoin", + "denom": "ibc/9D1889339AEC850B1D719CCF19BD813955C086BE1ED323ED68318A273922E40D", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/filecoin/images/wfil.png", + "symbol": "axlFIL", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "6293B8AAE79F71B7DA3E8DEE00BEE0740D6D8495DB9BAED2342949B0A90152A5", + "hash": "9D1889339AEC850B1D719CCF19BD813955C086BE1ED323ED68318A273922E40D", "path": "", "channelId": "", - "decimals": 6, - "symbol": "ampSEI", - "baseDenom": "ampSEI", - "isNative": false + "decimals": 18, + "symbol": "axlFIL", + "baseDenom": "axlFIL", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Popeye", - "denom": "ibc/7E4EA08D14451712CC921456E2FBA57B54D4CA80AE9E471FAAF16610029B9145", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/popeye.png", - "symbol": "POPEYE", - "decimals": 6, + "name": "Wrapped FTM", + "denom": "ibc/31E8DDA49D53535F358B29CFCBED1B9224DAAFE82788C0477930DCDE231DA878", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/fantom/images/ftm.png", + "symbol": "WFTM", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "7E4EA08D14451712CC921456E2FBA57B54D4CA80AE9E471FAAF16610029B9145", + "hash": "31E8DDA49D53535F358B29CFCBED1B9224DAAFE82788C0477930DCDE231DA878", "path": "", "channelId": "", - "decimals": 6, - "symbol": "POPEYE", - "baseDenom": "POPEYE", - "isNative": false + "decimals": 18, + "symbol": "WFTM", + "baseDenom": "WFTM", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Sei", - "denom": "ibc/0D0B98E80BA0158D325074100998A78FB6EC1BF394EFF632E570A5C890ED7CC2", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/sei.png", - "symbol": "SEI", - "decimals": 6, + "name": "Wrapped Lido Staked Ether", + "denom": "ibc/1E0FC59FB8495BF927B10E9D515661494B1BBEDAA15D80E52FE2BADA64656D16", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wsteth.svg", + "symbol": "wstETH", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "0D0B98E80BA0158D325074100998A78FB6EC1BF394EFF632E570A5C890ED7CC2", + "hash": "1E0FC59FB8495BF927B10E9D515661494B1BBEDAA15D80E52FE2BADA64656D16", "path": "", "channelId": "", - "decimals": 6, - "symbol": "SEI", - "baseDenom": "SEI", - "isNative": false + "decimals": 18, + "symbol": "wstETH", + "baseDenom": "wstETH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OIN STORE OF VALUE", - "denom": "ibc/CA0B808874A9890C171944FA44B35287E9701402C732FE5B2C6371BA8113462C", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", - "symbol": "OIN", - "decimals": 6, + "name": "Wrapped liquid staked Ether 2.0 (Wormhole)", + "denom": "ibc/AF173F64492152DA94107B8AD53906589CA7B844B650EFC2FEFED371A3FA235E", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wsteth.svg", + "symbol": "wstETH", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "CA0B808874A9890C171944FA44B35287E9701402C732FE5B2C6371BA8113462C", + "hash": "AF173F64492152DA94107B8AD53906589CA7B844B650EFC2FEFED371A3FA235E", "path": "", "channelId": "", - "decimals": 6, - "symbol": "OIN", - "baseDenom": "OIN", - "isNative": false + "decimals": 8, + "symbol": "wstETH", + "baseDenom": "wstETH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OIN STORE OF VALUE", - "denom": "ibc/09A596CF997F575F2D1E150DFECD7AAE4B44B119F4E45E0A2532EEBD1F8795FE", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", - "symbol": "OIN", - "decimals": 6, + "name": "Wrapped Matic", + "denom": "ibc/7E23647941230DA0AB4ED10F599647D9BE34E1C991D0DA032B5A1522941EBA73", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/polygon/images/wmatic.png", + "symbol": "WMATIC", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "09A596CF997F575F2D1E150DFECD7AAE4B44B119F4E45E0A2532EEBD1F8795FE", + "hash": "7E23647941230DA0AB4ED10F599647D9BE34E1C991D0DA032B5A1522941EBA73", "path": "", "channelId": "", - "decimals": 6, - "symbol": "OIN", - "baseDenom": "OIN", - "isNative": false + "decimals": 18, + "symbol": "WMATIC", + "baseDenom": "WMATIC", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Amplified SEI", - "denom": "ibc/E175256127F32A27BB1FF863D15D8C4BB14968ED069B6A292723D485A33514A2", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/ampsei.svg", - "symbol": "ampSEI", - "decimals": 6, + "name": "Wrapped Moonbeam", + "denom": "ibc/8FF72FB47F07B4AFA8649500A168683BEFCB9EE164BD331FA597D26224D51055", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/moonbeam/images/glmr.png", + "symbol": "WGLMR", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "E175256127F32A27BB1FF863D15D8C4BB14968ED069B6A292723D485A33514A2", + "hash": "8FF72FB47F07B4AFA8649500A168683BEFCB9EE164BD331FA597D26224D51055", "path": "", "channelId": "", - "decimals": 6, - "symbol": "ampSEI", - "baseDenom": "ampSEI", - "isNative": false + "decimals": 18, + "symbol": "WGLMR", + "baseDenom": "WGLMR", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Popeye", - "denom": "ibc/833095AF2D530639121F8A07E24E5D02921CA19FF3192D082E9C80210515716C", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/popeye.png", - "symbol": "POPEYE", - "decimals": 6, + "name": "Wrapped Polkadot", + "denom": "ibc/624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/polkadot/images/dot.png", + "symbol": "DOT", + "decimals": 10, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "833095AF2D530639121F8A07E24E5D02921CA19FF3192D082E9C80210515716C", + "hash": "624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4", "path": "", "channelId": "", - "decimals": 6, - "symbol": "POPEYE", - "baseDenom": "POPEYE", - "isNative": false + "decimals": 10, + "symbol": "DOT", + "baseDenom": "DOT", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Sei", - "denom": "ibc/BCE43BA530FBE35282B62C1E1EA4AD1F51522C61D40FB761005E1A02F18E0E58", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/sei.png", - "symbol": "SEI", - "decimals": 6, + "name": "Wrapped SOL (Wormhole)", + "denom": "ibc/A8B0B746B5AB736C2D8577259B510D56B8AF598008F68041E3D634BCDE72BE97", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/solana/images/sol.svg", + "symbol": "SOL", + "decimals": 8, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "BCE43BA530FBE35282B62C1E1EA4AD1F51522C61D40FB761005E1A02F18E0E58", + "hash": "A8B0B746B5AB736C2D8577259B510D56B8AF598008F68041E3D634BCDE72BE97", "path": "", "channelId": "", - "decimals": 6, - "symbol": "SEI", - "baseDenom": "SEI", - "isNative": false + "decimals": 8, + "symbol": "SOL", + "baseDenom": "SOL", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OIN STORE OF VALUE", - "denom": "ibc/486A0C3A5D9F8389FE01CF2656DF03DB119BC71C4164212F3541DD538A968B66", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", - "symbol": "OIN", - "decimals": 6, + "name": "wstETH", + "denom": "ibc/E4BDC3A9935959C715961FFC6C12159EAD8FA4A5955D069EE19D0423FF810C6E", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/wsteth.svg", + "symbol": "wstETH", + "decimals": 18, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "486A0C3A5D9F8389FE01CF2656DF03DB119BC71C4164212F3541DD538A968B66", + "hash": "E4BDC3A9935959C715961FFC6C12159EAD8FA4A5955D069EE19D0423FF810C6E", "path": "", "channelId": "", - "decimals": 6, - "symbol": "OIN", - "baseDenom": "OIN", - "isNative": false + "decimals": 18, + "symbol": "wstETH", + "baseDenom": "wstETH", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "OIN STORE OF VALUE", - "denom": "ibc/ABF6109CA87727E3945C2DB5EA17D819D57041A91BFB0BC73320AFE097C230F5", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/oin.png", - "symbol": "OIN", + "name": "wtf", + "denom": "ibc/3C788BF2FC1269D66CA3E339634E14856A90336C5562E183EFC9B743C343BC31", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/neutron/images/WTF.png", + "symbol": "WTF", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "ABF6109CA87727E3945C2DB5EA17D819D57041A91BFB0BC73320AFE097C230F5", + "hash": "3C788BF2FC1269D66CA3E339634E14856A90336C5562E183EFC9B743C343BC31", "path": "", "channelId": "", "decimals": 6, - "symbol": "OIN", - "baseDenom": "OIN", - "isNative": false + "symbol": "WTF", + "baseDenom": "WTF", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "ERIS Amplified SEI", - "denom": "ibc/9774771543D917853B9A9D108885C223DFF03ABC7BD39AD2783CA4E1F58CDC6E", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/ampsei.svg", - "symbol": "ampSEI", + "name": "xseul", + "denom": "ibc/CC381CB977B79239696AC471777FEC12816B9EF7F601EE2DAF17C00F51C25F6F", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/terra2/images/xseul.png", + "symbol": "xSEUL", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "9774771543D917853B9A9D108885C223DFF03ABC7BD39AD2783CA4E1F58CDC6E", + "hash": "CC381CB977B79239696AC471777FEC12816B9EF7F601EE2DAF17C00F51C25F6F", "path": "", "channelId": "", "decimals": 6, - "symbol": "ampSEI", - "baseDenom": "ampSEI", - "isNative": false + "symbol": "xSEUL", + "baseDenom": "xSEUL", + "isNative": false, + "tokenType": "ibc" } }, { - "name": "Popeye", - "denom": "ibc/C35A94A42FEDA8E01903CD7A78FB33AE60B2064C0007BF2E4FD5A6368BDBC546", - "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/sei/images/popeye.png", - "symbol": "POPEYE", + "name": "Yieldmos Coin", + "denom": "ibc/26AB5A32422A0E9BC3B7FFCCF57CB30F3E8AEEA0F1705D64DCF4D8FA3DD71B9D", + "logo": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ymos.png", + "symbol": "YMOS", "decimals": 6, "coinGeckoId": "", "tokenType": "ibc", "tokenVerification": "external", "ibc": { - "hash": "C35A94A42FEDA8E01903CD7A78FB33AE60B2064C0007BF2E4FD5A6368BDBC546", + "hash": "26AB5A32422A0E9BC3B7FFCCF57CB30F3E8AEEA0F1705D64DCF4D8FA3DD71B9D", "path": "", "channelId": "", "decimals": 6, - "symbol": "POPEYE", - "baseDenom": "POPEYE", - "isNative": false + "symbol": "YMOS", + "baseDenom": "YMOS", + "isNative": false, + "tokenType": "ibc" } } ] \ No newline at end of file diff --git a/packages/sdk-ui-ts/src/services/ibc/tokens.ts b/packages/sdk-ui-ts/src/services/ibc/tokens.ts index 281233417..1adb4d2cf 100644 --- a/packages/sdk-ui-ts/src/services/ibc/tokens.ts +++ b/packages/sdk-ui-ts/src/services/ibc/tokens.ts @@ -17,31 +17,35 @@ type IbcTokenMetadata = { isTrading: boolean } -const ibcTokenMetadataApi = new HttpRestClient('https://api.tfm.com/api/v1/') +const ibcTokenMetadataApi = new HttpRestClient('https://api.tfm.com/api/v1/', { + timeout: 2000, +}) const TOKEN_METADATA_PATH = 'ibc/chain/injective-1/tokens' function ibcTokenMetadataToToken( ibcTokenMetadata: IbcTokenMetadata[], ): Token[] { - return ibcTokenMetadata.map((token) => { + return ibcTokenMetadata.map((metadata) => { return { - name: token.name || 'Unknown', - denom: token.contractAddr || '', - logo: token.imageUrl || 'unknown.png', - symbol: token.symbol || 'Unknown', - decimals: token.decimals || 18, + name: metadata.name || 'Unknown', + denom: metadata.contractAddr || '', + logo: metadata.imageUrl || 'unknown.png', + symbol: metadata.symbol || 'Unknown', + decimals: metadata.decimals || 18, coinGeckoId: '', tokenType: TokenType.Ibc, tokenVerification: TokenVerification.External, + ibc: { - hash: (token.contractAddr || '').replace('ibc/', ''), + hash: (metadata.contractAddr || '').replace('ibc/', ''), path: '', channelId: '', - decimals: token.decimals || 18, - symbol: token.symbol || 'Unknown', - baseDenom: token.symbol || 'Unknown', + decimals: metadata.decimals || 18, + symbol: metadata.symbol || 'Unknown', + baseDenom: metadata.symbol || 'Unknown', isNative: false, + tokenType: TokenType.Ibc, }, } }) diff --git a/packages/sdk-ui-ts/src/services/index.ts b/packages/sdk-ui-ts/src/services/index.ts index d8a050ed5..af88499c0 100644 --- a/packages/sdk-ui-ts/src/services/index.ts +++ b/packages/sdk-ui-ts/src/services/index.ts @@ -1,3 +1,4 @@ export * from './web3' export * from './gas' export * from './nameservice' +export * from './bonfida' diff --git a/packages/sdk-ui-ts/src/services/nameservice/InjNameService.ts b/packages/sdk-ui-ts/src/services/nameservice/InjNameService.ts index 5400ff62b..738258247 100644 --- a/packages/sdk-ui-ts/src/services/nameservice/InjNameService.ts +++ b/packages/sdk-ui-ts/src/services/nameservice/InjNameService.ts @@ -3,17 +3,17 @@ import { Network, NetworkEndpoints, getNetworkEndpoints, + getInjNameRegistryContractForNetwork, + getInjNameReverseResolverContractForNetwork, } from '@injectivelabs/networks' import { nameToNode, - normalizeName, QueryInjName, + normalizeName, ChainGrpcWasmApi, QueryResolverAddress, QueryInjectiveAddress, InjNameServiceQueryTransformer, - INJ_NAME_REGISTRY_CONTRACT_BY_NETWORK, - INJ_NAME_REVERSE_RESOLVER_CONTRACT_BY_NETWORK, } from '@injectivelabs/sdk-ts' export class InjNameService { @@ -24,15 +24,15 @@ export class InjNameService { private reverseResolverAddress: string constructor( - network: Network = Network.Testnet, + network: Network = Network.MainnetSentry, endpoints?: NetworkEndpoints, ) { const networkEndpoints = endpoints || getNetworkEndpoints(network) this.client = new ChainGrpcWasmApi(networkEndpoints.grpc) - this.registryAddress = INJ_NAME_REGISTRY_CONTRACT_BY_NETWORK[network] + this.registryAddress = getInjNameRegistryContractForNetwork(network) this.reverseResolverAddress = - INJ_NAME_REVERSE_RESOLVER_CONTRACT_BY_NETWORK[network] + getInjNameReverseResolverContractForNetwork(network) } private async fetchResolverAddress(node: number[]) { diff --git a/packages/sdk-ui-ts/src/token/TokenService.ts b/packages/sdk-ui-ts/src/token/TokenService.ts index 9fcfa94c3..d4ddfc9da 100644 --- a/packages/sdk-ui-ts/src/token/TokenService.ts +++ b/packages/sdk-ui-ts/src/token/TokenService.ts @@ -186,6 +186,35 @@ export class TokenService { ? `${baseToken.symbol.toLowerCase()}-${quoteToken.symbol.toLowerCase()}` : market.ticker.replace('/', '-').replace(' ', '-').toLowerCase() + // We have wrong ticker on chain for APP/USDT and ANDR/USDT market + if ( + baseToken?.symbol === 'APP' && + quoteToken?.symbol === 'USDT' && + market.ticker === 'APP/INJ' + ) { + return { + ...market, + slug: 'app-usdt', + ticker: 'APP/USDT', + baseToken, + quoteToken, + } as UiBaseSpotMarketWithToken + } + + if ( + baseToken?.symbol === 'ANDR' && + quoteToken?.symbol === 'USDT' && + market.ticker === 'ANDR/INJ' + ) { + return { + ...market, + slug: 'andr-usdt', + ticker: 'ANDR/USDT', + baseToken, + quoteToken, + } as UiBaseSpotMarketWithToken + } + return { ...market, slug, @@ -216,7 +245,10 @@ export class TokenService { .replaceAll(' ', '-') .toLowerCase() const [baseTokenSymbol] = slug.split('-') - const baseToken = await this.denomClient.getDenomToken(baseTokenSymbol) + const baseToken = await this.denomClient.getTokenBySymbol( + baseTokenSymbol, + ) + const quoteToken = await this.denomClient.getDenomToken(market.quoteDenom) return { diff --git a/packages/sdk-ui-ts/src/types/bridge.ts b/packages/sdk-ui-ts/src/types/bridge.ts index 5fb1f5a6e..0bdc749c6 100644 --- a/packages/sdk-ui-ts/src/types/bridge.ts +++ b/packages/sdk-ui-ts/src/types/bridge.ts @@ -35,6 +35,7 @@ export enum BridgingNetwork { Celestia = 'celestia', Migaloo = 'migaloo', Kujira = 'kujira', + Andromeda = 'andromeda', } export const MintScanExplorerUrl = { diff --git a/packages/sdk-ui-ts/src/utils/alchemy.ts b/packages/sdk-ui-ts/src/utils/alchemy.ts index d96b5234d..0ac183813 100644 --- a/packages/sdk-ui-ts/src/utils/alchemy.ts +++ b/packages/sdk-ui-ts/src/utils/alchemy.ts @@ -30,7 +30,6 @@ export const getTokenFromAlchemyTokenMetaResponse = ( decimals: response.decimals || 18, address: denom.replace('peggy', ''), symbol: response.symbol || response.name || 'Unknown', - tokenType: TokenType.Erc20, }, } as Token } diff --git a/packages/sdk-ui-ts/src/utils/bridge.ts b/packages/sdk-ui-ts/src/utils/bridge.ts index d2b9ac8b8..ee6bb4f93 100644 --- a/packages/sdk-ui-ts/src/utils/bridge.ts +++ b/packages/sdk-ui-ts/src/utils/bridge.ts @@ -18,7 +18,7 @@ import { PEGGY_TESTNET_GRAPH_URL, } from '../constants' import { CosmosChainId, TestnetCosmosChainId } from '@injectivelabs/ts-types' -import { Token, tokenMetaUtils, TokenType } from '@injectivelabs/token-metadata' +import { getTokenFromMeta, Token, TokenMetaBase, tokenMetaUtils, TokenType } from '@injectivelabs/token-metadata' import { TokenMetadataResponse } from 'alchemy-sdk' export const InProgressStates = [ @@ -53,6 +53,7 @@ export const KeplrNetworks = [ BridgingNetwork.Celestia, BridgingNetwork.Migaloo, BridgingNetwork.Kujira, + BridgingNetwork.Andromeda, ] export const LeapNetworks = [ @@ -109,6 +110,7 @@ export const CosmosNetworks = [ BridgingNetwork.Celestia, BridgingNetwork.Migaloo, BridgingNetwork.Kujira, + BridgingNetwork.Andromeda, ] export const EvmWormholeNetworks = [ @@ -261,7 +263,9 @@ export const tokenDenomsPerNetwork = [ }, { network: BridgingNetwork.Solana, - denoms: [], + denoms: [ + 'ibc/A8B0B746B5AB736C2D8577259B510D56B8AF598008F68041E3D634BCDE72BE97', + ], symbols: ['SOL', 'PYTH'], }, { @@ -309,202 +313,184 @@ export const tokenDenomsPerNetwork = [ ], symbols: ['ukuji'], }, + { + network: BridgingNetwork.Andromeda, + denoms: [ + 'ibc/61FA42C3F0B0F8768ED2CE380EDD3BE0E4CB7E67688F81F70DE9ECF5F8684E1E', + ], + symbols: ['uandr'], + }, ] as NetworkConfig[] export const cosmosChainTokenMetaMap = { [CosmosChainId.Cosmoshub]: { - ...tokenMetaUtils.getMetaBySymbol('ATOM'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('ATOM') as TokenMetaBase), denom: 'ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9', }, [CosmosChainId.Osmosis]: [ { - ...tokenMetaUtils.getMetaBySymbol('OSMO'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('OSMO') as TokenMetaBase), denom: 'ibc/92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333', }, { - ...tokenMetaUtils.getMetaBySymbol('INJ'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('INJ') as TokenMetaBase), denom: 'inj', }, ], [CosmosChainId.Terra]: [ { - ...tokenMetaUtils.getMetaBySymbol('LUNA'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('LUNA') as TokenMetaBase), denom: 'ibc/B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395', }, { - ...tokenMetaUtils.getMetaBySymbol('UST'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('UST') as TokenMetaBase), denom: 'ibc/B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C', }, ], [CosmosChainId.Injective]: { - ...tokenMetaUtils.getMetaBySymbol('INJ'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('INJ') as TokenMetaBase), denom: 'inj', }, [CosmosChainId.Chihuahua]: { - ...tokenMetaUtils.getMetaBySymbol('HUAHUA'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('HUAHUA') as TokenMetaBase), denom: 'ibc/E7807A46C0B7B44B350DA58F51F278881B863EC4DCA94635DAB39E52C30766CB', }, [CosmosChainId.Juno]: { - ...tokenMetaUtils.getMetaBySymbol('JUNO'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('JUNO') as TokenMetaBase), denom: 'ibc/D50E26996253EBAA8C684B9CD653FE2F7665D7BDDCA3D48D5E1378CF6334F211', }, [CosmosChainId.Axelar]: [ { - ...tokenMetaUtils.getMetaBySymbol('AXL'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('AXL') as TokenMetaBase), denom: 'ibc/B68C1D2682A8B69E20BB921E34C6A3A2B6D1E13E3E8C0092E373826F546DEE65', }, { - ...tokenMetaUtils.getMetaBySymbol('DOT'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('DOT') as TokenMetaBase), denom: 'dot-planck', }, ], [CosmosChainId.Evmos]: [ { - ...tokenMetaUtils.getMetaBySymbol('EVMOS'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('EVMOS') as TokenMetaBase), denom: 'ibc/16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821', }, { - ...tokenMetaUtils.getMetaBySymbol('NEOK'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('NEOK') as TokenMetaBase), denom: 'ibc/F6CC233E5C0EA36B1F74AB1AF98471A2D6A80E2542856639703E908B4D93E7C4', }, ], [CosmosChainId.Persistence]: { - ...tokenMetaUtils.getMetaBySymbol('XPRT'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('XPRT') as TokenMetaBase), denom: 'ibc/B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB', }, [CosmosChainId.Secret]: { - ...tokenMetaUtils.getMetaBySymbol('SCRT'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('SCRT') as TokenMetaBase), denom: 'ibc/0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A', }, [CosmosChainId.Stride]: [ { - ...tokenMetaUtils.getMetaBySymbol('STRD'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('STRD') as TokenMetaBase), denom: 'ibc/3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25', }, { - ...tokenMetaUtils.getMetaBySymbol('INJ'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('INJ') as TokenMetaBase), denom: 'inj', }, { - ...tokenMetaUtils.getMetaBySymbol('STINJ'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('STINJ') as TokenMetaBase), denom: 'ibc/AC87717EA002B0123B10A05063E69BCA274BA2C44D842AEEB41558D2856DCE93', }, ], [CosmosChainId.Crescent]: [ { - ...tokenMetaUtils.getMetaBySymbol('CRE'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('CRE') as TokenMetaBase), denom: 'ibc/3A6DD3358D9F7ADD18CDE79BA10B400511A5DE4AE2C037D7C9639B52ADAF35C6', }, { - ...tokenMetaUtils.getMetaBySymbol('INJ'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('INJ') as TokenMetaBase), denom: 'inj', }, ], [CosmosChainId.Sommelier]: { - ...tokenMetaUtils.getMetaBySymbol('SOMM'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('SOMM') as TokenMetaBase), denom: 'ibc/34346A60A95EB030D62D6F5BDD4B745BE18E8A693372A8A347D5D53DBBB1328B', }, [CosmosChainId.Canto]: { - ...tokenMetaUtils.getMetaBySymbol('CANTO'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('CANTO') as TokenMetaBase), denom: 'ibc/D91A2C4EE7CD86BBAFCE0FA44A60DDD9AFBB7EEB5B2D46C0984DEBCC6FEDFAE8', }, [CosmosChainId.Kava]: [ { - ...tokenMetaUtils.getMetaBySymbol('KAVA'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('KAVA') as TokenMetaBase), denom: 'ibc/57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205', }, { - ...tokenMetaUtils.getMetaBySymbol('USDTkv'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('USDTkv') as TokenMetaBase), denom: 'ibc/4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB', }, ], [CosmosChainId.Oraichain]: [ { - ...tokenMetaUtils.getMetaBySymbol('ORAI'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('ORAI') as TokenMetaBase), denom: 'ibc/C20C0A822BD22B2CEF0D067400FCCFB6FAEEE9E91D360B4E0725BD522302D565', }, ], [TestnetCosmosChainId.Cosmoshub]: { - ...tokenMetaUtils.getMetaBySymbol('ATOM'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('ATOM') as TokenMetaBase), // TODO: change when IBC connection established denom: 'ibc/48BC9C6ACBDFC1EBA034F1859245D53EA4BF74147189D66F27C23BF966335DFB', }, [TestnetCosmosChainId.Injective]: { - ...tokenMetaUtils.getMetaBySymbol('INJ'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('INJ') as TokenMetaBase), denom: 'inj', }, [CosmosChainId.Noble]: { - ...tokenMetaUtils.getMetaBySymbol('USDCnb'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('USDCnb') as TokenMetaBase), denom: 'ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E', }, [CosmosChainId.Celestia]: { - ...tokenMetaUtils.getMetaBySymbol('TIA'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('TIA') as TokenMetaBase), denom: 'ibc/F51BB221BAA275F2EBF654F70B005627D7E713AFFD6D86AFD1E43CAA886149F4', }, [CosmosChainId.Migaloo]: [ { - ...tokenMetaUtils.getMetaBySymbol('WHALE'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('WHALE') as TokenMetaBase), denom: 'ibc/D6E6A20ABDD600742D22464340A7701558027759CE14D12590F8EA869CCCF445', }, ], [CosmosChainId.Kujira]: { - ...tokenMetaUtils.getMetaBySymbol('KUJI'), - tokenType: TokenType.Ibc, + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('KUJI') as TokenMetaBase), denom: 'ibc/9A115B56E769B92621FFF90567E2D60EFD146E86E867491DB69EEDA9ADC36204', }, + [CosmosChainId.Andromeda]: { + ...getTokenFromMeta(tokenMetaUtils.getMetaBySymbol('ANDR') as TokenMetaBase), + denom: + 'ibc/61FA42C3F0B0F8768ED2CE380EDD3BE0E4CB7E67688F81F70DE9ECF5F8684E1E', + }, } as Record export const ibcHashToNativeInjPerNetwork = { @@ -550,11 +536,15 @@ export const getCosmosExplorerUrl = ( network: Network, ): string => { if (bridgingNetwork === BridgingNetwork.Oraichain) { - return 'https://scan.orai.io/' + return 'https://scan.orai.io' } if (bridgingNetwork === BridgingNetwork.Migaloo) { - return 'https://migaloo.explorers.guru/' + return 'https://migaloo.explorers.guru' + } + + if (bridgingNetwork === BridgingNetwork.Andromeda) { + return 'https://ping.wildsage.io/andromeda' } const mintScanNetworkUrl = MintScanExplorerUrl[bridgingNetwork] @@ -739,6 +729,10 @@ export const getNetworkFromAddress = (address: string): BridgingNetwork => { return BridgingNetwork.Kujira } + if (address.startsWith('andr')) { + return BridgingNetwork.Andromeda + } + return BridgingNetwork.Injective } diff --git a/packages/sdk-ui-ts/src/utils/cw20.ts b/packages/sdk-ui-ts/src/utils/cw20.ts index 9448a61dc..70f6afb5a 100644 --- a/packages/sdk-ui-ts/src/utils/cw20.ts +++ b/packages/sdk-ui-ts/src/utils/cw20.ts @@ -28,7 +28,6 @@ export const getTokenFromContractStateResponse = ( decimals: tokenInfo.decimals || 18, address: contractAddress, symbol: tokenInfo.symbol || tokenInfo.name || 'Unknown', - tokenType: TokenType.Cw20, }, } as Token } @@ -61,7 +60,6 @@ export const getTokenFromCw20ContractInfo = ( response.cw20_metadata.token_info.symbol || response.cw20_metadata.token_info.name || 'Unknown', - tokenType: TokenType.Cw20, }, } as Token } diff --git a/packages/sdk-ui-ts/src/utils/factory.ts b/packages/sdk-ui-ts/src/utils/factory.ts index f357484bb..29bab3d2d 100644 --- a/packages/sdk-ui-ts/src/utils/factory.ts +++ b/packages/sdk-ui-ts/src/utils/factory.ts @@ -2,13 +2,13 @@ import { Metadata } from '@injectivelabs/sdk-ts' import { TokenType, TokenVerification, - type FactoryToken, + type TokenFactoryToken, } from '@injectivelabs/token-metadata' export const getTokenFromDenomsMetadata = ( denom: string, response: Metadata, -): FactoryToken => { +): TokenFactoryToken => { const [denomUnit] = [...response.denomUnits].sort( (u1, u2) => u2.exponent - u1.exponent, ) @@ -24,5 +24,11 @@ export const getTokenFromDenomsMetadata = ( coinGeckoId: '', tokenType: TokenType.TokenFactory, tokenVerification: TokenVerification.Internal, - } as FactoryToken + + tokenFactory: { + creator: '', + decimals: denomUnit.exponent || 0, + symbol: response.symbol || response.name || 'Unknown', + } + } as TokenFactoryToken } diff --git a/packages/sdk-ui-ts/src/utils/helpers.ts b/packages/sdk-ui-ts/src/utils/helpers.ts index 87509dad1..64b95f175 100644 --- a/packages/sdk-ui-ts/src/utils/helpers.ts +++ b/packages/sdk-ui-ts/src/utils/helpers.ts @@ -13,6 +13,11 @@ export const getTokenLogoWithVendorPathPrefix = (image: string) => { return image } + // not supported yet + if (image.includes('ipfs')) { + return path.join('/', 'vendor', '@injectivelabs', 'token-metadata', 'unknown.png') + } + if (image.includes('bridgingNetworks')) { return image } diff --git a/packages/sdk-ui-ts/src/utils/mappings.spec.ts b/packages/sdk-ui-ts/src/utils/mappings.spec.ts index f8e066c8f..f6542a6a6 100644 --- a/packages/sdk-ui-ts/src/utils/mappings.spec.ts +++ b/packages/sdk-ui-ts/src/utils/mappings.spec.ts @@ -7,7 +7,7 @@ describe('validator logos helper function', () => { const validatorLogo = getValidatorLogoWithVendorPathPrefix(address) expect(validatorLogo).toMatch( - '/vendor/@injectivelabs/sdk-ui-ts/injvaloper10zxm0rklrnurd999xgr4ss8v2q9qsjlfhhk9mk.webp', + '/vendor/@injectivelabs/sdk-ui-ts/injvaloper10zxm0rklrnurd999xgr4ss8v2q9qsjlfhhk9mk.jpg', ) }) @@ -25,7 +25,7 @@ describe('validator logos helper function', () => { const validatorLogo = getValidatorLogoWithVendorPathPrefix(address) expect(validatorLogo).toMatch( - '/vendor/@injectivelabs/sdk-ui-ts/injective.webp', + '/vendor/@injectivelabs/sdk-ui-ts/unknown.png', ) }) }) diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper13p7suhhxrd6rrj6kka39sadklartjpekm9hes8.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper13p7suhhxrd6rrj6kka39sadklartjpekm9hes8.jpg new file mode 100644 index 000000000..be5e4bac1 Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper13p7suhhxrd6rrj6kka39sadklartjpekm9hes8.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper155yk4wfn0xqye80exlsr6hu4qdfsvsgwg3jckk.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper155yk4wfn0xqye80exlsr6hu4qdfsvsgwg3jckk.jpg index d23149ceb..93a530cf2 100644 Binary files a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper155yk4wfn0xqye80exlsr6hu4qdfsvsgwg3jckk.jpg and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper155yk4wfn0xqye80exlsr6hu4qdfsvsgwg3jckk.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper18cyc7wxru3g9de3emwy9pdh5x0vevxp3p2623y.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper18cyc7wxru3g9de3emwy9pdh5x0vevxp3p2623y.jpg new file mode 100644 index 000000000..be5e4bac1 Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper18cyc7wxru3g9de3emwy9pdh5x0vevxp3p2623y.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper195htudzwkmgn64wvyp7e474ul9t62ws9sr3rhn.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper195htudzwkmgn64wvyp7e474ul9t62ws9sr3rhn.jpg new file mode 100644 index 000000000..f5e99da16 Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper195htudzwkmgn64wvyp7e474ul9t62ws9sr3rhn.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1fa558ytfnekl2zlmv7zpupam7zrcj2wkpqt90x.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1fa558ytfnekl2zlmv7zpupam7zrcj2wkpqt90x.jpg new file mode 100644 index 000000000..c67e939e2 Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1fa558ytfnekl2zlmv7zpupam7zrcj2wkpqt90x.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1kywsemgukghp6gah7yw6hmly9zc03z0479mzdn.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1kywsemgukghp6gah7yw6hmly9zc03z0479mzdn.jpg new file mode 100644 index 000000000..2f95bd93a Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1kywsemgukghp6gah7yw6hmly9zc03z0479mzdn.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1nc9ppgynj4fxqlsxq62sh4zfvf59la6rkjy734.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1nc9ppgynj4fxqlsxq62sh4zfvf59la6rkjy734.jpg new file mode 100644 index 000000000..3f38e497e Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1nc9ppgynj4fxqlsxq62sh4zfvf59la6rkjy734.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1nq37nq79w2j76xj8qhjzcn6vh0wlx0qk2r7zm6.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1nq37nq79w2j76xj8qhjzcn6vh0wlx0qk2r7zm6.jpg index 53d50325d..4a824f5ed 100644 Binary files a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1nq37nq79w2j76xj8qhjzcn6vh0wlx0qk2r7zm6.jpg and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1nq37nq79w2j76xj8qhjzcn6vh0wlx0qk2r7zm6.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1ntn4j2lsu3k60g8xj9pqshqvdj2q5tygyvczpy.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1ntn4j2lsu3k60g8xj9pqshqvdj2q5tygyvczpy.jpg new file mode 100644 index 000000000..1c95076de Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1ntn4j2lsu3k60g8xj9pqshqvdj2q5tygyvczpy.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1s28qvpfpq3525ep0surypnmwkfy8d2n237pnc4.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1s28qvpfpq3525ep0surypnmwkfy8d2n237pnc4.jpg new file mode 100644 index 000000000..ada8ea3de Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1s28qvpfpq3525ep0surypnmwkfy8d2n237pnc4.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1v2wjf06nutm9phvh5hgc3twpst9q50y4f8ckd5.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1v2wjf06nutm9phvh5hgc3twpst9q50y4f8ckd5.jpg new file mode 100644 index 000000000..9378e0cce Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1v2wjf06nutm9phvh5hgc3twpst9q50y4f8ckd5.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1y4pfpkwpy6myskp7pne256k6smh2rjta694yq5.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1y4pfpkwpy6myskp7pne256k6smh2rjta694yq5.jpg new file mode 100644 index 000000000..325408347 Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1y4pfpkwpy6myskp7pne256k6smh2rjta694yq5.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1yljq5pdnx84kkg30jfmz6ddu4eyp7twyp4z40f.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1yljq5pdnx84kkg30jfmz6ddu4eyp7twyp4z40f.jpg new file mode 100644 index 000000000..9b33511b7 Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1yljq5pdnx84kkg30jfmz6ddu4eyp7twyp4z40f.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1z4z0erxx80cex9kgrk5ynk6gczs0qvale6ae48.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1z4z0erxx80cex9kgrk5ynk6gczs0qvale6ae48.jpg new file mode 100644 index 000000000..31e147b6c Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1z4z0erxx80cex9kgrk5ynk6gczs0qvale6ae48.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1z8rcledwadkcyykvn20zxr032fnv787vv46hlg.jpg b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1z8rcledwadkcyykvn20zxr032fnv787vv46hlg.jpg new file mode 100644 index 000000000..21695e958 Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/injvaloper1z8rcledwadkcyykvn20zxr032fnv787vv46hlg.jpg differ diff --git a/packages/sdk-ui-ts/src/validators-logo/images/unknown.png b/packages/sdk-ui-ts/src/validators-logo/images/unknown.png new file mode 100644 index 000000000..7f18be176 Binary files /dev/null and b/packages/sdk-ui-ts/src/validators-logo/images/unknown.png differ diff --git a/packages/sdk-ui-ts/src/validators-logo/index.ts b/packages/sdk-ui-ts/src/validators-logo/index.ts index 24dd98bd1..2a8008e18 100644 --- a/packages/sdk-ui-ts/src/validators-logo/index.ts +++ b/packages/sdk-ui-ts/src/validators-logo/index.ts @@ -10,7 +10,7 @@ export interface ValidatorMap { [validatorAddress: string]: string | undefined } -const endpoints = getNetworkEndpoints(Network.MainnetSentry) +const endpoints = getNetworkEndpoints(Network.Mainnet) const chainGrpcStakingApi = new ChainGrpcStakingApi(endpoints.grpc) const keybaseApi = new HttpRestClient('https://keybase.io/_/api/1.0/') diff --git a/packages/sdk-ui-ts/src/validators-logo/mappings.json b/packages/sdk-ui-ts/src/validators-logo/mappings.json index 4e786890e..35ff270ba 100644 --- a/packages/sdk-ui-ts/src/validators-logo/mappings.json +++ b/packages/sdk-ui-ts/src/validators-logo/mappings.json @@ -81,5 +81,18 @@ "injvaloper13gq4msx4z03ye5gef35yjz9nqtg6ja2yqj6csq": "injvaloper13gq4msx4z03ye5gef35yjz9nqtg6ja2yqj6csq.jpg", "injvaloper1hq35mlvs2z6j9vz743fyj8krk4rfm929mus55p": "injvaloper1hq35mlvs2z6j9vz743fyj8krk4rfm929mus55p.jpg", "injvaloper1e8gk2jyfn0vwr3ewk02lfjluvxhxsd7k9qn7nx": "injvaloper1e8gk2jyfn0vwr3ewk02lfjluvxhxsd7k9qn7nx.jpg", - "injvaloper1an6hyf4h2au53aa3tuy6yjjr4edsd2xvg5kc2p": "injvaloper1an6hyf4h2au53aa3tuy6yjjr4edsd2xvg5kc2p.jpg" -} + "injvaloper1an6hyf4h2au53aa3tuy6yjjr4edsd2xvg5kc2p": "injvaloper1an6hyf4h2au53aa3tuy6yjjr4edsd2xvg5kc2p.jpg", + "injvaloper1z8rcledwadkcyykvn20zxr032fnv787vv46hlg": "injvaloper1z8rcledwadkcyykvn20zxr032fnv787vv46hlg.jpg", + "injvaloper1z4z0erxx80cex9kgrk5ynk6gczs0qvale6ae48": "injvaloper1z4z0erxx80cex9kgrk5ynk6gczs0qvale6ae48.jpg", + "injvaloper1y4pfpkwpy6myskp7pne256k6smh2rjta694yq5": "injvaloper1y4pfpkwpy6myskp7pne256k6smh2rjta694yq5.jpg", + "injvaloper18cyc7wxru3g9de3emwy9pdh5x0vevxp3p2623y": "injvaloper18cyc7wxru3g9de3emwy9pdh5x0vevxp3p2623y.jpg", + "injvaloper1fa558ytfnekl2zlmv7zpupam7zrcj2wkpqt90x": "injvaloper1fa558ytfnekl2zlmv7zpupam7zrcj2wkpqt90x.jpg", + "injvaloper1s28qvpfpq3525ep0surypnmwkfy8d2n237pnc4": "injvaloper1s28qvpfpq3525ep0surypnmwkfy8d2n237pnc4.jpg", + "injvaloper13p7suhhxrd6rrj6kka39sadklartjpekm9hes8": "injvaloper13p7suhhxrd6rrj6kka39sadklartjpekm9hes8.jpg", + "injvaloper1ntn4j2lsu3k60g8xj9pqshqvdj2q5tygyvczpy": "injvaloper1ntn4j2lsu3k60g8xj9pqshqvdj2q5tygyvczpy.jpg", + "injvaloper1nc9ppgynj4fxqlsxq62sh4zfvf59la6rkjy734": "injvaloper1nc9ppgynj4fxqlsxq62sh4zfvf59la6rkjy734.jpg", + "injvaloper1kywsemgukghp6gah7yw6hmly9zc03z0479mzdn": "injvaloper1kywsemgukghp6gah7yw6hmly9zc03z0479mzdn.jpg", + "injvaloper1yljq5pdnx84kkg30jfmz6ddu4eyp7twyp4z40f": "injvaloper1yljq5pdnx84kkg30jfmz6ddu4eyp7twyp4z40f.jpg", + "injvaloper195htudzwkmgn64wvyp7e474ul9t62ws9sr3rhn": "injvaloper195htudzwkmgn64wvyp7e474ul9t62ws9sr3rhn.jpg", + "injvaloper1v2wjf06nutm9phvh5hgc3twpst9q50y4f8ckd5": "injvaloper1v2wjf06nutm9phvh5hgc3twpst9q50y4f8ckd5.jpg" +} \ No newline at end of file diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index d2122ee38..4ff03fc1f 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/test-utils@1.14.4-beta.2...@injectivelabs/test-utils@1.14.4) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/test-utils + + + + + ## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/test-utils@1.14.3-beta.0...@injectivelabs/test-utils@1.14.3) (2023-11-20) **Note:** Version bump only for package @injectivelabs/test-utils diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index ef7e4e347..2423c84cc 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/test-utils", "description": "List of test-utils and helper functions that can be reused throughout Injective's projects.", - "version": "1.14.3", + "version": "1.14.4", "sideEffects": false, "author": { "name": "Bojan Angjelkoski", diff --git a/packages/token-metadata/CHANGELOG.md b/packages/token-metadata/CHANGELOG.md index 916407b2a..d012833bb 100644 --- a/packages/token-metadata/CHANGELOG.md +++ b/packages/token-metadata/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.4-beta.3...@injectivelabs/token-metadata@1.14.4) (2023-11-20) +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.8...@injectivelabs/token-metadata@1.14.10) (2024-03-03) **Note:** Version bump only for package @injectivelabs/token-metadata @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.3-beta.6...@injectivelabs/token-metadata@1.14.3) (2023-11-17) +## [1.14.8](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.7...@injectivelabs/token-metadata@1.14.8) (2024-03-03) **Note:** Version bump only for package @injectivelabs/token-metadata @@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.2-beta.9...@injectivelabs/token-metadata@1.14.2) (2023-11-07) +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.7-beta.2...@injectivelabs/token-metadata@1.14.7) (2024-03-03) **Note:** Version bump only for package @injectivelabs/token-metadata @@ -27,13 +27,36 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.1-beta.15...@injectivelabs/token-metadata@1.14.1) (2023-10-27) +## [1.14.7-beta.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.7-beta.0...@injectivelabs/token-metadata@1.14.7-beta.1) (2024-03-02) + +**Note:** Version bump only for package @injectivelabs/token-metadata + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.6-beta.45...@injectivelabs/token-metadata@1.14.6) (2024-03-01) **Note:** Version bump only for package @injectivelabs/token-metadata +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.5-beta.46...@injectivelabs/token-metadata@1.14.5) (2024-01-11) + +### Features + +- cid ([be5f93c](https://github.com/InjectiveLabs/injective-ts/commit/be5f93c4b59fc8dce07e4101b7790a645eef4edc)) +- cid ([b286316](https://github.com/InjectiveLabs/injective-ts/commit/b286316549a80ba64af9ba946d9166e1cd638fd7)) +## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.4-beta.3...@injectivelabs/token-metadata@1.14.4) (2023-11-20) +**Note:** Version bump only for package @injectivelabs/token-metadata +## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.3-beta.6...@injectivelabs/token-metadata@1.14.3) (2023-11-17) + +**Note:** Version bump only for package @injectivelabs/token-metadata + +## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.2-beta.9...@injectivelabs/token-metadata@1.14.2) (2023-11-07) + +**Note:** Version bump only for package @injectivelabs/token-metadata + +## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.1-beta.15...@injectivelabs/token-metadata@1.14.1) (2023-10-27) + +**Note:** Version bump only for package @injectivelabs/token-metadata ## [1.14.1-beta.0](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-metadata@1.14.0-beta.1...@injectivelabs/token-metadata@1.14.1-beta.0) (2023-09-23) diff --git a/packages/token-metadata/package.json b/packages/token-metadata/package.json index 1cf497b66..78fed087c 100644 --- a/packages/token-metadata/package.json +++ b/packages/token-metadata/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/token-metadata", "description": "ERC20 token metadata. Name, symbol, decimals, etc.", - "version": "1.14.5-beta.42", + "version": "1.14.11-beta.0", "sideEffects": false, "license": "Apache-2.0", "author": { @@ -32,10 +32,10 @@ "start": "node dist/index.js" }, "dependencies": { - "@injectivelabs/exceptions": "^1.14.5-beta.5", - "@injectivelabs/networks": "^1.14.5-beta.8", - "@injectivelabs/ts-types": "^1.14.5-beta.0", - "@injectivelabs/utils": "^1.14.5-beta.5", + "@injectivelabs/exceptions": "^1.14.10", + "@injectivelabs/networks": "^1.14.10", + "@injectivelabs/ts-types": "^1.14.10", + "@injectivelabs/utils": "^1.14.10", "@types/lodash.values": "^4.3.6", "copyfiles": "^2.4.1", "jsonschema": "^1.4.0", diff --git a/packages/token-metadata/src/TokenFactory.ts b/packages/token-metadata/src/TokenFactory.ts index 664d61bf1..148b51055 100644 --- a/packages/token-metadata/src/TokenFactory.ts +++ b/packages/token-metadata/src/TokenFactory.ts @@ -1,7 +1,6 @@ import { Network, isTestnet } from '@injectivelabs/networks' import { GeneralException } from '@injectivelabs/exceptions' import { INJ_DENOM } from '@injectivelabs/utils' -import { TokenInfo } from './TokenInfo' import { TokenMetaUtils } from './TokenMetaUtils' import { getTokensBySymbolForDevnet, @@ -9,9 +8,13 @@ import { getTokensBySymbolForDevnet2, getTokensBySymbolForTestnet, } from './tokens/network' -import { Token, TokenMeta, TokenType } from './types' +import { Token, TokenMetaBase } from './types' import tokensBySymbol from './tokens/tokens' -import { getTokenFromMeta, isCw20ContractAddress } from './utils' +import { + getTokenFromMeta, + getTokenFromMetaIncludingIbcBaseDenoms, +} from './utils/token' +import { isCw20ContractAddress } from './utils/helpers' export class TokenFactory { public tokenMetaUtils: TokenMetaUtils @@ -22,7 +25,7 @@ export class TokenFactory { static make( network: Network = Network.Mainnet, - registry: Record = {}, + registry: Record = {}, ): TokenFactory { if (isTestnet(network)) { return new TokenFactory( @@ -71,7 +74,7 @@ export class TokenFactory { const bySymbol = this.tokenMetaUtils.getMetaBySymbol(denom) if (bySymbol) { - return getTokenFromMeta(bySymbol, denom) + return getTokenFromMetaIncludingIbcBaseDenoms(bySymbol, denom) } const byAddress = this.tokenMetaUtils.getMetaByAddress(denom) @@ -80,12 +83,6 @@ export class TokenFactory { return getTokenFromMeta(byAddress, denom) } - const byName = this.tokenMetaUtils.getMetaByName(denom) - - if (byName) { - return getTokenFromMeta(byName, denom) - } - return } @@ -115,13 +112,7 @@ export class TokenFactory { } } - toTokenInfo(denom: string): TokenInfo | undefined { - const token = this.toToken(denom) - - return token ? TokenInfo.fromToken(token) : undefined - } - - getPeggyDenomTokenMeta(denom: string): TokenMeta | undefined { + getPeggyDenomTokenMeta(denom: string): TokenMetaBase | undefined { const address = denom.startsWith('peggy') ? denom.replace('peggy', '') : denom @@ -141,7 +132,7 @@ export class TokenFactory { return this.tokenMetaUtils.getMetaByAddress(address) } - getCw20DenomTokenMeta(address: string): TokenMeta | undefined { + getCw20DenomTokenMeta(address: string): TokenMetaBase | undefined { if (!isCw20ContractAddress(address)) { throw new GeneralException( new Error(`The address ${address} is not a valid CW20 address`), @@ -151,11 +142,11 @@ export class TokenFactory { return this.tokenMetaUtils.getMetaByAddress(address) } - getIbcDenomTokenMeta(hash: string): TokenMeta | undefined { + getIbcDenomTokenMeta(hash: string): TokenMetaBase | undefined { return this.tokenMetaUtils.getMetaByHash(hash) } - getFactoryDenomTokenMeta(denom: string): TokenMeta | undefined { + getFactoryDenomTokenMeta(denom: string): TokenMetaBase | undefined { const [address] = denom.split('/').reverse() if (!address) { @@ -164,35 +155,8 @@ export class TokenFactory { ) } - let tokenMeta = - this.tokenMetaUtils.getMetaBySymbol(address) || - this.tokenMetaUtils.getMetaByName(address) - - if (isCw20ContractAddress(address)) { - tokenMeta = this.tokenMetaUtils.getMetaByAddress(address) || tokenMeta - - return tokenMeta - ? { - ...tokenMeta, - tokenType: TokenType.TokenFactory, - } - : undefined - } - - /** - * We have to prevent factory token denoms to be identified as - * normal tokens by using only the symbol, i.e - * factory/inj..../sol !== SOL token - */ - if (tokenMeta?.tokenType !== TokenType.TokenFactory) { - return undefined - } - - return tokenMeta - ? { - ...tokenMeta, - tokenType: TokenType.TokenFactory, - } - : undefined + return isCw20ContractAddress(address) + ? this.tokenMetaUtils.getMetaByAddress(address) + : this.tokenMetaUtils.getMetaByFactory(denom) } } diff --git a/packages/token-metadata/src/TokenInfo.ts b/packages/token-metadata/src/TokenInfo.ts deleted file mode 100644 index 2281add27..000000000 --- a/packages/token-metadata/src/TokenInfo.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { GeneralException } from '@injectivelabs/exceptions' -import { isIbcTokenCanonical } from './ibc' -import { IbcToken, Token, TokenMeta, TokenType } from './types' -import { getTokenTypeFromDenom } from './utils' - -/** - * Token info is a helper class which abstracts - * away handling different versions of a Token - * represented on Injective. - * - * Ex: USDC token - * - For a peggy denom -> decimals 6, address: ERC20 contract address, symbol: USDC - * - For a factory/cw20Denom: (both 6 decimals) - * -> if coming from Ethereum through Wormhole take USDCet as the cw20 addresses will match, - * -> if coming from Solana through Wormhole take USDCso as the cw20 addresses will match, - * - * Ex: SOL token - * - For the native token on Solana -> decimals 9 - * - For the cw20 version of the native SOL token on Injective through wormhole -> decimals 8 - * - * Ex: CHZ token - * - For the peggy denom -> decimals 18 - * - For a factory/cw20Denom: - * -> For CHZ coming through Wormhole from Ethereum -> decimals 8 - */ -export class TokenInfo { - public denom: string - - public meta: TokenMeta - - private constructor(denom: string, meta: TokenMeta) { - this.denom = denom - this.meta = meta - } - - static fromMeta(meta: TokenMeta & { denom?: string }, denom?: string) { - if (!meta.denom && !denom) { - throw new GeneralException(new Error(`Please provide a ${denom}`)) - } - - return new TokenInfo((meta.denom || denom) as string, meta) - } - - static fromToken(token: Token) { - return new TokenInfo(token.denom, token) - } - - toToken(): Token { - const { meta, denom } = this - - return { - ...meta, - denom, - tokenType: getTokenTypeFromDenom(denom), - } - } - - /** - * When we have multiple cw20 entries (versions) of a token - * on Injective we need to match the denom's address with a - * cw20 entry and get the symbol for that version - * - * ex: (Main) USDC, USDCet, USDCso - */ - get symbol() { - const { meta, denom } = this - - if (denom.startsWith('inj') || denom.startsWith('factory/')) { - const [address] = denom.startsWith('inj') - ? [denom] - : denom.split('/').reverse() - - if (!meta.cw20) { - return meta.symbol - } - - if (!Array.isArray(meta.cw20)) { - return meta.symbol - } - - const actualMeta = meta.cw20.find((m) => m.address === address) - - return actualMeta ? actualMeta.symbol : meta.symbol - } - - return meta.symbol - } - - get logo() { - const { meta } = this - - return meta.logo - } - - get coinGeckoId() { - const { meta } = this - - return meta.coinGeckoId - } - - get name() { - const { meta } = this - - return meta.symbol - } - - get splDecimals() { - const { meta } = this - - return meta.spl ? meta.spl.decimals : meta.decimals - } - - /** - * When we have multiple cw20 entries (versions) of a token - * on Injective we need to match the denom's address with a - * cw20 entry and get the decimals for that version - */ - get cw20Decimals() { - const { denom, meta } = this - - if (!denom.startsWith('inj') || denom.startsWith('factory/')) { - return meta.decimals - } - - const [address] = denom.startsWith('inj') - ? [denom] - : denom.split('/').reverse() - - if (!meta.cw20) { - return meta.decimals - } - - if (!Array.isArray(meta.cw20)) { - return meta.cw20.decimals - } - - const actualMeta = meta.cw20.find((m) => m.address === address) - - return actualMeta ? actualMeta.decimals : meta.decimals - } - - get erc20Decimals() { - const { meta } = this - - return meta.erc20 ? meta.erc20.decimals : meta.decimals - } - - /** - * Decimals can vary between different versions of a token - * so we need to get the decimal places of the token based on the - * denom (from which we can derive the source of the token) - */ - get decimals() { - const { denom, meta } = this - - if (denom.startsWith('inj') || denom.startsWith('factory/')) { - const [address] = denom.startsWith('inj') - ? [denom] - : denom.split('/').reverse() - - if (!meta.cw20) { - return meta.decimals - } - - if (!Array.isArray(meta.cw20)) { - return meta.cw20.decimals - } - - const actualMeta = meta.cw20.find((m) => m.address === address) - - return actualMeta ? actualMeta.decimals : meta.decimals - } - - if (denom.startsWith('peggy')) { - if (!meta.erc20) { - return meta.decimals - } - - return meta.erc20.decimals - } - - if (denom.startsWith('ibc')) { - if (!meta.ibc) { - return meta.decimals - } - - return meta.ibc.decimals - } - - return meta.decimals - } - - get address() { - const { denom, meta } = this - - if (denom.startsWith('inj') || denom.startsWith('factory/')) { - const [address] = denom.startsWith('inj') - ? [denom] - : denom.split('/').reverse() - - return address - } - - if (denom.startsWith('peggy')) { - return meta.erc20 ? meta.erc20.address : '' - } - - /** - * Some denoms have ERC20 of their IBC version - * ex: ATOM - * */ - if (denom.startsWith('ibc')) { - return meta.erc20 ? meta.erc20.address : '' - } - - return '' - } - - get tokenType(): TokenType { - const { denom } = this - - return getTokenTypeFromDenom(denom) - } - - get isCanonical() { - return isIbcTokenCanonical(this.toToken() as IbcToken) - } -} diff --git a/packages/token-metadata/src/TokenMetaUtils.ts b/packages/token-metadata/src/TokenMetaUtils.ts index 25ff18ac8..b6ae34acb 100644 --- a/packages/token-metadata/src/TokenMetaUtils.ts +++ b/packages/token-metadata/src/TokenMetaUtils.ts @@ -2,28 +2,24 @@ import { getMappedTokensByErc20Address, getMappedTokensByCw20Address, } from './tokens/mappings/mapByAddress' -import { getMappedTokensByName } from './tokens/mappings/mapByName' import { getMappedTokensByHash } from './tokens/mappings/mapByHash' import { getMappedTokensBySymbol } from './tokens/mappings/mapBySymbol' -import { TokenMeta, TokenVerification, TokenType } from './types' +import { TokenMetaBase, TokenVerification, TokenType } from './types' export class TokenMetaUtils { - protected tokens: Record + protected tokens: Record - protected tokensByErc20Address: Record + protected tokensByErc20Address: Record - protected tokensByCw20Address: Record + protected tokensByCw20Address: Record - protected tokensByHash: Record + protected tokensByHash: Record - protected tokensByName: Record - - constructor(tokens: Record) { + constructor(tokens: Record) { this.tokens = getMappedTokensBySymbol(tokens) this.tokensByErc20Address = getMappedTokensByErc20Address(this.tokens) this.tokensByCw20Address = getMappedTokensByCw20Address(this.tokens) this.tokensByHash = getMappedTokensByHash(this.tokens) - this.tokensByName = getMappedTokensByName(this.tokens) } /** @@ -32,7 +28,7 @@ export class TokenMetaUtils { * - BaseDenom based on the ibc hash * - Variation of a symbol for multiple versions of the same token (ex: USDC, USDCet, USDCso) */ - getMetaBySymbol(symbol: string): TokenMeta | undefined { + getMetaBySymbol(symbol: string): TokenMetaBase | undefined { const { tokens: tokensBySymbol } = this const tokenSymbol = symbol.toUpperCase() as keyof typeof tokensBySymbol @@ -48,13 +44,40 @@ export class TokenMetaUtils { } } - getMetaByAddress(address: string): TokenMeta | undefined { + getMetaByFactory(denom: string): TokenMetaBase | undefined { + const [symbol, creatorAddress] = denom.split('/').reverse() + const tokenMeta = this.getMetaBySymbol(symbol) + + if (!tokenMeta) { + return + } + + if (!tokenMeta.tokenFactories) { + return + } + + const tokenFactory = tokenMeta.tokenFactories.find( + (tokenFactory) => tokenFactory.creator === creatorAddress, + ) + + if (!tokenFactory) { + return + } + + return { + ...tokenMeta, + tokenType: TokenType.TokenFactory, + tokenVerification: TokenVerification.Verified, + } + } + + getMetaByAddress(address: string): TokenMetaBase | undefined { return address.startsWith('0x') ? this.getMetaByErc20Address(address) : this.getMetaByCw20Address(address) } - getMetaByCw20Address(address: string): TokenMeta | undefined { + getMetaByCw20Address(address: string): TokenMetaBase | undefined { const { tokensByCw20Address } = this const contractAddress = address.toLowerCase() as keyof typeof tokensByCw20Address @@ -78,7 +101,7 @@ export class TokenMetaUtils { : undefined } - getMetaByErc20Address(address: string): TokenMeta | undefined { + getMetaByErc20Address(address: string): TokenMetaBase | undefined { const { tokensByErc20Address } = this const contractAddress = address.toLowerCase() as keyof typeof tokensByErc20Address @@ -96,9 +119,17 @@ export class TokenMetaUtils { if (checksumAddress) { const tokenMeta = tokensByErc20Address[checksumAddress] + if (tokenMeta.erc20) { + return { + ...tokenMeta, + tokenType: TokenType.Erc20, + tokenVerification: TokenVerification.Verified, + } + } + return { ...tokenMeta, - tokenType: tokenMeta.erc20 ? TokenType.Erc20 : TokenType.Evm, + tokenType: TokenType.Evm, tokenVerification: TokenVerification.Verified, } } @@ -109,16 +140,26 @@ export class TokenMetaUtils { const tokenMeta = tokensByErc20Address[contractAddress] || tokensByErc20Address[address] - return tokenMeta - ? { - ...tokenMeta, - tokenType: tokenMeta.erc20 ? TokenType.Erc20 : TokenType.Evm, - tokenVerification: TokenVerification.Verified, - } - : undefined + if (!tokenMeta) { + return undefined + } + + if (tokenMeta.erc20) { + return { + ...tokenMeta, + tokenType: TokenType.Erc20, + tokenVerification: TokenVerification.Verified, + } + } + + return { + ...tokenMeta, + tokenType: TokenType.Evm, + tokenVerification: TokenVerification.Verified, + } } - getMetaByHash(hash: string): TokenMeta | undefined { + getMetaByHash(hash: string): TokenMetaBase | undefined { const { tokensByHash } = this const ibcHash = hash .toUpperCase() @@ -139,22 +180,6 @@ export class TokenMetaUtils { : undefined } - getMetaByName(name: string): TokenMeta | undefined { - const { tokensByName } = this - const tokenName = name.toLowerCase() as keyof typeof tokensByName - - if (!tokensByName[tokenName] && !tokensByName[name]) { - return - } - - const tokenMeta = tokensByName[tokenName] || tokensByName[name] - - return { - ...tokenMeta, - tokenVerification: TokenVerification.Verified, - } - } - getCoinGeckoIdFromSymbol(symbol: string): string { const { tokens: tokensBySymbol } = this const symbolToUppercase = diff --git a/packages/token-metadata/src/ibc/channels.ts b/packages/token-metadata/src/ibc/channels.ts index a504b150b..c7166ecd9 100644 --- a/packages/token-metadata/src/ibc/channels.ts +++ b/packages/token-metadata/src/ibc/channels.ts @@ -18,6 +18,8 @@ export enum CanonicalChannelToDestinationChannel { Noble = 'channel-148', Celestia = 'channel-152', Kujira = 'channel-98', + Gateway = 'channel-183', + Andromeda = 'channel-213', } /** @@ -45,6 +47,7 @@ const legacyCanonicalChannels = { 'channel-23': { chainA: 'Secret Network', chainB: 'Injective' }, 'channel-59': { chainA: 'Juno', chainB: 'Injective' }, 'channel-6': { chainA: 'Stride', chainB: 'Injective' }, + 'channel-183': { chainA: 'Gateway', chainB: 'Injective' }, } /** @@ -62,13 +65,13 @@ export const canonicalChannelsToChainMapFromInjective = { 'channel-78': { chainA: 'Injective', chainB: 'Juno' }, 'channel-89': { chainA: 'Injective', chainB: 'Stride' }, 'channel-23': { chainA: 'Injective', chainB: 'Crescent' }, - 'channel-13': { chainA: 'Injective', chainB: '' }, 'channel-93': { chainA: 'Injective', chainB: 'Sommelier' }, 'channel-99': { chainA: 'Injective', chainB: 'Canto' }, 'channel-102': { chainA: 'Injective', chainB: 'Migaloo' }, 'channel-104': { chainA: 'Injective', chainB: 'Terra2' }, 'channel-105': { chainA: 'Injective', chainB: 'Terra2' }, 'channel-143': { chainA: 'Injective', chainB: 'Kava' }, + 'channel-13': { chainA: 'Injective', chainB: 'Gateway' }, } export const canonicalChannelsToChainList = [ @@ -91,6 +94,7 @@ export const canonicalChannelsToChainList = [ { channelId: 'channel-31', chainA: 'Noble', chainB: 'Injective' }, { channelId: 'channel-7', chainA: 'Celestia', chainB: 'Injective' }, { channelId: 'channel-54', chainA: 'Kujira', chainB: 'Injective' }, + { channelId: 'channel-13', chainA: 'Andromeda', chainB: 'Injective' }, { channelId: 'channel-1', chainA: 'Injective', chainB: 'CosmosHub' }, { channelId: 'channel-83', chainA: 'Injective', chainB: 'Evmos' }, { channelId: 'channel-8', chainA: 'Injective', chainB: 'Osmosis' }, @@ -115,7 +119,8 @@ export const canonicalChannelsToChainList = [ { channelId: 'channel-147', chainA: 'Injective', chainB: 'Oraichain' }, { channelId: 'channel-148', chainA: 'Injective', chainB: 'Noble' }, { channelId: 'channel-152', chainA: 'Injective', chainB: 'Celestia' }, - + { channelId: 'channel-183', chainA: 'Injective', chainB: 'Gateway' }, + { channelId: 'channel-213', chainA: 'Injective', chainB: 'Andromeda' }, ] export default legacyCanonicalChannels @@ -137,6 +142,7 @@ export const canonicalChannelIds = [ 'channel-89', 'channel-90', 'channel-93', + 'channel-98', 'channel-99', 'channel-102', 'channel-104', @@ -147,7 +153,8 @@ export const canonicalChannelIds = [ 'channel-147', 'channel-148', 'channel-152', - 'channel-98', + 'channel-183', + 'channel-213', ] export const channelIbcDenomToBaseDenomMap = { diff --git a/packages/token-metadata/src/ibc/utils.ts b/packages/token-metadata/src/ibc/utils.ts index df8e4ae38..f52af44a2 100644 --- a/packages/token-metadata/src/ibc/utils.ts +++ b/packages/token-metadata/src/ibc/utils.ts @@ -74,5 +74,13 @@ export const formatNonCanonicalIbcTokenName = (token: IbcToken): string => { ? foundChannelFromInjective.chainB : 'Unknown' + // Fix for very long base denoms + if ( + token.ibc.baseDenom.startsWith('cw20:') || + token.ibc.baseDenom.startsWith('factory') + ) { + return `${token.symbol.toUpperCase()}-${lastChain.toLowerCase()}-${channelToLastChain}` + } + return `${token.ibc.baseDenom.toUpperCase()}-${lastChain.toLowerCase()}-${channelToLastChain}` } diff --git a/packages/token-metadata/src/images/GLTO.png b/packages/token-metadata/src/images/GLTO.png new file mode 100644 index 000000000..b470adef4 Binary files /dev/null and b/packages/token-metadata/src/images/GLTO.png differ diff --git a/packages/token-metadata/src/images/IKINGS.png b/packages/token-metadata/src/images/IKINGS.png new file mode 100644 index 000000000..b9a74d917 Binary files /dev/null and b/packages/token-metadata/src/images/IKINGS.png differ diff --git a/packages/token-metadata/src/images/PUNK.png b/packages/token-metadata/src/images/PUNK.png new file mode 100644 index 000000000..7f5effff1 Binary files /dev/null and b/packages/token-metadata/src/images/PUNK.png differ diff --git a/packages/token-metadata/src/images/WOSMO.png b/packages/token-metadata/src/images/WOSMO.png new file mode 100644 index 000000000..41aa9e5f9 Binary files /dev/null and b/packages/token-metadata/src/images/WOSMO.png differ diff --git a/packages/token-metadata/src/images/alien.png b/packages/token-metadata/src/images/alien.png new file mode 100644 index 000000000..7c61970dd Binary files /dev/null and b/packages/token-metadata/src/images/alien.png differ diff --git a/packages/token-metadata/src/images/andromeda.webp b/packages/token-metadata/src/images/andromeda.webp new file mode 100644 index 000000000..51cb08e71 Binary files /dev/null and b/packages/token-metadata/src/images/andromeda.webp differ diff --git a/packages/token-metadata/src/images/app.jpeg b/packages/token-metadata/src/images/app.jpeg new file mode 100644 index 000000000..f065a043b Binary files /dev/null and b/packages/token-metadata/src/images/app.jpeg differ diff --git a/packages/token-metadata/src/images/arb-circle.png b/packages/token-metadata/src/images/arb-circle.png new file mode 100644 index 000000000..bc71fad4b Binary files /dev/null and b/packages/token-metadata/src/images/arb-circle.png differ diff --git a/packages/token-metadata/src/images/arb.png b/packages/token-metadata/src/images/arb.png index 54bbf1bd3..f9ef8c936 100644 Binary files a/packages/token-metadata/src/images/arb.png and b/packages/token-metadata/src/images/arb.png differ diff --git a/packages/token-metadata/src/images/beast.png b/packages/token-metadata/src/images/beast.png new file mode 100644 index 000000000..accf9f722 Binary files /dev/null and b/packages/token-metadata/src/images/beast.png differ diff --git a/packages/token-metadata/src/images/bitmos.png b/packages/token-metadata/src/images/bitmos.png new file mode 100644 index 000000000..49e18db94 Binary files /dev/null and b/packages/token-metadata/src/images/bitmos.png differ diff --git a/packages/token-metadata/src/images/bits.png b/packages/token-metadata/src/images/bits.png new file mode 100644 index 000000000..15f5836df Binary files /dev/null and b/packages/token-metadata/src/images/bits.png differ diff --git a/packages/token-metadata/src/images/chainlink.png b/packages/token-metadata/src/images/chainlink.png index 1e4d234e8..7effe7f4a 100644 Binary files a/packages/token-metadata/src/images/chainlink.png and b/packages/token-metadata/src/images/chainlink.png differ diff --git a/packages/token-metadata/src/images/dinj.svg b/packages/token-metadata/src/images/dinj.svg new file mode 100644 index 000000000..07e92e4ec --- /dev/null +++ b/packages/token-metadata/src/images/dinj.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/token-metadata/src/images/dogecoin.webp b/packages/token-metadata/src/images/dogecoin.webp new file mode 100644 index 000000000..a3f5fd2f3 Binary files /dev/null and b/packages/token-metadata/src/images/dogecoin.webp differ diff --git a/packages/token-metadata/src/images/dojo-token.png b/packages/token-metadata/src/images/dojo-token.png new file mode 100644 index 000000000..a66bc361c Binary files /dev/null and b/packages/token-metadata/src/images/dojo-token.png differ diff --git a/packages/token-metadata/src/images/dojo.svg b/packages/token-metadata/src/images/dojo.svg new file mode 100644 index 000000000..e25cb677b --- /dev/null +++ b/packages/token-metadata/src/images/dojo.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/token-metadata/src/images/drogo.png b/packages/token-metadata/src/images/drogo.png new file mode 100644 index 000000000..0074739ed Binary files /dev/null and b/packages/token-metadata/src/images/drogo.png differ diff --git a/packages/token-metadata/src/images/gyen.webp b/packages/token-metadata/src/images/gyen.webp new file mode 100644 index 000000000..a826e08b9 Binary files /dev/null and b/packages/token-metadata/src/images/gyen.webp differ diff --git a/packages/token-metadata/src/images/hinj.svg b/packages/token-metadata/src/images/hinj.svg new file mode 100644 index 000000000..ed0c2b373 --- /dev/null +++ b/packages/token-metadata/src/images/hinj.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/token-metadata/src/images/hydro.png b/packages/token-metadata/src/images/hydro.png new file mode 100644 index 000000000..0ac77ab09 Binary files /dev/null and b/packages/token-metadata/src/images/hydro.png differ diff --git a/packages/token-metadata/src/images/jup.jpeg b/packages/token-metadata/src/images/jup.jpeg new file mode 100644 index 000000000..1d07b37db Binary files /dev/null and b/packages/token-metadata/src/images/jup.jpeg differ diff --git a/packages/token-metadata/src/images/kage.png b/packages/token-metadata/src/images/kage.png new file mode 100644 index 000000000..0359083ea Binary files /dev/null and b/packages/token-metadata/src/images/kage.png differ diff --git a/packages/token-metadata/src/images/mito-atom-boost-lp.png b/packages/token-metadata/src/images/mito-atom-boost-lp.png deleted file mode 100644 index 1eda2b456..000000000 Binary files a/packages/token-metadata/src/images/mito-atom-boost-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-atom-master-lp.png b/packages/token-metadata/src/images/mito-atom-master-lp.png deleted file mode 100644 index b3ab16125..000000000 Binary files a/packages/token-metadata/src/images/mito-atom-master-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-eth-boost-lp.png b/packages/token-metadata/src/images/mito-eth-boost-lp.png deleted file mode 100644 index c81bc6778..000000000 Binary files a/packages/token-metadata/src/images/mito-eth-boost-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-eur-master-lp.png b/packages/token-metadata/src/images/mito-eur-master-lp.png deleted file mode 100644 index 5721cad79..000000000 Binary files a/packages/token-metadata/src/images/mito-eur-master-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-gbp-master-lp.png b/packages/token-metadata/src/images/mito-gbp-master-lp.png deleted file mode 100644 index 0fa1945a2..000000000 Binary files a/packages/token-metadata/src/images/mito-gbp-master-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-inj-boost-lp.png b/packages/token-metadata/src/images/mito-inj-boost-lp.png deleted file mode 100644 index 8be7ed883..000000000 Binary files a/packages/token-metadata/src/images/mito-inj-boost-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-inj-master-lp.png b/packages/token-metadata/src/images/mito-inj-master-lp.png deleted file mode 100644 index 3dade5b0e..000000000 Binary files a/packages/token-metadata/src/images/mito-inj-master-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-proj-master-lp.png b/packages/token-metadata/src/images/mito-proj-master-lp.png deleted file mode 100644 index 171e0782b..000000000 Binary files a/packages/token-metadata/src/images/mito-proj-master-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-stInj-boost-lp.png b/packages/token-metadata/src/images/mito-stInj-boost-lp.png deleted file mode 100644 index 26cd4f7cf..000000000 Binary files a/packages/token-metadata/src/images/mito-stInj-boost-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-test.png b/packages/token-metadata/src/images/mito-test.png new file mode 100644 index 000000000..fc0093390 Binary files /dev/null and b/packages/token-metadata/src/images/mito-test.png differ diff --git a/packages/token-metadata/src/images/mito-usdc-master-lp.png b/packages/token-metadata/src/images/mito-usdc-master-lp.png deleted file mode 100644 index 4677c4bb2..000000000 Binary files a/packages/token-metadata/src/images/mito-usdc-master-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-weth-master-lp.png b/packages/token-metadata/src/images/mito-weth-master-lp.png deleted file mode 100644 index ed8923166..000000000 Binary files a/packages/token-metadata/src/images/mito-weth-master-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito-xau-boost-lp.png b/packages/token-metadata/src/images/mito-xau-boost-lp.png deleted file mode 100644 index 5436154ca..000000000 Binary files a/packages/token-metadata/src/images/mito-xau-boost-lp.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito_2.png b/packages/token-metadata/src/images/mito_2.png deleted file mode 100644 index cfa4bd84b..000000000 Binary files a/packages/token-metadata/src/images/mito_2.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito_4.png b/packages/token-metadata/src/images/mito_4.png deleted file mode 100644 index c2a62ce20..000000000 Binary files a/packages/token-metadata/src/images/mito_4.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito_5.png b/packages/token-metadata/src/images/mito_5.png deleted file mode 100644 index 4fb33383f..000000000 Binary files a/packages/token-metadata/src/images/mito_5.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito_6.png b/packages/token-metadata/src/images/mito_6.png deleted file mode 100644 index 37b700b4a..000000000 Binary files a/packages/token-metadata/src/images/mito_6.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito_7.png b/packages/token-metadata/src/images/mito_7.png deleted file mode 100644 index eadf0e8f0..000000000 Binary files a/packages/token-metadata/src/images/mito_7.png and /dev/null differ diff --git a/packages/token-metadata/src/images/mito_8.png b/packages/token-metadata/src/images/mito_8.png deleted file mode 100644 index a873c4181..000000000 Binary files a/packages/token-metadata/src/images/mito_8.png and /dev/null differ diff --git a/packages/token-metadata/src/images/ninja.png b/packages/token-metadata/src/images/ninja.png index 11dc4a703..3246e8179 100644 Binary files a/packages/token-metadata/src/images/ninja.png and b/packages/token-metadata/src/images/ninja.png differ diff --git a/packages/token-metadata/src/images/optimism.webp b/packages/token-metadata/src/images/optimism.webp new file mode 100644 index 000000000..74c446fe2 Binary files /dev/null and b/packages/token-metadata/src/images/optimism.webp differ diff --git a/packages/token-metadata/src/images/orne.png b/packages/token-metadata/src/images/orne.png new file mode 100644 index 000000000..c32d031f7 Binary files /dev/null and b/packages/token-metadata/src/images/orne.png differ diff --git a/packages/token-metadata/src/images/punk-token.webp b/packages/token-metadata/src/images/punk-token.webp new file mode 100644 index 000000000..5c6300341 Binary files /dev/null and b/packages/token-metadata/src/images/punk-token.webp differ diff --git a/packages/token-metadata/src/images/qunt.png b/packages/token-metadata/src/images/qunt.png new file mode 100644 index 000000000..c69fdc2c0 Binary files /dev/null and b/packages/token-metadata/src/images/qunt.png differ diff --git a/packages/token-metadata/src/images/ramen.jpeg b/packages/token-metadata/src/images/ramen.jpeg new file mode 100644 index 000000000..28b97fd69 Binary files /dev/null and b/packages/token-metadata/src/images/ramen.jpeg differ diff --git a/packages/token-metadata/src/images/rice.jpeg b/packages/token-metadata/src/images/rice.jpeg new file mode 100644 index 000000000..b1db61885 Binary files /dev/null and b/packages/token-metadata/src/images/rice.jpeg differ diff --git a/packages/token-metadata/src/images/sui.webp b/packages/token-metadata/src/images/sui.webp new file mode 100644 index 000000000..4d634f207 Binary files /dev/null and b/packages/token-metadata/src/images/sui.webp differ diff --git a/packages/token-metadata/src/images/sushi-inj.png b/packages/token-metadata/src/images/sushi-inj.png new file mode 100644 index 000000000..acee4c3cd Binary files /dev/null and b/packages/token-metadata/src/images/sushi-inj.png differ diff --git a/packages/token-metadata/src/images/usde.png b/packages/token-metadata/src/images/usde.png new file mode 100644 index 000000000..dc67f01d9 Binary files /dev/null and b/packages/token-metadata/src/images/usde.png differ diff --git a/packages/token-metadata/src/images/wif.webp b/packages/token-metadata/src/images/wif.webp new file mode 100644 index 000000000..327a8e5ad Binary files /dev/null and b/packages/token-metadata/src/images/wif.webp differ diff --git a/packages/token-metadata/src/images/wormhole.png b/packages/token-metadata/src/images/wormhole.png new file mode 100644 index 000000000..f57ca626e Binary files /dev/null and b/packages/token-metadata/src/images/wormhole.png differ diff --git a/packages/token-metadata/src/images/xnj.png b/packages/token-metadata/src/images/xnj.png new file mode 100644 index 000000000..de181c9fc Binary files /dev/null and b/packages/token-metadata/src/images/xnj.png differ diff --git a/packages/token-metadata/src/images/xtalis.png b/packages/token-metadata/src/images/xtalis.png new file mode 100644 index 000000000..d0586bfa8 Binary files /dev/null and b/packages/token-metadata/src/images/xtalis.png differ diff --git a/packages/token-metadata/src/images/zro.jpeg b/packages/token-metadata/src/images/zro.jpeg new file mode 100644 index 000000000..8de2af095 Binary files /dev/null and b/packages/token-metadata/src/images/zro.jpeg differ diff --git a/packages/token-metadata/src/index.ts b/packages/token-metadata/src/index.ts index 8bcf161d6..624dcf1e8 100644 --- a/packages/token-metadata/src/index.ts +++ b/packages/token-metadata/src/index.ts @@ -1,14 +1,12 @@ import { TokenFactory } from './TokenFactory' import { TokenMetaUtils } from './TokenMetaUtils' import { TokenMetaUtilsFactory } from './TokenMetaUtilsFactory' -import { TokenInfo } from './TokenInfo' export * from './ibc' export * from './types' export * from './utils' -export * from './tokens/canonical' export const tokenMetaUtils = TokenMetaUtilsFactory.make() export const tokenFactory = TokenFactory.make() -export { TokenMetaUtils, TokenInfo, TokenFactory, TokenMetaUtilsFactory } +export { TokenMetaUtils, TokenFactory, TokenMetaUtilsFactory } diff --git a/packages/token-metadata/src/tokens/mappings/index.ts b/packages/token-metadata/src/tokens/mappings/index.ts index 5321dfcf7..98d950daa 100644 --- a/packages/token-metadata/src/tokens/mappings/index.ts +++ b/packages/token-metadata/src/tokens/mappings/index.ts @@ -1,4 +1,3 @@ export * from './mapByAddress' export * from './mapByHash' -export * from './mapByName' export * from './mapBySymbol' diff --git a/packages/token-metadata/src/tokens/mappings/mapByAddress.ts b/packages/token-metadata/src/tokens/mappings/mapByAddress.ts index c6fef8d2e..0e31cd2fb 100644 --- a/packages/token-metadata/src/tokens/mappings/mapByAddress.ts +++ b/packages/token-metadata/src/tokens/mappings/mapByAddress.ts @@ -1,7 +1,7 @@ -import { TokenMeta } from '../../types' +import { TokenMetaBase } from '../../types' export const getMappedTokensByErc20Address = ( - tokens: Record, + tokens: Record, ) => (Object.keys(tokens) as Array) .filter((token) => !!(tokens[token].erc20 || tokens[token].evm)) @@ -25,34 +25,27 @@ export const getMappedTokensByErc20Address = ( } return result - }, {}) as Record + }, {}) as Record export const getMappedTokensByCw20Address = ( - tokens: Record, + tokens: Record, ) => (Object.keys(tokens) as Array) - .filter((token) => tokens[token].cw20 || tokens[token].cw20s) + .filter((token) => tokens[token].cw20s) .reduce((result, token) => { - if (!tokens[token].cw20 && !tokens[token].cw20s) { + if (!tokens[token].cw20s) { return result } const tokenMeta = tokens[token] - if (tokenMeta.cw20) { - return { - ...result, - [tokenMeta.cw20.address]: tokens[token], - } - } - if (tokenMeta.cw20s) { const cw20Maps = tokenMeta.cw20s.reduce( (result, cw20) => ({ ...result, [cw20.address]: tokens[token], }), - {} as Record, + {} as Record, ) return { @@ -62,4 +55,4 @@ export const getMappedTokensByCw20Address = ( } return result - }, {}) as Record + }, {}) as Record diff --git a/packages/token-metadata/src/tokens/mappings/mapByHash.ts b/packages/token-metadata/src/tokens/mappings/mapByHash.ts index 655288c5f..a10075afb 100644 --- a/packages/token-metadata/src/tokens/mappings/mapByHash.ts +++ b/packages/token-metadata/src/tokens/mappings/mapByHash.ts @@ -1,16 +1,22 @@ -import { TokenMeta } from '../../types' +import { TokenMetaBase } from '../../types' -export const getMappedTokensByHash = (tokens: Record) => + export const getMappedTokensByHash = (tokens: Record) => (Object.keys(tokens) as Array).reduce( (result, token) => { - if (!tokens[token].ibc) { - return result - } - return { - ...result, - [tokens[token].ibc!.hash.toUpperCase()]: tokens[token], + if (!tokens[token].ibcs || tokens[token].ibcs?.length === 0) { + return result; } + + tokens[token].ibcs?.forEach(ibc => { + if (ibc.hash) { + const hashKey = ibc.hash.toUpperCase(); + + result[hashKey] = tokens[token]; + } + }); + + return result; }, - {}, - ) as Record + {} as Record + ); diff --git a/packages/token-metadata/src/tokens/mappings/mapByName.ts b/packages/token-metadata/src/tokens/mappings/mapByName.ts deleted file mode 100644 index c40fa7cef..000000000 --- a/packages/token-metadata/src/tokens/mappings/mapByName.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TokenMeta } from '../../types' - -export const getMappedTokensByName = (tokens: Record) => - (Object.keys(tokens) as Array).reduce( - (result, token) => ({ - ...result, - [tokens[token].name!.toLowerCase()]: tokens[token], - }), - {}, - ) as Record diff --git a/packages/token-metadata/src/tokens/mappings/mapBySymbol.ts b/packages/token-metadata/src/tokens/mappings/mapBySymbol.ts index 8868aad08..e79abd2f8 100644 --- a/packages/token-metadata/src/tokens/mappings/mapBySymbol.ts +++ b/packages/token-metadata/src/tokens/mappings/mapBySymbol.ts @@ -1,51 +1,66 @@ -import { TokenMeta } from '../../types' +import { TokenMetaBase } from '../../types' -export const getMappedTokensBySymbol = (tokens: Record) => +export const getMappedTokensBySymbol = ( + tokens: Record, +) => (Object.keys(tokens) as Array).reduce( (result, token) => { const tokenMeta = tokens[token] const symbolKey = token.toUpperCase() - const symbol = tokenMeta.symbol.toUpperCase() + const symbol = tokenMeta.symbol?.toUpperCase() const symbolDiffs = symbol !== symbolKey + const existingKeys = Object.keys(result) - let ibcResults = {} - let cw20Results = {} - let splResults = {} - let evmResults = {} - let erc20Results = {} - let cw20sResults = {} + let ibcResults = {} as Record + let cw20Results = {} as Record + let splResults = {} as Record + let evmResults = {} as Record + let erc20Results = {} as Record + let cw20sResults = {} as Record - if (tokenMeta.ibc && tokenMeta.ibc.baseDenom) { - ibcResults = { - [tokenMeta.ibc.baseDenom.toUpperCase()]: tokenMeta, - ...(tokenMeta.ibc.symbol && { - [tokenMeta.ibc.symbol.toUpperCase()]: tokenMeta, - }), - } + if (tokenMeta.ibcs) { + tokenMeta.ibcs.forEach(ibc => { + if (ibc.baseDenom && !existingKeys.includes(ibc.baseDenom.toUpperCase())) { + ibcResults[ibc.baseDenom.toUpperCase()] = tokenMeta; + } + if (ibc.symbol && !existingKeys.includes(ibc.symbol.toUpperCase())) { + ibcResults[ibc.symbol.toUpperCase()] = tokenMeta; + } + }); } if (tokenMeta.cw20s) { - const cw20Maps = tokenMeta.cw20s.reduce( - (result, cw20) => ({ + const cw20Maps = tokenMeta.cw20s.reduce((result, cw20) => { + if (existingKeys.includes(cw20.symbol.toUpperCase())) { + return result + } + + return { ...result, [cw20.symbol.toUpperCase()]: tokenMeta, - }), - {} as Record, - ) + } + }, {} as Record) cw20sResults = { ...cw20Maps, - [symbol.toUpperCase()]: tokenMeta, } } - if (tokenMeta.evm && tokenMeta.evm.symbol) { + if ( + tokenMeta.evm && + tokenMeta.evm.symbol && + !existingKeys.includes(tokenMeta.evm.symbol.toUpperCase()) + ) { evmResults = { [tokenMeta.evm.symbol.toUpperCase()]: tokenMeta, } } - if (tokenMeta.erc20 && tokenMeta.erc20.symbol) { + if ( + tokenMeta.erc20 && + tokenMeta.erc20.symbol && + !existingKeys.includes(tokenMeta.erc20.symbol.toUpperCase()) + ) { erc20Results = { [tokenMeta.erc20.symbol.toUpperCase()]: tokenMeta, } @@ -59,11 +74,13 @@ export const getMappedTokensBySymbol = (tokens: Record) => ...cw20Results, ...cw20sResults, ...erc20Results, - [symbol.toUpperCase()]: tokenMeta, + ...(symbol && { + [symbol.toUpperCase()]: tokenMeta, + }), ...(symbolDiffs && { [symbolKey.toUpperCase()]: tokenMeta, }), } }, {}, - ) as Record + ) as Record diff --git a/packages/token-metadata/src/tokens/tokens/cw20-tokens.ts b/packages/token-metadata/src/tokens/tokens/cw20-tokens.ts index b78eadcd7..df1e5f9dd 100644 --- a/packages/token-metadata/src/tokens/tokens/cw20-tokens.ts +++ b/packages/token-metadata/src/tokens/tokens/cw20-tokens.ts @@ -1,160 +1,146 @@ -import { TokenMeta, TokenType } from '../../types' +import { TokenMetaBase } from '../../types' +/** for testnet purposes only */ export default { - 'INJ-MASTER': { - name: 'INJ Master', - logo: 'mito-inj-master-lp.png', - symbol: 'INJ-MASTER-LP', - decimals: 18, + ZEN: { + name: 'ZEN', + logo: 'zen.svg', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + symbol: 'ZEN', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + decimals: 18, + }, + ], }, - 'INJ-BOOST': { - name: 'INJ Boost', - logo: 'mito-inj-boost-lp.png', - symbol: 'INJ-BOOST-LP', - decimals: 18, - coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, - }, - 'XAU-BOOST': { - name: 'XAU Boost', - logo: 'mito-xau-boost-lp.png', - symbol: 'XAU-BOOST-LP', - decimals: 18, + UZEN: { + name: 'ZEN', + logo: 'zen.svg', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + symbol: 'ZEN', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + decimals: 18, + }, + ], }, - 'WETH-MASTER': { - name: 'WETH Master', - logo: 'mito-weth-master-lp.png', - symbol: 'WETH-MASTER-LP', - decimals: 18, - coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, - }, - 'ETH-BOOST': { - name: 'ETH Boost', - logo: 'mito-eth-boost-lp.png', - symbol: 'ETH-boost-LP', + PROJ: { + name: 'PROJ', decimals: 18, + symbol: 'PROJ', coinGeckoId: '', + logo: 'proj.png', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + symbol: 'PROJ', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + decimals: 18, + }, + ], }, - 'ATOM-MASTER': { - name: 'ATOM Master', - logo: 'mito-atom-master-lp.png', - symbol: 'ATOM-MASTER-LP', - decimals: 18, + + PROJX: { + name: 'PROJX', + logo: 'projx.png', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + symbol: 'PROJX', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + decimals: 18, + }, + ], }, - 'ATOM-BOOST': { - name: 'ATOM Boost', - logo: 'mito-atom-boost-lp.png', - symbol: 'ATOM-BOOST-LP', - decimals: 18, + + DEMO: { + name: 'Demo Coin', + logo: 'injective-v3.png', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + symbol: 'DEMO', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + decimals: 18, + }, + ], }, - 'USDC-MASTER': { - name: 'USDC Master', - logo: 'mito-usdc-master-lp.png', - symbol: 'USDC-MASTER-LP', - decimals: 18, + + MITOTEST2: { + name: 'Mito test token', + logo: 'mito-test.png', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + decimals: 6, + symbol: 'MT', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + }, + ], }, - 'PROJ-MASTER': { - name: 'PROJ Master', - logo: 'mito-proj-master-lp.png', - symbol: 'PROJ-MASTER-LP', - decimals: 18, + + TEST1: { + name: 'Test 1', + logo: 'mito-test.png', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + decimals: 6, + symbol: 'TEST1', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + }, + ], }, - 'GBP-MASTER': { - name: 'GBP Master', - logo: 'mito-gbp-master-lp.png', - symbol: 'GBP-MASTER-LP', - decimals: 18, + + TEST2: { + name: 'Test 2', + logo: 'mito-test.png', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + decimals: 6, + symbol: 'TEST2', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + }, + ], }, - 'EUR-MASTER': { - name: 'EUR Master', - logo: 'mito-eur-master-lp.png', - symbol: 'EUR-MASTER-LP', - decimals: 18, + + TEST3: { + name: 'Test 3', + logo: 'mito-test.png', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + decimals: 6, + symbol: 'TEST3', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + }, + ], }, - 'STINJ-BOOST': { - name: 'stINJ Boost', - logo: 'mito-stInj-boost-lp.png', - symbol: 'stINJ-BOOST-LP', - decimals: 18, + + PHUC: { + name: 'Phuc', + logo: 'mito-test.png', coinGeckoId: '', - cw20: { - decimals: 18, - address: '', - tokenType: TokenType.Cw20, - }, + tokenFactories: [ + { + creator: 'inj1995xnrrtnmtdgjmx0g937vf28dwefhkhy6gy5e', + symbol: 'PHUC', + decimals: 6, + }, + ], }, -} as Record +} as Record diff --git a/packages/token-metadata/src/tokens/tokens/devnet-tokens.ts b/packages/token-metadata/src/tokens/tokens/devnet-tokens.ts index f67f177f2..1812790e4 100644 --- a/packages/token-metadata/src/tokens/tokens/devnet-tokens.ts +++ b/packages/token-metadata/src/tokens/tokens/devnet-tokens.ts @@ -1,10 +1,5 @@ import tokens from './tokens' -import { - TokenMeta, - TokenType, - TokenSource, - Cw20TokenMetaWithSource, -} from '../../types' +import { TokenMeta, TokenSource, Cw20TokenMetaWithSource } from '../../types' export const overrideCw20s = ( source: Cw20TokenMetaWithSource, @@ -49,9 +44,20 @@ export const devnetTokens = () => symbol: 'USDCet', source: TokenSource.EthereumWh, address: 'inj12sqy9uzzl3h3vqxam7sz9f0yvmhampcgesh3qw', - tokenType: TokenType.Cw20, }, tokens.USDC.cw20s, ), }, + + KIRA: { + ...tokens.KIRA, + tokenFactories: [ + ...(tokens.KIRA.tokenFactories || []), + { + creator: 'inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk', + symbol: 'KIRA', + decimals: 6, + }, + ], + }, } as Record) diff --git a/packages/token-metadata/src/tokens/tokens/index.ts b/packages/token-metadata/src/tokens/tokens/index.ts index e76a168a8..7a1670d6b 100644 --- a/packages/token-metadata/src/tokens/tokens/index.ts +++ b/packages/token-metadata/src/tokens/tokens/index.ts @@ -8,8 +8,8 @@ import tokens from './tokens' const allTokens = { ...tokens, ...cw20Tokens } export const ibcBaseDenoms = Object.keys(allTokens) - .filter((token) => allTokens[token].ibc) - .map((token) => allTokens[token].ibc!.baseDenom) + .filter((token) => allTokens[token].ibcs) + .flatMap((token) => allTokens[token].ibcs!.map(({baseDenom}) => baseDenom)) export default allTokens as Record diff --git a/packages/token-metadata/src/tokens/tokens/testnet-tokens.ts b/packages/token-metadata/src/tokens/tokens/testnet-tokens.ts index 2cff00cfa..38db3c8c4 100644 --- a/packages/token-metadata/src/tokens/tokens/testnet-tokens.ts +++ b/packages/token-metadata/src/tokens/tokens/testnet-tokens.ts @@ -1,8 +1,7 @@ import tokens from './tokens' import { - TokenMeta, - TokenType, TokenSource, + TokenMetaBase, Cw20TokenMetaWithSource, } from '../../types' @@ -31,31 +30,22 @@ export const testnetTokens = () => ({ wBTC: { ...tokens.wBTC, - cw20s: [ - ...(tokens.wBTC.cw20s || []), - ...overrideCw20s( - { - decimals: 8, - symbol: 'wBTC', - source: TokenSource.Cosmos, - address: 'wbtc', - tokenType: TokenType.Cw20, - }, - tokens.wBTC.cw20s, - ), + tokenFactories: [ + { + symbol: 'wBTC', + creator: 'inj17vytdwqczqz72j65saukplrktd4gyfme5agf6c', + decimals: 8, + }, ], }, ATOM: { ...tokens.ATOM, - cw20s: [ - ...(tokens.ATOM.cw20s || []), + tokenFactories: [ { - decimals: 8, symbol: 'ATOM', - source: TokenSource.Cosmos, - address: 'atom', - tokenType: TokenType.Cw20, + creator: 'inj17vytdwqczqz72j65saukplrktd4gyfme5agf6c', + decimals: 8, }, ], }, @@ -90,35 +80,36 @@ export const testnetTokens = () => ...tokens.wETH.erc20, address: '0xdB309Bb079EB419C18fe7D568c61cD2FdB65D9aF', }, - cw20s: [ - ...(tokens.wETH.cw20s || []), + tokenFactories: [ { - decimals: 8, symbol: 'wETH', - source: TokenSource.EthereumWh, - address: 'weth', - tokenType: TokenType.Cw20, + creator: 'inj17vytdwqczqz72j65saukplrktd4gyfme5agf6c', + decimals: 8, }, ], }, ASTRO: { ...tokens.ASTRO, - ibc: { - ...tokens.ASTRO.ibc, - hash: 'E8AC6B792CDE60AB208CA060CA010A3881F682A7307F624347AB71B6A0B0BF89', - path: 'transfer/channel-13', - channelId: 'channel-13', - baseDenom: 'ASTRO', - }, + ibcs: [ + { + ...(tokens.ASTRO.ibcs ? tokens.ASTRO.ibcs[0] : {}), + hash: 'E8AC6B792CDE60AB208CA060CA010A3881F682A7307F624347AB71B6A0B0BF89', + path: 'transfer/channel-13', + channelId: 'channel-13', + baseDenom: 'ASTRO', + }, + ], }, SOL: { ...tokens.SOL, - cw20: { - ...tokens.SOL.cw20, - address: 'inj12ngevx045zpvacus9s6anr258gkwpmthnz80e9', - }, + cw20s: [ + { + ...(tokens.SOL.cw20s ? tokens.SOL.cw20s[0] : {}), + address: 'inj12ngevx045zpvacus9s6anr258gkwpmthnz80e9', + }, + ], }, USDC: { @@ -127,6 +118,13 @@ export const testnetTokens = () => ...tokens.USDC.erc20, address: '0x07865c6E87B9F70255377e024ace6630C1Eaa37F', }, + tokenFactories: [ + { + symbol: 'USDC', + creator: 'inj17vytdwqczqz72j65saukplrktd4gyfme5agf6c', + decimals: 6, + }, + ], cw20s: [ ...overrideCw20s( { @@ -134,38 +132,62 @@ export const testnetTokens = () => symbol: 'USDCet', source: TokenSource.EthereumWh, address: 'inj12sqy9uzzl3h3vqxam7sz9f0yvmhampcgesh3qw', - tokenType: TokenType.Cw20, }, tokens.USDC.cw20s, ), - { - decimals: 6, - symbol: 'USDC', - source: TokenSource.Cosmos, - address: 'usdc', - tokenType: TokenType.Cw20, - }, ], }, MATIC: { ...tokens.MATIC, - evm: { - ...tokens.MATIC.evm, + erc20: { + ...tokens.MATIC.erc20, address: '0x9c3c9283d3e44854697cd22d3faa240cfb032889', }, + tokenFactories: [ + { + symbol: 'MATIC', + creator: 'inj17vytdwqczqz72j65saukplrktd4gyfme5agf6c', + decimals: 18, + }, + ], + }, + + STINJ: { + ...tokens.STINJ, + + tokenFactories: [ + { + symbol: 'STINJ', + creator: 'inj17gkuet8f6pssxd8nycm3qr9d9y699rupv6397z', + decimals: 18, + }, + ], }, - MITOTEST1: { - ...tokens.MITOTEST1, + hINJ: { + ...tokens.hINJ, + cw20s: [ + ...(tokens.hINJ.cw20s || []), { + symbol: 'hINJ', decimals: 18, - symbol: 'MT1', - source: TokenSource.EthereumWh, - address: 'mitotest1', - tokenType: TokenType.Cw20, + address: 'inj1mz7mfhgx8tuvjqut03qdujrkzwlx9xhcj6yldc', + }, + ], + }, + + HDRO: { + ...tokens.HDRO, + + tokenFactories: [ + ...(tokens.HDRO.tokenFactories || []), + { + creator: 'inj1pk7jhvjj2lufcghmvr7gl49dzwkk3xj0uqkwfk', + symbol: 'HDRO', + decimals: 6, }, ], }, - } as Record) + } as Record) diff --git a/packages/token-metadata/src/tokens/tokens/tokens.ts b/packages/token-metadata/src/tokens/tokens/tokens.ts index b81054bd6..1921b8aa3 100644 --- a/packages/token-metadata/src/tokens/tokens/tokens.ts +++ b/packages/token-metadata/src/tokens/tokens/tokens.ts @@ -1,33 +1,23 @@ -import { TokenMeta, TokenSource, TokenType } from '../../types' +import { TokenMetaBase, TokenSource, TokenType } from '../../types' export default { BTC: { name: 'Bitcoin', symbol: 'BTC', - decimals: 8, logo: 'bitcoin.png', coinGeckoId: 'bitcoin', - tokenType: TokenType.Erc20, - - erc20: { - decimals: 8, - address: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', - tokenType: TokenType.Erc20, - }, + tokenType: TokenType.Unknown, }, wBTC: { name: 'Wrapped Bitcoin', - symbol: 'wBTC', - decimals: 8, logo: 'wbtc.png', coinGeckoId: 'wrapped-bitcoin', - tokenType: TokenType.Erc20, erc20: { + symbol: 'wBTC', decimals: 8, address: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', - tokenType: TokenType.Erc20, }, cw20s: [ @@ -36,39 +26,32 @@ export default { symbol: 'wBTC', source: TokenSource.Cosmos, address: 'inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku', - tokenType: TokenType.Cw20, }, ], }, ETH: { name: 'Ethereum', - symbol: 'ETH', - decimals: 18, logo: 'ethereum.png', coinGeckoId: 'ethereum', - tokenType: TokenType.Erc20, erc20: { + symbol: 'ETH', decimals: 18, isNative: true, address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', - tokenType: TokenType.Erc20, }, }, wETH: { name: 'Wrapped Ethereum', - symbol: 'wETH', - decimals: 18, logo: 'ethereum.png', coinGeckoId: 'ethereum', - tokenType: TokenType.Erc20, erc20: { + symbol: 'wETH', decimals: 18, address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', - tokenType: TokenType.Erc20, }, cw20s: [ @@ -76,14 +59,12 @@ export default { symbol: 'wETH', decimals: 8, address: 'inj1plsk58sxqjw9828aqzeskmc8xy9eu5kppw3jg4', - tokenType: TokenType.Cw20, source: TokenSource.Arbitrum, }, { symbol: 'wETH', decimals: 8, address: 'inj1k9r62py07wydch6sj5sfvun93e4qe0lg7jyatc', - tokenType: TokenType.Cw20, source: TokenSource.EthereumWh, }, ], @@ -91,16 +72,13 @@ export default { INJ: { name: 'Injective', - symbol: 'INJ', - decimals: 18, logo: 'injective-v3.png', coinGeckoId: 'injective-protocol', - tokenType: TokenType.Native, erc20: { + symbol: 'INJ', decimals: 18, address: '0xe28b3B32B6c345A34Ff64674606124Dd5Aceca30', - tokenType: TokenType.Erc20, }, cw20s: [ @@ -109,42 +87,39 @@ export default { symbol: 'INJbsc', source: TokenSource.BinanceSmartChain, address: 'inj1xcgprh58szttp0vqtztvcfy34tkpupr563ua40', - tokenType: TokenType.Cw20, }, { decimals: 8, symbol: 'INJet', source: TokenSource.EthereumWh, address: 'inj1v8gg4wzfauwf9l7895t0eyrrkwe65vh5n7dqmw', - tokenType: TokenType.Cw20, }, ], }, USDT: { name: 'Tether', - symbol: 'USDT', - decimals: 6, logo: 'usdt.png', coinGeckoId: 'tether', - tokenType: TokenType.Erc20, erc20: { + symbol: 'USDT', decimals: 6, address: '0xdAC17F958D2ee523a2206206994597C13D831ec7', - tokenType: TokenType.Erc20, }, - ibc: { - decimals: 6, - symbol: 'USDTkv', - isNative: true, - baseDenom: 'erc20/tether/usdt', - path: 'transfer/channel-143', - channelId: 'channel-143', - hash: '4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + decimals: 6, + symbol: 'USDTkv', + isNative: true, + baseDenom: 'erc20/tether/usdt', + path: 'transfer/channel-143', + channelId: 'channel-143', + hash: '4ABBEF4C8926DDDB320AE5188CFD63267ABBCEFC0583E4AE05D6E5AA2401DDAB', + source: TokenSource.Cosmos, + }, + ], cw20s: [ { @@ -152,52 +127,37 @@ export default { symbol: 'USDTbsc', source: TokenSource.BinanceSmartChain, address: 'inj1l9eyrnv3ret8da3qh8j5aytp6q4f73crd505lj', - tokenType: TokenType.Cw20, }, { decimals: 6, - symbol: 'USDTso', - source: TokenSource.Solana, + symbol: 'USDTet', + source: TokenSource.EthereumWh, address: 'inj18zykysxw9pcvtyr9ylhe0p5s7yzf6pzdagune8', - tokenType: TokenType.Cw20, - }, - { - decimals: 6, - symbol: 'USDTso', - source: TokenSource.Solana, - address: 'inj12pwnhtv7yat2s30xuf4gdk9qm85v4j3e60dgvu', - tokenType: TokenType.Cw20, }, { decimals: 6, symbol: 'USDTap', source: TokenSource.Aptos, address: 'inj13yrhllhe40sd3nj0lde9azlwfkyrf2t9r78dx5', - tokenType: TokenType.Cw20, }, { decimals: 6, symbol: 'USDTso', source: TokenSource.Solana, address: 'inj1qjn06jt7zjhdqxgud07nylkpgnaurq6xc5c4fd', - tokenType: TokenType.Cw20, }, ], }, USDC: { - symbol: 'USDC', name: 'USD Coin', - decimals: 6, logo: 'usdc.png', coinGeckoId: 'usd-coin', - tokenType: TokenType.Erc20, erc20: { decimals: 6, symbol: 'USDC', address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - tokenType: TokenType.Erc20, }, cw20s: [ @@ -206,846 +166,748 @@ export default { symbol: 'USDCet', source: TokenSource.EthereumWh, address: 'inj1q6zlut7gtkzknkk773jecujwsdkgq882akqksk', - tokenType: TokenType.Cw20, }, { decimals: 6, symbol: 'USDCso', source: TokenSource.Solana, address: 'inj12pwnhtv7yat2s30xuf4gdk9qm85v4j3e60dgvu', - tokenType: TokenType.Cw20, }, { decimals: 6, symbol: 'USDCarb', source: TokenSource.Arbitrum, address: 'inj1lmcfftadjkt4gt3lcvmz6qn4dhx59dv2m7yv8r', - tokenType: TokenType.Cw20, }, { decimals: 6, symbol: 'USDCbsc', source: TokenSource.BinanceSmartChain, address: 'inj1dngqzz6wphf07fkdam7dn55t8t3r6qenewy9zu', - tokenType: TokenType.Cw20, }, { decimals: 6, symbol: 'USDCpoly', source: TokenSource.Polygon, address: 'inj19s2r64ghfqq3py7f5dr0ynk8yj0nmngca3yvy3', - tokenType: TokenType.Cw20, }, ], - ibc: { - decimals: 6, - symbol: 'USDCnb', - baseDenom: 'uusdc', - isNative: true, - channelId: 'channel-148', - path: 'transfer/channel-148', - hash: '2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + decimals: 6, + symbol: 'USDCnb', + baseDenom: 'uusdc', + isNative: true, + channelId: 'channel-148', + path: 'transfer/channel-148', + hash: '2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E', + source: TokenSource.Cosmos, + }, + { + decimals: 6, + symbol: 'USDCgw', + baseDenom: + 'factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/GGh9Ufn1SeDGrhzEkMyRKt5568VbbxZK2yvWNsd6PbXt', + isNative: false, + path: 'transfer/channel-183', + channelId: 'channel-183', + hash: '7BE71BB68C781453F6BB10114F8E2DF8DC37BA791C502F5389EA10E7BEA68323', + source: TokenSource.EthereumWh, + }, + ], spl: { decimals: 6, symbol: 'USDCso', isNative: false, address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', - tokenType: TokenType.Spl, }, }, GRT: { name: 'Graph Token', - symbol: 'GRT', - decimals: 18, logo: 'graphToken.png', coinGeckoId: 'the-graph', - tokenType: TokenType.Erc20, erc20: { + symbol: 'GRT', decimals: 18, address: '0xc944E90C64B2c07662A292be6244BDf05Cda44a7', - tokenType: TokenType.Erc20, }, }, SNX: { name: 'Synthetix Network Token', - symbol: 'SNX', - decimals: 18, logo: 'synthetix.png', coinGeckoId: 'havven', - tokenType: TokenType.Erc20, erc20: { + symbol: 'SNX', decimals: 18, address: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', - tokenType: TokenType.Erc20, }, }, BNB: { name: 'Binance Coin', - symbol: 'BNB', - decimals: 18, logo: 'bnb.png', coinGeckoId: 'binancecoin', - tokenType: TokenType.Erc20, erc20: { + symbol: 'BNB', decimals: 18, address: '0xB8c77482e45F1F44dE1745F52C74426C631bDD52', - tokenType: TokenType.Erc20, }, }, AAVE: { name: 'Aave', - symbol: 'AAVE', - decimals: 18, logo: 'AAVE.png', coinGeckoId: 'aave', - tokenType: TokenType.Erc20, erc20: { + symbol: 'AAVE', decimals: 18, address: '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', - tokenType: TokenType.Erc20, }, }, YFI: { name: 'yearn.finance', - symbol: 'YFI', logo: 'yfi.png', - decimals: 18, coinGeckoId: 'yearn-finance', - tokenType: TokenType.Erc20, erc20: { + symbol: 'YFI', decimals: 18, address: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', - tokenType: TokenType.Erc20, }, }, COMP: { name: 'Compound', - symbol: 'COMP', - decimals: 18, logo: 'comp.png', coinGeckoId: 'compound-coin', - tokenType: TokenType.Erc20, erc20: { + symbol: 'COMP', decimals: 18, address: '0xc00e94Cb662C3520282E6f5717214004A7f26888', - tokenType: TokenType.Erc20, }, }, ZRX: { name: '0x', - symbol: 'ZRX', - decimals: 18, logo: 'zrx.png', coinGeckoId: '0x', - tokenType: TokenType.Erc20, erc20: { + symbol: 'ZRX', decimals: 18, address: '0xE41d2489571d322189246DaFA5ebDe1F4699F498', - tokenType: TokenType.Erc20, }, }, MATIC: { name: 'Polygon', logo: 'polygon.png', - symbol: 'MATIC', - decimals: 18, coinGeckoId: 'matic-network', - tokenType: TokenType.Erc20, erc20: { + symbol: 'MATIC', decimals: 18, address: '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0', - tokenType: TokenType.Erc20, }, }, UNI: { name: 'Uniswap', - symbol: 'UNI', logo: 'uni.png', - decimals: 18, coinGeckoId: 'uniswap', - tokenType: TokenType.Erc20, erc20: { + symbol: 'UNI', decimals: 18, address: '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', - tokenType: TokenType.Erc20, }, }, DAI: { name: 'Dai', - symbol: 'DAI', - decimals: 18, logo: 'dai.png', coinGeckoId: 'dai', - tokenType: TokenType.Erc20, erc20: { + symbol: 'DAI', decimals: 18, address: '0x6B175474E89094C44Da98b954EedeAC495271d0F', - tokenType: TokenType.Erc20, }, }, LINK: { name: 'Chainlink', - symbol: 'LINK', - decimals: 18, logo: 'chainlink.png', coinGeckoId: 'chainlink', - tokenType: TokenType.Erc20, erc20: { + symbol: 'LINK', decimals: 18, address: '0x514910771AF9Ca656af840dff83E8264EcF986CA', - tokenType: TokenType.Erc20, }, }, SUSHI: { - name: 'SushiSwap', - symbol: 'SUSHI', - decimals: 18, - logo: 'sushi.png', - coinGeckoId: 'sushi', - tokenType: TokenType.Erc20, - erc20: { + coinGeckoId: 'sushi', + name: 'SushiSwap', + logo: 'sushi.png', + symbol: 'SUSHI', decimals: 18, address: '0x6B3595068778DD592e39A122f4f5a5cF09C90fE2', - tokenType: TokenType.Erc20, }, + + cw20s: [ + { + name: 'SUSHI FIGHTER', + logo: 'sushi-inj.png', + symbol: 'SUSHI', + decimals: 18, + address: 'inj1n73yuus64z0yrda9hvn77twkspc4uste9j9ydd', + }, + ], }, AXS: { name: 'Axie Infinity', - symbol: 'AXS', - decimals: 18, logo: 'axs.png', coinGeckoId: 'axie-infinity', - tokenType: TokenType.Erc20, erc20: { + symbol: 'AXS', decimals: 18, address: '0xBB0E17EF65F82Ab018d8EDd776e8DD940327B28b', - tokenType: TokenType.Erc20, }, }, '1INCH': { name: '1inch', - symbol: '1INCH', - decimals: 18, logo: '1inch.png', coinGeckoId: '1inch', - tokenType: TokenType.Erc20, erc20: { + symbol: '1INCH', decimals: 18, address: '0x111111111117dC0aa78b770fA6A738034120C302', - tokenType: TokenType.Erc20, }, }, BAT: { name: 'Basic Attention Token', - symbol: 'BAT', - decimals: 18, logo: 'bat.png', coinGeckoId: 'basic-attention-token', - tokenType: TokenType.Erc20, erc20: { + symbol: 'BAT', decimals: 18, address: '0x0D8775F648430679A709E98d2b0Cb6250d2887EF', - tokenType: TokenType.Erc20, }, }, BUSD: { name: 'Binance USD', - symbol: 'BUSD', - decimals: 18, logo: 'busd.png', coinGeckoId: 'binance-usd', - tokenType: TokenType.Erc20, erc20: { + symbol: 'BUSD', decimals: 18, address: '0x4Fabb145d64652a948d72533023f6E7A623C7C53', - tokenType: TokenType.Erc20, }, }, CEL: { name: 'Celsius', - symbol: 'CEL', - decimals: 4, logo: 'cel.png', coinGeckoId: 'celsius-degree-token', - tokenType: TokenType.Erc20, erc20: { + symbol: 'CEL', decimals: 4, address: '0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d', - tokenType: TokenType.Erc20, }, }, CELL: { name: 'Cellframe', - symbol: 'CELL', - decimals: 18, logo: 'cell.png', coinGeckoId: 'cellframe', - tokenType: TokenType.Erc20, erc20: { + symbol: 'CELL', decimals: 18, address: '0x26c8AFBBFE1EBaca03C2bB082E69D0476Bffe099', - tokenType: TokenType.Erc20, }, }, DEFI5: { name: 'DEFI Top 5 Tokens Index', - symbol: 'DEFI5', - decimals: 18, logo: 'defi5.png', coinGeckoId: 'defi-top-5-tokens-index', - tokenType: TokenType.Erc20, erc20: { + symbol: 'DEFI5', decimals: 18, address: '0xfa6de2697D59E88Ed7Fc4dFE5A33daC43565ea41', - tokenType: TokenType.Erc20, }, }, ENJ: { name: 'Enjin Coin', - symbol: 'ENJ', - decimals: 18, logo: 'enj.png', coinGeckoId: 'enjincoin', - tokenType: TokenType.Erc20, erc20: { + symbol: 'ENJ', decimals: 18, address: '0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c', - tokenType: TokenType.Erc20, }, }, EVAI: { name: 'Evai.io', - symbol: 'EVAI', - decimals: 8, logo: 'evai.png', coinGeckoId: 'evai', - tokenType: TokenType.Erc20, erc20: { + symbol: 'EVAI', decimals: 8, address: '0x50f09629d0afDF40398a3F317cc676cA9132055c', - tokenType: TokenType.Erc20, }, }, FTM: { name: 'Fantom', - symbol: 'FTM', - decimals: 18, logo: 'ftm.png', coinGeckoId: 'fantom', - tokenType: TokenType.Erc20, erc20: { + symbol: 'FTM', decimals: 18, address: '0x4E15361FD6b4BB609Fa63C81A2be19d873717870', - tokenType: TokenType.Erc20, }, }, HT: { name: 'Huobi Token', - symbol: 'HT', - decimals: 18, logo: 'ht.png', coinGeckoId: 'huobi-token', - tokenType: TokenType.Erc20, erc20: { + symbol: 'HT', decimals: 18, address: '0x6f259637dcD74C767781E37Bc6133cd6A68aa161', - tokenType: TokenType.Erc20, }, }, NEXO: { name: 'Nexo', - symbol: 'NEXO', - decimals: 18, logo: 'nexo.png', coinGeckoId: 'nexo', - tokenType: TokenType.Erc20, erc20: { + symbol: 'NEXO', decimals: 18, address: '0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206', - tokenType: TokenType.Erc20, }, }, NOIA: { name: 'Syntropy', - symbol: 'NOIA', - decimals: 18, logo: 'noia.png', coinGeckoId: 'noia-network', - tokenType: TokenType.Erc20, erc20: { + symbol: 'NOIA', decimals: 18, address: '0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca', - tokenType: TokenType.Erc20, }, }, OCEAN: { name: 'Ocean Protocol', - symbol: 'OCEAN', - decimals: 18, logo: 'ocean.png', coinGeckoId: 'ocean-protocol', - tokenType: TokenType.Erc20, erc20: { + symbol: 'OCEAN', decimals: 18, address: '0x967da4048cD07aB37855c090aAF366e4ce1b9F48', - tokenType: TokenType.Erc20, }, }, PAXG: { name: 'PAX Gold', - symbol: 'PAXG', - decimals: 18, logo: 'paxg.png', coinGeckoId: 'pax-gold', - tokenType: TokenType.Erc20, erc20: { + symbol: 'PAXG', decimals: 18, address: '0x45804880De22913dAFE09f4980848ECE6EcbAf78', - tokenType: TokenType.Erc20, }, }, POOL: { name: 'PoolTogether', - symbol: 'POOL', - decimals: 18, logo: 'pool.png', coinGeckoId: 'pooltogether', - tokenType: TokenType.Erc20, erc20: { + symbol: 'POOL', decimals: 18, address: '0x0cEC1A9154Ff802e7934Fc916Ed7Ca50bDE6844e', - tokenType: TokenType.Erc20, }, }, RUNE: { name: 'THORChain (ERC20)', - symbol: 'RUNE', - decimals: 18, logo: 'rune.png', coinGeckoId: 'thorchain-erc20', - tokenType: TokenType.Erc20, erc20: { + symbol: 'RUNE', decimals: 18, address: '0x3155BA85D5F96b2d030a4966AF206230e46849cb', - tokenType: TokenType.Erc20, }, }, SHIB: { name: 'SHIBA INU', - symbol: 'SHIB', - decimals: 18, logo: 'shib.png', coinGeckoId: 'shiba-inu', - tokenType: TokenType.Erc20, erc20: { + symbol: 'SHIB', decimals: 18, address: '0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE', - tokenType: TokenType.Erc20, }, }, STARS: { name: 'Mogul Productions', - symbol: 'STARS', - decimals: 18, logo: 'stars.png', coinGeckoId: 'mogul-productions', - tokenType: TokenType.Erc20, erc20: { + symbol: 'STARS', decimals: 18, address: '0xc55c2175E90A46602fD42e931f62B3Acc1A013Ca', - tokenType: TokenType.Erc20, }, }, STT: { name: 'Scatter.cx', - symbol: 'STT', - decimals: 18, logo: 'scatter.webp', coinGeckoId: 'scatter-cx', - tokenType: TokenType.Erc20, erc20: { + symbol: 'STT', decimals: 18, address: '0xaC9Bb427953aC7FDDC562ADcA86CF42D988047Fd', - tokenType: TokenType.Erc20, }, }, SWAP: { name: 'TrustSwap', - symbol: 'SWAP', - decimals: 18, logo: 'trustswap.png', coinGeckoId: 'trustswap', - tokenType: TokenType.Erc20, erc20: { + symbol: 'SWAP', decimals: 18, address: '0xcc4304a31d09258b0029ea7fe63d032f52e44efe', - tokenType: TokenType.Erc20, }, }, UMA: { name: 'UMA', - symbol: 'UMA', - decimals: 18, coinGeckoId: 'uma', logo: 'uma.png', - tokenType: TokenType.Erc20, erc20: { + symbol: 'UMA', decimals: 18, address: '0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828', - tokenType: TokenType.Erc20, }, }, UTK: { name: 'Utrust', - symbol: 'UTK', - decimals: 18, logo: 'utk.png', coinGeckoId: 'utrust', - tokenType: TokenType.Erc20, erc20: { + symbol: 'UTK', decimals: 18, address: '0xdc9Ac3C20D1ed0B540dF9b1feDC10039Df13F99c', - tokenType: TokenType.Erc20, }, }, ATOM: { name: 'Cosmos', - symbol: 'ATOM', - decimals: 6, logo: 'atom.png', coinGeckoId: 'cosmos', - tokenType: TokenType.Ibc, erc20: { + symbol: 'ATOM', decimals: 6, address: '0x8D983cb9388EaC77af0474fA441C4815500Cb7BB', - tokenType: TokenType.Erc20, }, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uatom', - path: 'transfer/channel-1', - channelId: 'channel-1', - hash: 'C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'ATOM', + decimals: 6, + isNative: true, + baseDenom: 'uatom', + path: 'transfer/channel-1', + channelId: 'channel-1', + hash: 'C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9', + source: TokenSource.Cosmos, + }, + ], }, UPHOTON: { name: 'Cosmos Testnet', - symbol: 'UPHOTON', - decimals: 6, logo: 'atom.png', coinGeckoId: 'cosmos', - tokenType: TokenType.Ibc, erc20: { + symbol: 'UPHOTON', decimals: 6, address: '0x8D983cb9388EaC77af0474fA441C4815500Cb7BB', - tokenType: TokenType.Erc20, }, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uphoton', - path: 'transfer/channel-2', - channelId: 'channel-2', - hash: '48BC9C6ACBDFC1EBA034F1859245D53EA4BF74147189D66F27C23BF966335DFB', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'UPHOTON', + decimals: 6, + isNative: true, + baseDenom: 'uphoton', + path: 'transfer/channel-2', + channelId: 'channel-2', + hash: '48BC9C6ACBDFC1EBA034F1859245D53EA4BF74147189D66F27C23BF966335DFB', + source: TokenSource.Cosmos, + }, + ], }, LUNA: { name: 'Terra', - symbol: 'LUNA', - decimals: 6, logo: 'luna.png', coinGeckoId: 'terra-luna', - tokenType: TokenType.Ibc, erc20: { + symbol: 'LUNA', decimals: 6, address: '0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9', - tokenType: TokenType.Erc20, }, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uluna', - path: 'transfer/channel-4', - channelId: 'channel-4', - hash: 'B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'LUNA', + decimals: 6, + isNative: true, + baseDenom: 'uluna', + path: 'transfer/channel-4', + channelId: 'channel-4', + hash: 'B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395', + source: TokenSource.Cosmos, + }, + ], }, UST: { name: 'TerraUSD', - baseDenom: 'UUSD', - symbol: 'UST', logo: 'ust.png', - decimals: 18, coinGeckoId: 'terrausd', - tokenType: TokenType.Ibc, erc20: { + symbol: 'UST', decimals: 18, address: '0xa47c8bf37f92aBed4A126BDA807A7b7498661acD', - tokenType: TokenType.Erc20, }, - ibc: { - decimals: 18, - isNative: true, - baseDenom: 'uusd', - path: 'transfer/channel-4', - channelId: 'channel-4', - hash: 'B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'UST', + decimals: 18, + isNative: true, + baseDenom: 'uusd', + path: 'transfer/channel-4', + channelId: 'channel-4', + hash: 'B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C', + source: TokenSource.Cosmos, + }, + ], }, GF: { name: 'GuildFi', - symbol: 'GF', - decimals: 18, logo: 'gf.png', coinGeckoId: 'guildfi', - tokenType: TokenType.Erc20, erc20: { + symbol: 'GF', decimals: 18, address: '0xaaef88cea01475125522e117bfe45cf32044e238', - tokenType: TokenType.Erc20, }, }, XBX: { name: 'BurnX', - symbol: 'XBX', - decimals: 18, logo: 'xbx.png', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { + symbol: 'XBX', decimals: 18, address: '0x080B12E80C9b45e97C23b6ad10a16B3e2a123949', - tokenType: TokenType.Erc20, }, }, OSMO: { name: 'Osmosis', - symbol: 'OSMO', - decimals: 6, coinGeckoId: 'osmosis', logo: 'osmo.png', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uosmo', - path: 'transfer/channel-8', - channelId: 'channel-8', - hash: '92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'OSMO', + decimals: 6, + isNative: true, + baseDenom: 'uosmo', + path: 'transfer/channel-8', + channelId: 'channel-8', + hash: '92E0120F15D037353CFB73C14651FC8930ADC05B93100FD7754D3A689E53B333', + source: TokenSource.Cosmos, + }, + ], }, TAB: { name: 'Injective', logo: 'injective-v3.png', - symbol: 'TAB', - decimals: 18, coinGeckoId: 'injective-protocol', - tokenType: TokenType.Erc20, erc20: { + symbol: 'TAB', decimals: 18, address: '0x36B3D7ACe7201E28040eFf30e815290D7b37ffaD', - tokenType: TokenType.Erc20, }, }, HUAHUA: { name: 'Chihuahua', - symbol: 'HUAHUA', - decimals: 6, logo: 'chihuahua.jpeg', coinGeckoId: 'chihuahua-token', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uhuahua', - path: 'transfer/channel-76', - channelId: 'channel-76', - hash: 'E7807A46C0B7B44B350DA58F51F278881B863EC4DCA94635DAB39E52C30766CB', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'HUAHUA', + decimals: 6, + isNative: true, + baseDenom: 'uhuahua', + path: 'transfer/channel-76', + channelId: 'channel-76', + hash: 'E7807A46C0B7B44B350DA58F51F278881B863EC4DCA94635DAB39E52C30766CB', + source: TokenSource.Cosmos, + }, + ], }, JUNO: { name: 'Juno', - symbol: 'JUNO', - decimals: 6, logo: 'juno.jpeg', coinGeckoId: 'juno-network', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'ujuno', - path: 'transfer/channel-78', - channelId: 'channel-78', - hash: 'D50E26996253EBAA8C684B9CD653FE2F7665D7BDDCA3D48D5E1378CF6334F211', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'JUNO', + decimals: 6, + isNative: true, + baseDenom: 'ujuno', + path: 'transfer/channel-78', + channelId: 'channel-78', + hash: 'D50E26996253EBAA8C684B9CD653FE2F7665D7BDDCA3D48D5E1378CF6334F211', + source: TokenSource.Cosmos, + }, + ], }, WHALE: { name: 'White Whale', - symbol: 'WHALE', - decimals: 6, logo: 'whale.png', coinGeckoId: 'white-whale', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uwhale', - path: 'transfer/channel-102', - channelId: 'channel-102', - hash: 'D6E6A20ABDD600742D22464340A7701558027759CE14D12590F8EA869CCCF445', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'WHALE', + decimals: 6, + isNative: true, + baseDenom: 'uwhale', + path: 'transfer/channel-102', + channelId: 'channel-102', + hash: 'D6E6A20ABDD600742D22464340A7701558027759CE14D12590F8EA869CCCF445', + source: TokenSource.Cosmos, + }, + ], }, NOIS: { name: 'Nois', - symbol: 'NOIS', - decimals: 6, coinGeckoId: 'nois', logo: 'nois.png', - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'unois', - path: 'transfer/channel-138', - channelId: 'channel-138', - hash: 'DD9182E8E2B13C89D6B4707C7B43E8DB6193F9FF486AFA0E6CF86B427B0D231A', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'NOIS', + decimals: 6, + isNative: true, + baseDenom: 'unois', + path: 'transfer/channel-138', + channelId: 'channel-138', + hash: 'DD9182E8E2B13C89D6B4707C7B43E8DB6193F9FF486AFA0E6CF86B427B0D231A', + source: TokenSource.Cosmos, + }, + ], }, AXL: { name: 'Axelar', logo: 'axelar.png', - symbol: 'AXL', - decimals: 6, coinGeckoId: 'axelar', - tokenType: TokenType.Ibc, erc20: { + symbol: 'AXL', decimals: 6, address: '0x3eacbDC6C382ea22b78aCc158581A55aaF4ef3Cc', - tokenType: TokenType.Erc20, }, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uaxl', - path: 'transfer/channel-84', - channelId: 'channel-84', - hash: 'B68C1D2682A8B69E20BB921E34C6A3A2B6D1E13E3E8C0092E373826F546DEE65', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'AXL', + decimals: 6, + isNative: true, + baseDenom: 'uaxl', + path: 'transfer/channel-84', + channelId: 'channel-84', + hash: 'B68C1D2682A8B69E20BB921E34C6A3A2B6D1E13E3E8C0092E373826F546DEE65', + source: TokenSource.Cosmos, + }, + ], }, BAYC: { @@ -1059,74 +921,71 @@ export default { APE: { name: 'Ape Coin', - symbol: 'APE', - decimals: 18, logo: 'ape.png', coinGeckoId: 'apecoin', - tokenType: TokenType.Erc20, erc20: { + symbol: 'APE', decimals: 18, address: '0x4d224452801ACEd8B2F0aebE155379bb5D594381', - tokenType: TokenType.Erc20, }, }, SCRT: { name: 'Secret Network', - symbol: 'SCRT', - decimals: 6, logo: 'scrt.png', coinGeckoId: 'secret', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uscrt', - path: 'transfer/channel-88', - channelId: 'channel-88', - hash: '0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'SCRT', + decimals: 6, + isNative: true, + baseDenom: 'uscrt', + path: 'transfer/channel-88', + channelId: 'channel-88', + hash: '0954E1C28EB7AF5B72D24F3BC2B47BBB2FDF91BDDFD57B74B99E133AED40972A', + source: TokenSource.Cosmos, + }, + ], }, XPRT: { name: 'Persistence', - symbol: 'XPRT', - decimals: 6, logo: 'xprt.png', coinGeckoId: 'persistence', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'uxprt', - path: 'transfer/channel-82', - channelId: 'channel-82', - hash: 'B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'XPRT', + decimals: 6, + isNative: true, + baseDenom: 'uxprt', + path: 'transfer/channel-82', + channelId: 'channel-82', + hash: 'B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB', + source: TokenSource.Cosmos, + }, + ], }, EVMOS: { name: 'Evmos', - symbol: 'EVMOS', - decimals: 18, logo: 'evmos.png', coinGeckoId: 'evmos', - tokenType: TokenType.Ibc, - ibc: { - decimals: 18, - isNative: true, - baseDenom: 'aevmos', - path: 'transfer/channel-83', - channelId: 'channel-83', - hash: '16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'EVMOS', + decimals: 18, + isNative: true, + baseDenom: 'aevmos', + path: 'transfer/channel-83', + channelId: 'channel-83', + hash: '16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821', + source: TokenSource.Cosmos, + }, + ], }, STX: { @@ -1140,407 +999,365 @@ export default { DOT: { name: 'Polkadot', - symbol: 'DOT', - decimals: 10, logo: 'dot.jpeg', coinGeckoId: 'polkadot', - tokenType: TokenType.Ibc, erc20: { + symbol: 'DOT', decimals: 10, address: '0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080', - tokenType: TokenType.Erc20, - }, - - ibc: { - decimals: 10, - isNative: false, - baseDenom: 'dot-planck', - path: 'transfer/channel-84', - channelId: 'channel-84', - hash: '624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4', - tokenType: TokenType.Ibc, }, - cw20: { - decimals: 10, - address: 'inj1spzwwtr2luljr300ng2gu52zg7wn7j44m92mdf', - tokenType: TokenType.Cw20, - }, - }, - - 'DOT-PLANCK': { - name: 'Polkadot', - symbol: 'DOT', - decimals: 10, - logo: 'dot.jpeg', - coinGeckoId: 'polkadot', - tokenType: TokenType.Erc20, + ibcs: [ + { + symbol: 'DOT', + decimals: 10, + isNative: false, + baseDenom: 'dot-planck', + path: 'transfer/channel-84', + channelId: 'channel-84', + hash: '624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4', + source: TokenSource.Cosmos, + }, + ], - erc20: { - decimals: 10, - address: '0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080', - tokenType: TokenType.Erc20, - }, + cw20s: [ + { + symbol: 'DOT', + decimals: 10, + address: 'inj1spzwwtr2luljr300ng2gu52zg7wn7j44m92mdf', + }, + ], }, STRD: { name: 'Stride', - symbol: 'STRD', - decimals: 6, logo: 'stride.png', coinGeckoId: 'stride', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'ustrd', - path: 'transfer/channel-89', - channelId: 'channel-89', - hash: '3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'STRD', + decimals: 6, + isNative: true, + baseDenom: 'ustrd', + path: 'transfer/channel-89', + channelId: 'channel-89', + hash: '3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25', + source: TokenSource.Cosmos, + }, + ], }, CRE: { name: 'Crescent', - symbol: 'CRE', - decimals: 6, logo: 'crescent.jpeg', coinGeckoId: 'crescent-network', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'ucre', - path: 'transfer/channel-90', - channelId: 'channel-90', - hash: '3A6DD3358D9F7ADD18CDE79BA10B400511A5DE4AE2C037D7C9639B52ADAF35C6', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'CRE', + decimals: 6, + isNative: true, + baseDenom: 'ucre', + path: 'transfer/channel-90', + channelId: 'channel-90', + hash: '3A6DD3358D9F7ADD18CDE79BA10B400511A5DE4AE2C037D7C9639B52ADAF35C6', + source: TokenSource.Cosmos, + }, + ], }, - ZEN: { - name: 'ZEN', - logo: 'zen.svg', - symbol: 'ZEN', - decimals: 18, - coinGeckoId: '', - tokenType: TokenType.TokenFactory, - - cw20: { - decimals: 18, - address: 'uzen', - tokenType: TokenType.Cw20, - }, - }, + ASTRO: { + name: 'ASTRO', + logo: 'astroport.png', + coinGeckoId: 'astroport-fi', - PROJ: { - name: 'PROJ', - logo: 'proj.png', - symbol: 'PROJ', - decimals: 18, - coinGeckoId: '', - tokenType: TokenType.TokenFactory, - - cw20: { - decimals: 18, - address: 'proj', - tokenType: TokenType.Cw20, - }, - }, - - PROJX: { - name: 'PROJX', - logo: 'projx.png', - symbol: 'PROJX', - decimals: 18, - coinGeckoId: '', - tokenType: TokenType.TokenFactory, - - cw20: { - decimals: 18, - address: 'projx', - tokenType: TokenType.Cw20, - }, - }, - - ASTRO: { - name: 'ASTRO', - symbol: 'ASTRO', - decimals: 6, - logo: 'astroport.png', - coinGeckoId: 'astroport-fi', - tokenType: TokenType.Ibc, - - ibc: { - decimals: 6, - isNative: true, - baseDenom: - 'cw20:terra1nsuqsk6kh58ulczatwev87ttq2z6r3pusulg9r24mfj2fvtzd4uq3exn26', - path: 'transfer/channel-104', - channelId: 'channel-104', - hash: 'EBD5A24C554198EBAF44979C5B4D2C2D312E6EBAB71962C92F735499C7575839', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'ASTRO', + decimals: 6, + isNative: true, + baseDenom: + 'cw20:terra1nsuqsk6kh58ulczatwev87ttq2z6r3pusulg9r24mfj2fvtzd4uq3exn26', + path: 'transfer/channel-104', + channelId: 'channel-104', + hash: 'EBD5A24C554198EBAF44979C5B4D2C2D312E6EBAB71962C92F735499C7575839', + source: TokenSource.Cosmos, + }, + ], }, SOL: { name: 'Solana', - symbol: 'SOL', - decimals: 8, logo: 'solana.png', coinGeckoId: 'solana', - tokenType: TokenType.Cw20, spl: { + symbol: 'SOL', decimals: 9, address: '', isNative: true, - tokenType: TokenType.Spl, }, - cw20: { - decimals: 8, - address: 'inj1sthrn5ep8ls5vzz8f9gp89khhmedahhdkqa8z3', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'SOL', + // symbol: 'SOLlegacy', + decimals: 8, + address: 'inj1sthrn5ep8ls5vzz8f9gp89khhmedahhdkqa8z3', + }, + ], + + ibcs: [ + { + symbol: 'SOLgw', + // symbol: 'SOL', + decimals: 8, + isNative: false, + baseDenom: + 'factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/8sYgCzLRJC3J7qPn2bNbx6PiGcarhyx8rBhVaNnfvHCA', + path: 'transfer/channel-183', + channelId: 'channel-183', + hash: 'A8B0B746B5AB736C2D8577259B510D56B8AF598008F68041E3D634BCDE72BE97', + source: TokenSource.Solana, + }, + ], }, SOMM: { name: 'Sommelier', - symbol: 'SOMM', - decimals: 6, logo: 'sommelier.png', coinGeckoId: 'sommelier', - tokenType: TokenType.Ibc, erc20: { + symbol: 'SOMM', decimals: 6, address: '0xa670d7237398238DE01267472C6f13e5B8010FD1', - tokenType: TokenType.Erc20, }, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'usomm', - path: 'transfer/channel-93', - channelId: 'channel-93', - hash: '34346A60A95EB030D62D6F5BDD4B745BE18E8A693372A8A347D5D53DBBB1328B', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'SOMM', + decimals: 6, + isNative: true, + baseDenom: 'usomm', + path: 'transfer/channel-93', + channelId: 'channel-93', + hash: '34346A60A95EB030D62D6F5BDD4B745BE18E8A693372A8A347D5D53DBBB1328B', + source: TokenSource.Cosmos, + }, + ], }, ETHBTCTREND: { name: 'ETHBTC Trend', - symbol: 'ETHBTCTrend', - decimals: 18, logo: 'ethbtctrend.png', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { + symbol: 'ETHBTCTrend', decimals: 18, address: '0x6b7f87279982d919Bbf85182DDeAB179B366D8f2', - tokenType: TokenType.Erc20, }, }, STEADYETH: { name: 'SteadyETH', - symbol: 'SteadyETH', - decimals: 18, logo: 'steadyeth.png', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { + symbol: 'SteadyETH', decimals: 18, address: '0x3F07A84eCdf494310D397d24c1C78B041D2fa622', - tokenType: TokenType.Erc20, }, }, STEADYBTC: { name: 'SteadyBTC', - symbol: 'SteadyBTC', - decimals: 18, logo: 'steadybtc.png', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { + symbol: 'SteadyBTC', decimals: 18, address: '0x4986fD36b6b16f49b43282Ee2e24C5cF90ed166d', - tokenType: TokenType.Erc20, }, }, XPLA: { name: 'XPLA', - symbol: 'XPLA', - decimals: 8, logo: 'xpla.png', coinGeckoId: 'xpla', - tokenType: TokenType.Cw20, - cw20: { - decimals: 8, - address: 'inj1j08452mqwadp8xu25kn9rleyl2gufgfjqjvewe', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'XPLA', + decimals: 8, + address: 'inj1j08452mqwadp8xu25kn9rleyl2gufgfjqjvewe', + }, + ], }, AVAX: { name: 'AVAX', - symbol: 'WAVAX', - decimals: 8, logo: 'avax.webp', coinGeckoId: 'avalanche-2', - tokenType: TokenType.Cw20, - cw20: { - decimals: 8, - address: 'inj18a2u6az6dzw528rptepfg6n49ak6hdzkny4um6', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'AVAX', + decimals: 8, + address: 'inj18a2u6az6dzw528rptepfg6n49ak6hdzkny4um6', + }, + ], }, BONK: { name: 'BONK', - symbol: 'BONK', - decimals: 5, logo: 'bonk.jpeg', coinGeckoId: 'bonk', - type: TokenType.TokenFactory, + + cw20s: [ + { + symbol: 'BONK', + decimals: 5, + address: 'inj14rry9q6dym3dgcwzq79yay0e9azdz55jr465ch', + }, + ], }, CHZ: { name: 'Chiliz', - symbol: 'CHZ', - decimals: 18, logo: 'chz.png', coinGeckoId: 'chiliz', - tokenType: TokenType.Cw20, erc20: { + symbol: 'CHZ', decimals: 18, address: '0x3506424F91fD33084466F402d5D97f05F8e3b4AF', - tokenType: TokenType.Erc20, }, - cw20: { - decimals: 8, - address: 'inj1q6kpxy6ar5lkxqudjvryarrrttmakwsvzkvcyh', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'CHZ', + decimals: 8, + address: 'inj1q6kpxy6ar5lkxqudjvryarrrttmakwsvzkvcyh', + }, + ], }, CANTO: { name: 'Canto', - symbol: 'CANTO', - decimals: 18, logo: 'canto.webp', coinGeckoId: 'canto', - tokenType: TokenType.Ibc, - ibc: { - decimals: 18, - isNative: true, - baseDenom: 'acanto', - path: 'transfer/channel-99', - channelId: 'channel-99', - hash: 'D91A2C4EE7CD86BBAFCE0FA44A60DDD9AFBB7EEB5B2D46C0984DEBCC6FEDFAE8', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'CANTO', + decimals: 18, + isNative: true, + baseDenom: 'acanto', + path: 'transfer/channel-99', + channelId: 'channel-99', + hash: 'D91A2C4EE7CD86BBAFCE0FA44A60DDD9AFBB7EEB5B2D46C0984DEBCC6FEDFAE8', + source: TokenSource.Cosmos, + }, + ], }, QAT: { name: 'Test QAT', - symbol: 'QAT', - decimals: 18, logo: 'injective-v3.png', coinGeckoId: 'injective-protocol', - tokenType: TokenType.Erc20, erc20: { + symbol: 'QAT', decimals: 18, address: '0x1902e18fEB1234D00d880f1fACA5C8d74e8501E9', - tokenType: TokenType.Erc20, }, - cw20: { - decimals: 8, - address: 'inj1m4g54lg2mhhm7a4h3ms5xlyecafhe4macgsuen', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'QAT', + decimals: 8, + address: 'inj1m4g54lg2mhhm7a4h3ms5xlyecafhe4macgsuen', + }, + ], }, PUGGO: { name: 'Puggo', - symbol: 'PUG', - decimals: 18, logo: 'puggo.jpg', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { decimals: 18, + symbol: 'PUG', address: '0xf9a06dE3F6639E6ee4F079095D5093644Ad85E8b', - tokenType: TokenType.Erc20, }, }, LDO: { name: 'Lido DAO Token', - symbol: 'LDO', - decimals: 18, logo: 'lido-dao.webp', coinGeckoId: 'lido-dao', - tokenType: TokenType.Cw20, erc20: { + symbol: 'LDO', decimals: 18, address: '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32', - tokenType: TokenType.Erc20, }, - cw20: { - decimals: 8, - address: 'inj1me6t602jlndzxgv2d7ekcnkjuqdp7vfh4txpyy', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'LDO', + decimals: 8, + address: 'inj1me6t602jlndzxgv2d7ekcnkjuqdp7vfh4txpyy', + }, + ], }, ARB: { name: 'Arbitrum', - symbol: 'ARB', - decimals: 18, - logo: 'arb.png', + logo: 'arb-circle.png', coinGeckoId: 'arbitrum', - tokenType: TokenType.Cw20, evm: { + symbol: 'ARB', decimals: 18, address: '0x912CE59144191C1204E64559FE8253a0e49E6548', - tokenType: TokenType.Erc20, }, erc20: { + symbol: 'ARB', decimals: 18, address: '0x912CE59144191C1204E64559FE8253a0e49E6548', - tokenType: TokenType.Erc20, }, - cw20: { - decimals: 8, - address: 'inj1d5vz0uzwlpfvgwrwulxg6syy82axa58y4fuszd', - source: TokenSource.Arbitrum, - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'ARB', + decimals: 8, + address: 'inj1d5vz0uzwlpfvgwrwulxg6syy82axa58y4fuszd', + source: TokenSource.Arbitrum, + }, + ], + + ibcs: [ + { + decimals: 8, + symbol: 'ARBgw', + baseDenom: + 'factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/4jq5m8FR6W6nJygDj8NMMbB48mqX4LQHc3j5uEb9syDe', + isNative: false, + path: 'transfer/channel-183', + channelId: 'channel-183', + hash: '8CF0E4184CA3105798EDB18CAA3981ADB16A9951FE9B05C6D830C746202747E1', + source: TokenSource.Arbitrum, + }, + ], }, EUR: { @@ -1570,404 +1387,368 @@ export default { tokenType: TokenType.Unknown, }, + XAU: { + name: 'Gold', + symbol: 'XAU', + decimals: 6, + logo: 'gold.png', + coinGeckoId: '', + tokenType: TokenType.Unknown, + }, + + GOLD: { + name: 'GOLD', + symbol: 'GOLD', + decimals: 18, + logo: 'gold.png', + coinGeckoId: '', + tokenType: TokenType.Unknown, + }, + BRZ: { name: 'Brazilian Digital Token', - symbol: 'BRZ', - decimals: 4, logo: 'brz.png', coinGeckoId: 'brz', - tokenType: TokenType.Cw20, erc20: { + symbol: 'BRZ', decimals: 4, address: '0x420412E765BFa6d85aaaC94b4f7b708C89be2e2B', - tokenType: TokenType.Erc20, }, - cw20: { - decimals: 4, - address: 'inj14jesa4q248mfxztfc9zgpswkpa4wx249mya9kk', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'BRZ', + decimals: 4, + address: 'inj14jesa4q248mfxztfc9zgpswkpa4wx249mya9kk', + }, + ], }, ASTR: { name: 'Astar', - symbol: 'ASTR', - decimals: 18, logo: 'astar.png', coinGeckoId: 'astar', - tokenType: TokenType.Cw20, - - cw20: { - decimals: 18, - address: 'inj1mhmln627samtkuwe459ylq763r4n7n69gxxc9x', - tokenType: TokenType.Cw20, - }, - }, - XAU: { - name: 'Gold', - symbol: 'XAU', - decimals: 6, - logo: 'gold.png', - coinGeckoId: '', - tokenType: TokenType.Unknown, + cw20s: [ + { + symbol: 'ASTR', + decimals: 18, + address: 'inj1mhmln627samtkuwe459ylq763r4n7n69gxxc9x', + }, + ], }, ALPHA: { name: 'Alpha Coin', - symbol: 'ALPHA', - decimals: 18, logo: 'alpha.png', coinGeckoId: 'alphacoin', - tokenType: TokenType.Cw20, erc20: { + symbol: 'ALPHA', decimals: 18, address: '0x138C2F1123cF3f82E4596d097c118eAc6684940B', - tokenType: TokenType.Erc20, }, - cw20: { - decimals: 8, - address: 'inj1zwnsemwrpve3wrrg0njj89w6mt5rmj9ydkc46u', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'ALPHA', + decimals: 8, + address: 'inj1zwnsemwrpve3wrrg0njj89w6mt5rmj9ydkc46u', + }, + ], }, WMATIC: { name: 'Wrapped Matic', - symbol: 'WMATIC', - decimals: 18, logo: 'polygon.png', coinGeckoId: 'wmatic', - tokenType: TokenType.Cw20, evm: { + symbol: 'WMATIC', decimals: 18, isNative: true, address: '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270', - tokenType: TokenType.Evm, }, - cw20: { - decimals: 8, - address: 'inj1dxv423h8ygzgxmxnvrf33ws3k94aedfdevxd8h', - source: TokenSource.Polygon, - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'WMATIC', + decimals: 8, + address: 'inj1dxv423h8ygzgxmxnvrf33ws3k94aedfdevxd8h', + source: TokenSource.Polygon, + }, + ], + + ibcs: [ + { + decimals: 8, + symbol: 'WMATICgw', + baseDenom: + 'factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/4gn1J9pchUGh63ez1VwiuTmU4nfJ8Rr8o5HgBC5TMdMk', + isNative: false, + path: 'transfer/channel-183', + channelId: 'channel-183', + hash: '4DEFEB42BAAB2788723759D95B7550BCE460855563ED977036248F5B94C842FC', + source: TokenSource.Polygon, + }, + ], }, '1MPEPE': { name: 'Pepe', - symbol: 'MPEPE', - decimals: 18, logo: 'pepe.jpeg', coinGeckoId: 'pepe', - tokenType: TokenType.Erc20, erc20: { + symbol: 'MPEPE', decimals: 18, address: '0x6982508145454ce325ddbe47a25d4ec3d2311933', - tokenType: TokenType.Erc20, }, }, '1000PEPE': { name: 'Pepe', - symbol: 'KPEPE', - decimals: 18, logo: 'pepe.jpeg', coinGeckoId: 'pepe', - tokenType: TokenType.Erc20, erc20: { + symbol: 'KPEPE', decimals: 18, address: '0x6982508145454ce325ddbe47a25d4ec3d2311933', - tokenType: TokenType.Erc20, }, }, PEPE: { name: 'Pepe', - symbol: 'PEPE', - decimals: 18, logo: 'pepe.jpeg', coinGeckoId: 'pepe', - tokenType: TokenType.Erc20, erc20: { + symbol: 'PEPE', decimals: 18, address: '0x6982508145454ce325ddbe47a25d4ec3d2311933', - tokenType: TokenType.Erc20, }, }, WASSIE: { name: 'WASSIE', - symbol: 'WASSIE', - decimals: 18, logo: 'wassie.jpeg', coinGeckoId: 'wassie', - tokenType: TokenType.Erc20, erc20: { + symbol: 'WASSIE', decimals: 18, address: '0x2c95d751da37a5c1d9c5a7fd465c1d50f3d96160', - tokenType: TokenType.Erc20, }, }, RIBBIT: { name: 'Ribbit Meme', - symbol: 'RIBBIT', - decimals: 18, logo: 'ribbit.jpeg', coinGeckoId: 'ribbit-meme', - tokenType: TokenType.Erc20, erc20: { + symbol: 'RIBBIT', decimals: 18, address: '0xb794Ad95317f75c44090f64955954C3849315fFe', - tokenType: TokenType.Erc20, }, }, LAMBO: { name: 'Lambo', - symbol: 'LAMBO', - decimals: 18, logo: 'lambo.jpeg', coinGeckoId: 'lambo-0fcbf0f7-1a8f-470d-ba09-797d5e95d836', - tokenType: TokenType.Erc20, erc20: { + symbol: 'LAMBO', decimals: 18, address: '0x3d2b66BC4f9D6388BD2d97B95b565BE1686aEfB3', - tokenType: TokenType.Erc20, }, }, STINJ: { name: 'Stride Staked Injective', - symbol: 'STINJ', - decimals: 18, logo: 'stinj.png', coinGeckoId: 'stride-staked-injective', - tokenType: TokenType.Ibc, - ibc: { - decimals: 18, - isNative: true, - baseDenom: 'stinj', - path: 'transfer/channel-89', - channelId: 'channel-89', - hash: 'AC87717EA002B0123B10A05063E69BCA274BA2C44D842AEEB41558D2856DCE93', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'STINJ', + decimals: 18, + isNative: true, + baseDenom: 'stinj', + path: 'transfer/channel-89', + channelId: 'channel-89', + hash: 'AC87717EA002B0123B10A05063E69BCA274BA2C44D842AEEB41558D2856DCE93', + source: TokenSource.Cosmos, + }, + ], }, XRP: { name: 'Ripple', - symbol: 'XRP', - decimals: 18, logo: 'xrp.png', coinGeckoId: 'ripple', - tokenType: TokenType.Erc20, erc20: { + symbol: 'XRP', decimals: 18, address: '0x1d2f0da169ceb9fc7b3144628db156f3f6c60dbe', - tokenType: TokenType.Erc20, }, }, - DEMO: { - name: 'Demo Coin', - symbol: 'DEMO', - decimals: 6, - logo: 'injective-v3.png', - coinGeckoId: '', - tokenType: TokenType.TokenFactory, - }, - RAI: { name: 'Rai Reflex Index', - symbol: 'RAI', - decimals: 18, logo: 'rai.png', coinGeckoId: 'rai', - tokenType: TokenType.Erc20, erc20: { + symbol: 'RAI', decimals: 18, address: '0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919', - tokenType: TokenType.Erc20, }, }, BTSG: { name: 'Rai Reflex Index', - symbol: 'BitSong', - decimals: 18, logo: 'btsg.png', coinGeckoId: 'bitsong', - tokenType: TokenType.Erc20, erc20: { + symbol: 'BitSong', decimals: 18, address: '0x05079687D35b93538cbd59fe5596380cae9054A9', - tokenType: TokenType.Erc20, }, }, CVR: { name: 'CoverCompared', - symbol: 'CVR', - decimals: 18, logo: 'cvr.png', coinGeckoId: 'covercompared', - tokenType: TokenType.Erc20, erc20: { + symbol: 'CVR', decimals: 18, address: '0x3c03b4ec9477809072ff9cc9292c9b25d4a8e6c6', - tokenType: TokenType.Erc20, }, }, QNT: { name: 'Quant', - symbol: 'QNT', - decimals: 18, logo: 'qnt.png', coinGeckoId: 'quant-network', - tokenType: TokenType.Erc20, erc20: { + symbol: 'QNT', decimals: 18, address: '0x4a220e6096b25eadb88358cb44068a3248254675', - tokenType: TokenType.Erc20, }, }, WSTETH: { name: 'Lido wstETH', - symbol: 'WSTETH', - decimals: 18, logo: 'wsteth.png', coinGeckoId: 'wrapped-steth', - tokenType: TokenType.Erc20, erc20: { + symbol: 'WSTETH', decimals: 18, address: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0', - tokenType: TokenType.Erc20, }, }, DYDX: { name: 'dYdX', - symbol: 'dYdX', - decimals: 18, logo: 'dydx.png', coinGeckoId: 'dydx', - tokenType: TokenType.Erc20, erc20: { + symbol: 'dYdX', decimals: 18, address: '0x92d6c1e31e14520e676a687f0a93788b716beff5', - tokenType: TokenType.Erc20, }, }, XAC: { name: 'General Attention Currency', - symbol: 'XAC', - decimals: 8, logo: 'xac.png', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { + symbol: 'XAC', decimals: 8, address: '0xDe4C5a791913838027a2185709E98c5C6027EA63', - tokenType: TokenType.Erc20, }, }, STETH: { name: 'Lido Staked ETH', - symbol: 'stETH', - decimals: 18, logo: 'steth.png', coinGeckoId: 'staked-ether', - tokenType: TokenType.Erc20, erc20: { + symbol: 'stETH', decimals: 18, address: '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', - tokenType: TokenType.Erc20, }, }, LYM: { name: 'Lympo', - symbol: 'LYM', - decimals: 18, logo: 'lympo.png', coinGeckoId: 'lympo', - tokenType: TokenType.Erc20, erc20: { + symbol: 'LYM', decimals: 18, address: '0xc690f7c7fcffa6a82b79fab7508c466fefdfc8c5', - tokenType: TokenType.Erc20, }, }, OMI: { name: 'ECOMI', - symbol: 'OMI', - decimals: 18, logo: 'omi.png', coinGeckoId: 'ecomi', - tokenType: TokenType.Erc20, erc20: { + symbol: 'OMI', decimals: 18, address: '0xed35af169af46a02ee13b9d79eb57d6d68c1749e', - tokenType: TokenType.Erc20, }, }, POINT: { name: 'Reward Point Token', - symbol: 'POINT', - decimals: 0, logo: 'point.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + symbol: 'POINT', + creator: 'inj1zaem9jqplp08hkkd5vcl6vmvala9qury79vfj4', + decimals: 0, + }, + ], }, KAVA: { name: 'KAVA', - symbol: 'KAVA', - decimals: 6, logo: 'kava.webp', coinGeckoId: 'kava', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'ukava', - path: 'transfer/channel-143', - channelId: 'channel-143', - hash: '57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'KAVA', + decimals: 6, + isNative: true, + baseDenom: 'ukava', + path: 'transfer/channel-143', + channelId: 'channel-143', + hash: '57AA1A70A4BC9769C525EBF6386F7A21536E04A79D62E1981EFCEF9428EBB205', + source: TokenSource.Cosmos, + }, + ], }, SEI: { @@ -1981,96 +1762,90 @@ export default { VATRENI: { name: 'Vatreni Token', - symbol: 'VATRENI', - decimals: 18, logo: 'vatreni.jpeg', coinGeckoId: 'croatian-ff-fan-token', - tokenType: TokenType.Cw20, evm: { + symbol: 'VATRENI', decimals: 18, isNative: true, address: '0xD60DebA014459F07BBcC077a5B817f31DaFD5229', - tokenType: TokenType.Evm, }, - cw20: { - decimals: 8, - address: 'inj1tn457ed2gg5vj2cur5khjjw63w73y3xhyhtaay', - source: TokenSource.Polygon, - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'VATRENI', + decimals: 8, + address: 'inj1tn457ed2gg5vj2cur5khjjw63w73y3xhyhtaay', + source: TokenSource.Polygon, + }, + ], }, NBLA: { name: 'Nebula', - symbol: 'NBLA', - decimals: 6, logo: 'nebula.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + symbol: 'NBLA', + creator: 'inj1d0zfq42409a5mhdagjutl8u6u9rgcm4h8zfmfq', + decimals: 6, + }, + ], }, WKLAY: { name: 'Wrapped Klaytn', - symbol: 'WKLAY', - decimals: 8, logo: 'klaytn.webp', coinGeckoId: 'klay-token', - tokenType: TokenType.Cw20, - cw20: { - decimals: 8, - address: 'inj14cl67lprqkt3pncjav070gavaxslc0tzpc56f4', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + symbol: 'WKLAY', + decimals: 8, + address: 'inj14cl67lprqkt3pncjav070gavaxslc0tzpc56f4', + }, + ], }, NEOK: { name: 'NEOKingdom DAO', - symbol: 'NEOK', - decimals: 18, logo: 'neok.png', coinGeckoId: '', - tokenType: TokenType.Ibc, - ibc: { - decimals: 18, - isNative: true, - baseDenom: 'erc20/0x655ecB57432CC1370f65e5dc2309588b71b473A9', - path: 'transfer/channel-83', - channelId: 'channel-83', - hash: 'F6CC233E5C0EA36B1F74AB1AF98471A2D6A80E2542856639703E908B4D93E7C4', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'NEOK', + decimals: 18, + isNative: true, + baseDenom: 'erc20/0x655ecB57432CC1370f65e5dc2309588b71b473A9', + path: 'transfer/channel-83', + channelId: 'channel-83', + hash: 'F6CC233E5C0EA36B1F74AB1AF98471A2D6A80E2542856639703E908B4D93E7C4', + source: TokenSource.Cosmos, + }, + ], }, ORAI: { name: 'Oraichain', - symbol: 'ORAI', - decimals: 6, logo: 'orai.png', coinGeckoId: 'oraichain-token', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'orai', - path: 'transfer/channel-147', - channelId: 'channel-147', - hash: 'C20C0A822BD22B2CEF0D067400FCCFB6FAEEE9E91D360B4E0725BD522302D565', - tokenType: TokenType.Ibc, - }, - }, - - GOLD: { - name: 'GOLD', - symbol: 'GOLD', - decimals: 18, - logo: 'gold.png', - coinGeckoId: '', - tokenType: TokenType.Unknown, + ibcs: [ + { + symbol: 'ORAI', + decimals: 6, + isNative: true, + baseDenom: 'orai', + path: 'transfer/channel-147', + channelId: 'channel-147', + hash: 'C20C0A822BD22B2CEF0D067400FCCFB6FAEEE9E91D360B4E0725BD522302D565', + source: TokenSource.Cosmos, + }, + ], }, EVINDEX: { @@ -2093,734 +1868,1440 @@ export default { TIA: { name: 'Celestia', - symbol: 'TIA', - decimals: 6, logo: 'tia.webp', coinGeckoId: 'celestia', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'utia', - path: 'transfer/channel-152', - channelId: 'channel-152', - hash: 'F51BB221BAA275F2EBF654F70B005627D7E713AFFD6D86AFD1E43CAA886149F4', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'TIA', + decimals: 6, + isNative: true, + baseDenom: 'utia', + path: 'transfer/channel-152', + channelId: 'channel-152', + hash: 'F51BB221BAA275F2EBF654F70B005627D7E713AFFD6D86AFD1E43CAA886149F4', + source: TokenSource.Cosmos, + }, + ], }, TALIS: { name: 'Talis', - symbol: 'TALIS', - decimals: 6, logo: 'talis.webp', coinGeckoId: 'talis-protocol', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1maeyvxfamtn8lfyxpjca8kuvauuf2qeu6gtxm3', + symbol: 'TALIS', + decimals: 6, + }, + ], + }, + + XTALIS: { + name: 'xTalis', + logo: 'xtalis.png', + coinGeckoId: '', + + tokenFactories: [ + { + creator: 'inj1maeyvxfamtn8lfyxpjca8kuvauuf2qeu6gtxm3', + symbol: 'XTALIS', + decimals: 6, + }, + ], }, KIRA: { name: 'KIRA', - symbol: 'KIRA', - decimals: 6, logo: 'kira.jpeg', - coinGeckoId: '', - tokenType: TokenType.TokenFactory, + coinGeckoId: 'kira-the-injective-cat', + + tokenFactories: [ + { + creator: 'inj1xy3kvlr4q4wdd6lrelsrw2fk2ged0any44hhwq', + symbol: 'KIRA', + decimals: 6, + }, + ], }, USDY: { name: 'Ondo US Dollar Yield', - symbol: 'USDY', - decimals: 18, logo: 'usdy.webp', coinGeckoId: 'ondo-us-dollar-yield', - tokenType: TokenType.Erc20, erc20: { + symbol: 'USDY', decimals: 18, address: '0x96F6eF951840721AdBF46Ac996b59E0235CB985C', - tokenType: TokenType.Erc20, }, }, KUJI: { name: 'Kujira', - symbol: 'KUJI', - decimals: 6, logo: 'kuji.webp', coinGeckoId: 'kujira', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'ukuji', - path: 'transfer/channel-98', - channelId: 'channel-98', - hash: '9A115B56E769B92621FFF90567E2D60EFD146E86E867491DB69EEDA9ADC36204', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'KUJI', + decimals: 6, + isNative: true, + baseDenom: 'ukuji', + path: 'transfer/channel-98', + channelId: 'channel-98', + hash: '9A115B56E769B92621FFF90567E2D60EFD146E86E867491DB69EEDA9ADC36204', + source: TokenSource.Cosmos, + }, + ], }, 'USDC-MPL': { name: 'USDC Maple', - symbol: 'USDC-MPL', - decimals: 6, logo: 'usdc-mpl.jpeg', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { + symbol: 'USDC-MPL', decimals: 6, address: '0xf875aef00C4E21E9Ab4A335eB36A1175Ab00424A', - tokenType: TokenType.Erc20, }, }, PYTH: { name: 'Pyth Network', - symbol: 'PYTH', - decimals: 6, logo: 'pyth.png', coinGeckoId: 'pyth-network', - tokenType: TokenType.Cw20, spl: { decimals: 6, symbol: 'PYTH', isNative: false, address: 'HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3', - tokenType: TokenType.Spl, }, - cw20: { - decimals: 6, - symbol: 'PYTH', - source: TokenSource.Solana, - address: 'inj1tjcf9497fwmrnk22jfu5hsdq82qshga54ajvzy', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + decimals: 6, + symbol: 'PYTH', + source: TokenSource.Solana, + address: 'inj1tjcf9497fwmrnk22jfu5hsdq82qshga54ajvzy', + }, + ], + + ibcs: [ + { + symbol: 'Pyth', + decimals: 6, + isNative: false, + baseDenom: + 'factory/wormhole14ejqjyq8um4p3xfqj74yld5waqljf88fz25yxnma0cngspxe3les00fpjx/B8ohBnfisop27exk2gtNABJyYjLwQA7ogrp5uNzvZCoy', + path: 'transfer/channel-183', + channelId: 'channel-183', + hash: 'F3330C1B8BD1886FE9509B94C7B5398B892EA41420D2BC0B7C6A53CB8ED761D6', + source: TokenSource.Solana, + }, + ], }, TIX: { name: 'Timeworx.io', - symbol: 'TIX', - decimals: 6, logo: 'tix.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1rw3qvamxgmvyexuz2uhyfa4hukvtvteznxjvke' /** testnet */, + symbol: 'TIX', + decimals: 6, + }, + ], }, NINJ: { name: 'Gryphon Staked Injective', - symbol: 'nINJ', - decimals: 18, logo: 'ninj.png', coinGeckoId: '', - tokenType: TokenType.Cw20, - cw20: { - decimals: 18, - symbol: 'nINJ', - address: 'inj13xlpypcwl5fuc84uhqzzqumnrcfpptyl6w3vrf', - tokenType: TokenType.Cw20, - }, + cw20s: [ + { + decimals: 18, + symbol: 'nINJ', + address: 'inj13xlpypcwl5fuc84uhqzzqumnrcfpptyl6w3vrf', + }, + ], }, BINJ: { name: 'Bird INJ', - symbol: 'BINJ', - decimals: 6, logo: 'bird.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj125hcdvz9dnhdqal2u8ctr7l0hd8xy9wdgzt8ld', + symbol: 'BINJ', + decimals: 6, + }, + { + creator: 'inj1lhr06p7k3rdgk0knw5hfsde3fj87g2aq4e9a52', + symbol: 'BINJ', + decimals: 6, + }, + ], }, NINJA: { name: 'Dog Wif Nunchucks', - symbol: 'NINJA', - decimals: 6, logo: 'ninja.png', - coinGeckoId: '', - tokenType: TokenType.TokenFactory, + coinGeckoId: 'dog-wif-nuchucks', + + tokenFactories: [ + { + creator: 'inj1xtel2knkt8hmc9dnzpjz6kdmacgcfmlv5f308w', + symbol: 'NINJA', + decimals: 6, + }, + ], }, KATANA: { name: 'Dog Wif Katana', - symbol: 'KATANA', - decimals: 6, logo: 'katana.webp', - coinGeckoId: '', - tokenType: TokenType.TokenFactory, + coinGeckoId: 'dogwifkatana', + + tokenFactories: [ + { + creator: 'inj1vwn4x08hlactxj3y3kuqddafs2hhqzapruwt87', + symbol: 'KATANA', + decimals: 6, + }, + ], }, GALAXY: { name: 'GALAXY', - symbol: 'GALAXY', - decimals: 6, logo: 'galaxy.webp', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj10zdjt8ylfln5xr3a2ruf9nwn6d5q2d2r3v6mh8', + symbol: 'GALAXY', + decimals: 6, + }, + ], }, AOI: { name: 'Alien Token', - symbol: '$AOI', - decimals: 6, logo: 'aoi.webp', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj169ed97mcnf8ay6rgvskn95n6tyt46uwvy5qgs0', + symbol: '$AOI', + decimals: 6, + }, + ], }, NOBI: { name: 'Shinobi', - symbol: 'NOBI', - decimals: 6, logo: 'nobi.webp', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1pjp9q2ycs7eaav8d5ny5956k5m6t0alpl33xd6', + symbol: 'NOBI', + decimals: 6, + }, + { + creator: 'inj1t02au5gsk40ev9jaq0ggcyry9deuvvza6s4wav', + symbol: 'NOBI', + decimals: 6, + }, + { + creator: 'inj1xawhm3d8lf9n0rqdljpal033yackja3dt0kvp0', + symbol: 'NOBI', + decimals: 6, + }, + ], }, YUKI: { name: 'Yuki Dog', - symbol: 'YUKI', - decimals: 6, logo: 'yuki.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1spdy83ds5ezq9rvtg0ndy8480ad5rlczcpvtu2', + symbol: 'YUKI', + decimals: 6, + }, + ], }, WAGMI: { name: 'Wagmi Coin', - symbol: 'WAGMI', - decimals: 9, logo: 'wagmi.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj188veuqed0dygkcmq5d24u3807n6csv4wdv28gh', + symbol: 'WAGMI', + decimals: 9, + }, + ], }, BAMBOO: { name: 'Injective Panda', - symbol: 'BAMBOO', - decimals: 6, logo: 'panda.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj144nw6ny28mlwuvhfnh7sv4fcmuxnpjx4pksr0j', + symbol: 'BAMBOO', + decimals: 6, + }, + { + creator: 'inj183lz632dna57ayuf6unqph5d0v2u655h2jzzyy', + symbol: 'BAMBOO', + decimals: 6, + }, + ], }, SHURIKEN: { name: 'Shuriken Token', - symbol: 'SHURIKEN', - decimals: 6, logo: 'shuriken.jpeg', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1z426atp9k68uv49kaam7m0vnehw5fulxkyvde0', + symbol: 'SHURIKEN', + decimals: 6, + }, + { + creator: 'inj1kt6ujkzdfv9we6t3ca344d3wquynrq6dg77qju', + symbol: 'SHURIKEN', + decimals: 6, + }, + { + creator: 'inj1gflhshg8yrk8rrr3sgswhmsnygw9ghzdsn05a0', + symbol: 'SHURIKEN', + decimals: 6, + }, + ], }, BRETT: { name: 'BluePepe', - symbol: 'BRETT', - decimals: 6, logo: 'brett.jpeg', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj13jjdsa953w03dvecsr43dj5r6a2vzt7n0spncv', + symbol: 'BRETT', + decimals: 6, + }, + ], }, ZIG: { name: 'ZigCoin', - symbol: 'ZIG', - decimals: 18, logo: 'zigg.jpeg', coinGeckoId: 'zignaly', - tokenType: TokenType.Erc20, erc20: { + symbol: 'ZIG', decimals: 18, address: '0xb2617246d0c6c0087f18703d576831899ca94f01', - tokenType: TokenType.Erc20, }, }, DOJ: { name: 'DOJcoin', - symbol: 'DOJ', - decimals: 6, logo: 'doj.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj172ccd0gddgz203e4pf86ype7zjx573tn8g0df9', + symbol: 'DOJ', + decimals: 6, + }, + ], }, SKIPBIDIDOBDOBDOBYESYESYESYES: { name: 'SKIPBIDIDOBDOBDOBYESYESYESYES', - symbol: 'SKIPBIDIDOBDOBDOBYESYESYESYES', - decimals: 9, - logo: 'skibidi.jpg', + logo: 'skibidi.jpeg', coinGeckoId: '', erc20: { + symbol: 'SKIPBIDIDOBDOBDOBYESYESYESYES', decimals: 9, address: '0x5085202d0A4D8E4724Aa98C42856441c3b97Bc6d', - tokenType: TokenType.Erc20, }, }, GINGER: { name: 'GINGER', - symbol: 'GINGER', - decimals: 6, logo: 'ginger.png', - coinGeckoId: '', - tokenType: TokenType.TokenFactory, + coinGeckoId: 'ginger', + + tokenFactories: [ + { + creator: 'inj172ccd0gddgz203e4pf86ype7zjx573tn8g0df9', + symbol: 'GINGER', + decimals: 6, + }, + ], }, ERIC: { name: 'TheJanitor', - symbol: 'ERIC', - decimals: 6, logo: 'eric.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1w7cw5tltax6dx7znehul98gel6yutwuvh44j77', + symbol: 'ERIC', + decimals: 6, + }, + ], }, INJINU: { name: 'INJINU', - symbol: 'INJINU', - decimals: 6, logo: 'injinu.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1vjppa6h9lf75pt0v6qnxtej4xcl0qevnxzcrvm', + symbol: 'INJINU', + decimals: 6, + }, + ], }, Babykira: { name: 'Babykira', - symbol: '$Babykira', - decimals: 6, logo: 'babykira.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj13vau2mgx6mg7ams9nngjhyng58tl9zyw0n8s93', + symbol: '$Babykira', + decimals: 6, + }, + { + creator: 'inj15jeczm4mqwtc9lk4c0cyynndud32mqd4m9xnmu', + symbol: '$Babykira', + decimals: 6, + }, + ], }, LIOR: { name: 'LIOR', - symbol: 'LIOR', - decimals: 6, logo: 'lior.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1cjus5ragdkvpmt627fw7wkj2ydsra9s0vap4zx', + symbol: 'LIOR', + decimals: 6, + }, + { + creator: 'inj1sg3yjgjlwhtrepeuusj4jwv209rh6cmk882cw3', + symbol: 'LIOR', + decimals: 6, + }, + { + creator: 'inj1tgphgjqsz8fupkfjx6cy275e3s0l8xfu6rd6jh', + symbol: 'LIOR', + decimals: 6, + }, + ], }, - INJINEER: { + INJER: { name: 'INJINEER', - symbol: 'INJER', - decimals: 6, logo: 'INJINEER.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1sjmplasxl9zgj6yh45j3ndskgdhcfcss9djkdn', + symbol: 'INJER', + decimals: 6, + }, + ], }, SHIBA: { name: 'Shiba', - symbol: 'shibainj', - decimals: 6, logo: 'shiba.webp', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1v0yk4msqsff7e9zf8ktxykfhz2hen6t2u4ue4r', + symbol: 'Shiba INJ', + decimals: 6, + }, + ], }, GROK: { name: 'GROK', - symbol: 'GROK', - decimals: 6, logo: 'grok.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1vgrf5mcvvg9p5c6jajqefn840nq74wjzgkt30z', + symbol: 'GROK', + decimals: 6, + }, + ], }, SNOWY: { name: 'Injective Snowy', - symbol: 'SNOWY', - decimals: 6, logo: 'snowy.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1ml33x7lkxk6x2x95d3alw4h84evlcdz2gnehmk', + symbol: 'SNOWY', + decimals: 6, + }, + ], }, BULLS: { name: 'BULLS', - symbol: 'BULLS', - decimals: 6, logo: 'bulls.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, - }, - LVN: { + tokenFactories: [ + { + creator: 'inj1zq37mfquqgud2uqemqdkyv36gdstkxl27pj5e3', + symbol: 'BULLS', + decimals: 6, + }, + ], + }, + + LVN: { name: 'Levana', - symbol: 'LVN', - decimals: 6, coinGeckoId: 'levana-protocol', logo: 'lvn.png', - tokenType: TokenType.Ibc, - ibc: { - decimals: 6, - isNative: true, - baseDenom: 'ulvn', - path: 'transfer/channel-8', - channelId: 'channel-8', - hash: '4971C5E4786D5995EC7EF894FCFA9CF2E127E95D5D53A982F6A062F3F410EDB8', - tokenType: TokenType.Ibc, - }, + ibcs: [ + { + symbol: 'LVN', + decimals: 6, + isNative: true, + baseDenom: 'ulvn', + path: 'transfer/channel-8', + channelId: 'channel-8', + hash: '4971C5E4786D5995EC7EF894FCFA9CF2E127E95D5D53A982F6A062F3F410EDB8', + source: TokenSource.Cosmos, + }, + ], }, KINJA: { name: 'Kinja', - symbol: 'KINJA', - decimals: 6, logo: 'kinja.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1h33jkaqqalcy3wf8um6ewk4hxmfwf8uern470k', + symbol: 'KINJA', + decimals: 6, + }, + ], }, LAMA: { name: 'LAMA', - symbol: 'LAMA', - decimals: 6, - logo: 'lama.png', + logo: 'lama.webp', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj18lh8zx4hx0pyksyu74srktv4vgxskkkafknggl', + symbol: 'LAMA', + decimals: 6, + }, + ], }, INJEX: { name: 'Internet Explorer', - symbol: 'INJEX', - decimals: 6, logo: 'injex.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1zhevrrwywg3az9ulxd9u233eyy4m2mmr6vegsg', + symbol: 'NINJB', + decimals: 6, + }, + ], }, NINJB: { name: 'NINJB', - symbol: 'NINJB', - decimals: 6, logo: 'ninjb.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1ezzzfm2exjz57hxuc65sl8s3d5y6ee0kxvu67n', + symbol: 'NINJB', + decimals: 6, + }, + ], }, KARATE: { name: 'Doge Wif Karate', - symbol: 'KARATE', - decimals: 6, logo: 'karate.jpg', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1898t0vtmul3tcn3t0v8qe3pat47ca937jkpezv', + symbol: 'KARATE', + decimals: 6, + }, + ], }, NPEPE: { name: 'NinjaPepe', - symbol: 'NPEPE', - decimals: 6, - logo: 'NPEPE.png', + logo: 'npepe.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1ga982yy0wumrlt4nnj79wcgmw7mzvw6jcyecl0', + symbol: 'NPEPE', + decimals: 6, + }, + ], }, MILK: { name: 'MILK', - symbol: 'MILK', - decimals: 6, logo: 'milk.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1fpl63h7at2epr55yn5svmqkq4fkye32vmxq8ry', + symbol: 'MILK', + decimals: 6, + }, + { + creator: 'inj1yg24mn8enl5e6v4jl2j6cce47mx4vyd6e8dpck', + symbol: 'MILK', + decimals: 6, + }, + ], }, INCEL: { name: 'InjectiveCelestiaNoFapLadyBoy420Inu', - symbol: 'INCEL', - decimals: 6, logo: 'incel.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj17g4j3geupy762u0wrewqwprvtzar7k5et2zqsh', + symbol: 'INCEL', + decimals: 6, + }, + ], }, PIKACHU: { name: 'Pikachu', - symbol: 'PIKA', - decimals: 6, logo: 'pikachu.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1h9zu2u6yqf3t5uym75z94zsqfhazzkyg39957u', + symbol: 'PIKA', + decimals: 6, + }, + { + creator: 'inj1h4usvhhva6dgmun9rk4haeh8lynln7yhk6ym00', + symbol: 'PIKA', + decimals: 6, + }, + ], }, WGMI: { name: 'WGMI', - symbol: 'WGMI', - decimals: 6, logo: 'wgmi.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1rmjzj9fn47kdmfk4f3z39qr6czexxe0yjyc546', + symbol: 'WGMI', + decimals: 6, + }, + ], }, WIZZ: { name: 'WIZZ', - symbol: 'WIZZ', - decimals: 6, logo: 'wizz.jpeg', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1uvfpvnmuqhx8jwg4786y59tkagmph827h38mst', + symbol: 'WIZZ', + decimals: 6, + }, + ], }, MEMEME: { name: 'Mememe', - symbol: 'MEMEME', - decimals: 18, logo: 'meme.png', coinGeckoId: 'mememe', - tokenType: TokenType.Erc20, erc20: { + symbol: 'MEMEME', decimals: 18, address: '0x1A963Df363D01EEBB2816b366d61C917F20e1EbE', - tokenType: TokenType.Erc20, }, }, MAGA: { name: 'Trump', - symbol: 'MAGA', - decimals: 9, logo: 'maga.png', coinGeckoId: 'maga', - tokenType: TokenType.Erc20, erc20: { + symbol: 'MAGA', decimals: 9, address: '0x576e2BeD8F7b46D34016198911Cdf9886f78bea7', - tokenType: TokenType.Erc20, }, }, SDEX: { name: 'SmarDex', - symbol: 'SDEX', - decimals: 18, logo: 'maga.png', coinGeckoId: 'smardex', - tokenType: TokenType.Erc20, erc20: { + symbol: 'SDEX', decimals: 18, address: '0x5DE8ab7E27f6E7A1fFf3E5B337584Aa43961BEeF', - tokenType: TokenType.Erc20, }, }, OX: { name: 'Open Exchange Token', - symbol: 'OX', - decimals: 18, logo: 'ox.png', coinGeckoId: 'open-exchange-token', - tokenType: TokenType.Erc20, erc20: { + symbol: 'OX', decimals: 18, address: '0x78a0A62Fba6Fb21A83FE8a3433d44C73a4017A6f', - tokenType: TokenType.Erc20, }, }, FUSDT: { name: 'Flux USDT', - symbol: 'fUSDT', - decimals: 8, logo: 'flux.png', coinGeckoId: 'flux-usdt', - tokenType: TokenType.Erc20, erc20: { + symbol: 'fUSDT', decimals: 8, address: '0x81994b9607e06ab3d5cF3AffF9a67374f05F27d7', - tokenType: TokenType.Erc20, }, }, PVP: { name: 'PVP', - symbol: 'PVP', - decimals: 8, logo: 'unknown.png', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { + symbol: 'PVP', decimals: 8, address: '0x9B44793a0177C84DD01AD81137db696531902871', - tokenType: TokenType.Erc20, }, }, POOR: { name: 'Proof Of Officially Rugged', - symbol: 'POOR', - decimals: 8, logo: 'unknown.png', coinGeckoId: '', - tokenType: TokenType.Erc20, erc20: { + symbol: 'POOR', decimals: 8, address: '0x9D433Fa992C5933D6843f8669019Da6D512fd5e9', - tokenType: TokenType.Erc20, }, }, VRD: { name: 'Viridis Network', - symbol: 'VRD', - decimals: 18, logo: 'vrd.png', coinGeckoId: 'viridis-network', - tokenType: TokenType.Erc20, erc20: { + symbol: 'VRD', decimals: 18, address: '0xf25304e75026E6a35FEDcA3B0889aE5c4D3C55D8', - tokenType: TokenType.Erc20, }, }, NONE: { name: 'None Trading', - symbol: 'NONE', - decimals: 18, logo: 'none.webp', coinGeckoId: 'none-trading', - tokenType: TokenType.Erc20, erc20: { + symbol: 'NONE', decimals: 18, address: '0x903ff0ba636E32De1767A4B5eEb55c155763D8B7', - tokenType: TokenType.Erc20, }, }, DUDE: { name: 'DUDE', - symbol: 'DUDE', - decimals: 6, logo: 'dude.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1sn34edy635nv4yhts3khgpy5qxw8uey6wvzq53', + symbol: 'DUDE', + decimals: 6, + }, + ], }, AUTISM: { name: 'AUTISM', - symbol: 'AUTISM', - decimals: 6, logo: 'autism.png', coinGeckoId: 'autism', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj14lf8xm6fcvlggpa7guxzjqwjmtr24gnvf56hvz', + symbol: 'AUTISM', + decimals: 6, + }, + ], }, - NOBITCHES: { + EXTRAVIRGINOLIVEINU: { name: 'Extra Virgin Olive Inu', - symbol: 'NOBITCHES', - decimals: 6, logo: 'extravirginoliveinu.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj14n8f39qdg6t68s5z00t4vczvkcvzlgm6ea5vk5', + symbol: 'NOBITCHES', + decimals: 6, + }, + ], }, MILA: { name: 'MILA', - symbol: 'MILA', - decimals: 6, logo: 'mila.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, - }, - DOJO: { - name: 'Dojo Bot', - symbol: 'DOJO', - decimals: 6, - logo: 'dojo.png', - coinGeckoId: '', - tokenType: TokenType.TokenFactory, + tokenFactories: [ + { + creator: 'inj1z08usf75ecfp3cqtwey6gx7nr79s3agal3k8xf', + symbol: 'MILA', + decimals: 6, + }, + ], }, - IPANDAAI: { + IPDAI: { name: 'Injective Panda AI', - symbol: 'IPandaAI', - decimals: 6, logo: 'ipdai.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1y3g4wpgnc4s28gd9ure3vwm9cmvmdphml6mtul', + symbol: 'IPandaAI', + decimals: 6, + }, + ], }, COCK: { name: 'ROOSTER NINJA', - symbol: 'COCK', - decimals: 6, logo: 'cock.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1eucxlpy6c387g5wrn4ee7ppshdzg3rh4t50ahf', + symbol: 'COCK', + decimals: 6, + }, + ], }, MOONIFY: { name: 'Moonify', - symbol: 'MOONIFY', - decimals: 6, logo: 'moonify.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1ktq0gf7altpsf0l2qzql4sfs0vc0ru75cnj3a6', + symbol: 'MOONIFY', + decimals: 6, + }, + ], }, - KARMA: { + KARMAINJ: { name: 'Karma', - symbol: 'KARMA', - decimals: 6, logo: 'karma.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1d4ld9w7mf8wjyv5y7fnhpate07fguv3s3tmngm', + symbol: 'KARMA', + decimals: 6, + }, + ], }, DREAM: { name: 'DREAM', - symbol: 'DREAM', - decimals: 6, logo: 'DREAM.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1l2kcs4yxsxe0c87qy4ejmvkgegvjf0hkyhqk59', + symbol: 'DREAM', + decimals: 6, + }, + ], }, DGNZ: { name: 'Injective Degens', - symbol: 'DGNZ', - decimals: 6, logo: 'DGNZ.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1l2kcs4yxsxe0c87qy4ejmvkgegvjf0hkyhqk59', + symbol: 'DGNZ', + decimals: 6, + }, + ], }, INJECT: { name: 'Injectools', - symbol: 'INJECT', - decimals: 6, logo: 'INJECT.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj1j7zt6g03vpmg9p7g7qngvylfxqeuds73utsjnk', + symbol: 'INJECT', + decimals: 6, + }, + ], }, WAIFU: { name: 'Waifu', - symbol: 'WAIFU', - decimals: 6, logo: 'waifu-logo.png', coinGeckoId: '', - tokenType: TokenType.TokenFactory, + + tokenFactories: [ + { + creator: 'inj12dvzf9tx2ndc9498aqpkrxgugr3suysqwlmn49', + symbol: 'WAIFU', + decimals: 6, + }, + ], + }, + + APP: { + name: 'Moon App', + logo: 'app.jpeg', + coinGeckoId: 'moon-app', + + erc20: { + symbol: 'APP', + decimals: 18, + address: '0xC5d27F27F08D1FD1E3EbBAa50b3442e6c0D50439', + }, + }, + + DOJO: { + name: 'Dojo Token', + logo: 'dojo-token.png', + + cw20s: [ + { + coinGeckoId: 'dojo-token', + symbol: 'DOJO', + name: 'Dojo Token', + decimals: 18, + address: 'inj1zdj9kqnknztl2xclm5ssv25yre09f8908d4923', + }, + ], + + tokenFactories: [ + { + decimals: 6, + symbol: 'DOJO', + name: 'Dojo Bot', + logo: 'dojo.png', + creator: 'inj1any4rpwq7r850u6feajg5payvhwpunu9cxqevc', + }, + ], + }, + + PUNK: { + coinGeckoId: '', + + cw20s: [ + { + symbol: 'PUNK', + name: 'Punk Token', + decimals: 18, + logo: 'punk-token.webp', + address: 'inj1wmrzttj7ms7glplek348vedx4v2ls467n539xt', + }, + ], + + tokenFactories: [ + { + name: 'Punk DAO Token', + logo: 'PUNK.png', + creator: 'inj1esz96ru3guug4ctmn5chjmkymt979sfvufq0hs', + symbol: 'PUNK', + decimals: 6, + }, + ], + }, + + ORNE: { + name: 'ORNE', + logo: 'orne.png', + coinGeckoId: 'orne', + + ibcs: [ + { + symbol: 'ORNE', + decimals: 6, + isNative: true, + baseDenom: + 'cw20:terra19p20mfnvwh9yvyr7aus3a6z6g6uk28fv4jhx9kmnc2m7krg27q2qkfenjw', + path: 'transfer/channel-116', + channelId: 'channel-116', + hash: '3D99439444ACDEE71DBC4A774E49DB74B58846CCE31B9A868A7A61E4C14D321E', + source: TokenSource.Cosmos, + }, + ], + }, + + DROGO: { + name: 'DROGO', + logo: 'drogo.png', + + ibcs: [ + { + symbol: 'DROGO', + decimals: 6, + isNative: true, + baseDenom: + 'cw20:terra1cl273523kmr2uwjhhznq54je69mted2u3ljffm8kp2ap4z3drdksftwqun', + path: 'transfer/channel-118', + channelId: 'channel-118', + hash: 'ibc/565FE65B82C091F8BAD1379FA1B4560C036C07913355ED4BD8D156DA63F43712', + source: TokenSource.Cosmos, + }, + ], + }, + + RAMEN: { + name: 'Ramen', + logo: 'ramen.jpeg', + coinGeckoId: '', + + tokenFactories: [ + { + creator: 'inj1z5utcc5u90n8a5m8gv30char6j4hdzxz6t3pke', + symbol: 'RAMEN', + decimals: 6, + }, + ], + }, + + GYEN: { + name: 'GMO JPY', + logo: 'gyen.webp', + coinGeckoId: 'gyen', + + erc20: { + symbol: 'GYEN', + decimals: 6, + address: '0xC08512927D12348F6620a698105e1BAac6EcD911', + }, + }, + + ZRO: { + name: 'LayerZero', + logo: 'zro.jpeg', + decimals: 6, + symbol: 'ZRO', + coinGeckoId: 'layerzero', + tokenType: TokenType.Unknown, + }, + + JUP: { + name: 'Jupiter', + logo: 'jup.jpeg', + decimals: 6, + symbol: 'JUP', + coinGeckoId: 'jupiter-exchange-solana', + tokenType: TokenType.Unknown, + }, + + ALIEN: { + name: 'ALIEN', + logo: 'alien.png', + coinGeckoId: '', + + tokenFactories: [ + { + creator: 'inj1mly2ykhf6f9tdj58pvndjf4q8dzdl4myjqm9t6', + symbol: '$ALIEN', + decimals: 6, + }, + ], + }, + + RICE: { + name: 'RICE', + logo: 'RICE.jpeg', + coinGeckoId: '', + + tokenFactories: [ + { + creator: 'inj1mt876zny9j6xae25h7hl7zuqf7gkx8q63k0426', + symbol: 'RICE', + decimals: 12, + }, + ], + }, + + BITS: { + name: 'bits', + logo: 'bits.png', + coinGeckoId: '', + + tokenFactories: [ + { + creator: 'inj10gcvfpnn4932kzk56h5kp77mrfdqas8z63qr7n', + symbol: 'BITS', + decimals: 6, + }, + ], + }, + + WOSMO: { + name: 'Wosmo', + logo: 'WOSMO.png', + coinGeckoId: '', + + ibcs: [ + { + symbol: 'WOSMO', + decimals: 6, + isNative: true, + baseDenom: 'factory/osmo1pfyxruwvtwk00y8z06dh2lqjdj82ldvy74wzm3/WOSMO', + path: 'transfer/channel-8', + channelId: 'channel-8', + hash: 'DD648F5D3CDA56D0D8D8820CF703D246B9FC4007725D8B38D23A21FF1A1477E3', + source: TokenSource.Cosmos, + }, + ], + }, + + IKINGS: { + name: 'Injective Kings', + logo: 'IKINGS.png', + coinGeckoId: '', + + tokenFactories: [ + { + creator: 'inj1mt876zny9j6xae25h7hl7zuqf7gkx8q63k0426', + symbol: 'IKINGS', + decimals: 6, + }, + ], + }, + + BEAST: { + name: 'Gelotto BEAST', + logo: 'beast.png', + coinGeckoId: '', + + erc20: { + symbol: 'BEAST', + decimals: 6, + address: '0xA4426666addBE8c4985377d36683D17FB40c31Be', + }, + }, + + GLTO: { + name: 'Gelotto', + logo: 'GLTO.png', + coinGeckoId: '', + + erc20: { + symbol: 'GLTO', + decimals: 6, + address: '0xd73175f9eb15eee81745d367ae59309Ca2ceb5e2', + }, + }, + + SUI: { + name: 'Sui', + logo: 'sui.webp', + decimals: 9, + symbol: 'SUI', + coinGeckoId: 'sui', + tokenType: TokenType.Unknown, + }, + + WIF: { + name: 'dogwifhat', + logo: 'wif.webp', + decimals: 6, + symbol: 'WIF', + coinGeckoId: 'dogwifcoin', + tokenType: TokenType.Unknown, + }, + + OP: { + name: 'Optimism', + logo: 'optimism.webp', + decimals: 18, + symbol: 'OP', + coinGeckoId: 'optimism', + tokenType: TokenType.Unknown, + }, + + DOGE: { + name: 'Dogecoin', + logo: 'dogecoin.webp', + decimals: 8, + symbol: 'DOGE', + coinGeckoId: 'dogecoin', + tokenType: TokenType.Unknown, + }, + + ANDR: { + name: 'Andromeda', + logo: 'andromeda.webp', + coinGeckoId: 'andromeda-2', + + ibcs: [ + { + symbol: 'ANDR', + decimals: 6, + isNative: true, + baseDenom: 'uandr', + path: 'transfer/channel-213', + channelId: 'channel-213', + hash: '61FA42C3F0B0F8768ED2CE380EDD3BE0E4CB7E67688F81F70DE9ECF5F8684E1E', + source: TokenSource.Cosmos, + }, + ], + }, + + hINJ: { + name: 'Hydro Wrapped INJ', + logo: 'hinj.svg', + symbol: 'hINJ', + coinGeckoId: '', + + cw20s: [ + { + symbol: 'hINJ', + decimals: 18, + address: 'inj18luqttqyckgpddndh8hvaq25d5nfwjc78m56lc', + }, + ], + }, + + W: { + name: 'W', + logo: 'wormhole.png', + symbol: 'W', + coinGeckoId: '', + tokenType: TokenType.Unknown, + }, + + QUNT: { + name: 'QUNT', + logo: 'qunt.png', + coinGeckoId: '', + + tokenFactories: [ + { + creator: 'inj127l5a2wmkyvucxdlupqyac3y0v6wqfhq03ka64', + symbol: 'QUNT', + decimals: 6, + }, + ], + }, + + HDRO: { + name: 'HDRO', + logo: 'hydro.png', + coinGeckoId: '', + + tokenFactories: [ + { + creator: 'inj1pk7jhvjj2lufcghmvr7gl49dzwkk3xj0uqkwfk', + symbol: 'HDRO', + decimals: 6, + }, + { + creator: 'inj1etz0laas6h7vemg3qtd67jpr6lh8v7xz7gfzqw', + symbol: 'HDRO', + decimals: 6, + }, + { + creator: 'inj1etz0laas6h7vemg3qtd67jpr6lh8v7xz7gfzqw', + symbol: 'HDRO', + decimals: 6, + }, + ], + }, + + DINJ: { + name: 'Dojo Staked INJ', + logo: 'dinj.svg', + symbol: 'dINJ', + coinGeckoId: '', + + cw20s: [ + { + symbol: 'dINJ', + decimals: 18, + address: 'inj134wfjutywny9qnyux2xgdmm0hfj7mwpl39r3r9', + }, + ], + }, + + BMOS: { + name: 'BMOS', + logo: 'bitmos.png', + coinGeckoId: '', + + ibcs: [ + { + symbol: 'BMOS', + decimals: 6, + isNative: true, + baseDenom: + 'cw20:terra1sxe8u2hjczlekwfkcq0rs28egt38pg3wqzfx4zcrese4fnvzzupsk9gjkq', + path: 'transfer/channel-104', + channelId: 'channel-104', + hash: 'D9353C3B1407A7F7FE0A5CCB7D06249B57337888C95C6648AEAF2C83F4F3074E', + source: TokenSource.Cosmos, + }, + ], + }, + + XNJ: { + name: 'xNinja.Tech Token', + logo: 'xnj.png', + symbol: 'XNJ', + coinGeckoId: '', + + cw20s: [ + { + symbol: 'XNJ', + decimals: 18, + address: 'inj17pgmlk6fpfmqyffs205l98pmnmp688mt0948ar', + }, + ], + }, + + USDE: { + name: 'Ethena USDe', + logo: 'usde.png', + coinGeckoId: 'ethena-usde', + + erc20: { + symbol: 'USDe', + decimals: 18, + address: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3', + }, + }, + + KAGE: { + name: 'Kage', + coinGeckoId: 'kage', + + cw20s: [ + { + symbol: 'KAGE', + logo: 'kage.png', + address: 'inj1l49685vnk88zfw2egf6v65se7trw2497wsqk65', + decimals: 18, + }, + ], }, -} as Record +} as Record diff --git a/packages/token-metadata/src/types.ts b/packages/token-metadata/src/types.ts index 119892441..b3ac8541d 100644 --- a/packages/token-metadata/src/types.ts +++ b/packages/token-metadata/src/types.ts @@ -12,6 +12,7 @@ export enum TokenType { export enum TokenVerification { Verified = 'verified' /** verified on token-metadata package */, + Submitted = 'submitted' /** submitted on token-metadata package but not verified */, Internal = 'internal' /** verified from on-chain data */, External = 'external' /** verified on external source */, Unverified = 'unverified' /** unverified on any source */, @@ -31,46 +32,92 @@ export enum TokenSource { BinanceSmartChain = 'binance-smart-chain', } +/** natively created denoms - not derived from a CW20 */ +export interface NativeTokenFactoryMeta { + creator: string + symbol: string + name?: string + logo?: string + description?: string + decimals: number + coinGeckoId?: string +} + export interface IbcTokenMeta { hash: string path: string + name?: string + logo?: string channelId: string decimals: number - symbol?: string + symbol: string isNative: boolean baseDenom: string + coinGeckoId?: string } export interface SplTokenMeta { address: string decimals: number - symbol?: string + symbol: string + name?: string + logo?: string isNative?: boolean + coinGeckoId?: string } export interface Erc20TokenMeta { address: string decimals: number - symbol?: string + symbol: string + name?: string + logo?: string isNative?: boolean + coinGeckoId?: string } export interface EvmTokenMeta { address: string decimals: number - symbol?: string + symbol: string + name?: string + logo?: string isNative?: boolean + coinGeckoId?: string } export interface Cw20TokenMeta { address: string decimals: number - tokenType: TokenType.Cw20 + symbol: string + name?: string + logo?: string + coinGeckoId?: string } export interface Cw20TokenMetaWithSource extends Cw20TokenMeta { - symbol: string - source: TokenSource + source?: TokenSource +} + +export interface IbcTokenMetaWithSource extends IbcTokenMeta { + source?: TokenSource +} + +export interface TokenMetaBase { + name?: string + logo?: string + symbol?: string + decimals?: number + tokenType?: TokenType // primary token type + tokenVerification?: TokenVerification + coinGeckoId?: string + + ibcs?: Array> + spl?: Omit + cw20s?: Array> + erc20?: Omit + evm?: Omit + tokenFactories?: Array> } export interface TokenMeta { @@ -78,16 +125,20 @@ export interface TokenMeta { logo: string symbol: string decimals: number - tokenType?: TokenType + tokenType: TokenType tokenVerification?: TokenVerification coinGeckoId: string ibc?: IbcTokenMeta spl?: SplTokenMeta cw20?: Cw20TokenMeta - cw20s?: Cw20TokenMetaWithSource[] // When there are multiple variations of the same CW20 token erc20?: Erc20TokenMeta evm?: EvmTokenMeta + tokenFactory?: NativeTokenFactoryMeta +} + +export type TokenBase = TokenMetaBase & { + denom: string } export type BaseToken = TokenMeta & { @@ -97,49 +148,48 @@ export type BaseToken = TokenMeta & { // Insurance fund tokens, token factory tokens, etc export interface NativeToken extends TokenMeta { denom: string - tokenType: TokenType } export interface Erc20Token extends BaseToken { erc20: Erc20TokenMeta - tokenType: TokenType } export interface EvmToken extends BaseToken { evm: EvmTokenMeta - tokenType: TokenType } export interface IbcToken extends BaseToken { ibc: IbcTokenMeta - tokenType: TokenType } export interface Cw20TokenSingle extends BaseToken { cw20: Cw20TokenMeta - tokenType: TokenType } export interface Cw20TokenMultiple extends BaseToken { cw20s: Cw20TokenMetaWithSource[] - tokenType: TokenType +} + +export interface IbcTokenMultiple extends BaseToken { + ibcs: IbcTokenMetaWithSource[] } export interface Cw20Token extends BaseToken { cw20: Cw20TokenMeta - cw20s: Cw20TokenMetaWithSource[] - tokenType: TokenType } export interface SplToken extends BaseToken { spl: SplTokenMeta - tokenType: TokenType } +/** @deprecated - use TokenFactoryToken */ export interface FactoryToken extends BaseToken { display: string description: string - tokenType: TokenType +} + +export interface TokenFactoryToken extends BaseToken { + tokenFactory: NativeTokenFactoryMeta } export type Token = @@ -152,6 +202,7 @@ export type Token = | NativeToken | SplToken | FactoryToken + | TokenFactoryToken export type TokenWithPrice = Token & { usdPrice: number } diff --git a/packages/token-metadata/src/utils.ts b/packages/token-metadata/src/utils.ts deleted file mode 100644 index 8af135f81..000000000 --- a/packages/token-metadata/src/utils.ts +++ /dev/null @@ -1,387 +0,0 @@ -import { INJ_DENOM } from '@injectivelabs/utils' -import { - Token, - TokenMeta, - TokenType, - TokenSource, - IbcTokenMeta, - Cw20TokenMeta, - Cw20TokenSingle, - TokenVerification, - Cw20TokenMetaWithSource, -} from './types' -import { ibcBaseDenoms } from './tokens/tokens' -import { getChannelIdFromPath } from './ibc' -import { - Network, - getCw20AdapterContractForNetwork, -} from '@injectivelabs/networks' -import { TokenMetaUtilsFactory } from './TokenMetaUtilsFactory' - -const getCw20Meta = ( - token: Token, -): Cw20TokenMetaWithSource | Cw20TokenMeta | undefined => { - const denomToLowerCase = token.denom - const cw20MetaFromCw20s = token.cw20s?.find((meta) => - denomToLowerCase.includes(meta.address), - ) - - return cw20MetaFromCw20s || token.cw20 || undefined -} - -export const getIbcTokenMetaFromDenomTrace = ({ - hash, - path, - decimals, - baseDenom, -}: { - decimals: number - hash: string - path: string - baseDenom: string -}): IbcTokenMeta => ({ - hash, - path, - baseDenom, - decimals, - channelId: getChannelIdFromPath(path), - isNative: !baseDenom.startsWith('ibc'), -}) - -export const getTokenTypeFromDenom = (denom: string) => { - if (denom === INJ_DENOM) { - return TokenType.Native - } - - if (isCw20ContractAddress(denom)) { - return TokenType.Cw20 - } - - if (denom.startsWith('ibc')) { - return TokenType.Ibc - } - - if (denom.startsWith('factory/')) { - return TokenType.TokenFactory - } - - if (denom.startsWith('peggy')) { - return TokenType.Erc20 - } - - if (denom.startsWith('share')) { - return TokenType.InsuranceFund - } - - return TokenType.Cw20 -} - -export const getTokenSymbol = (token: Token) => { - if (token.denom.startsWith('factory/')) { - const meta = getCw20Meta(token) as Cw20TokenMetaWithSource - - return meta?.symbol || token.symbol - } - - if (token.denom.startsWith('peggy')) { - return token.erc20?.symbol || token.symbol - } - - if (token.denom.startsWith('ibc')) { - return token.ibc?.symbol || token.symbol - } - - return token.symbol -} - -export const getTokenDecimals = (token: Token) => { - if (token.denom === INJ_DENOM) { - return token.decimals - } - - if (isCw20ContractAddress(token.denom)) { - return token.cw20?.decimals || token.decimals - } - - if (token.denom.startsWith('factory/')) { - const meta = getCw20Meta(token) - - return meta?.decimals || token.decimals - } - - if (token.denom.startsWith('ibc')) { - return token.ibc?.decimals || token.decimals - } - - if (token.denom.startsWith('peggy')) { - return token.erc20?.decimals || token.decimals - } - - if (token.denom.startsWith('share')) { - return token.decimals - } - - return token.decimals -} - -export const getTokenAddress = (token: Token) => { - if (token.denom === INJ_DENOM) { - return token.erc20?.address - } - - if (token.denom.startsWith('inj')) { - return token.cw20?.address - } - - if (token.denom.startsWith('factory/')) { - const [, , address] = token.denom - - return address - } - - if (token.denom.startsWith('peggy')) { - return token.erc20?.address - } - - if (token.denom.startsWith('share')) { - return '' - } - - return '' -} - -/** - * This function can be used to get a token with - * cw20 information when we have multiple - * cw20 variations of the same token based on the address/denom - */ -export const getCw20TokenSingle = ( - token: Token | TokenMeta, - source?: TokenSource, -): Cw20TokenSingle | undefined => { - const { cw20, cw20s } = token - const denom = (token as Token).denom || '' - - if (!cw20 && !cw20s) { - return - } - - if (cw20) { - return { - ...token, - cw20, - denom: cw20.address, - tokenType: getTokenTypeFromDenom(cw20.address), - } - } - - if (cw20s) { - if (source) { - const cw20 = cw20s.find((cw20) => cw20.source === source) - - return cw20 - ? { - ...token, - cw20, - denom: cw20.address, - symbol: cw20.symbol, - tokenType: getTokenTypeFromDenom(cw20.address), - } - : undefined - } - - if (denom) { - const [cw20Address] = denom.startsWith('inj') - ? [denom] - : denom.split('/').reverse() - - const cw20 = cw20s.find((cw20) => cw20.address === cw20Address) - - return cw20 - ? { - ...token, - cw20, - denom: cw20.address, - symbol: cw20.symbol, - tokenType: getTokenTypeFromDenom(cw20.address), - } - : undefined - } - } - - return undefined -} - -export const getTokenFromMeta = (meta: TokenMeta, denom?: string): Token => { - const isBaseIbcDenom = - ibcBaseDenoms.includes(denom || '') || meta.ibc?.baseDenom === denom - - const tokenType = isBaseIbcDenom - ? TokenType.Ibc - : getTokenTypeFromDenom(denom || '') - - const token = { - ...meta, - tokenType, - denom: denom || '', - } - - const tokenWithDecimalsAndSymbol = { - ...token, - tokenType, - decimals: getTokenDecimals(token), - symbol: getTokenSymbol(token), - } - - if (![TokenType.TokenFactory, TokenType.Cw20].includes(tokenType)) { - return tokenWithDecimalsAndSymbol - } - - /** - * If there are multiple cw20 variations - * of the token we find the one that corresponds - * to the contract address and set it on the cw20 field - * - * If there is only one cw20 version then we use that one - * as the default version - */ - if (tokenWithDecimalsAndSymbol.cw20) { - return { - ...tokenWithDecimalsAndSymbol, - cw20s: [], - } - } - - if (tokenWithDecimalsAndSymbol.cw20s) { - return { - ...tokenWithDecimalsAndSymbol, - ...getCw20TokenSingle({ - ...tokenWithDecimalsAndSymbol, - denom, - tokenType: TokenType.Cw20, - }), - tokenType, - denom: tokenWithDecimalsAndSymbol.denom, - } - } - - return tokenWithDecimalsAndSymbol -} - -export const getUnknownToken = (denom: string): Token => { - return { - denom, - name: denom, - symbol: denom, - decimals: 18, - logo: 'unknown.png', - coinGeckoId: '', - tokenType: TokenType.Unknown, - tokenVerification: TokenVerification.Unverified, - } as Token -} - -export const getUnknownTokenWithSymbol = (denom: string): Token => { - return { - denom, - name: denom, - symbol: 'UNKNOWN', - decimals: 0, - logo: 'unknown.png', - coinGeckoId: '', - tokenType: TokenType.Unknown, - tokenVerification: TokenVerification.Unverified, - } as Token -} - -export const isCw20ContractAddress = (address: string) => - address.length === 42 && address.startsWith('inj') - -/** - * Token factory denoms created by the adapter contract - */ -export const getTokenFactoryDenomByAdapter = ( - cw20address: string, - network: Network = Network.Mainnet, -) => { - return `factory/${getCw20AdapterContractForNetwork(network)}/${cw20address}` -} - -export const getPeggyDenomFromSymbolOrName = ( - symbolOrName: string, - network: Network = Network.Mainnet, -) => { - const tokenMetaUtils = TokenMetaUtilsFactory.make(network) - const metaFromSymbol = tokenMetaUtils.getMetaBySymbol(symbolOrName) - const metaFromName = tokenMetaUtils.getMetaByName(symbolOrName) - - if (!metaFromSymbol && !metaFromName) { - return - } - - if (!metaFromSymbol?.erc20 && !metaFromName?.erc20) { - return - } - - return `peggy${(metaFromSymbol || metaFromName)?.erc20?.address}` -} - -export const getIbcDenomFromSymbolOrName = ( - symbolOrName: string, - network: Network = Network.Mainnet, -) => { - const tokenMetaUtils = TokenMetaUtilsFactory.make(network) - const metaFromName = tokenMetaUtils.getMetaBySymbol(symbolOrName) - const metaFromSymbol = tokenMetaUtils.getMetaByName(symbolOrName) - - if (!metaFromSymbol && !metaFromName) { - return - } - - if (!metaFromSymbol?.ibc && !metaFromName?.ibc) { - return - } - - return `ibc/${(metaFromSymbol || metaFromName)?.ibc?.hash}` -} - -export const getCw20FromSymbolOrName = ( - symbolOrName: string, - network: Network = Network.Mainnet, - source?: TokenSource, -) => { - const tokenMetaUtils = TokenMetaUtilsFactory.make(network) - const metaFromName = tokenMetaUtils.getMetaBySymbol(symbolOrName) - const metaFromSymbol = tokenMetaUtils.getMetaByName(symbolOrName) - - if (!metaFromSymbol && !metaFromName) { - return - } - - if ( - !metaFromSymbol?.cw20 && - !metaFromName?.cw20 && - !metaFromSymbol?.cw20s && - !metaFromName?.cw20s - ) { - return - } - - const meta = (metaFromName || metaFromSymbol)! - - if (meta.cw20) { - return getTokenFactoryDenomByAdapter(meta.cw20.address, network) - } - - if (source) { - const cw20 = meta?.cw20s?.find((cw20) => cw20.source === source) - - return cw20 - ? getTokenFactoryDenomByAdapter(cw20.address, network) - : undefined - } - - const [cw20] = meta.cw20s || [] - - return getTokenFactoryDenomByAdapter(cw20.address, network) -} diff --git a/packages/token-metadata/src/tokens/canonical.ts b/packages/token-metadata/src/utils/canonical.ts similarity index 100% rename from packages/token-metadata/src/tokens/canonical.ts rename to packages/token-metadata/src/utils/canonical.ts diff --git a/packages/token-metadata/src/utils/helpers.ts b/packages/token-metadata/src/utils/helpers.ts new file mode 100644 index 000000000..1429a3a08 --- /dev/null +++ b/packages/token-metadata/src/utils/helpers.ts @@ -0,0 +1,199 @@ +import { + Network, + getCw20AdapterContractForNetwork, +} from '@injectivelabs/networks' +import { TokenMetaUtilsFactory } from '../TokenMetaUtilsFactory' +import { + Token, + TokenType, + TokenBase, + TokenSource, + IbcTokenMeta, + Cw20TokenMeta, + TokenVerification, + IbcTokenMetaWithSource, + Cw20TokenMetaWithSource, + NativeTokenFactoryMeta, +} from '../types' +import { getChannelIdFromPath } from '../ibc' + +/** + * Token factory denoms created by the adapter contract + */ +export const getTokenFactoryDenomByAdapter = ( + cw20address: string, + network: Network = Network.Mainnet, +) => { + return `factory/${getCw20AdapterContractForNetwork(network)}/${cw20address}` +} + +export const getPeggyDenomFromSymbolOrName = ( + symbolOrName: string, + network: Network = Network.Mainnet, +) => { + const tokenMetaUtils = TokenMetaUtilsFactory.make(network) + const metaFromSymbol = tokenMetaUtils.getMetaBySymbol(symbolOrName) + + if (!metaFromSymbol) { + return + } + + if (!metaFromSymbol?.erc20) { + return + } + + return `peggy${metaFromSymbol?.erc20?.address}` +} + +export const getIbcDenomFromSymbolOrName = ({ + symbolOrName, + network = Network.Mainnet, + source, +}: { + symbolOrName: string + network?: Network + source?: TokenSource +}) => { + const tokenMetaUtils = TokenMetaUtilsFactory.make(network) + const metaFromSymbol = tokenMetaUtils.getMetaBySymbol(symbolOrName) + + if (!metaFromSymbol) { + return + } + + if (!metaFromSymbol?.ibcs) { + return + } + + const meta = metaFromSymbol + + if (source) { + const ibcHash = meta?.ibcs?.find((ibc) => ibc.source === source)?.hash + + return `ibc/${ibcHash}` + } + + const defaultIbcHash = meta.ibcs?.find( + (ibc) => ibc.source === TokenSource.Cosmos, + )?.hash + const [ibc] = meta.ibcs || [] + const ibcHash = defaultIbcHash || ibc?.hash + + return `ibc/${ibcHash}` +} + +export const getCw20FromSymbolOrName = ( + symbolOrName: string, + network: Network = Network.Mainnet, + source?: TokenSource, +) => { + const tokenMetaUtils = TokenMetaUtilsFactory.make(network) + const metaFromSymbol = tokenMetaUtils.getMetaBySymbol(symbolOrName) + + if (!metaFromSymbol) { + return + } + + if (!metaFromSymbol?.cw20s) { + return + } + + const meta = metaFromSymbol + + if (source) { + const cw20 = meta?.cw20s?.find((cw20) => cw20.source === source) + + return cw20 + ? getTokenFactoryDenomByAdapter(cw20.address, network) + : undefined + } + + const [cw20] = meta.cw20s || [] + + return getTokenFactoryDenomByAdapter(cw20.address, network) +} + +export const getCw20Meta = ( + token: TokenBase, +): Cw20TokenMetaWithSource | Cw20TokenMeta | undefined => { + const denomToLowerCase = token.denom.toLowerCase() + const cw20MetaFromCw20s = token.cw20s?.find((meta) => + denomToLowerCase.includes(meta.address.toLowerCase()), + ) + + return cw20MetaFromCw20s || token.cw20s?.[0] || undefined +} + +export const getIbcMeta = ( + token: TokenBase, +): IbcTokenMetaWithSource | IbcTokenMeta | undefined => { + const denomToLowerCase = token.denom.toLowerCase() + const ibcMetaFromIbcs = token.ibcs?.find((meta) => + denomToLowerCase.includes(meta.hash.toLowerCase()), + ) + const defaultIbcMeta = token.ibcs?.find( + (meta) => meta.source === TokenSource.Cosmos, + ) + + return ibcMetaFromIbcs || defaultIbcMeta || token.ibcs?.[0] || undefined +} + +export const getNativeTokenFactoryMeta = ( + token: TokenBase, +): NativeTokenFactoryMeta | undefined => { + const [, creatorAddress] = token.denom.split('/').reverse() + + return token.tokenFactories?.find( + (meta) => meta.creator.toLowerCase() === creatorAddress, + ) +} + +export const getUnknownToken = (denom: string): Token => { + return { + denom, + name: denom, + symbol: denom, + decimals: 18, + logo: 'unknown.png', + coinGeckoId: '', + tokenType: TokenType.Unknown, + tokenVerification: TokenVerification.Unverified, + } as Token +} + +export const getUnknownTokenWithSymbol = (denom: string): Token => { + return { + denom, + name: denom, + symbol: 'UNKNOWN', + decimals: 0, + logo: 'unknown.png', + coinGeckoId: '', + tokenType: TokenType.Unknown, + tokenVerification: TokenVerification.Unverified, + } as Token +} + +/** @deprecated - use getIbcTokenFromDenomTrace */ +export const getIbcTokenMetaFromDenomTrace = ({ + hash, + path, + decimals, + baseDenom, +}: { + decimals: number + hash: string + path: string + baseDenom: string +}): IbcTokenMeta => ({ + symbol: baseDenom, + hash, + path, + baseDenom, + decimals, + channelId: getChannelIdFromPath(path), + isNative: !baseDenom.startsWith('ibc'), +}) + +export const isCw20ContractAddress = (address: string) => + address.length === 42 && address.startsWith('inj') diff --git a/packages/token-metadata/src/utils/index.ts b/packages/token-metadata/src/utils/index.ts new file mode 100644 index 000000000..8da6c50d8 --- /dev/null +++ b/packages/token-metadata/src/utils/index.ts @@ -0,0 +1,4 @@ +export * from './helpers' +export * from './meta' +export * from './canonical' +export * from './token' diff --git a/packages/token-metadata/src/utils/meta.ts b/packages/token-metadata/src/utils/meta.ts new file mode 100644 index 000000000..880f3cdbb --- /dev/null +++ b/packages/token-metadata/src/utils/meta.ts @@ -0,0 +1,360 @@ +import { INJ_DENOM } from '@injectivelabs/utils' +import { + Token, + IbcToken, + TokenBase, + TokenType, + Cw20TokenMetaWithSource, + IbcTokenMetaWithSource, +} from '../types' +import { + getIbcMeta, + getCw20Meta, + isCw20ContractAddress, + getNativeTokenFactoryMeta, +} from './helpers' +import { getChannelIdFromPath } from '../ibc' + +/** @deprecated - use getTokenInfo */ +export const getTokenTypeFromDenom = (denom: string) => { + if (denom === INJ_DENOM) { + return TokenType.Native + } + + if (isCw20ContractAddress(denom)) { + return TokenType.Cw20 + } + + if (denom.startsWith('ibc')) { + return TokenType.Ibc + } + + if (denom.startsWith('factory/')) { + return TokenType.TokenFactory + } + + if (denom.startsWith('peggy')) { + return TokenType.Erc20 + } + + if (denom.startsWith('share')) { + return TokenType.InsuranceFund + } + + return TokenType.Cw20 +} + +/** @deprecated - use getTokenInfo */ +export const getTokenSymbol = (token: Token) => { + if (token.denom.startsWith('factory/')) { + const [address] = token.denom.split('/').reverse() + + if (isCw20ContractAddress(address)) { + const meta = getCw20Meta(token) as Cw20TokenMetaWithSource + + return meta?.symbol || token.symbol + } + + const meta = getNativeTokenFactoryMeta(token) + + return meta?.symbol || token.symbol + } + + if (token.denom.startsWith('peggy')) { + return token.erc20?.symbol || token.symbol + } + + if (token.denom.startsWith('ibc')) { + return token.ibc?.symbol || token.symbol + } + + return token.symbol +} + +/** @deprecated - use getTokenInfo */ +export const getTokenLogo = (token: Token) => { + if (isCw20ContractAddress(token.denom)) { + return token.cw20?.name || token.name + } + + if (token.denom.startsWith('factory/')) { + const [address] = token.denom.split('/').reverse() + + if (isCw20ContractAddress(address)) { + const meta = getCw20Meta(token) as Cw20TokenMetaWithSource + + return meta?.logo || token.logo + } + + const meta = getNativeTokenFactoryMeta(token) + + return meta?.logo || token.logo + } + + if (token.denom.startsWith('peggy')) { + return token.erc20?.name || token.name + } + + if (token.denom.startsWith('ibc')) { + return token.ibc?.name || token.name + } + + return token.name +} + +/** @deprecated - use getTokenInfo */ +export const getTokenName = (token: Token) => { + if (isCw20ContractAddress(token.denom)) { + return token.cw20?.name || token.name + } + + if (token.denom.startsWith('factory/')) { + const [address] = token.denom.split('/').reverse() + + if (isCw20ContractAddress(address)) { + const meta = getCw20Meta(token) as Cw20TokenMetaWithSource + + return meta?.name || token.name + } + + const meta = getNativeTokenFactoryMeta(token) + + return meta?.name || token.name + } + + if (token.denom.startsWith('peggy')) { + return token.erc20?.name || token.name + } + + if (token.denom.startsWith('ibc')) { + return token.ibc?.name || token.name + } + + return token.name +} + +/** @deprecated - use getTokenInfo */ +export const getTokenDecimals = (token: Token) => { + if (token.denom === INJ_DENOM) { + return token.decimals + } + + if (token.denom.startsWith('factory/')) { + const [address] = token.denom.split('/').reverse() + + if (isCw20ContractAddress(address)) { + const meta = getCw20Meta(token) as Cw20TokenMetaWithSource + + return meta?.decimals || token.decimals + } + + const meta = getNativeTokenFactoryMeta(token) + + return meta?.decimals || token.decimals + } + + if (token.denom.startsWith('ibc')) { + const meta = getIbcMeta(token) + + return meta?.decimals || token.decimals + } + + if (token.denom.startsWith('peggy')) { + return token.erc20?.decimals || token.decimals + } + + if (token.denom.startsWith('share')) { + return token.decimals + } + + return token.decimals +} + +/** @deprecated - use getTokenInfo */ +export const getTokenAddress = (token: Token) => { + if (token.denom === INJ_DENOM) { + return token.erc20?.address + } + + if (token.denom.startsWith('inj')) { + return token.cw20?.address + } + + if (token.denom.startsWith('factory/')) { + const [, , address] = token.denom + + return address + } + + if (token.denom.startsWith('peggy')) { + return token.erc20?.address + } + + if (token.denom.startsWith('share')) { + return '' + } + + return '' +} + +export const getTokenInfo = (token: TokenBase) => { + const tokenType = getTokenTypeFromDenom(token.denom) + + if (isCw20ContractAddress(token.denom)) { + const meta = getCw20Meta(token) as Cw20TokenMetaWithSource + + return { + symbol: meta?.symbol || token.symbol, + name: meta?.name || token.name, + logo: meta?.logo || token.logo, + decimals: meta?.decimals || token.decimals, + coinGeckoId: meta?.coinGeckoId || token.coinGeckoId, + cw20: meta, + tokenType, + } + } + + if (token.denom.startsWith('factory/')) { + const [address] = token.denom.split('/').reverse() + + if (isCw20ContractAddress(address)) { + const meta = getCw20Meta(token) as Cw20TokenMetaWithSource + + return { + symbol: meta?.symbol || token.symbol || '', + name: meta?.name || token.name || '', + logo: meta?.logo || token.logo, + decimals: meta?.decimals || token.decimals || 0, + coinGeckoId: meta?.coinGeckoId || token.coinGeckoId, + cw20: meta, + tokenType, + } + } + + const meta = getNativeTokenFactoryMeta(token) + + return { + symbol: meta?.symbol || token.symbol || '', + name: meta?.name || token.name || '', + logo: meta?.logo || token.logo || '', + decimals: meta?.decimals || token.decimals || 0, + coinGeckoId: meta?.coinGeckoId || token.coinGeckoId, + tokenFactory: meta, + tokenType, + } + } + + if (token.denom.startsWith('peggy') || token.denom === INJ_DENOM) { + return { + symbol: token.erc20?.symbol || token.symbol || '', + name: token.erc20?.name || token.name || '', + logo: token.erc20?.logo || token.logo || '', + decimals: token.erc20?.decimals || token.decimals || 0, + coinGeckoId: token.erc20?.coinGeckoId || token.coinGeckoId, + tokenType, + } + } + + if (token.denom.startsWith('0x') && token.denom.length === 42) { + return { + symbol: token.erc20?.symbol || token.evm?.symbol || token.symbol || '', + name: token.erc20?.name || token.evm?.symbol || token.name || '', + logo: token.erc20?.logo || token.evm?.symbol || token.logo || '', + decimals: + token.erc20?.decimals || token.evm?.symbol || token.decimals || 0, + coinGeckoId: + token.erc20?.coinGeckoId || token.evm?.coinGeckoId || token.coinGeckoId, + tokenType, + } + } + + // Including tokens that can be searched by baseDenom symbol + if (token.denom.startsWith('ibc') || token.ibcs) { + const meta = getIbcMeta(token) as IbcTokenMetaWithSource + + return { + symbol: meta?.symbol || token.symbol || '', + name: meta?.name || token.name || '', + logo: meta?.logo || token.logo || '', + decimals: meta?.decimals || token.decimals || 6, + coinGeckoId: meta?.coinGeckoId || token.coinGeckoId, + tokenType, + } + } + + // Including tokens that can be searched by symbol + if (token.erc20 || token.evm || token.spl) { + return { + symbol: + token.erc20?.symbol || + token.evm?.symbol || + token.spl?.symbol || + token.symbol || + '', + name: + token.erc20?.name || + token.evm?.name || + token.spl?.name || + token.name || + '', + logo: + token.erc20?.logo || + token.evm?.logo || + token.spl?.logo || + token.logo || + '', + decimals: + token.erc20?.decimals || + token.evm?.decimals || + token.spl?.decimals || + token.decimals || + 6, + coinGeckoId: + token.erc20?.coinGeckoId || + token.evm?.coinGeckoId || + token.spl?.coinGeckoId || + token.coinGeckoId || + 6, + tokenType, + } + } + + return { + symbol: token.symbol, + name: token.name, + logo: token.logo, + decimals: token.decimals || 0, + coinGeckoId: token.coinGeckoId || 0, + tokenType, + } +} + +export const getIbcTokenFromDenomTrace = ({ + denomTrace, + token, +}: { + token: Token + denomTrace: { + path: string + baseDenom: string + } +}): IbcToken => { + return { + ...token, + symbol: token.ibc?.symbol || token.symbol || '', + name: token.ibc?.name || token.name || '', + logo: token.ibc?.logo || token.logo || '', + decimals: token.ibc?.decimals || token.decimals || 0, + tokenType: TokenType.Ibc, + + ibc: { + hash: token.denom.replace('ibc/', ''), + symbol: denomTrace.baseDenom, + path: denomTrace.path, + baseDenom: denomTrace.baseDenom, + decimals: token.decimals, + channelId: getChannelIdFromPath(denomTrace.path), + isNative: !denomTrace.baseDenom.startsWith('ibc'), + }, + } as IbcToken +} diff --git a/packages/token-metadata/src/utils/token.ts b/packages/token-metadata/src/utils/token.ts new file mode 100644 index 000000000..9e6fadd40 --- /dev/null +++ b/packages/token-metadata/src/utils/token.ts @@ -0,0 +1,51 @@ +import { ibcBaseDenoms } from '../tokens/tokens' +import { Token, TokenMetaBase, TokenType } from '../types' +import { getCw20Meta, getIbcMeta } from './helpers' +import { getTokenInfo } from './meta' + +/** + * We only need to perform the base denom check + * when we are getting token metadata + * from symbol + **/ +export const getTokenFromMetaIncludingIbcBaseDenoms = ( + meta: TokenMetaBase, + denom?: string, +): Token => { + const isBaseIbcDenom = + ibcBaseDenoms.includes(denom || '') || meta.ibcs?.find(ibc => ibc.baseDenom.includes(denom || '')) + + const tokenMeta = getTokenFromMeta(meta, denom) + + const token = { + ...meta, + denom: denom || '', + } + + return { + ...token, + ...getTokenInfo(token), + tokenType: isBaseIbcDenom ? TokenType.Ibc : tokenMeta.tokenType, + denom: denom || '', + ...(token.cw20s && { cw20: getCw20Meta(token) }), + ...(token.ibcs && { ibc: getIbcMeta(token) }), + } as Token +} + +export const getTokenFromMeta = ( + meta: TokenMetaBase, + denom?: string, +): Token => { + const token = { + ...meta, + denom: denom || '', + } + const tokenInfo = getTokenInfo(token) + + return { + ...token, + ...tokenInfo, + ...(token.cw20s && { cw20: getCw20Meta(token) }), + ...(token.ibcs && { ibc: getIbcMeta(token) }), + } as Token +} diff --git a/packages/token-metadata/test/unit/cw20.spec.ts b/packages/token-metadata/test/unit/tokens.spec.ts similarity index 88% rename from packages/token-metadata/test/unit/cw20.spec.ts rename to packages/token-metadata/test/unit/tokens.spec.ts index 5f53a3b00..6f85ffd33 100644 --- a/packages/token-metadata/test/unit/cw20.spec.ts +++ b/packages/token-metadata/test/unit/tokens.spec.ts @@ -13,11 +13,11 @@ describe('TokenMetadata', () => { expect(tokenMeta.ibc).toEqual({ decimals: 6, isNative: true, + symbol: 'LUNA', baseDenom: 'uluna', path: 'transfer/channel-4', channelId: 'channel-4', hash: 'B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395', - tokenType: 'ibc', }) }) @@ -26,16 +26,20 @@ describe('TokenMetadata', () => { 'factory/inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk/inj1q6kpxy6ar5lkxqudjvryarrrttmakwsvzkvcyh' const CHZPeggyDenom = 'peggy0x3506424F91fD33084466F402d5D97f05F8e3b4AF' - test('fetches correct decimal value for cw20 format', () => { + test('fetches correct info for cw20 format', () => { const tokenMeta = tokenFactory.toToken(CHZFactoryDenom) as Token expect(tokenMeta.decimals).toBe(8) + expect(tokenMeta.name).toBe('Chiliz') + expect(tokenMeta.symbol).toBe('CHZ') }) - test('fetches correct decimal value for peggy format', () => { + test('fetches correct info for peggy format', () => { const tokenMeta = tokenFactory.toToken(CHZPeggyDenom) as Token expect(tokenMeta.decimals).toBe(18) + expect(tokenMeta.name).toBe('Chiliz') + expect(tokenMeta.symbol).toBe('CHZ') }) }) @@ -77,16 +81,14 @@ describe('TokenMetadata', () => { const USDCPeggyDenom = 'peggy0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' test('fetches correct value for peggyUsdc', () => { - const tokenMeta = tokenFactory.toToken(USDCetFactoryDenom) as Token + const tokenMeta = tokenFactory.toToken(USDCPeggyDenom) as Token expect(tokenMeta).toEqual( expect.objectContaining({ - cw20: { + erc20: { decimals: 6, - symbol: 'USDCet', - source: 'ethereum-wormhole', - address: 'inj1q6zlut7gtkzknkk773jecujwsdkgq882akqksk', - tokenType: 'cw20', + symbol: 'USDC', + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', }, }), ) @@ -102,7 +104,6 @@ describe('TokenMetadata', () => { symbol: 'USDCet', source: 'ethereum-wormhole', address: 'inj1q6zlut7gtkzknkk773jecujwsdkgq882akqksk', - tokenType: 'cw20', }, }), ) @@ -118,7 +119,6 @@ describe('TokenMetadata', () => { symbol: 'USDCso', source: 'solana', address: 'inj12pwnhtv7yat2s30xuf4gdk9qm85v4j3e60dgvu', - tokenType: 'cw20', }, }), ) @@ -133,7 +133,6 @@ describe('TokenMetadata', () => { address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', decimals: 6, symbol: 'USDC', - tokenType: 'erc20', }, }), ) diff --git a/packages/token-utils/CHANGELOG.md b/packages/token-utils/CHANGELOG.md index 6a89331ff..a547ce1ac 100644 --- a/packages/token-utils/CHANGELOG.md +++ b/packages/token-utils/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-utils@1.14.7...@injectivelabs/token-utils@1.14.10) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/token-utils + + + + + +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-utils@1.14.6...@injectivelabs/token-utils@1.14.7) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/token-utils + + + + + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-utils@1.14.6-beta.10...@injectivelabs/token-utils@1.14.6) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/token-utils + + + + + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-utils@1.14.5-beta.6...@injectivelabs/token-utils@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/token-utils + + + + + ## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/token-utils@1.14.4-beta.0...@injectivelabs/token-utils@1.14.4) (2023-11-20) **Note:** Version bump only for package @injectivelabs/token-utils diff --git a/packages/token-utils/package.json b/packages/token-utils/package.json index 7dff80fc9..757ceb385 100644 --- a/packages/token-utils/package.json +++ b/packages/token-utils/package.json @@ -1,6 +1,6 @@ { "name": "@injectivelabs/token-utils", - "version": "1.14.5-beta.5", + "version": "1.14.10", "description": "Token Utils is a package for querying different data about tokens", "sideEffects": false, "author": { @@ -30,8 +30,8 @@ "start": "node dist/index.js" }, "dependencies": { - "@injectivelabs/exceptions": "^1.14.5-beta.5", - "@injectivelabs/utils": "^1.14.5-beta.5", + "@injectivelabs/exceptions": "^1.14.10", + "@injectivelabs/utils": "^1.14.10", "link-module-alias": "^1.2.0", "shx": "^0.3.2" }, diff --git a/packages/ts-types/CHANGELOG.md b/packages/ts-types/CHANGELOG.md index 76ca82072..87a9b7091 100644 --- a/packages/ts-types/CHANGELOG.md +++ b/packages/ts-types/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/ts-types@1.14.7...@injectivelabs/ts-types@1.14.10) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/ts-types + + + + + +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/ts-types@1.14.6...@injectivelabs/ts-types@1.14.7) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/ts-types + + + + + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/ts-types@1.14.6-beta.5...@injectivelabs/ts-types@1.14.6) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/ts-types + + + + + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/ts-types@1.14.5-beta.0...@injectivelabs/ts-types@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/ts-types + + + + + ## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/ts-types@1.14.4-beta.0...@injectivelabs/ts-types@1.14.4) (2023-11-20) **Note:** Version bump only for package @injectivelabs/ts-types diff --git a/packages/ts-types/package.json b/packages/ts-types/package.json index 343a270fc..8669d1d1c 100644 --- a/packages/ts-types/package.json +++ b/packages/ts-types/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/ts-types", "description": "List of types that can be reused throughout Injective's projects.", - "version": "1.14.5-beta.0", + "version": "1.14.10", "sideEffects": false, "license": "Apache-2.0", "main": "dist/cjs/index.js", diff --git a/packages/ts-types/src/cosmos.ts b/packages/ts-types/src/cosmos.ts index 20d9873dd..d213a2e73 100644 --- a/packages/ts-types/src/cosmos.ts +++ b/packages/ts-types/src/cosmos.ts @@ -25,6 +25,8 @@ export enum CosmosChainId { Celestia = 'celestia', Migaloo = 'migaloo-1', Kujira = 'kaiyo-1', + Wormchain = 'wormchain', + Andromeda = 'andromeda-1', } export enum TestnetCosmosChainId { diff --git a/packages/ts-types/src/enums.ts b/packages/ts-types/src/enums.ts index b6104cb72..dbf3425b9 100644 --- a/packages/ts-types/src/enums.ts +++ b/packages/ts-types/src/enums.ts @@ -67,6 +67,7 @@ export enum MsgType { MsgCreateBinaryOptionsMarketOrder = 'injective.exchange.v1beta1.MsgCreateBinaryOptionsMarketOrder', MsgCreateDerivativeLimitOrder = 'injective.exchange.v1beta1.MsgCreateDerivativeLimitOrder', MsgCreateDerivativeMarketOrder = 'injective.exchange.v1beta1.MsgCreateDerivativeMarketOrder', + MsgLiquidatePosition = 'injective.exchange.v1beta1.MsgLiquidatePosition', MsgCreateSpotLimitOrder = 'injective.exchange.v1beta1.MsgCreateSpotLimitOrder', MsgCreateSpotMarketOrder = 'injective.exchange.v1beta1.MsgCreateSpotMarketOrder', MsgDeposit = 'injective.exchange.v1beta1.MsgDeposit', diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index 7372b15ef..9caa71c04 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/utils@1.14.7...@injectivelabs/utils@1.14.10) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/utils + + + + + +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/utils@1.14.6...@injectivelabs/utils@1.14.7) (2024-03-03) + +**Note:** Version bump only for package @injectivelabs/utils + + + + + +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/utils@1.14.6-beta.10...@injectivelabs/utils@1.14.6) (2024-03-01) + +**Note:** Version bump only for package @injectivelabs/utils + + + + + +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/utils@1.14.5-beta.6...@injectivelabs/utils@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/utils + + + + + ## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/utils@1.14.4-beta.0...@injectivelabs/utils@1.14.4) (2023-11-20) **Note:** Version bump only for package @injectivelabs/utils diff --git a/packages/utils/package.json b/packages/utils/package.json index 44b1d6904..bc2abff7e 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/utils", "description": "List of utils and helper functions that can be reused throughout Injective's projects.", - "version": "1.14.5-beta.5", + "version": "1.14.10", "sideEffects": false, "author": { "name": "Bojan Angjelkoski", @@ -31,8 +31,8 @@ "start": "node dist/index.js" }, "dependencies": { - "@injectivelabs/exceptions": "^1.14.5-beta.5", - "@injectivelabs/ts-types": "^1.14.5-beta.0", + "@injectivelabs/exceptions": "^1.14.10", + "@injectivelabs/ts-types": "^1.14.10", "axios": "^0.21.1", "bignumber.js": "^9.0.1", "http-status-codes": "^2.2.0", diff --git a/packages/utils/src/constants.ts b/packages/utils/src/constants.ts index 407a96e7b..92023ccf7 100644 --- a/packages/utils/src/constants.ts +++ b/packages/utils/src/constants.ts @@ -31,6 +31,9 @@ export const DEFAULT_STD_FEE = { }, ], gas: DEFAULT_GAS_LIMIT.toString(), + payer: '', + granter: '', + feePayer: '', } export const DEFAULT_STD_FEE_BY_DENOM = (denom: string = 'inj') => ({ diff --git a/packages/utils/src/helpers.ts b/packages/utils/src/helpers.ts index 62eb59443..89ff49f68 100644 --- a/packages/utils/src/helpers.ts +++ b/packages/utils/src/helpers.ts @@ -75,44 +75,97 @@ export const getStdFeeForToken = ( ) => { const gasPriceInBase = gasPrice || new BigNumberInWei(DEFAULT_GAS_PRICE).toBase() - const gasPriceScaled = new BigNumberInBase(gasPriceInBase).toWei( - token.decimals, - ) + const gasPriceScaled = new BigNumberInBase(gasPriceInBase) + .toWei(token.decimals) + .toFixed(0) + const gasNormalized = new BigNumber(gasLimit || DEFAULT_GAS_LIMIT).toFixed(0) return { amount: [ { denom: token.denom, - amount: gasPriceScaled.times(DEFAULT_GAS_LIMIT).toFixed(), + amount: new BigNumberInBase(gasPriceScaled) + .times(gasNormalized) + .toFixed(), }, ], - gas: (gasLimit || DEFAULT_GAS_LIMIT).toString(), + gas: gasNormalized, } } -export const getStdFee = ({ - gas = DEFAULT_GAS_LIMIT.toString(), - gasPrice = DEFAULT_GAS_PRICE, - payer, - granter, - feePayer, -}: { +export const getStdFeeFromObject = (args?: { gas?: string | number payer?: string granter?: string gasPrice?: string | number feePayer?: string -}) => ({ - amount: [ - { - denom: 'inj', - amount: new BigNumber(gas).times(gasPrice).toString(), - }, - ], - gas: gas.toString(), - payer /** for Web3Gateway fee delegation */, - granter, - feePayer, -}) +}) => { + if (!args) { + return DEFAULT_STD_FEE + } + + const { + gas = DEFAULT_GAS_LIMIT.toString(), + gasPrice = DEFAULT_GAS_PRICE, + payer, + granter, + feePayer, + } = args + const gasNormalized = new BigNumber(gas).toFixed(0) + const gasPriceNormalized = new BigNumber(gasPrice).toFixed(0) + + return { + amount: [ + { + denom: 'inj', + amount: new BigNumber(gasNormalized) + .times(gasPriceNormalized) + .toFixed(), + }, + ], + gas: new BigNumber(gasNormalized).toFixed(), + payer /** for Web3Gateway fee delegation */, + granter, + feePayer, + } +} export const getDefaultStdFee = () => DEFAULT_STD_FEE + +export const getStdFeeFromString = (gasPrice: string) => { + const matchResult = gasPrice.match(/^([0-9.]+)([a-zA-Z][a-zA-Z0-9/:._-]*)$/) + + if (!matchResult) { + throw new Error('Invalid gas price string') + } + + const [_, amount] = matchResult + const gas = new BigNumberInBase(amount) + .toWei() + .dividedBy(DEFAULT_GAS_PRICE) + .toFixed(0) + + return getStdFeeFromObject({ gas, gasPrice: DEFAULT_GAS_PRICE }) +} + +export const getStdFee = ( + args?: + | string + | { + gas?: string | number + payer?: string + granter?: string + gasPrice?: string | number + feePayer?: string + }, +) => { + if (!args) { + return DEFAULT_STD_FEE + } + + if (typeof args === 'string') { + return getStdFeeFromString(args) + } + + return getStdFeeFromObject({ ...args }) +} diff --git a/packages/wallet-ts/CHANGELOG.md b/packages/wallet-ts/CHANGELOG.md index cecb57855..315feb037 100644 --- a/packages/wallet-ts/CHANGELOG.md +++ b/packages/wallet-ts/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.4-beta.3...@injectivelabs/wallet-ts@1.14.4) (2023-11-20) +## [1.14.10](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.8...@injectivelabs/wallet-ts@1.14.10) (2024-03-03) **Note:** Version bump only for package @injectivelabs/wallet-ts @@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.3-beta.27...@injectivelabs/wallet-ts@1.14.3) (2023-11-17) +## [1.14.8](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.7...@injectivelabs/wallet-ts@1.14.8) (2024-03-03) **Note:** Version bump only for package @injectivelabs/wallet-ts @@ -19,24 +19,43 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline -## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.2-beta.15...@injectivelabs/wallet-ts@1.14.2) (2023-11-07) +## [1.14.7](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.7-beta.2...@injectivelabs/wallet-ts@1.14.7) (2024-03-03) +**Note:** Version bump only for package @injectivelabs/wallet-ts -### Reverts -* faulty version ([6e25b3f](https://github.com/InjectiveLabs/injective-ts/commit/6e25b3f156d964666db8bc7885df653166aac523)) +## [1.14.7-beta.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.7-beta.0...@injectivelabs/wallet-ts@1.14.7-beta.1) (2024-03-02) +**Note:** Version bump only for package @injectivelabs/wallet-ts -## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.1-beta.25...@injectivelabs/wallet-ts@1.14.1) (2023-10-27) +## [1.14.6](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.6-beta.65...@injectivelabs/wallet-ts@1.14.6) (2024-03-01) **Note:** Version bump only for package @injectivelabs/wallet-ts +## [1.14.5](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.5-beta.73...@injectivelabs/wallet-ts@1.14.5) (2024-01-11) + +**Note:** Version bump only for package @injectivelabs/wallet-ts +## [1.14.4](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.4-beta.3...@injectivelabs/wallet-ts@1.14.4) (2023-11-20) +**Note:** Version bump only for package @injectivelabs/wallet-ts +## [1.14.3](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.3-beta.27...@injectivelabs/wallet-ts@1.14.3) (2023-11-17) + +**Note:** Version bump only for package @injectivelabs/wallet-ts + +## [1.14.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.2-beta.15...@injectivelabs/wallet-ts@1.14.2) (2023-11-07) + +### Reverts + +- faulty version ([6e25b3f](https://github.com/InjectiveLabs/injective-ts/commit/6e25b3f156d964666db8bc7885df653166aac523)) + +## [1.14.1](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.1-beta.25...@injectivelabs/wallet-ts@1.14.1) (2023-10-27) + +**Note:** Version bump only for package @injectivelabs/wallet-ts ## [1.14.1-beta.2](https://github.com/InjectiveLabs/injective-ts/compare/@injectivelabs/wallet-ts@1.14.1-beta.1...@injectivelabs/wallet-ts@1.14.1-beta.2) (2023-09-24) diff --git a/packages/wallet-ts/package.json b/packages/wallet-ts/package.json index 9fb015940..7e49bf69f 100644 --- a/packages/wallet-ts/package.json +++ b/packages/wallet-ts/package.json @@ -1,7 +1,7 @@ { "name": "@injectivelabs/wallet-ts", "description": "A convenient way to use and interact with different types of wallets on Injective.", - "version": "1.14.5-beta.69", + "version": "1.14.11-beta.3", "sideEffects": false, "author": { "name": "Bojan Angjelkoski", @@ -32,27 +32,27 @@ }, "dependencies": { "@cosmjs/launchpad": "0.27.1", - "@cosmjs/proto-signing": "0.31.3", - "@cosmjs/stargate": "^0.31.3", + "@cosmjs/proto-signing": "0.32.2", + "@cosmjs/stargate": "^0.32.2", "@cosmostation/extension-client": "^0.1.15", "@ethereumjs/common": "^3.1.1", "@ethereumjs/tx": "^4.1.1", - "@injectivelabs/exceptions": "^1.14.5-beta.5", - "@injectivelabs/networks": "^1.14.5-beta.8", - "@injectivelabs/sdk-ts": "^1.14.5-beta.63", - "@injectivelabs/ts-types": "^1.14.5-beta.0", - "@injectivelabs/utils": "^1.14.5-beta.5", - "@keplr-wallet/cosmos": "^0.11.58", - "@keplr-wallet/types": "^0.11.58", - "@ledgerhq/hw-app-cosmos": "^6.29.0", - "@ledgerhq/hw-app-eth": "6.33.2", - "@ledgerhq/hw-transport": "6.28.3", - "@ledgerhq/hw-transport-webhid": "6.27.14", - "@ledgerhq/hw-transport-webusb": "6.27.14", + "@injectivelabs/exceptions": "^1.14.10", + "@injectivelabs/networks": "^1.14.10", + "@injectivelabs/sdk-ts": "^1.14.11-beta.1", + "@injectivelabs/ts-types": "^1.14.10", + "@injectivelabs/utils": "^1.14.10", + "@keplr-wallet/cosmos": "^0.12.71", + "@keplr-wallet/types": "^0.12.71", + "@ledgerhq/hw-app-cosmos": "^6.29.4", + "@ledgerhq/hw-app-eth": "6.35.6", + "@ledgerhq/hw-transport": "6.30.4", + "@ledgerhq/hw-transport-webhid": "6.28.4", + "@ledgerhq/hw-transport-webusb": "6.28.4", "@metamask/eth-sig-util": "^4.0.0", - "@solana/wallet-adapter-wallets": "^0.19.5", + "@solana/wallet-adapter-wallets": "0.19.30", "@toruslabs/torus-embed": "^1.39.0", - "@trezor/connect-web": "^9.0.6", + "@trezor/connect-web": "9.2.1", "alchemy-sdk": "^2.6.3", "eip1193-provider": "^1.0.1", "eth-sig-util": "^3.0.1", diff --git a/packages/wallet-ts/src/broadcaster/MsgBroadcaster.ts b/packages/wallet-ts/src/broadcaster/MsgBroadcaster.ts index fe53ebea9..073aa9d91 100644 --- a/packages/wallet-ts/src/broadcaster/MsgBroadcaster.ts +++ b/packages/wallet-ts/src/broadcaster/MsgBroadcaster.ts @@ -2,8 +2,10 @@ import { TxGrpcApi, hexToBuff, PublicKey, - SIGN_AMINO, + SIGN_DIRECT, hexToBase64, + SIGN_EIP712_V2, + SIGN_EIP712, ChainGrpcAuthApi, CosmosTxV1Beta1Tx, createTxRawEIP712, @@ -11,6 +13,7 @@ import { getAminoStdSignDoc, getEip712TypedData, createWeb3Extension, + getEip712TypedDataV2, ChainGrpcTendermintApi, createTransactionWithSigners, createTxRawFromSigResponse, @@ -45,11 +48,30 @@ import { MsgBroadcasterTxOptions, MsgBroadcasterTxOptionsWithAddresses, } from './types' -import { isCosmosWallet } from '../strategies/wallet-strategy/utils' +import { + isCosmosWallet, + isEip712V2OnlyWallet, +} from '../strategies/wallet-strategy/utils' import { Wallet, WalletDeviceType } from '../types' import { createEip712StdSignDoc, KeplrWallet } from '../utils/wallets/keplr' import { isCosmosAminoOnlyWallet } from '../utils' +const getEthereumWalletPubKey = ({ + pubKey, + eip712TypedData, + signature, +}: { + pubKey?: string + eip712TypedData: T + signature: string +}) => { + if (pubKey) { + return pubKey + } + + return hexToBase64(recoverTypedSignaturePubKey(eip712TypedData, signature)) +} + /** * This class is used to broadcast transactions * using the WalletStrategy as a handler @@ -64,17 +86,26 @@ export class MsgBroadcaster { public chainId: ChainId + public txTimeout = DEFAULT_BLOCK_TIMEOUT_HEIGHT + + public simulateTx: boolean = true + public ethereumChainId?: EthereumChainId constructor(options: MsgBroadcasterOptions) { const networkInfo = getNetworkInfo(options.network) - const endpoints = - options.networkEndpoints || getNetworkEndpoints(options.network) this.options = options + this.simulateTx = options.simulateTx || true + this.txTimeout = options.txTimeout || DEFAULT_BLOCK_TIMEOUT_HEIGHT this.chainId = networkInfo.chainId this.ethereumChainId = networkInfo.ethereumChainId - this.endpoints = endpoints + this.endpoints = options.endpoints || getNetworkEndpoints(options.network) + } + + setOptions(options: Partial) { + this.simulateTx = options.simulateTx || this.simulateTx + this.txTimeout = options.txTimeout || this.txTimeout } /** @@ -99,9 +130,37 @@ export class MsgBroadcaster { return isCosmosWallet(walletStrategy.wallet) ? this.broadcastCosmos(txWithAddresses) + : isEip712V2OnlyWallet(walletStrategy.wallet) + ? this.broadcastWeb3V2(txWithAddresses) : this.broadcastWeb3(txWithAddresses) } + /** + * Broadcasting the transaction using the client + * side approach for both cosmos and ethereum native wallets + * Note: using EIP712_V2 for Ethereum wallets + * + * @param tx + * @returns {string} transaction hash + */ + async broadcastV2(tx: MsgBroadcasterTxOptions) { + const { options } = this + const { walletStrategy } = options + const txWithAddresses = { + ...tx, + ethereumAddress: getEthereumSignerAddress( + tx.injectiveAddress || tx.address, + ), + injectiveAddress: getInjectiveSignerAddress( + tx.injectiveAddress || tx.address, + ), + } as MsgBroadcasterTxOptionsWithAddresses + + return isCosmosWallet(walletStrategy.wallet) + ? this.broadcastCosmos(txWithAddresses) + : this.broadcastWeb3V2(txWithAddresses) + } + /** * Broadcasting the transaction using the client * side approach for cosmos native wallets @@ -165,7 +224,7 @@ export class MsgBroadcaster { * @returns transaction hash */ private async broadcastWeb3(tx: MsgBroadcasterTxOptionsWithAddresses) { - const { options, endpoints, chainId, ethereumChainId } = this + const { options, chainId, txTimeout, endpoints, ethereumChainId } = this const { walletStrategy } = options const msgs = Array.isArray(tx.msgs) ? tx.msgs : [tx.msgs] @@ -184,16 +243,38 @@ export class MsgBroadcaster { endpoints.grpc, ).fetchLatestBlock() const latestHeight = latestBlock!.header!.height - const timeoutHeight = new BigNumberInBase(latestHeight).plus( - DEFAULT_BLOCK_TIMEOUT_HEIGHT, - ) + const timeoutHeight = new BigNumberInBase(latestHeight).plus(txTimeout) const gas = (tx.gas?.gas || getGasPriceBasedOnMessage(msgs)).toString() + let stdFee = getStdFee({ ...tx.gas, gas }) + + /** + * Account has been created on chain + * and we can simulate the transaction + * to estimate the gas + **/ + if (baseAccount.pubKey) { + const { stdFee: simulatedStdFee } = await this.getTxWithSignersAndStdFee({ + chainId, + signMode: SIGN_EIP712_V2, + memo: tx.memo, + message: msgs, + timeoutHeight: timeoutHeight.toNumber(), + signers: { + pubKey: baseAccount.pubKey.key, + accountNumber: baseAccount.accountNumber, + sequence: baseAccount.sequence, + }, + fee: stdFee, + }) + + stdFee = simulatedStdFee + } /** EIP712 for signing on Ethereum wallets */ const eip712TypedData = getEip712TypedData({ msgs, - fee: getStdFee({ ...tx.gas, gas }), + fee: stdFee, tx: { memo: tx.memo, accountNumber: baseAccount.accountNumber.toString(), @@ -205,23 +286,23 @@ export class MsgBroadcaster { }) /** Signing on Ethereum */ - const signature = (await walletStrategy.signEip712TypedData( + const signature = await walletStrategy.signEip712TypedData( JSON.stringify(eip712TypedData), tx.ethereumAddress, - )) as string - const signatureBuff = hexToBuff(signature) - - /** Get Public Key of the signer */ - const publicKeyHex = recoverTypedSignaturePubKey(eip712TypedData, signature) - const publicKeyBase64 = hexToBase64(publicKeyHex) + ) + const pubKeyOrSignatureDerivedPubKey = getEthereumWalletPubKey({ + pubKey: baseAccount.pubKey?.key, + eip712TypedData, + signature, + }) /** Preparing the transaction for client broadcasting */ const { txRaw } = createTransaction({ message: msgs, memo: tx.memo, - signMode: SIGN_AMINO, - fee: getStdFee({ ...tx.gas, gas }), - pubKey: publicKeyBase64, + signMode: SIGN_EIP712, + fee: stdFee, + pubKey: pubKeyOrSignatureDerivedPubKey, sequence: baseAccount.sequence, timeoutHeight: timeoutHeight.toNumber(), accountNumber: baseAccount.accountNumber, @@ -233,16 +314,124 @@ export class MsgBroadcaster { }) const txRawEip712 = createTxRawEIP712(txRaw, web3Extension) - if (options.simulateTx) { - await this.simulateTxRaw(txRawEip712) + /** Append Signatures */ + txRawEip712.signatures = [hexToBuff(signature)] + + return walletStrategy.sendTransaction(txRawEip712, { + chainId, + endpoints, + txTimeout, + address: tx.injectiveAddress, + }) + } + + /** + * Prepare/sign/broadcast transaction using + * Ethereum native wallets on the client side. + * + * Note: Gas estimation not available + * + * @param tx The transaction that needs to be broadcasted + * @returns transaction hash + */ + private async broadcastWeb3V2(tx: MsgBroadcasterTxOptionsWithAddresses) { + const { options, chainId, txTimeout, endpoints, ethereumChainId } = this + const { walletStrategy } = options + const msgs = Array.isArray(tx.msgs) ? tx.msgs : [tx.msgs] + + if (!ethereumChainId) { + throw new GeneralException(new Error('Please provide ethereumChainId')) + } + + /** Account Details * */ + const accountDetails = await new ChainGrpcAuthApi( + endpoints.grpc, + ).fetchAccount(tx.injectiveAddress) + const { baseAccount } = accountDetails + + /** Block Details */ + const latestBlock = await new ChainGrpcTendermintApi( + endpoints.grpc, + ).fetchLatestBlock() + const latestHeight = latestBlock!.header!.height + const timeoutHeight = new BigNumberInBase(latestHeight).plus(txTimeout) + + const gas = (tx.gas?.gas || getGasPriceBasedOnMessage(msgs)).toString() + let stdFee = getStdFee({ ...tx.gas, gas }) + + /** + * Account has been created on chain + * and we can simulate the transaction + * to estimate the gas + **/ + if (baseAccount.pubKey) { + const { stdFee: simulatedStdFee } = await this.getTxWithSignersAndStdFee({ + chainId, + signMode: SIGN_EIP712_V2, + memo: tx.memo, + message: msgs, + timeoutHeight: timeoutHeight.toNumber(), + signers: { + pubKey: baseAccount.pubKey.key, + accountNumber: baseAccount.accountNumber, + sequence: baseAccount.sequence, + }, + fee: stdFee, + }) + + stdFee = simulatedStdFee } + /** EIP712 for signing on Ethereum wallets */ + const eip712TypedData = getEip712TypedDataV2({ + msgs, + fee: stdFee, + tx: { + memo: tx.memo, + accountNumber: baseAccount.accountNumber.toString(), + sequence: baseAccount.sequence.toString(), + timeoutHeight: timeoutHeight.toFixed(), + chainId, + }, + ethereumChainId, + }) + + /** Signing on Ethereum */ + const signature = await walletStrategy.signEip712TypedData( + JSON.stringify(eip712TypedData), + tx.ethereumAddress, + ) + const pubKeyOrSignatureDerivedPubKey = getEthereumWalletPubKey({ + pubKey: baseAccount.pubKey?.key, + eip712TypedData, + signature, + }) + + /** Preparing the transaction for client broadcasting */ + const { txRaw } = createTransaction({ + message: msgs, + memo: tx.memo, + signMode: SIGN_EIP712_V2, + fee: stdFee, + pubKey: pubKeyOrSignatureDerivedPubKey, + sequence: baseAccount.sequence, + timeoutHeight: timeoutHeight.toNumber(), + accountNumber: baseAccount.accountNumber, + chainId, + }) + + const web3Extension = createWeb3Extension({ + ethereumChainId, + }) + const txRawEip712 = createTxRawEIP712(txRaw, web3Extension) + /** Append Signatures */ - txRawEip712.signatures = [signatureBuff] + txRawEip712.signatures = [hexToBuff(signature)] return walletStrategy.sendTransaction(txRawEip712, { chainId, endpoints, + txTimeout, address: tx.injectiveAddress, }) } @@ -257,7 +446,7 @@ export class MsgBroadcaster { private async broadcastWeb3WithFeeDelegation( tx: MsgBroadcasterTxOptionsWithAddresses, ) { - const { options, ethereumChainId, endpoints } = this + const { options, simulateTx, ethereumChainId, endpoints } = this const { walletStrategy } = options const msgs = Array.isArray(tx.msgs) ? tx.msgs : [tx.msgs] const web3Msgs = msgs.map((msg) => msg.toWeb3()) @@ -269,13 +458,14 @@ export class MsgBroadcaster { const transactionApi = new IndexerGrpcTransactionApi( endpoints.web3gw || endpoints.indexer, ) + const txResponse = await transactionApi.prepareTxRequest({ memo: tx.memo, message: web3Msgs, address: tx.ethereumAddress, chainId: ethereumChainId, gasLimit: getGasPriceBasedOnMessage(msgs), - estimateGas: options.simulateTx || false, + estimateGas: simulateTx, }) const signature = await walletStrategy.signEip712TypedData( @@ -301,7 +491,7 @@ export class MsgBroadcaster { * @returns transaction hash */ private async broadcastCosmos(tx: MsgBroadcasterTxOptionsWithAddresses) { - const { options, endpoints, chainId } = this + const { options, txTimeout, endpoints, chainId } = this const { walletStrategy } = options const msgs = Array.isArray(tx.msgs) ? tx.msgs : [tx.msgs] @@ -330,16 +520,18 @@ export class MsgBroadcaster { endpoints.grpc, ).fetchLatestBlock() const latestHeight = latestBlock!.header!.height - const timeoutHeight = new BigNumberInBase(latestHeight).plus( - DEFAULT_BLOCK_TIMEOUT_HEIGHT, - ) + const timeoutHeight = new BigNumberInBase(latestHeight).plus(txTimeout) + const signMode = isCosmosAminoOnlyWallet(walletStrategy.wallet) + ? SIGN_EIP712 + : SIGN_DIRECT const pubKey = await walletStrategy.getPubKey(tx.injectiveAddress) const gas = (tx.gas?.gas || getGasPriceBasedOnMessage(msgs)).toString() /** Prepare the Transaction * */ const { txRaw } = await this.getTxWithSignersAndStdFee({ chainId, + signMode, memo: tx.memo, message: msgs, timeoutHeight: timeoutHeight.toNumber(), @@ -374,6 +566,7 @@ export class MsgBroadcaster { return walletStrategy.sendTransaction(txRaw, { chainId, endpoints, + txTimeout, address: tx.injectiveAddress, }) } @@ -388,6 +581,7 @@ export class MsgBroadcaster { return walletStrategy.sendTransaction(directSignResponse, { chainId, endpoints, + txTimeout, address: tx.injectiveAddress, }) } @@ -401,7 +595,14 @@ export class MsgBroadcaster { private async experimentalBroadcastKeplrWithLedger( tx: MsgBroadcasterTxOptionsWithAddresses, ) { - const { options, endpoints, chainId, ethereumChainId } = this + const { + options, + chainId, + txTimeout, + endpoints, + simulateTx, + ethereumChainId, + } = this const { walletStrategy } = options const msgs = Array.isArray(tx.msgs) ? tx.msgs : [tx.msgs] @@ -427,10 +628,7 @@ export class MsgBroadcaster { throw new GeneralException(new Error('Please provide ethereumChainId')) } - const keplrWallet = new KeplrWallet(chainId, { - rest: endpoints.rest, - rpc: endpoints.rpc, - }) + const keplrWallet = new KeplrWallet(chainId) /** Account Details * */ const accountDetails = await new ChainGrpcAuthApi( @@ -443,9 +641,7 @@ export class MsgBroadcaster { endpoints.grpc, ).fetchLatestBlock() const latestHeight = latestBlock!.header!.height - const timeoutHeight = new BigNumberInBase(latestHeight).plus( - DEFAULT_BLOCK_TIMEOUT_HEIGHT, - ) + const timeoutHeight = new BigNumberInBase(latestHeight).plus(txTimeout) const pubKey = await walletStrategy.getPubKey() const gas = (tx.gas?.gas || getGasPriceBasedOnMessage(msgs)).toString() @@ -485,7 +681,7 @@ export class MsgBroadcaster { pubKey, message: msgs, memo: aminoSignResponse.signed.memo, - signMode: SIGN_AMINO, + signMode: SIGN_EIP712, fee: aminoSignResponse.signed.fee, sequence: parseInt(aminoSignResponse.signed.sequence, 10), timeoutHeight: parseInt( @@ -502,7 +698,7 @@ export class MsgBroadcaster { }) const txRawEip712 = createTxRawEIP712(txRaw, web3Extension) - if (options.simulateTx) { + if (simulateTx) { await this.simulateTxRaw(txRawEip712) } @@ -514,7 +710,10 @@ export class MsgBroadcaster { txRawEip712.signatures = [signatureBuff] /** Broadcast the transaction */ - const response = await new TxGrpcApi(endpoints.grpc).broadcast(txRawEip712) + const response = await new TxGrpcApi(endpoints.grpc).broadcast( + txRawEip712, + { txTimeout }, + ) if (response.code !== 0) { throw new TransactionException(new Error(response.rawLog), { @@ -627,7 +826,10 @@ export class MsgBroadcaster { address: tx.injectiveAddress, txRaw: createTxRawFromSigResponse(directSignResponse), signature: directSignResponse.signature.signature, - pubKey: directSignResponse.signature.pub_key, + pubKey: directSignResponse.signature.pub_key || { + value: pubKey, + type: '/injective.crypto.v1beta1.ethsecp256k1.PubKey', + }, }) // Re-enable tx gas check removed above @@ -680,13 +882,12 @@ export class MsgBroadcaster { private async getTxWithSignersAndStdFee( args: CreateTransactionWithSignersArgs, ) { - const { options } = this - const { simulateTx } = options + const { simulateTx } = this if (!simulateTx) { return { ...createTransactionWithSigners(args), - stdFee: getStdFee({ ...args.fee }), + stdFee: getStdFee(args.fee), } } @@ -695,13 +896,13 @@ export class MsgBroadcaster { if (!result.gasInfo?.gasUsed) { return { ...createTransactionWithSigners(args), - stdFee: getStdFee({ ...args.fee }), + stdFee: getStdFee(args.fee), } } const stdGasFee = { ...getStdFee({ - ...args.fee, + ...getStdFee(args.fee), gas: new BigNumberInBase(result.gasInfo.gasUsed).times(1.2).toFixed(), }), } diff --git a/packages/wallet-ts/src/broadcaster/types.ts b/packages/wallet-ts/src/broadcaster/types.ts index 2cd34f149..6be2d9c3e 100644 --- a/packages/wallet-ts/src/broadcaster/types.ts +++ b/packages/wallet-ts/src/broadcaster/types.ts @@ -25,15 +25,15 @@ export interface MsgBroadcasterTxOptionsWithAddresses export interface MsgBroadcasterOptions { network: Network - networkEndpoints?: NetworkEndpoints + endpoints?: NetworkEndpoints /** * Only used if we want to override the default * endpoints taken from the network param * - * @deprecated - taken from the network parameter + * @deprecated - taken from the network parameter or use the endpoints * */ - endpoints?: { + networkEndpoints?: { indexerApi: string sentryGrpcApi: string sentryHttpApi: string @@ -44,5 +44,6 @@ export interface MsgBroadcasterOptions { ethereumChainId?: EthereumChainId feePayerPubKey?: string simulateTx?: boolean + txTimeout?: number // blocks to wait for tx to be included in a block walletStrategy: WalletStrategy } diff --git a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/CosmosWalletStrategy.ts b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/CosmosWalletStrategy.ts index a61a4308a..8744cc2bd 100644 --- a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/CosmosWalletStrategy.ts +++ b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/CosmosWalletStrategy.ts @@ -14,6 +14,7 @@ import { } from '../types/strategy' import {} from '../../utils/utils' import { isCosmosWallet } from '../wallet-strategy/utils' +import { SendTransactionOptions } from '../wallet-strategy' export const cosmosWallets = [ Wallet.Keplr, @@ -108,8 +109,9 @@ export default class CosmosWalletStrategy { public async sendTransaction( tx: TxRaw | DirectSignResponse, + options: SendTransactionOptions ): Promise { - return this.getStrategy().sendTransaction(tx) + return this.getStrategy().sendTransaction(tx, options) } public async signTransaction(transaction: { diff --git a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Cosmostation.ts b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Cosmostation.ts index 0220351ed..b8f68cf72 100644 --- a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Cosmostation.ts +++ b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Cosmostation.ts @@ -156,6 +156,7 @@ export default class Cosmostation implements ConcreteCosmosWalletStrategy { ), signature: { signature: signDirectResponse.signature, + pub_key: signDirectResponse.pub_key, }, } as DirectSignResponse } catch (e: unknown) { diff --git a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Keplr.ts b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Keplr.ts index 81d653abc..6e85dfe38 100644 --- a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Keplr.ts +++ b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Keplr.ts @@ -3,6 +3,7 @@ import { CosmosChainId } from '@injectivelabs/ts-types' import { TxRaw, TxResponse, + waitTxBroadcasted, createTxRawFromSigResponse, createCosmosSignDocFromSignDoc, createSignDocFromTransaction, @@ -18,6 +19,7 @@ import { AminoSignResponse, StdSignDoc } from '@cosmjs/launchpad' import { KeplrWallet } from '../../../utils/wallets/keplr' import { ConcreteCosmosWalletStrategy } from '../../types/strategy' import { WalletAction, WalletDeviceType } from '../../../types/enums' +import { SendTransactionOptions } from '../../wallet-strategy' export default class Keplr implements ConcreteCosmosWalletStrategy { public chainId: CosmosChainId @@ -63,14 +65,23 @@ export default class Keplr implements ConcreteCosmosWalletStrategy { async sendTransaction( transaction: DirectSignResponse | TxRaw, + options: SendTransactionOptions, ): Promise { const { keplrWallet } = this const txRaw = createTxRawFromSigResponse(transaction) - try { - return await keplrWallet.waitTxBroadcasted( - await keplrWallet.broadcastTx(txRaw), + if (!options.endpoints) { + throw new CosmosWalletException( + new Error( + 'You have to pass endpoints within the options to broadcast transaction', + ), ) + } + + try { + const txHash = await keplrWallet.broadcastTx(txRaw) + + return await waitTxBroadcasted(txHash, options) } catch (e: unknown) { if (e instanceof TransactionException) { throw e diff --git a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Leap.ts b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Leap.ts index 31f8fd0d6..bfc44187f 100644 --- a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Leap.ts +++ b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Leap.ts @@ -9,6 +9,7 @@ import { import { TxRaw, TxResponse, + waitTxBroadcasted, createTxRawFromSigResponse, createCosmosSignDocFromSignDoc, createSignDocFromTransaction, @@ -19,6 +20,7 @@ import { AminoSignResponse } from '@cosmjs/launchpad' import { LeapWallet } from '../../../utils/wallets/leap' import { WalletAction, WalletDeviceType } from '../../../types/enums' import { ConcreteCosmosWalletStrategy } from '../../types/strategy' +import { SendTransactionOptions } from '../../wallet-strategy' export default class Leap implements ConcreteCosmosWalletStrategy { public chainId: CosmosChainId @@ -59,14 +61,23 @@ export default class Leap implements ConcreteCosmosWalletStrategy { async sendTransaction( transaction: DirectSignResponse | TxRaw, + options: SendTransactionOptions, ): Promise { const { leapWallet } = this const txRaw = createTxRawFromSigResponse(transaction) - try { - return await leapWallet.waitTxBroadcasted( - await leapWallet.broadcastTx(txRaw), + if (!options.endpoints) { + throw new CosmosWalletException( + new Error( + 'You have to pass endpoints within the options to broadcast transaction', + ), ) + } + + try { + const txHash = await leapWallet.broadcastTx(txRaw) + + return await waitTxBroadcasted(txHash, options) } catch (e: unknown) { throw new TransactionException(new Error((e as any).message), { code: UnspecifiedErrorCode, diff --git a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Ninji.ts b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Ninji.ts index 2b768eb32..2e5af57ba 100644 --- a/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Ninji.ts +++ b/packages/wallet-ts/src/strategies/cosmos-wallet-strategy/strategies/Ninji.ts @@ -9,6 +9,7 @@ import { import { TxRaw, TxResponse, + waitTxBroadcasted, createTxRawFromSigResponse, createCosmosSignDocFromSignDoc, createSignDocFromTransaction, @@ -19,6 +20,7 @@ import { AminoSignResponse } from '@cosmjs/launchpad' import { NinjiWallet } from '../../../utils/wallets/ninji' import { WalletAction, WalletDeviceType } from '../../../types/enums' import { ConcreteCosmosWalletStrategy } from '../../types/strategy' +import { SendTransactionOptions } from '../../wallet-strategy' export default class Ninji implements ConcreteCosmosWalletStrategy { public chainId: CosmosChainId @@ -59,14 +61,23 @@ export default class Ninji implements ConcreteCosmosWalletStrategy { async sendTransaction( transaction: DirectSignResponse | TxRaw, + options: SendTransactionOptions, ): Promise { const { ninjiWallet } = this const txRaw = createTxRawFromSigResponse(transaction) - try { - return await ninjiWallet.waitTxBroadcasted( - await ninjiWallet.broadcastTx(txRaw), + if (!options.endpoints) { + throw new CosmosWalletException( + new Error( + 'You have to pass endpoints within the options to broadcast transaction', + ), ) + } + + try { + const txHash = await ninjiWallet.broadcastTx(txRaw) + + return await waitTxBroadcasted(txHash, options) } catch (e: unknown) { throw new TransactionException(new Error((e as any).message), { code: UnspecifiedErrorCode, diff --git a/packages/wallet-ts/src/strategies/types/strategy.ts b/packages/wallet-ts/src/strategies/types/strategy.ts index 2ffd0f65e..72d474828 100644 --- a/packages/wallet-ts/src/strategies/types/strategy.ts +++ b/packages/wallet-ts/src/strategies/types/strategy.ts @@ -7,6 +7,7 @@ import { import type { TxRaw, TxResponse } from '@injectivelabs/sdk-ts' import { AminoSignResponse, StdSignDoc } from '@keplr-wallet/types' import { Wallet, WalletDeviceType } from '../../types/enums' +import { SendTransactionOptions } from '../wallet-strategy' export type onAccountChangeCallback = (account: string) => void export type onChainIdChangeCallback = () => void @@ -50,7 +51,10 @@ export interface ConcreteCosmosWalletStrategy { * @param transaction should implement TransactionConfig * @param options */ - sendTransaction(transaction: DirectSignResponse | TxRaw): Promise + sendTransaction( + transaction: DirectSignResponse | TxRaw, + options: SendTransactionOptions, + ): Promise signTransaction(transaction: { txRaw: TxRaw @@ -67,7 +71,6 @@ export interface ConcreteCosmosWalletStrategy { export interface CosmosWalletStrategyArguments { chainId: CosmosChainId - endpoints?: { rpc: string; rest: string } wallet?: Wallet } @@ -97,6 +100,7 @@ export interface ConcreteWalletStrategy options: { address: string chainId: ChainId + txTimeout?: number endpoints?: { rest: string grpc: string @@ -168,15 +172,9 @@ export interface ConcreteWalletStrategy getEthereumTransactionReceipt(txHash: string): void - onAccountChange?(callback: onAccountChangeCallback): void - - onChainIdChange?(callback: onChainIdChangeCallback): void - - cancelOnChainIdChange?(): void - - cancelOnAccountChange?(): void + onAccountChange?(callback: onAccountChangeCallback): Promise | void - cancelAllEvents?(): void + onChainIdChange?(callback: onChainIdChangeCallback): Promise | void disconnect?(): Promise | void } diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/WalletStrategy.ts b/packages/wallet-ts/src/strategies/wallet-strategy/WalletStrategy.ts index f6461896c..60583e303 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/WalletStrategy.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/WalletStrategy.ts @@ -1,8 +1,4 @@ -import { - AccountAddress, - ChainId, - EthereumChainId, -} from '@injectivelabs/ts-types' +import { AccountAddress, EthereumChainId } from '@injectivelabs/ts-types' import { DirectSignResponse } from '@cosmjs/proto-signing' import { GeneralException, WalletException } from '@injectivelabs/exceptions' import { TxRaw, TxResponse } from '@injectivelabs/sdk-ts' @@ -24,11 +20,13 @@ import LedgerLive from './strategies/Ledger/LedgerLive' import LedgerLegacy from './strategies/Ledger/LedgerLegacy' import Torus from './strategies/Torus' import Phantom from './strategies/Phantom' +import Okx from './strategies/Okx' import Cosmostation from './strategies/Cosmostation' import Welldone from './strategies/Welldone' import LedgerCosmos from './strategies/LedgerCosmos' import { Wallet, WalletDeviceType } from '../../types/enums' import { isEthWallet, isCosmosWallet } from './utils' +import { SendTransactionOptions } from './types' const getInitialWallet = (args: WalletStrategyArguments): Wallet => { if (args.wallet) { @@ -95,6 +93,8 @@ const createStrategy = ({ return new Torus(ethWalletArgs) case Wallet.Phantom: return new Phantom(ethWalletArgs) + case Wallet.OkxWallet: + return new Okx(ethWalletArgs) case Wallet.Keplr: return new Keplr({ ...args }) case Wallet.Cosmostation: @@ -189,15 +189,7 @@ export default class WalletStrategy { public async sendTransaction( tx: DirectSignResponse | TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { - rest: string - grpc: string - tm?: string - } - }, + options: SendTransactionOptions, ): Promise { return this.getStrategy().sendTransaction(tx, options) } @@ -274,39 +266,25 @@ export default class WalletStrategy { } } - public onAccountChange(callback: onAccountChangeCallback): void { + public async onAccountChange( + callback: onAccountChangeCallback, + ): Promise { if (this.getStrategy().onAccountChange) { return this.getStrategy().onAccountChange!(callback) } } - public onChainIdChange(callback: onChainIdChangeCallback): void { + public async onChainIdChange( + callback: onChainIdChangeCallback, + ): Promise { if (this.getStrategy().onChainIdChange) { return this.getStrategy().onChainIdChange!(callback) } } - public cancelOnChainIdChange(): void { - if (this.getStrategy().cancelOnChainIdChange) { - return this.getStrategy().cancelOnChainIdChange!() - } - } - - public cancelAllEvents(): void { - if (this.getStrategy().cancelAllEvents) { - return this.getStrategy().cancelAllEvents!() - } - } - - public cancelOnAccountChange(): void { - if (this.getStrategy().cancelOnAccountChange) { - return this.getStrategy().cancelOnAccountChange!() - } - } - - public disconnect() { + public async disconnect() { if (this.getStrategy().disconnect) { - this.getStrategy().disconnect!() + await this.getStrategy().disconnect!() } } } diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Base.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Base.ts index 6ff092127..571e835e3 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Base.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Base.ts @@ -1,11 +1,14 @@ import { ChainId, EthereumChainId } from '@injectivelabs/ts-types' import { WalletStrategyArguments } from '../../types' +import { WalletEventListener } from '../../../types/enums' export default abstract class BaseConcreteStrategy { protected chainId: ChainId protected ethereumChainId?: EthereumChainId + protected listeners: Partial> = {} + protected constructor({ chainId, ethereumOptions }: WalletStrategyArguments) { this.ethereumChainId = ethereumOptions ? ethereumOptions.ethereumChainId diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Keplr.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Keplr.ts index 7ed74e698..92fb12c71 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Keplr.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Keplr.ts @@ -8,6 +8,7 @@ import { import { TxRaw, TxResponse, + waitTxBroadcasted, createTxRawFromSigResponse, createCosmosSignDocFromSignDoc, createSignDocFromTransaction, @@ -22,7 +23,12 @@ import { import { KeplrWallet } from '../../../utils/wallets/keplr' import { ConcreteWalletStrategy } from '../../types' import BaseConcreteStrategy from './Base' -import { WalletAction, WalletDeviceType } from '../../../types/enums' +import { + WalletAction, + WalletDeviceType, + WalletEventListener, +} from '../../../types/enums' +import { SendTransactionOptions } from '../types' export default class Keplr extends BaseConcreteStrategy @@ -30,13 +36,10 @@ export default class Keplr { private keplrWallet: KeplrWallet - constructor(args: { - chainId: ChainId - endpoints?: { rest: string; rpc: string } - }) { + constructor(args: { chainId: ChainId }) { super(args) this.chainId = args.chainId || CosmosChainId.Injective - this.keplrWallet = new KeplrWallet(args.chainId, args.endpoints) + this.keplrWallet = new KeplrWallet(args.chainId) } async getWalletDeviceType(): Promise { @@ -54,6 +57,17 @@ export default class Keplr return await keplrWallet.checkChainIdSupport() } + public async disconnect() { + if (this.listeners[WalletEventListener.AccountChange]) { + window.removeEventListener( + 'keplr_keystorechange', + this.listeners[WalletEventListener.AccountChange], + ) + } + + this.listeners = {} + } + async getAddresses(): Promise { const keplrWallet = this.getKeplrWallet() @@ -95,20 +109,23 @@ export default class Keplr async sendTransaction( transaction: DirectSignResponse | TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { grpc: string } - }, + options: SendTransactionOptions, ): Promise { const { keplrWallet } = this const txRaw = createTxRawFromSigResponse(transaction) - try { - return await keplrWallet.waitTxBroadcasted( - await keplrWallet.broadcastTx(txRaw), - options.endpoints?.grpc, + if (!options.endpoints) { + throw new CosmosWalletException( + new Error( + 'You have to pass endpoints within the options to broadcast transaction', + ), ) + } + + try { + const txHash = await keplrWallet.broadcastTx(txRaw) + + return await waitTxBroadcasted(txHash, options) } catch (e: unknown) { if (e instanceof TransactionException) { throw e @@ -229,6 +246,22 @@ export default class Keplr return Buffer.from(key.pubKey).toString('base64') } + async onAccountChange( + callback: (account: AccountAddress) => void, + ): Promise { + const listener = async () => { + const [account] = await this.getAddresses() + + callback(account) + } + + this.listeners = { + [WalletEventListener.AccountChange]: listener, + } + + window.addEventListener('keplr_keystorechange', listener) + } + private getKeplrWallet(): KeplrWallet { const { keplrWallet } = this diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Leap.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Leap.ts index c0a260e9a..895ef8dc0 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Leap.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Leap.ts @@ -14,6 +14,7 @@ import { import { TxRaw, TxResponse, + waitTxBroadcasted, createTxRawFromSigResponse, createCosmosSignDocFromSignDoc, createSignDocFromTransaction, @@ -22,18 +23,23 @@ import type { DirectSignResponse } from '@cosmjs/proto-signing' import { LeapWallet } from '../../../utils/wallets/leap' import { ConcreteWalletStrategy } from '../../types' import BaseConcreteStrategy from './Base' -import { WalletAction, WalletDeviceType } from '../../../types/enums' +import { + WalletAction, + WalletDeviceType, + WalletEventListener, +} from '../../../types/enums' +import { SendTransactionOptions } from '../types' -export default class Leap extends BaseConcreteStrategy implements ConcreteWalletStrategy { +export default class Leap + extends BaseConcreteStrategy + implements ConcreteWalletStrategy +{ private leapWallet: LeapWallet - constructor(args: { - chainId: ChainId - endpoints?: { rest: string; rpc: string } - }) { + constructor(args: { chainId: ChainId }) { super(args) this.chainId = args.chainId || CosmosChainId.Injective - this.leapWallet = new LeapWallet(args.chainId, args.endpoints) + this.leapWallet = new LeapWallet(args.chainId) } async getWalletDeviceType(): Promise { @@ -46,6 +52,17 @@ export default class Leap extends BaseConcreteStrategy implements ConcreteWallet return await leapWallet.checkChainIdSupport() } + public async disconnect() { + if (this.listeners[WalletEventListener.AccountChange]) { + window.removeEventListener( + 'leap_keystorechange', + this.listeners[WalletEventListener.AccountChange], + ) + } + + this.listeners = {} + } + async getAddresses(): Promise { const leapWallet = this.getLeapWallet() @@ -87,20 +104,23 @@ export default class Leap extends BaseConcreteStrategy implements ConcreteWallet async sendTransaction( transaction: DirectSignResponse | TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { grpc: string } - }, + options: SendTransactionOptions, ): Promise { const { leapWallet } = this const txRaw = createTxRawFromSigResponse(transaction) - try { - return await leapWallet.waitTxBroadcasted( - await leapWallet.broadcastTx(txRaw), - options.endpoints?.grpc, + if (!options.endpoints) { + throw new CosmosWalletException( + new Error( + 'You have to pass endpoints within the options to broadcast transaction', + ), ) + } + + try { + const txHash = await leapWallet.broadcastTx(txRaw) + + return await waitTxBroadcasted(txHash, options) } catch (e: unknown) { if (e instanceof TransactionException) { throw e @@ -221,6 +241,22 @@ export default class Leap extends BaseConcreteStrategy implements ConcreteWallet return Buffer.from(key.pubKey).toString('base64') } + async onAccountChange( + callback: (account: AccountAddress) => void, + ): Promise { + const listener = async () => { + const [account] = await this.getAddresses() + + callback(account) + } + + this.listeners = { + [WalletEventListener.AccountChange]: listener, + } + + window.addEventListener('leap_keystorechange', listener) + } + private getLeapWallet(): LeapWallet { const { leapWallet } = this diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Ledger/Base.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Ledger/Base.ts index 2b6c02444..d95810f98 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Ledger/Base.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Ledger/Base.ts @@ -1,7 +1,6 @@ /* eslint-disable class-methods-use-this */ import { AccountAddress, - ChainId, EthereumChainId, } from '@injectivelabs/ts-types' import { bufferToHex, addHexPrefix } from 'ethereumjs-util' @@ -23,7 +22,11 @@ import { EthereumWalletStrategyArgs, WalletStrategyEthereumOptions, } from '../../../types' -import { LedgerDerivationPathType, LedgerWalletInfo } from '../../types' +import { + LedgerDerivationPathType, + LedgerWalletInfo, + SendTransactionOptions, +} from '../../types' import BaseConcreteStrategy from '../Base' import { DEFAULT_BASE_DERIVATION_PATH, @@ -144,17 +147,9 @@ export default class LedgerBase async sendTransaction( transaction: TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { - rest: string - grpc: string - tm?: string - } - }, + options: SendTransactionOptions, ): Promise { - const { endpoints } = options + const { endpoints, txTimeout } = options if (!endpoints) { throw new WalletException( @@ -165,7 +160,7 @@ export default class LedgerBase } const txApi = new TxGrpcApi(endpoints.grpc) - const response = await txApi.broadcast(transaction) + const response = await txApi.broadcast(transaction, { txTimeout }) if (response.code !== 0) { throw new TransactionException(new Error(response.rawLog), { @@ -358,28 +353,39 @@ export default class LedgerBase private async getWalletForAddress( address: string, ): Promise { - const { baseDerivationPath, derivationPathType } = this - const accountManager = await this.ledger.getAccountManager() - - if (!accountManager.hasWalletForAddress(address)) { - for ( - let i = 0; - i < DEFAULT_ADDRESS_SEARCH_LIMIT / DEFAULT_NUM_ADDRESSES_TO_FETCH; - i += 1 - ) { - await accountManager.getWallets(baseDerivationPath, derivationPathType) - - if (accountManager.hasWalletForAddress(address)) { - return (await accountManager.getWalletForAddress( - address, - )) as LedgerWalletInfo + try { + const { baseDerivationPath, derivationPathType } = this + const accountManager = await this.ledger.getAccountManager() + + if (!accountManager.hasWalletForAddress(address)) { + for ( + let i = 0; + i < DEFAULT_ADDRESS_SEARCH_LIMIT / DEFAULT_NUM_ADDRESSES_TO_FETCH; + i += 1 + ) { + await accountManager.getWallets( + baseDerivationPath, + derivationPathType, + ) + + if (accountManager.hasWalletForAddress(address)) { + return (await accountManager.getWalletForAddress( + address, + )) as LedgerWalletInfo + } } } - } - return (await accountManager.getWalletForAddress( - address, - )) as LedgerWalletInfo + return (await accountManager.getWalletForAddress( + address, + )) as LedgerWalletInfo + } catch (e) { + throw new LedgerException(new Error((e as any).message), { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.GetAccounts, + }) + } } private async getAlchemy() { diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/LedgerCosmos/hw/index.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/LedgerCosmos/hw/index.ts index f182c0a35..d39b8e01c 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/LedgerCosmos/hw/index.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/LedgerCosmos/hw/index.ts @@ -2,7 +2,7 @@ import TransportWebUSB from '@ledgerhq/hw-transport-webusb' import TransportWebHID from '@ledgerhq/hw-transport-webhid' import CosmosApp from '@ledgerhq/hw-app-cosmos' import type Transport from '@ledgerhq/hw-transport' -import { LedgerException } from '@injectivelabs/exceptions' +import { LedgerCosmosException } from '@injectivelabs/exceptions' import AccountManager from './AccountManager' export default class LedgerTransport { @@ -20,7 +20,7 @@ export default class LedgerTransport { return await TransportWebHID.create() } } catch (e: unknown) { - throw new LedgerException(new Error((e as any).message)) + throw new LedgerCosmosException(new Error((e as any).message)) } return await TransportWebHID.create() diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/LedgerCosmos/index.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/LedgerCosmos/index.ts index 9d4a04513..eacb50996 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/LedgerCosmos/index.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/LedgerCosmos/index.ts @@ -6,7 +6,7 @@ import { } from '@injectivelabs/ts-types' import { ErrorType, - LedgerException, + LedgerCosmosException, TransactionException, UnspecifiedErrorCode, WalletException, @@ -17,9 +17,10 @@ import { TxGrpcApi, TxResponse, DirectSignResponse, + sortObjectByKeys, } from '@injectivelabs/sdk-ts' import { ConcreteWalletStrategy } from '../../../types' -import { LedgerWalletInfo } from '../../types' +import { LedgerWalletInfo, SendTransactionOptions } from '../../types' import BaseConcreteStrategy from '../Base' import { DEFAULT_BASE_DERIVATION_PATH, @@ -66,7 +67,7 @@ export default class LedgerCosmos return wallets.map((k) => k.address) } catch (e: unknown) { - throw new LedgerException(new Error((e as any).message), { + throw new LedgerCosmosException(new Error((e as any).message), { code: UnspecifiedErrorCode, type: ErrorType.WalletError, contextModule: WalletAction.GetAccounts, @@ -102,17 +103,9 @@ export default class LedgerCosmos async sendTransaction( transaction: TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { - rest: string - grpc: string - tm?: string - } - }, + options: SendTransactionOptions, ): Promise { - const { endpoints } = options + const { endpoints, txTimeout } = options if (!endpoints) { throw new WalletException( @@ -123,7 +116,7 @@ export default class LedgerCosmos } const txApi = new TxGrpcApi(endpoints.grpc) - const response = await txApi.broadcast(transaction) + const response = await txApi.broadcast(transaction, { txTimeout }) if (response.code !== 0) { throw new TransactionException(new Error(response.rawLog), { @@ -158,14 +151,15 @@ export default class LedgerCosmos transaction.address, ) const ledger = await this.ledger.getInstance() + const result = await ledger.sign( derivationPath, - JSON.stringify(transaction.signDoc), + JSON.stringify(sortObjectByKeys(transaction.signDoc)), ) return Buffer.from(result.signature!).toString('base64') } catch (e: unknown) { - throw new LedgerException(new Error((e as any).message), { + throw new LedgerCosmosException(new Error((e as any).message), { code: UnspecifiedErrorCode, type: ErrorType.WalletError, contextModule: WalletAction.SignTransaction, @@ -213,7 +207,7 @@ export default class LedgerCosmos return Buffer.from(result.signature!).toString('base64') } catch (e: unknown) { - throw new LedgerException(new Error((e as any).message), { + throw new LedgerCosmosException(new Error((e as any).message), { code: UnspecifiedErrorCode, type: ErrorType.WalletError, contextModule: WalletAction.SignTransaction, @@ -241,7 +235,6 @@ export default class LedgerCosmos ) } - // eslint-disable-next-line class-methods-use-this async getPubKey(address?: string): Promise { if (!address) { throw new WalletException( @@ -251,33 +244,43 @@ export default class LedgerCosmos const ledgerWalletInfo = await this.getWalletForAddress(address) - return ledgerWalletInfo.publicKey || '' + return Buffer.from(ledgerWalletInfo.publicKey || '', 'hex').toString( + 'base64', + ) } private async getWalletForAddress( address: string, ): Promise { - const { baseDerivationPath } = this - const accountManager = await this.ledger.getAccountManager() - - if (!accountManager.hasWalletForAddress(address)) { - for ( - let i = 0; - i < DEFAULT_ADDRESS_SEARCH_LIMIT / DEFAULT_NUM_ADDRESSES_TO_FETCH; - i += 1 - ) { - await accountManager.getWallets(baseDerivationPath) - - if (accountManager.hasWalletForAddress(address)) { - return (await accountManager.getWalletForAddress( - address, - )) as LedgerWalletInfo + try { + const { baseDerivationPath } = this + const accountManager = await this.ledger.getAccountManager() + + if (!accountManager.hasWalletForAddress(address)) { + for ( + let i = 0; + i < DEFAULT_ADDRESS_SEARCH_LIMIT / DEFAULT_NUM_ADDRESSES_TO_FETCH; + i += 1 + ) { + await accountManager.getWallets(baseDerivationPath) + + if (accountManager.hasWalletForAddress(address)) { + return (await accountManager.getWalletForAddress( + address, + )) as LedgerWalletInfo + } } } - } - return (await accountManager.getWalletForAddress( - address, - )) as LedgerWalletInfo + return (await accountManager.getWalletForAddress( + address, + )) as LedgerWalletInfo + } catch (e) { + throw new LedgerCosmosException(new Error((e as any).message), { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.GetAccounts, + }) + } } } diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Metamask/index.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Metamask/index.ts index 453f6f8e5..288194cba 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Metamask/index.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Metamask/index.ts @@ -1,10 +1,6 @@ /* eslint-disable class-methods-use-this */ import { sleep } from '@injectivelabs/utils' -import { - ChainId, - AccountAddress, - EthereumChainId, -} from '@injectivelabs/ts-types' +import { AccountAddress, EthereumChainId } from '@injectivelabs/ts-types' import { ErrorType, WalletException, @@ -18,12 +14,19 @@ import { ConcreteWalletStrategy, EthereumWalletStrategyArgs, } from '../../../types' -import { BrowserEip1993Provider } from '../../types' +import { BrowserEip1993Provider, SendTransactionOptions } from '../../types' import BaseConcreteStrategy from '../Base' -import { WalletAction, WalletDeviceType } from '../../../../types/enums' +import { + WalletAction, + WalletDeviceType, + WalletEventListener, +} from '../../../../types/enums' import { getMetamaskProvider } from './utils' -export default class Metamask extends BaseConcreteStrategy implements ConcreteWalletStrategy { +export default class Metamask + extends BaseConcreteStrategy + implements ConcreteWalletStrategy +{ constructor(args: EthereumWalletStrategyArgs) { super(args) } @@ -36,6 +39,28 @@ export default class Metamask extends BaseConcreteStrategy implements ConcreteWa return Promise.resolve(true) } + public async disconnect() { + if (this.listeners[WalletEventListener.AccountChange]) { + const ethereum = await this.getEthereum() + + ethereum.removeListener( + 'accountsChanged', + this.listeners[WalletEventListener.AccountChange], + ) + } + + if (this.listeners[WalletEventListener.ChainIdChange]) { + const ethereum = await this.getEthereum() + + ethereum.removeListener( + 'chainChanged', + this.listeners[WalletEventListener.ChainIdChange], + ) + } + + this.listeners = {} + } + async getAddresses(): Promise { const ethereum = await this.getEthereum() @@ -83,17 +108,9 @@ export default class Metamask extends BaseConcreteStrategy implements ConcreteWa async sendTransaction( transaction: TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { - rest: string - grpc: string - tm?: string - } - }, + options: SendTransactionOptions, ): Promise { - const { endpoints } = options + const { endpoints, txTimeout } = options if (!endpoints) { throw new WalletException( @@ -104,7 +121,7 @@ export default class Metamask extends BaseConcreteStrategy implements ConcreteWa } const txApi = new TxGrpcApi(endpoints.grpc) - const response = await txApi.broadcast(transaction) + const response = await txApi.broadcast(transaction, { txTimeout }) if (response.code !== 0) { throw new TransactionException(new Error(response.rawLog), { @@ -156,7 +173,7 @@ export default class Metamask extends BaseConcreteStrategy implements ConcreteWa { code: UnspecifiedErrorCode, type: ErrorType.WalletError, - contextModule: WalletAction.SendTransaction, + contextModule: WalletAction.SignTransaction, }, ) } @@ -173,7 +190,7 @@ export default class Metamask extends BaseConcreteStrategy implements ConcreteWa { code: UnspecifiedErrorCode, type: ErrorType.WalletError, - contextModule: WalletAction.SendTransaction, + contextModule: WalletAction.SignTransaction, }, ) } @@ -250,24 +267,26 @@ export default class Metamask extends BaseConcreteStrategy implements ConcreteWa ) } - onChainIdChanged(_callback: () => void): void { - // - } + async onChainIdChanged(callback: (chain: string) => void): Promise { + const ethereum = await this.getEthereum() - onAccountChange(_callback: (account: AccountAddress) => void): void { - // - } + this.listeners = { + [WalletEventListener.ChainIdChange]: callback, + } - cancelOnChainIdChange(): void { - // + ethereum.on('chainChanged', callback) } - cancelOnAccountChange(): void { - // - } + async onAccountChange( + callback: (account: AccountAddress) => void, + ): Promise { + const ethereum = await this.getEthereum() + + this.listeners = { + [WalletEventListener.AccountChange]: callback, + } - cancelAllEvents(): void { - // + ethereum.on('accountsChanged', callback) } private async getEthereum(): Promise { diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Ninji.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Ninji.ts index 03067df09..f4e724bfc 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Ninji.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Ninji.ts @@ -14,6 +14,7 @@ import { import { TxRaw, TxResponse, + waitTxBroadcasted, createTxRawFromSigResponse, createCosmosSignDocFromSignDoc, createSignDocFromTransaction, @@ -22,9 +23,17 @@ import type { DirectSignResponse } from '@cosmjs/proto-signing' import { NinjiWallet } from '../../../utils/wallets/ninji' import { ConcreteWalletStrategy } from '../../types' import BaseConcreteStrategy from './Base' -import { WalletAction, WalletDeviceType } from '../../../types/enums' +import { + WalletAction, + WalletDeviceType, + WalletEventListener, +} from '../../../types/enums' +import { SendTransactionOptions } from '../types' -export default class Ninji extends BaseConcreteStrategy implements ConcreteWalletStrategy { +export default class Ninji + extends BaseConcreteStrategy + implements ConcreteWalletStrategy +{ private ninjiWallet: NinjiWallet constructor(args: { @@ -33,7 +42,7 @@ export default class Ninji extends BaseConcreteStrategy implements ConcreteWalle }) { super(args) this.chainId = args.chainId || CosmosChainId.Injective - this.ninjiWallet = new NinjiWallet(args.chainId, args.endpoints) + this.ninjiWallet = new NinjiWallet(args.chainId) } async getWalletDeviceType(): Promise { @@ -46,6 +55,17 @@ export default class Ninji extends BaseConcreteStrategy implements ConcreteWalle return await ninjiWallet.checkChainIdSupport() } + public async disconnect() { + if (this.listeners[WalletEventListener.AccountChange]) { + window.removeEventListener( + 'ninji_keystorechange', + this.listeners[WalletEventListener.AccountChange], + ) + } + + this.listeners = {} + } + async getAddresses(): Promise { const ninjiWallet = this.getNinjiWallet() @@ -87,20 +107,23 @@ export default class Ninji extends BaseConcreteStrategy implements ConcreteWalle async sendTransaction( transaction: DirectSignResponse | TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { grpc: string } - }, + options: SendTransactionOptions, ): Promise { const { ninjiWallet } = this const txRaw = createTxRawFromSigResponse(transaction) - try { - return await ninjiWallet.waitTxBroadcasted( - await ninjiWallet.broadcastTx(txRaw), - options.endpoints?.grpc, + if (!options.endpoints) { + throw new CosmosWalletException( + new Error( + 'You have to pass endpoints within the options to broadcast transaction', + ), ) + } + + try { + const txHash = await ninjiWallet.broadcastTx(txRaw) + + return await waitTxBroadcasted(txHash, options) } catch (e: unknown) { if (e instanceof TransactionException) { throw e @@ -221,6 +244,22 @@ export default class Ninji extends BaseConcreteStrategy implements ConcreteWalle return Buffer.from(key.pubKey).toString('base64') } + async onAccountChange( + callback: (account: AccountAddress) => void, + ): Promise { + const listener = async () => { + const [account] = await this.getAddresses() + + callback(account) + } + + this.listeners = { + [WalletEventListener.AccountChange]: listener, + } + + window.addEventListener('leap_keystorechange', listener) + } + private getNinjiWallet(): NinjiWallet { const { ninjiWallet } = this diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Okx/index.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Okx/index.ts new file mode 100644 index 000000000..b704fb7b3 --- /dev/null +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Okx/index.ts @@ -0,0 +1,308 @@ +/* eslint-disable class-methods-use-this */ +import { sleep } from '@injectivelabs/utils' +import { AccountAddress, EthereumChainId } from '@injectivelabs/ts-types' +import { + ErrorType, + WalletException, + OkxWalletException, + UnspecifiedErrorCode, + TransactionException, +} from '@injectivelabs/exceptions' +import { DirectSignResponse } from '@cosmjs/proto-signing' +import { TxRaw, toUtf8, TxGrpcApi, TxResponse } from '@injectivelabs/sdk-ts' +import { + ConcreteWalletStrategy, + EthereumWalletStrategyArgs, +} from '../../../types' +import { BrowserEip1993Provider, SendTransactionOptions } from '../../types' +import BaseConcreteStrategy from '../Base' +import { + WalletAction, + WalletDeviceType, + WalletEventListener, +} from '../../../../types/enums' +import { getOkxWalletProvider } from './utils' + +export default class OkxWallet + extends BaseConcreteStrategy + implements ConcreteWalletStrategy +{ + constructor(args: EthereumWalletStrategyArgs) { + super(args) + } + + async getWalletDeviceType(): Promise { + return Promise.resolve(WalletDeviceType.Browser) + } + + async enable(): Promise { + return Promise.resolve(true) + } + + public async disconnect() { + if (this.listeners[WalletEventListener.AccountChange]) { + const ethereum = await this.getEthereum() + + ethereum.removeListener( + 'accountsChanged', + this.listeners[WalletEventListener.AccountChange], + ) + } + + if (this.listeners[WalletEventListener.ChainIdChange]) { + const ethereum = await this.getEthereum() + + ethereum.removeListener( + 'chainChanged', + this.listeners[WalletEventListener.ChainIdChange], + ) + } + + this.listeners = {} + } + + async getAddresses(): Promise { + const ethereum = await this.getEthereum() + + try { + return await ethereum.request({ + method: 'eth_requestAccounts', + }) + } catch (e: unknown) { + throw new OkxWalletException(new Error((e as any).message), { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.GetAccounts, + }) + } + } + + // eslint-disable-next-line class-methods-use-this + async confirm(address: AccountAddress): Promise { + return Promise.resolve( + `0x${Buffer.from( + `Confirmation for ${address} at time: ${Date.now()}`, + ).toString('hex')}`, + ) + } + + async sendEthereumTransaction( + transaction: unknown, + _options: { address: AccountAddress; ethereumChainId: EthereumChainId }, + ): Promise { + const ethereum = await this.getEthereum() + + try { + return await ethereum.request({ + method: 'eth_sendTransaction', + params: [transaction], + }) + } catch (e: unknown) { + throw new OkxWalletException(new Error((e as any).message), { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.SendEthereumTransaction, + }) + } + } + + async sendTransaction( + transaction: TxRaw, + options: SendTransactionOptions, + ): Promise { + const { endpoints, txTimeout } = options + + if (!endpoints) { + throw new WalletException( + new Error( + 'You have to pass endpoints within the options for using Ethereum native wallets', + ), + ) + } + + const txApi = new TxGrpcApi(endpoints.grpc) + const response = await txApi.broadcast(transaction, { txTimeout }) + + if (response.code !== 0) { + throw new TransactionException(new Error(response.rawLog), { + code: UnspecifiedErrorCode, + contextCode: response.code, + contextModule: response.codespace, + }) + } + + return response + } + + /** @deprecated */ + async signTransaction( + eip712json: string, + address: AccountAddress, + ): Promise { + return this.signEip712TypedData(eip712json, address) + } + + async signEip712TypedData( + eip712json: string, + address: AccountAddress, + ): Promise { + const ethereum = await this.getEthereum() + + try { + return await ethereum.request({ + method: 'eth_signTypedData_v4', + params: [address, eip712json], + }) + } catch (e: unknown) { + throw new OkxWalletException(new Error((e as any).message), { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.SignTransaction, + }) + } + } + + async signAminoCosmosTransaction(_transaction: { + signDoc: any + accountNumber: number + chainId: string + address: string + }): Promise { + throw new WalletException( + new Error('This wallet does not support signing Cosmos transactions'), + { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.SignTransaction, + }, + ) + } + + // eslint-disable-next-line class-methods-use-this + async signCosmosTransaction(_transaction: { + txRaw: TxRaw + accountNumber: number + chainId: string + address: string + }): Promise { + throw new WalletException( + new Error('This wallet does not support signing Cosmos transactions'), + { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.SignTransaction, + }, + ) + } + + async signArbitrary( + signer: AccountAddress, + data: string | Uint8Array, + ): Promise { + const ethereum = await this.getEthereum() + + try { + const signature = await ethereum.request({ + method: 'personal_sign', + params: [toUtf8(data), signer], + }) + + return signature + } catch (e: unknown) { + throw new OkxWalletException(new Error((e as any).message), { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.SignArbitrary, + }) + } + } + + async getEthereumChainId(): Promise { + const ethereum = await this.getEthereum() + + try { + return ethereum.request({ method: 'eth_chainId' }) + } catch (e: unknown) { + throw new OkxWalletException(new Error((e as any).message), { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.GetChainId, + }) + } + } + + async getEthereumTransactionReceipt(txHash: string): Promise { + const ethereum = await this.getEthereum() + + const interval = 1000 + const transactionReceiptRetry = async () => { + const receipt = await ethereum.request({ + method: 'eth_getTransactionReceipt', + params: [txHash], + }) + + if (!receipt) { + await sleep(interval) + await transactionReceiptRetry() + } + + return receipt + } + + try { + return await transactionReceiptRetry() + } catch (e: unknown) { + throw new OkxWalletException(new Error((e as any).message), { + code: UnspecifiedErrorCode, + type: ErrorType.WalletError, + contextModule: WalletAction.GetEthereumTransactionReceipt, + }) + } + } + + // eslint-disable-next-line class-methods-use-this + async getPubKey(): Promise { + throw new WalletException( + new Error('You can only fetch PubKey from Cosmos native wallets'), + ) + } + + async onChainIdChanged(callback: (chain: string) => void): Promise { + const ethereum = await this.getEthereum() + + this.listeners = { + [WalletEventListener.ChainIdChange]: callback, + } + + ethereum.on('chainChanged', callback) + } + + async onAccountChange( + callback: (account: AccountAddress) => void, + ): Promise { + const ethereum = await this.getEthereum() + + this.listeners = { + [WalletEventListener.AccountChange]: callback, + } + + ethereum.on('accountsChanged', callback) + } + + private async getEthereum(): Promise { + const provider = await getOkxWalletProvider() + + if (!provider) { + throw new OkxWalletException( + new Error('Please install the OkxWallet wallet extension.'), + { + code: UnspecifiedErrorCode, + type: ErrorType.WalletNotInstalledError, + contextModule: WalletAction.GetAccounts, + }, + ) + } + + return provider + } +} diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Okx/utils.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Okx/utils.ts new file mode 100644 index 000000000..c004fc40d --- /dev/null +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Okx/utils.ts @@ -0,0 +1,66 @@ +import { isServerSide } from '@injectivelabs/sdk-ts' +import { BrowserEip1993Provider, WindowWithEip1193Provider } from '../../types' + +const $window = (isServerSide() + ? {} + : window) as unknown as WindowWithEip1193Provider + +export async function getOkxWalletProvider({ timeout } = { timeout: 3000 }) { + const provider = getOkxWalletFromWindow() + + if (provider) { + return provider + } + + return listenForOkxWalletInitialized({ + timeout, + }) as Promise +} + +async function listenForOkxWalletInitialized( + { timeout } = { timeout: 3000 }, +) { + return new Promise((resolve) => { + const handleInitialization = () => { + resolve(getOkxWalletFromWindow()) + } + + $window.addEventListener('okxwallet#initialized', handleInitialization, { + once: true, + }) + + setTimeout(() => { + $window.removeEventListener( + 'okxwallet#initialized', + handleInitialization, + ) + resolve(null) + }, timeout) + }) +} + +function getOkxWalletFromWindow() { + const injectedProviderExist = + typeof window !== 'undefined' && + (typeof $window.ethereum !== 'undefined' || + typeof $window.okxwallet !== 'undefined') + + // No injected providers exist. + if (!injectedProviderExist) { + return + } + + if ($window.okxwallet) { + return $window.okxwallet + } + + if ($window.ethereum.isOkxWallet) { + return $window.ethereum + } + + if ($window.providers) { + return $window.providers.find((p) => p.isOkxWallet) + } + + return +} diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Phantom/index.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Phantom/index.ts index 5c30abd0b..3de61bd47 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Phantom/index.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Phantom/index.ts @@ -1,10 +1,6 @@ /* eslint-disable class-methods-use-this */ import { sleep } from '@injectivelabs/utils' -import { - ChainId, - AccountAddress, - EthereumChainId, -} from '@injectivelabs/ts-types' +import { AccountAddress, EthereumChainId } from '@injectivelabs/ts-types' import { ErrorType, WalletException, @@ -18,9 +14,13 @@ import { ConcreteWalletStrategy, EthereumWalletStrategyArgs, } from '../../../types' -import { BrowserEip1993Provider } from '../../types' +import { BrowserEip1993Provider, SendTransactionOptions } from '../../types' import BaseConcreteStrategy from '../Base' -import { WalletAction, WalletDeviceType } from '../../../../types/enums' +import { + WalletAction, + WalletDeviceType, + WalletEventListener, +} from '../../../../types/enums' import { getPhantomProvider } from './utils' export default class Phantom @@ -36,9 +36,33 @@ export default class Phantom } async enable(): Promise { + await this.getAddresses() + return Promise.resolve(true) } + public async disconnect() { + if (this.listeners[WalletEventListener.AccountChange]) { + const ethereum = await this.getEthereum() + + ethereum.removeListener( + 'accountsChanged', + this.listeners[WalletEventListener.AccountChange], + ) + } + + if (this.listeners[WalletEventListener.ChainIdChange]) { + const ethereum = await this.getEthereum() + + ethereum.removeListener( + 'chainChanged', + this.listeners[WalletEventListener.ChainIdChange], + ) + } + + this.listeners = {} + } + async getAddresses(): Promise { const ethereum = await this.getEthereum() @@ -86,17 +110,9 @@ export default class Phantom async sendTransaction( transaction: TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { - rest: string - grpc: string - tm?: string - } - }, + options: SendTransactionOptions, ): Promise { - const { endpoints } = options + const { endpoints, txTimeout } = options if (!endpoints) { throw new WalletException( @@ -107,7 +123,7 @@ export default class Phantom } const txApi = new TxGrpcApi(endpoints.grpc) - const response = await txApi.broadcast(transaction) + const response = await txApi.broadcast(transaction, { txTimeout }) if (response.code !== 0) { throw new TransactionException(new Error(response.rawLog), { @@ -137,7 +153,7 @@ export default class Phantom try { return await ethereum.request({ method: 'eth_signTypedData_v4', - params: [address.toUpperCase(), eip712json], + params: [address, eip712json], }) } catch (e: unknown) { throw new MetamaskException(new Error((e as any).message), { @@ -253,24 +269,40 @@ export default class Phantom ) } - onChainIdChanged(_callback: () => void): void { - // - } + async onChainIdChanged(callback: (chain: string) => void): Promise { + const ethereum = await this.getEthereum() - onAccountChange(_callback: (account: AccountAddress) => void): void { - // - } + this.listeners = { + [WalletEventListener.ChainIdChange]: callback, + } - cancelOnChainIdChange(): void { - // + ethereum.on('chainChanged', callback) } - cancelOnAccountChange(): void { - // - } + async onAccountChange( + callback: (account: AccountAddress) => void, + ): Promise { + const ethereum = await this.getEthereum() + + const listener = (accounts: string[]) => { + if (accounts && accounts.length > 0) { + callback(accounts[0]) + } else { + this.getAddresses() + .then((accounts) => { + callback(accounts[0]) + }) + .catch((_error: any) => { + // + }) + } + } + + this.listeners = { + [WalletEventListener.AccountChange]: listener, + } - cancelAllEvents(): void { - // + ethereum.on('accountsChanged', listener) } private async getEthereum(): Promise { diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Phantom/utils.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Phantom/utils.ts index dbd7b66ef..f0deab9d4 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Phantom/utils.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Phantom/utils.ts @@ -23,12 +23,12 @@ async function listenForPhantomInitialized({ timeout } = { timeout: 3000 }) { resolve(getPhantomFromWindow()) } - $window.addEventListener('ethereum#initialized', handleInitialization, { + $window.addEventListener('phantom#initialized', handleInitialization, { once: true, }) setTimeout(() => { - $window.removeEventListener('ethereum#initialized', handleInitialization) + $window.removeEventListener('phantom#initialized', handleInitialization) resolve(null) }, timeout) }) @@ -37,14 +37,15 @@ async function listenForPhantomInitialized({ timeout } = { timeout: 3000 }) { function getPhantomFromWindow() { const injectedProviderExist = typeof window !== 'undefined' && - typeof $window.phantom?.ethereum !== 'undefined' + (typeof $window.ethereum !== 'undefined' || + typeof $window.phantom !== 'undefined') // No injected providers exist. if (!injectedProviderExist) { return } - if ($window.phantom?.ethereum) { + if ($window.phantom) { return $window.phantom.ethereum } diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Torus.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Torus.ts index e53dd9afd..c5f991995 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Torus.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Torus.ts @@ -2,7 +2,6 @@ import { sleep } from '@injectivelabs/utils' import { AccountAddress, - ChainId, EthereumChainId, } from '@injectivelabs/ts-types' import { @@ -18,6 +17,7 @@ import { TxGrpcApi, TxRaw, TxResponse, toUtf8 } from '@injectivelabs/sdk-ts' import { ConcreteWalletStrategy, EthereumWalletStrategyArgs } from '../../types' import BaseConcreteStrategy from './Base' import { WalletAction, WalletDeviceType } from '../../../types/enums' +import { SendTransactionOptions } from '../types' export const getNetworkFromChainId = ( chainId: EthereumChainId, @@ -42,7 +42,10 @@ export const getNetworkFromChainId = ( } } -export default class Torus extends BaseConcreteStrategy implements ConcreteWalletStrategy { +export default class Torus + extends BaseConcreteStrategy + implements ConcreteWalletStrategy +{ private torus: TorusWallet private connected = false @@ -138,17 +141,9 @@ export default class Torus extends BaseConcreteStrategy implements ConcreteWalle async sendTransaction( transaction: TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { - rest: string - grpc: string - tm?: string - } - }, + options: SendTransactionOptions, ): Promise { - const { endpoints } = options + const { endpoints, txTimeout } = options if (!endpoints) { throw new WalletException( @@ -159,7 +154,7 @@ export default class Torus extends BaseConcreteStrategy implements ConcreteWalle } const txApi = new TxGrpcApi(endpoints.grpc) - const response = await txApi.broadcast(transaction) + const response = await txApi.broadcast(transaction, { txTimeout }) if (response.code !== 0) { throw new TransactionException(new Error(response.rawLog), { diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Trezor/index.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Trezor/index.ts index f2207a6f0..51e57bec2 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Trezor/index.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/Trezor/index.ts @@ -2,7 +2,6 @@ /* eslint-disable class-methods-use-this */ import { AccountAddress, - ChainId, EthereumChainId, } from '@injectivelabs/ts-types' import { Alchemy, Network as AlchemyNetwork } from 'alchemy-sdk' @@ -26,7 +25,7 @@ import { EthereumWalletStrategyArgs, WalletStrategyEthereumOptions, } from '../../../types' -import { TrezorWalletInfo } from '../../types' +import { SendTransactionOptions, TrezorWalletInfo } from '../../types' import BaseConcreteStrategy from '../Base' import { DEFAULT_ADDRESS_SEARCH_LIMIT, @@ -140,17 +139,9 @@ export default class Trezor async sendTransaction( transaction: TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { - grpc: string - rest: string - tm?: string - } - }, + options: SendTransactionOptions, ): Promise { - const { endpoints } = options + const { endpoints, txTimeout } = options if (!endpoints) { throw new WalletException( @@ -161,7 +152,7 @@ export default class Trezor } const txApi = new TxGrpcApi(endpoints.grpc) - const response = await txApi.broadcast(transaction) + const response = await txApi.broadcast(transaction, { txTimeout }) if (response.code !== 0) { throw new TransactionException(new Error(response.rawLog), { diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/TrustWallet/index.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/TrustWallet/index.ts index d49fe2075..5b959bf33 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/TrustWallet/index.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/TrustWallet/index.ts @@ -1,7 +1,6 @@ /* eslint-disable class-methods-use-this */ import { sleep } from '@injectivelabs/utils' import { - ChainId, AccountAddress, EthereumChainId, } from '@injectivelabs/ts-types' @@ -18,7 +17,7 @@ import { ConcreteWalletStrategy, EthereumWalletStrategyArgs, } from '../../../types' -import { BrowserEip1993Provider } from '../../types' +import { BrowserEip1993Provider, SendTransactionOptions } from '../../types' import BaseConcreteStrategy from './../Base' import { WalletAction, WalletDeviceType } from '../../../../types/enums' import { getTrustWalletProvider } from './utils' @@ -86,17 +85,9 @@ export default class TrustWallet async sendTransaction( transaction: TxRaw, - options: { - address: AccountAddress - chainId: ChainId - endpoints?: { - rest: string - grpc: string - tm?: string - } - }, + options: SendTransactionOptions, ): Promise { - const { endpoints } = options + const { endpoints, txTimeout } = options if (!endpoints) { throw new WalletException( @@ -107,7 +98,7 @@ export default class TrustWallet } const txApi = new TxGrpcApi(endpoints.grpc) - const response = await txApi.broadcast(transaction) + const response = await txApi.broadcast(transaction, { txTimeout }) if (response.code !== 0) { throw new TransactionException(new Error(response.rawLog), { @@ -137,7 +128,7 @@ export default class TrustWallet try { return await ethereum.request({ method: 'eth_signTypedData_v4', - params: [address, eip712json], + params: [eip712json, address], }) } catch (e: unknown) { throw new TrustWalletException(new Error((e as any).message), { diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/TrustWallet/utils.ts b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/TrustWallet/utils.ts index 386f3b3da..bbf66f85b 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/strategies/TrustWallet/utils.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/strategies/TrustWallet/utils.ts @@ -54,12 +54,12 @@ function getTrustWalletFromWindow() { return $window.trustWallet } - if ($window.ethereum.isTrust) { + if ($window.ethereum.isTrustWallet) { return $window.ethereum } if ($window.providers) { - return $window.providers.find((p) => p.isTrust) + return $window.providers.find((p) => p.isTrustWallet) } return diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/types.ts b/packages/wallet-ts/src/strategies/wallet-strategy/types.ts index 89da6d042..456d4677f 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/types.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/types.ts @@ -1,15 +1,18 @@ import Eip1993Provider from 'eip1193-provider' -import HDNode from 'hdkey' +import type HDNode from 'hdkey' +import { ChainId } from '@injectivelabs/ts-types' export interface BrowserEip1993Provider extends Eip1993Provider { removeAllListeners(): void isMetaMask: boolean - isTrust: boolean + isTrustWallet: boolean + isOkxWallet: boolean isPhantom: boolean } export interface WindowWithEip1193Provider extends Window { ethereum: BrowserEip1993Provider + okxwallet: BrowserEip1993Provider providers: BrowserEip1993Provider[] trustWallet?: BrowserEip1993Provider phantom?: { ethereum?: BrowserEip1993Provider } @@ -37,3 +40,14 @@ export enum LedgerDerivationPathType { LedgerLive = 'ledger-live', LedgerMew = 'ledger-mew', } + +export interface SendTransactionOptions { + address: string + chainId: ChainId + txTimeout?: number + endpoints: { + rest: string + grpc: string + tm?: string + } +} diff --git a/packages/wallet-ts/src/strategies/wallet-strategy/utils.ts b/packages/wallet-ts/src/strategies/wallet-strategy/utils.ts index 8f55cc256..bc5b95c97 100644 --- a/packages/wallet-ts/src/strategies/wallet-strategy/utils.ts +++ b/packages/wallet-ts/src/strategies/wallet-strategy/utils.ts @@ -10,6 +10,10 @@ export const isEthWallet = (wallet: Wallet): boolean => Wallet.LedgerLegacy, Wallet.TrustWallet, Wallet.CosmostationEth, + Wallet.OkxWallet, ].includes(wallet) export const isCosmosWallet = (wallet: Wallet): boolean => !isEthWallet(wallet) + +export const isEip712V2OnlyWallet = (wallet: Wallet): boolean => + [Wallet.Phantom].includes(wallet) diff --git a/packages/wallet-ts/src/types/enums.ts b/packages/wallet-ts/src/types/enums.ts index 1caf47230..963e48fcc 100644 --- a/packages/wallet-ts/src/types/enums.ts +++ b/packages/wallet-ts/src/types/enums.ts @@ -9,6 +9,7 @@ export enum Wallet { Trezor = 'trezor', Phantom = 'phantom', Metamask = 'metamask', + OkxWallet = 'okx-wallet', TrustWallet = 'trust-wallet', Cosmostation = 'cosmostation', LedgerCosmos = 'ledger-cosmos', @@ -24,4 +25,9 @@ export enum WalletDeviceType { Hardware = 'hardware', } +export enum WalletEventListener { + AccountChange = 'account-change', + ChainIdChange = 'chain-id-change', +} + export const WalletAction = { ...WalletErrorActionModule } diff --git a/packages/wallet-ts/src/utils/wallets/cosmos/endpoints.ts b/packages/wallet-ts/src/utils/wallets/cosmos/endpoints.ts index 53cae5a6f..4d959d53a 100644 --- a/packages/wallet-ts/src/utils/wallets/cosmos/endpoints.ts +++ b/packages/wallet-ts/src/utils/wallets/cosmos/endpoints.ts @@ -13,8 +13,8 @@ export const getEndpointsFromChainId = ( switch (chainId) { case CosmosChainId.Injective: return { - rpc: 'https://tm.injective.network', - rest: 'https://lcd.injective.network', + rpc: 'https://sentry.tm.injective.network', + rest: 'https://sentry.lcd.injective.network', } case TestnetCosmosChainId.Injective: return { @@ -131,6 +131,16 @@ export const getEndpointsFromChainId = ( rpc: 'https://rpc.cosmos.directory/kujira', rest: 'https://rest.cosmos.directory/kujira', } + case CosmosChainId.Wormchain: + return { + rpc: 'https://rpc.cosmos.directory/gateway', + rest: 'https://rest.cosmos.directory/gateway', + } + case CosmosChainId.Andromeda: + return { + rpc: 'https://rpc.cosmos.directory/andromeda', + rest: 'https://rest.cosmos.directory/andromeda', + } default: throw new GeneralException( new Error(`Endpoints for ${chainId} not found`), diff --git a/packages/wallet-ts/src/utils/wallets/index.ts b/packages/wallet-ts/src/utils/wallets/index.ts index ccb8bf519..a7b9b208d 100644 --- a/packages/wallet-ts/src/utils/wallets/index.ts +++ b/packages/wallet-ts/src/utils/wallets/index.ts @@ -4,5 +4,6 @@ export * from './leap' export * from './phantom' export * from './metamask' export * from './welldone' +export * from './okx' export * from './ninji' export * from './trust-wallet' diff --git a/packages/wallet-ts/src/utils/wallets/keplr/KeplrWallet.ts b/packages/wallet-ts/src/utils/wallets/keplr/KeplrWallet.ts index e06b4c15d..c26bf02ce 100644 --- a/packages/wallet-ts/src/utils/wallets/keplr/KeplrWallet.ts +++ b/packages/wallet-ts/src/utils/wallets/keplr/KeplrWallet.ts @@ -14,7 +14,6 @@ import { CosmosChainId, TestnetCosmosChainId, } from '@injectivelabs/ts-types' -import { TxRestApi, TxGrpcApi, TxResponse } from '@injectivelabs/sdk-ts' import { ErrorType, CosmosWalletException, @@ -23,7 +22,6 @@ import { WalletErrorActionModule, GeneralException, } from '@injectivelabs/exceptions' -import { getEndpointsFromChainId } from '../cosmos/endpoints' import { CosmosTxV1Beta1Tx } from '@injectivelabs/sdk-ts' const $window = (typeof window !== 'undefined' ? window : {}) as KeplrWindow @@ -31,14 +29,8 @@ const $window = (typeof window !== 'undefined' ? window : {}) as KeplrWindow export class KeplrWallet { private chainId: CosmosChainId | TestnetCosmosChainId | ChainId - private endpoints: { rest: string; rpc?: string } - - constructor( - chainId: CosmosChainId | TestnetCosmosChainId | ChainId, - endpoints?: { rest: string; rpc?: string }, - ) { + constructor(chainId: CosmosChainId | TestnetCosmosChainId | ChainId) { this.chainId = chainId - this.endpoints = endpoints || getEndpointsFromChainId(chainId) } static async isChainIdSupported(chainId: CosmosChainId): Promise { @@ -64,10 +56,11 @@ export class KeplrWallet { throw new CosmosWalletException( new Error( - `Keplr doesn't support ${ + `Keplr may not support ${ chainName[0] || chainId - } network. Please use another Cosmos wallet`, + } network. Please check if the chain can be added.`, ), + { context: 'https://chains.keplr.app/' }, ) } @@ -210,20 +203,12 @@ export class KeplrWallet { } } - public async waitTxBroadcasted( - txHash: string, - endpoint?: string, - ): Promise { - return endpoint - ? new TxGrpcApi(endpoint).fetchTxPoll(txHash) - : new TxRestApi(this.endpoints.rest).fetchTxPoll(txHash) - } - public async signAndBroadcastAminoUsingCosmjs( messages: EncodeObject[], stdFee: StdFee, + endpoints: { rest: string; rpc: string }, ) { - const { chainId, endpoints } = this + const { chainId } = this const keplr = await this.getKeplrWallet() if (!endpoints.rpc) { @@ -282,10 +267,11 @@ export class KeplrWallet { } catch (e) { throw new CosmosWalletException( new Error( - `Keplr doesn't support ${ + `Keplr may not support ${ chainName[0] || chainId - } network. Please use another Cosmos wallet`, + } network. Please check if the chain can be added.`, ), + { context: 'https://chains.keplr.app/' }, ) } } diff --git a/packages/wallet-ts/src/utils/wallets/leap/LeapWallet.ts b/packages/wallet-ts/src/utils/wallets/leap/LeapWallet.ts index 495be6002..87bfb6c05 100644 --- a/packages/wallet-ts/src/utils/wallets/leap/LeapWallet.ts +++ b/packages/wallet-ts/src/utils/wallets/leap/LeapWallet.ts @@ -7,7 +7,6 @@ import { CosmosChainId, TestnetCosmosChainId, } from '@injectivelabs/ts-types' -import { TxGrpcApi, TxRestApi, TxResponse } from '@injectivelabs/sdk-ts' import { ErrorType, CosmosWalletException, @@ -15,7 +14,6 @@ import { UnspecifiedErrorCode, WalletErrorActionModule, } from '@injectivelabs/exceptions' -import { getEndpointsFromChainId } from '../cosmos/endpoints' import { CosmosTxV1Beta1Tx } from '@injectivelabs/sdk-ts' const $window = (typeof window !== 'undefined' ? window : {}) as Window & { @@ -25,14 +23,8 @@ const $window = (typeof window !== 'undefined' ? window : {}) as Window & { export class LeapWallet { private chainId: CosmosChainId | TestnetCosmosChainId | ChainId - private endpoints: { rest: string; rpc?: string } - - constructor( - chainId: CosmosChainId | TestnetCosmosChainId | ChainId, - endpoints?: { rest: string; rpc?: string }, - ) { + constructor(chainId: CosmosChainId | TestnetCosmosChainId | ChainId) { this.chainId = chainId - this.endpoints = endpoints || getEndpointsFromChainId(chainId) } static async isChainIdSupported(chainId: CosmosChainId): Promise { @@ -173,15 +165,6 @@ export class LeapWallet { } } - async waitTxBroadcasted( - txHash: string, - endpoint?: string, - ): Promise { - return endpoint - ? new TxGrpcApi(endpoint).fetchTxPoll(txHash) - : new TxRestApi(this.endpoints.rest).fetchTxPoll(txHash) - } - public async checkChainIdSupport() { const { chainId } = this const leap = this.getLeap() diff --git a/packages/wallet-ts/src/utils/wallets/ninji/NinjiWallet.ts b/packages/wallet-ts/src/utils/wallets/ninji/NinjiWallet.ts index 8df7b45f2..864c368b6 100644 --- a/packages/wallet-ts/src/utils/wallets/ninji/NinjiWallet.ts +++ b/packages/wallet-ts/src/utils/wallets/ninji/NinjiWallet.ts @@ -7,7 +7,6 @@ import { CosmosChainId, TestnetCosmosChainId, } from '@injectivelabs/ts-types' -import { TxGrpcApi, TxRestApi, TxResponse } from '@injectivelabs/sdk-ts' import { ErrorType, CosmosWalletException, @@ -15,7 +14,6 @@ import { UnspecifiedErrorCode, WalletErrorActionModule, } from '@injectivelabs/exceptions' -import { getEndpointsFromChainId } from '../cosmos/endpoints' import { CosmosTxV1Beta1Tx } from '@injectivelabs/sdk-ts' const $window = (typeof window !== 'undefined' ? window : {}) as Window & { @@ -25,14 +23,8 @@ const $window = (typeof window !== 'undefined' ? window : {}) as Window & { export class NinjiWallet { private chainId: CosmosChainId | TestnetCosmosChainId | ChainId - private endpoints: { rest: string; rpc?: string } - - constructor( - chainId: CosmosChainId | TestnetCosmosChainId | ChainId, - endpoints?: { rest: string; rpc?: string }, - ) { + constructor(chainId: CosmosChainId | TestnetCosmosChainId | ChainId) { this.chainId = chainId - this.endpoints = endpoints || getEndpointsFromChainId(chainId) } static async isChainIdSupported(chainId: CosmosChainId): Promise { @@ -173,15 +165,6 @@ export class NinjiWallet { } } - async waitTxBroadcasted( - txHash: string, - endpoint?: string, - ): Promise { - return endpoint - ? new TxGrpcApi(endpoint).fetchTxPoll(txHash) - : new TxRestApi(this.endpoints.rest).fetchTxPoll(txHash) - } - public async checkChainIdSupport() { const { chainId } = this const ninji = this.getNinji() diff --git a/packages/wallet-ts/src/utils/wallets/okx/Okx.ts b/packages/wallet-ts/src/utils/wallets/okx/Okx.ts new file mode 100644 index 000000000..3fdaca880 --- /dev/null +++ b/packages/wallet-ts/src/utils/wallets/okx/Okx.ts @@ -0,0 +1,47 @@ +import { ethers } from 'ethers' +import { WalletException } from '@injectivelabs/exceptions' +import { EthereumChainId } from '@injectivelabs/ts-types' +import { BrowserEip1993Provider } from '../../../strategies/wallet-strategy/types' +import { getOkxWalletProvider } from '../../../strategies/wallet-strategy/strategies/Okx/utils' + +export const getEthersProviderFromOkxWallet = async () => { + try { + const provider = (await getOkxWalletProvider()) as BrowserEip1993Provider + + if (!provider) { + throw new WalletException(new Error('Please install OkxWallet Extension')) + } + + return new ethers.providers.Web3Provider(provider, 'any') + } catch (e) { + throw new WalletException(new Error('Please install OkxWallet Extension')) + } +} + +export const updateOkxWalletNetwork = async (chainId: EthereumChainId) => { + try { + const provider = (await getOkxWalletProvider()) as BrowserEip1993Provider + + if (!provider) { + throw new WalletException(new Error('Please install OkxWallet Extension')) + } + + const chainIdToHex = chainId.toString(16) + + return await Promise.race([ + provider.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: `0x${chainIdToHex}` }], + }), + new Promise((resolve) => + provider.on('change', ({ chain }: any) => { + if (chain?.id === chainIdToHex) { + resolve() + } + }), + ), + ]) + } catch (e) { + throw new WalletException(new Error('Please update your OkxWallet network')) + } +} diff --git a/packages/wallet-ts/src/utils/wallets/okx/index.ts b/packages/wallet-ts/src/utils/wallets/okx/index.ts new file mode 100644 index 000000000..8953c61fc --- /dev/null +++ b/packages/wallet-ts/src/utils/wallets/okx/index.ts @@ -0,0 +1,2 @@ +export * from './Okx' +export * from './../../../strategies/wallet-strategy/strategies/Okx/utils' diff --git a/yarn.lock b/yarn.lock index 7a230a08f..133cfc064 100644 --- a/yarn.lock +++ b/yarn.lock @@ -84,6 +84,13 @@ dependencies: "@babel/highlight" "^7.18.6" +"@babel/code-frame@~7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": version "7.20.10" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" @@ -1004,13 +1011,27 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.19.4", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.8.4": version "7.20.7" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.21.0": + version "7.24.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.23.4": + version "7.23.9" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -1075,30 +1096,10 @@ resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@blocto/sdk@^0.2.21": - version "0.2.22" - resolved "https://registry.npmjs.org/@blocto/sdk/-/sdk-0.2.22.tgz#c7fe62809de0640a0a3f7a043c5bbceb8be17e38" - integrity sha512-Ro1AiISSlOiri/It932NEFxnDuF83Ide+z0p3KHs5+CdYYLYgCMmyroQnfRtoh3mbXdrTvI+EAuSkr+meWNqrg== - dependencies: - bs58 "^4.0.1" - buffer "^6.0.3" - eip1193-provider "^1.0.1" - js-sha3 "^0.8.0" - -"@censo-custody/solana-wallet-adapter@^0.1.0": - version "0.1.0" - resolved "https://registry.npmjs.org/@censo-custody/solana-wallet-adapter/-/solana-wallet-adapter-0.1.0.tgz#064adae9f216dc4b726c1cc45b6b24cf0c734f07" - integrity sha512-iM1jFVzBMfk7iokgUVfA2xvGUegixklUISgMARa/VA2mFIjoi32t4xmD8PtWHht81fmg107aYhLnTV1cM7NkAg== - dependencies: - "@solana/web3.js" "^1.44.3" - bs58 "^4.0.1" - eventemitter3 "^4.0.7" - uuid "^8.3.2" - -"@certusone/wormhole-sdk-proto-web@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@certusone/wormhole-sdk-proto-web/-/wormhole-sdk-proto-web-0.0.6.tgz#cd26f724b39e565cde5573e20f0a29e659d146d3" - integrity sha512-LTyjsrWryefx5WmkoBP6FQ2EjLxhMExAGxLkloHUhufVQZdrbGh0htBBUviP+HaDSJBCMPMtulNFwkBJV6muqQ== +"@certusone/wormhole-sdk-proto-web@0.0.7": + version "0.0.7" + resolved "https://registry.npmjs.org/@certusone/wormhole-sdk-proto-web/-/wormhole-sdk-proto-web-0.0.7.tgz#3b4ff42227eaabbd8c89a781df1856b476b03764" + integrity sha512-GCe1/bcqMS0Mt+hsWp4SE4NLL59pWmK0lhQXO0oqAKl0G9AuuTdudySMDF/sLc7z5H2w34bSuSrIEKvPuuSC+w== dependencies: "@improbable-eng/grpc-web" "^0.15.0" protobufjs "^7.0.0" @@ -1370,6 +1371,16 @@ "@cosmjs/math" "^0.31.3" "@cosmjs/utils" "^0.31.3" +"@cosmjs/amino@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@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/crypto@0.27.1": version "0.27.1" resolved "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.27.1.tgz#271c853089a3baf3acd6cf0b2122fd49f8815743" @@ -1399,6 +1410,19 @@ elliptic "^6.5.4" libsodium-wrappers-sumo "^0.7.11" +"@cosmjs/crypto@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@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.npmjs.org/@cosmjs/encoding/-/encoding-0.27.1.tgz#3cd5bc0af743485eb2578cdb08cfa84c86d610e1" @@ -1417,6 +1441,15 @@ bech32 "^1.1.4" readonly-date "^1.0.0" +"@cosmjs/encoding@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@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.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz#16f21305fc167598c8a23a45549b85106b2372bc" @@ -1433,6 +1466,14 @@ "@cosmjs/stream" "^0.31.3" xstream "^11.14.0" +"@cosmjs/json-rpc@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@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.npmjs.org/@cosmjs/launchpad/-/launchpad-0.27.1.tgz#b6f1995748be96560f5f01e84d3ff907477dda77" @@ -1460,7 +1501,26 @@ dependencies: bn.js "^5.2.0" -"@cosmjs/proto-signing@0.31.3", "@cosmjs/proto-signing@^0.31.0-alpha.1", "@cosmjs/proto-signing@^0.31.3": +"@cosmjs/math@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.2.tgz#4522312769197e132679e4960862bcec0eed4cb8" + integrity sha512-b8+ruAAY8aKtVKWSft2IvtCVCUH1LigIlf9ALIiY8n9jtM4kMASiaRbQ/27etnSAInV88IaezKK9rQZrtxTjcw== + dependencies: + bn.js "^5.2.0" + +"@cosmjs/proto-signing@0.32.2", "@cosmjs/proto-signing@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@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.31.0-alpha.1": version "0.31.3" resolved "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.31.3.tgz#20440b7b96fb2cd924256a10e656fd8d4481cdcd" integrity sha512-24+10/cGl6lLS4VCrGTCJeDRPQTn1K5JfknzXzDIHOx8THR31JxA7/HV5eWGHqWgAbudA7ccdSvEK08lEHHtLA== @@ -1483,6 +1543,16 @@ ws "^7" xstream "^11.14.0" +"@cosmjs/socket@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@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.31.0-alpha.1": version "0.31.0-alpha.1" resolved "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.31.0-alpha.1.tgz#85b9d41cd5e73c3b8db73115aa1c9cd6eb5914fd" @@ -1501,22 +1571,20 @@ protobufjs "~6.11.3" xstream "^11.14.0" -"@cosmjs/stargate@^0.31.3": - version "0.31.3" - resolved "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.31.3.tgz#a2b38e398097a00f897dbd8f02d4d347d8fed818" - integrity sha512-53NxnzmB9FfXpG4KjOUAYAvWLYKdEmZKsutcat/u2BrDXNZ7BN8jim/ENcpwXfs9/Og0K24lEIdvA4gsq3JDQw== +"@cosmjs/stargate@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.2.tgz#73718c5c6a3ae138682ee9987333d911eca22a13" + integrity sha512-AsJa29fT7Jd4xt9Ai+HMqhyj7UQu7fyYKdXj/8+/9PD74xe6lZSYhQPcitUmMLJ1ckKPgXSk5Dd2LbsQT0IhZg== dependencies: "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "^0.31.3" - "@cosmjs/encoding" "^0.31.3" - "@cosmjs/math" "^0.31.3" - "@cosmjs/proto-signing" "^0.31.3" - "@cosmjs/stream" "^0.31.3" - "@cosmjs/tendermint-rpc" "^0.31.3" - "@cosmjs/utils" "^0.31.3" - cosmjs-types "^0.8.0" - long "^4.0.0" - protobufjs "~6.11.3" + "@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/stream@^0.30.1": @@ -1533,7 +1601,14 @@ dependencies: xstream "^11.14.0" -"@cosmjs/tendermint-rpc@^0.31.0-alpha.1", "@cosmjs/tendermint-rpc@^0.31.3": +"@cosmjs/stream@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.2.tgz#b1e8f977d25313d659f1aa89ad21614b5391cd93" + integrity sha512-gpCufLfHAD8Zp1ZKge7AHbDf4RA0TZp66wZY6JaQR5bSiEF2Drjtp4mwXZPGejtaUMnaAgff3LrUzPJfKYdQwg== + dependencies: + xstream "^11.14.0" + +"@cosmjs/tendermint-rpc@^0.31.0-alpha.1": version "0.31.3" resolved "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.31.3.tgz#d1a2bc5b3c98743631c9b55888589d352403c9b3" integrity sha512-s3TiWkPCW4QceTQjpYqn4xttUJH36mTPqplMl+qyocdqk5+X5mergzExU/pHZRWQ4pbby8bnR7kMvG4OC1aZ8g== @@ -1549,6 +1624,22 @@ readonly-date "^1.0.0" xstream "^11.14.0" +"@cosmjs/tendermint-rpc@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@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/utils@0.27.1": version "0.27.1" resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.27.1.tgz#1c8efde17256346ef142a3bd15158ee4055470e2" @@ -1559,6 +1650,11 @@ resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.31.3.tgz#f97bbfda35ad69e80cd5c7fe0a270cbda16db1ed" integrity sha512-VBhAgzrrYdIe0O5IbKRqwszbQa7ZyQLx9nEQuHQ3HUplQW7P44COG/ye2n6AzCudtqxmwdX7nyX8ta1J07GoqA== +"@cosmjs/utils@^0.32.2": + version "0.32.2" + resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.2.tgz#324304aa85bfa6f10561cc17781d824d02130897" + integrity sha512-Gg5t+eR7vPJMAmhkFt6CZrzPd0EKpAslWwk5rFVYZpJsM8JG5KT9XQ99hgNM3Ov6ScNoIWbXkpX27F6A9cXR4Q== + "@cosmostation/extension-client@^0.1.15": version "0.1.15" resolved "https://registry.yarnpkg.com/@cosmostation/extension-client/-/extension-client-0.1.15.tgz#cdc6d8fce42217704c1c0d5814f0ee7ce27e8dab" @@ -1571,6 +1667,16 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@emurgo/cardano-serialization-lib-browser@^11.5.0": + version "11.5.0" + resolved "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-browser/-/cardano-serialization-lib-browser-11.5.0.tgz#f2d15b538add436e0aa8b67a1d00ca654a680006" + integrity sha512-qchOJ9NYDUz10tzs5r5QhP9hK0p+ZOlRiBwPdTAxqAYLw/8emYBkQQLaS8T1DF6EkeudyrgS00ym5Trw1fo4iA== + +"@emurgo/cardano-serialization-lib-nodejs@11.5.0": + version "11.5.0" + resolved "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-11.5.0.tgz#0662e2a17d7d1e944f8cdb86396133c8edaec059" + integrity sha512-IlVABlRgo9XaTR1NunwZpWcxnfEv04ba2l1vkUz4S1W7Jt36F4CtffP+jPeqBZGnAe+fnUwo0XjIJC3ZTNToNQ== + "@endemolshinegroup/cosmiconfig-typescript-loader@^3.0.2": version "3.0.2" resolved "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz#eea4635828dde372838b0909693ebd9aafeec22d" @@ -1614,12 +1720,24 @@ "@ethereumjs/util" "^8.0.5" crc-32 "^1.2.0" +"@ethereumjs/common@^4.1.0", "@ethereumjs/common@^4.2.0": + version "4.2.0" + resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-4.2.0.tgz#c5ccaeb71f5a9833c66ab35c22f9f965ce462ace" + integrity sha512-UWqovZQksxEY9cU+s1cF3JwFyJdKrJsURM+ORHpZZLQfsqQf+1uGbD3N0AvQ7M+Jz/LxkiVY98+Cd3OMzsrOcA== + dependencies: + "@ethereumjs/util" "^9.0.2" + "@ethereumjs/rlp@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== -"@ethereumjs/tx@^4.1.1": +"@ethereumjs/rlp@^5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz#c89bd82f2f3bec248ab2d517ae25f5bbc4aac842" + integrity sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA== + +"@ethereumjs/tx@^4.1.1", "@ethereumjs/tx@^4.1.2", "@ethereumjs/tx@^5.1.0", "@ethereumjs/tx@^5.2.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-4.1.1.tgz#d1b5bf2c4fd3618f2f333b66e262848530d4686a" integrity sha512-QDj7nuROfoeyK83RObMA0XCZ+LUDdneNkSCIekO498uEKTY25FxI4Whduc/6j0wdd4IqpQvkq+/7vxSULjGIBQ== @@ -1640,6 +1758,23 @@ "@ethereumjs/rlp" "^4.0.1" ethereum-cryptography "^1.1.2" +"@ethereumjs/util@^8.0.6": + version "8.1.0" + resolved "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethereumjs/util@^9.0.2": + version "9.0.2" + resolved "https://registry.npmjs.org/@ethereumjs/util/-/util-9.0.2.tgz#2719337cd43d70941491c41e3367d7b87078f847" + integrity sha512-dasKCj6Vb5spVPnNmRDFHmbfBySvokE440F0RDroPLzO4Mb4hyDqeoOMUxlbLz/BscK2pOpWUendGA+AOvGpNQ== + dependencies: + "@ethereumjs/rlp" "^5.0.2" + ethereum-cryptography "^2.1.3" + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -1982,6 +2117,102 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@expo/config-plugins@~7.8.2": + version "7.8.4" + resolved "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz#533b5d536c1dc8b5544d64878b51bda28f2e1a1f" + integrity sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg== + dependencies: + "@expo/config-types" "^50.0.0-alpha.1" + "@expo/fingerprint" "^0.6.0" + "@expo/json-file" "~8.3.0" + "@expo/plist" "^0.1.0" + "@expo/sdk-runtime-versions" "^1.0.0" + "@react-native/normalize-color" "^2.0.0" + chalk "^4.1.2" + debug "^4.3.1" + find-up "~5.0.0" + getenv "^1.0.0" + glob "7.1.6" + resolve-from "^5.0.0" + semver "^7.5.3" + slash "^3.0.0" + slugify "^1.6.6" + xcode "^3.0.1" + xml2js "0.6.0" + +"@expo/config-types@^50.0.0", "@expo/config-types@^50.0.0-alpha.1": + version "50.0.0" + resolved "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz#b534d3ec997ec60f8af24f6ad56244c8afc71a0b" + integrity sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw== + +"@expo/config@~8.5.0": + version "8.5.4" + resolved "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz#bb5eb06caa36e4e35dc8c7647fae63e147b830ca" + integrity sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q== + dependencies: + "@babel/code-frame" "~7.10.4" + "@expo/config-plugins" "~7.8.2" + "@expo/config-types" "^50.0.0" + "@expo/json-file" "^8.2.37" + getenv "^1.0.0" + glob "7.1.6" + require-from-string "^2.0.2" + resolve-from "^5.0.0" + semver "7.5.3" + slugify "^1.3.4" + sucrase "3.34.0" + +"@expo/fingerprint@^0.6.0": + version "0.6.0" + resolved "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.6.0.tgz#77366934673d4ecea37284109b4dd67f9e6a7487" + integrity sha512-KfpoVRTMwMNJ/Cf5o+Ou8M/Y0EGSTqK+rbi70M2Y0K2qgWNfMJ1gm6sYO9uc8lcTr7YSYM1Rme3dk7QXhpScNA== + dependencies: + "@expo/spawn-async" "^1.5.0" + chalk "^4.1.2" + debug "^4.3.4" + find-up "^5.0.0" + minimatch "^3.0.4" + p-limit "^3.1.0" + resolve-from "^5.0.0" + +"@expo/json-file@^8.2.37", "@expo/json-file@~8.3.0": + version "8.3.0" + resolved "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz#fc84af77b532a4e9bfb5beafd0e3b7f692b6bd7e" + integrity sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g== + dependencies: + "@babel/code-frame" "~7.10.4" + json5 "^2.2.2" + write-file-atomic "^2.3.0" + +"@expo/plist@^0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz#eabc95f951d14e10c87fd0443ee01d567371f058" + integrity sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g== + dependencies: + "@xmldom/xmldom" "~0.7.7" + base64-js "^1.2.3" + xmlbuilder "^14.0.0" + +"@expo/sdk-runtime-versions@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" + integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== + +"@expo/spawn-async@^1.5.0": + version "1.7.2" + resolved "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz#fcfe66c3e387245e72154b1a7eae8cada6a47f58" + integrity sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew== + dependencies: + cross-spawn "^7.0.3" + +"@fivebinaries/coin-selection@2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@fivebinaries/coin-selection/-/coin-selection-2.2.1.tgz#f5329909ac8cd1bf87decdcd054c88a8d69399a0" + integrity sha512-iYFsYr7RY7TEvTqP9NKR4p/yf3Iybf9abUDR7lRjzanGsrLwVsREvIuyE05iRYFrvqarlk+gWRPsdR1N2hUBrg== + dependencies: + "@emurgo/cardano-serialization-lib-browser" "^11.5.0" + "@emurgo/cardano-serialization-lib-nodejs" "11.5.0" + "@fractalwagmi/popup-connection@^1.0.18": version "1.0.18" resolved "https://registry.npmjs.org/@fractalwagmi/popup-connection/-/popup-connection-1.0.18.tgz#3a69045f8393989c0014f97e44967020135142ea" @@ -2006,11 +2237,6 @@ resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== -"@hapi/bourne@^2.0.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.1.0.tgz#66aff77094dc3080bd5df44ec63881f2676eb020" - integrity sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q== - "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -2081,42 +2307,41 @@ dependencies: browser-headers "^0.4.1" -"@injectivelabs/indexer-proto-ts@1.11.32": - version "1.11.32" - resolved "https://registry.yarnpkg.com/@injectivelabs/indexer-proto-ts/-/indexer-proto-ts-1.11.32.tgz#a91d9368ca9a3a782bbe9722762f8d7d754ebafd" - integrity sha512-gCkbMlBq34MY2xZcauDEsCP0h5l/FgKMwCgJ8aWGaTkh27XBWpl1zvlreuWg/IpSvTPJZBoADW9KqixqyoBdJw== +"@injectivelabs/indexer-proto-ts@1.11.37": + version "1.11.37" + resolved "https://registry.yarnpkg.com/@injectivelabs/indexer-proto-ts/-/indexer-proto-ts-1.11.37.tgz#93ebdfd482720fe23c9802c3493bc17aef011258" + integrity sha512-jXm1+qR4QkvLS2byN0UM9zHSfdCqAUWol0jiyb9pGyJPf6e2A2tfP5EFqwxGMmX4MQ7PlC9WBiDTBBiPbkgSig== dependencies: "@injectivelabs/grpc-web" "^0.0.1" google-protobuf "^3.14.0" protobufjs "^7.0.0" rxjs "^7.4.0" -"@injectivelabs/mito-proto-ts@1.0.55": - version "1.0.55" - resolved "https://registry.yarnpkg.com/@injectivelabs/mito-proto-ts/-/mito-proto-ts-1.0.55.tgz#78cc7a11ea4a433f3897ec5acc48d62ccf42cad6" - integrity sha512-clFKpU/LCYvYiPg5PRjhVJFTxKcfJHzaj5saJHuL32LaOaB3Rd8L3CqP9qUrg78L7eKjjXjyG97U3NdRdZBlWg== +"@injectivelabs/mito-proto-ts@1.0.62": + version "1.0.62" + resolved "https://registry.yarnpkg.com/@injectivelabs/mito-proto-ts/-/mito-proto-ts-1.0.62.tgz#45fc0746af7d1b283625816caeb9fff9887e050f" + integrity sha512-WtoO80Y597nZiAuE4H+L208I0i3ByWytR+HqABdCaA26uJ7F1LhXw8YXxh3pP9z0LAeW31T+N7bwtOMlVR4riA== dependencies: "@injectivelabs/grpc-web" "^0.0.1" google-protobuf "^3.14.0" protobufjs "^7.0.0" rxjs "^7.4.0" -"@injectivelabs/wormhole-sdk@^1.12.0-beta.0": - version "1.12.0-beta.0" - resolved "https://registry.yarnpkg.com/@injectivelabs/wormhole-sdk/-/wormhole-sdk-1.12.0-beta.0.tgz#02085b186103be3f27c203019d15e2582fcf8cfc" - integrity sha512-4KYQaoAyM2s9Pmlm5Meo1a0T6mBnJBJvqq0byfZJ/fgbN/yT8dL0kxqGyFUhFesVEU4C5dOr+vG8YFZF+zS7Hg== +"@injectivelabs/wormhole-sdk@1.14.6": + version "1.14.6" + resolved "https://registry.npmjs.org/@injectivelabs/wormhole-sdk/-/wormhole-sdk-1.14.6.tgz#b5f51c391ee3f8b7e9e2a675778f0dba5c152e14" + integrity sha512-zqpd18UIxbQDW+lT06x5i0aRyCKAxaZ/zxCEFYOYjyXHYxED2KViBVkDkLabtL2K5N9ab3ngzjc+lRuKFEZoCQ== dependencies: - "@certusone/wormhole-sdk-proto-web" "0.0.6" + "@certusone/wormhole-sdk-proto-web" "0.0.7" "@certusone/wormhole-sdk-wasm" "^0.0.1" "@coral-xyz/borsh" "0.2.6" "@mysten/sui.js" "0.32.2" "@project-serum/anchor" "^0.25.0" - "@project-serum/borsh" "0.2.5" "@solana/spl-token" "^0.3.5" "@solana/web3.js" "^1.66.2" - "@terra-money/terra.js" "^3.1.3" + "@terra-money/terra.js" "3.1.9" "@xpla/xpla.js" "^0.2.1" - algosdk "^1.15.0" + algosdk "^2.4.0" aptos "1.5.0" axios "^0.24.0" bech32 "^2.0.0" @@ -2126,6 +2351,11 @@ js-base64 "^3.6.1" near-api-js "^1.0.0" +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -2351,14 +2581,14 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jnwng/walletconnect-solana@^0.1.3": - version "0.1.4" - resolved "https://registry.npmjs.org/@jnwng/walletconnect-solana/-/walletconnect-solana-0.1.4.tgz#88ecd894ad505f1e7ada379a743378ea4790469b" - integrity sha512-tdVMeH9IlLHV7SxG81oD+HXmYEs/FR8D19BQJpE+7qsus4kO0yn9y/kQ3m6wsdHQr22L5KL10VDIKSWQ+8pyJg== +"@jnwng/walletconnect-solana@^0.2.0": + version "0.2.0" + resolved "https://registry.npmjs.org/@jnwng/walletconnect-solana/-/walletconnect-solana-0.2.0.tgz#aebea64beaa47273b9b9a71c62d88d543900ab96" + integrity sha512-nyRq0xLEj9i2J4UXQ0Mr4KzsooTMbLu0ewHOqdQV7iZE0PfbtKa8poTSF4ZBAQD8hoMHEx+I7zGFCNMI9BTrTA== dependencies: - "@walletconnect/qrcode-modal" "1.8.0" - "@walletconnect/sign-client" "2.0.0-rc.3" - "@walletconnect/utils" "2.0.0-rc.3" + "@walletconnect/qrcode-modal" "^1.8.0" + "@walletconnect/sign-client" "^2.7.2" + "@walletconnect/utils" "^2.4.5" bs58 "^5.0.0" "@jridgewell/gen-mapping@^0.1.0": @@ -2434,36 +2664,38 @@ "@json-rpc-tools/types" "^1.7.6" "@pedrouid/environment" "^1.0.1" -"@keplr-wallet/common@0.11.58": - version "0.11.58" - resolved "https://registry.yarnpkg.com/@keplr-wallet/common/-/common-0.11.58.tgz#4b273f8f0076d5ae01414fe2adee23b2a555928d" - integrity sha512-kYImv8gBqZBDLR0ipkCXfpgrqfatR3l0X32nrNBP/mGF9ofRtcNnf+MKja5UFUTVLhOvqMXTBQabiT5+nHjPPw== +"@keplr-wallet/common@0.12.71": + version "0.12.71" + resolved "https://registry.npmjs.org/@keplr-wallet/common/-/common-0.12.71.tgz#931187fb6e5323d949f433b41deafd13aa2cdc90" + integrity sha512-1X8NgHmZwGomcXcTEuRF6WyghZ+jaomGfzffDFsD4PNSFgJhd20YHJ8JaJiL0dK1f+p9ga6sLL0THNgi4h0mWQ== dependencies: - "@keplr-wallet/crypto" "0.11.58" + "@keplr-wallet/crypto" "0.12.71" + "@keplr-wallet/types" "0.12.71" buffer "^6.0.3" delay "^4.4.0" + mobx "^6.1.7" -"@keplr-wallet/cosmos@^0.11.58": - version "0.11.58" - resolved "https://registry.yarnpkg.com/@keplr-wallet/cosmos/-/cosmos-0.11.58.tgz#724247fc496acf8e22db2ca1bd1ada415cf8bc66" - integrity sha512-TuejHcKVxi9KaZEwGMayyRbavw8x8BaKuk+QwFHLCzZRJ3UV1/nJR2swoDDLbH6fEDmte9pr8+n7CGdgO2Marg== +"@keplr-wallet/cosmos@^0.12.71": + version "0.12.71" + resolved "https://registry.npmjs.org/@keplr-wallet/cosmos/-/cosmos-0.12.71.tgz#42a99379fef646499fbbc495cfa5ca7e1b1cac91" + integrity sha512-awpZhYmq0bT9bRSjO9d9fAXYMi7NJk98ZBSIQspU2ARP95Tvm+3tAa7llCUUTg/o9t0P8eFuEOrSQr7+sdWLOw== dependencies: "@ethersproject/address" "^5.6.0" - "@keplr-wallet/common" "0.11.58" - "@keplr-wallet/crypto" "0.11.58" - "@keplr-wallet/proto-types" "0.11.58" - "@keplr-wallet/types" "0.11.58" - "@keplr-wallet/unit" "0.11.58" - axios "^0.27.2" + "@keplr-wallet/common" "0.12.71" + "@keplr-wallet/crypto" "0.12.71" + "@keplr-wallet/proto-types" "0.12.71" + "@keplr-wallet/simple-fetch" "0.12.71" + "@keplr-wallet/types" "0.12.71" + "@keplr-wallet/unit" "0.12.71" bech32 "^1.1.4" buffer "^6.0.3" long "^4.0.0" protobufjs "^6.11.2" -"@keplr-wallet/crypto@0.11.58": - version "0.11.58" - resolved "https://registry.yarnpkg.com/@keplr-wallet/crypto/-/crypto-0.11.58.tgz#4bf432a7520dd6fa841d06e2f6356c2c293f74d1" - integrity sha512-FdKTgF/16GWCZOE3QJYmBWH3wx86C6d3GvHZQMe5Fsmh/Q/aIIb0HxqB/H4AfqayUScE/yX4ej8nd9u0cPrOFQ== +"@keplr-wallet/crypto@0.12.71": + version "0.12.71" + resolved "https://registry.npmjs.org/@keplr-wallet/crypto/-/crypto-0.12.71.tgz#9c32efe3fa93df075553e06c1573890e9cca550d" + integrity sha512-zbTbqUXMOrzYdkhbqtFXi4bTyywYbJnxg8H65RrOPJ+qnnW8NqF6h6OsybdiMJqChmGI4QaenpPWxOyGQDfDqw== dependencies: "@ethersproject/keccak256" "^5.5.0" bip32 "^2.0.6" @@ -2474,28 +2706,32 @@ elliptic "^6.5.3" sha.js "^2.4.11" -"@keplr-wallet/proto-types@0.11.58": - version "0.11.58" - resolved "https://registry.yarnpkg.com/@keplr-wallet/proto-types/-/proto-types-0.11.58.tgz#9de07b194674462101c2281c9ad1a701ca54c758" - integrity sha512-qDK965gGbdTM/oJH0beDBIHUiu8GEabf57hKrkv64FhAJ4HPw3+HK5fKn4Omo/3spkVCp6S9vdCGWEUhelkNFQ== +"@keplr-wallet/proto-types@0.12.71": + version "0.12.71" + resolved "https://registry.npmjs.org/@keplr-wallet/proto-types/-/proto-types-0.12.71.tgz#1116c57b37b5f63631c4dd72a9ba51955628f107" + integrity sha512-55IQElAyqZnARYmYJ6AArt58nfkZxwHcmMfXCpgxDyLTHV5a5AyN+UMRXPBxVhYvfKb9KJmKpcmfbo9IwynGHQ== dependencies: long "^4.0.0" protobufjs "^6.11.2" -"@keplr-wallet/types@0.11.58", "@keplr-wallet/types@^0.11.58": - version "0.11.58" - resolved "https://registry.yarnpkg.com/@keplr-wallet/types/-/types-0.11.58.tgz#b142f1f6b47106466d81acf89485575a184aae3a" - integrity sha512-dct9JVXuSlutgnUO8E9WoAxp4dmK+X2fDTWNA4mkgJhUQyN0VzCaKyC9whWLRuYRnAe9xFQ1g9Xo1OlCLPlH8w== +"@keplr-wallet/simple-fetch@0.12.71": + version "0.12.71" + resolved "https://registry.npmjs.org/@keplr-wallet/simple-fetch/-/simple-fetch-0.12.71.tgz#98f03d23dacbe87b9cf9d7b4a21c94933937b9ed" + integrity sha512-/85eP9X7+1s1w7NGQFedao+t/nnAzNgs72Ac8OFenFUtfiSchlaeUAGoNnRJGFcQ78XrfxY690fkMXZn3Gwelg== + +"@keplr-wallet/types@0.12.71", "@keplr-wallet/types@^0.12.71": + version "0.12.71" + resolved "https://registry.npmjs.org/@keplr-wallet/types/-/types-0.12.71.tgz#aee9d6126160bff4b64caa988839f267801f5770" + integrity sha512-Q3D/Qgm4hF2Aamp0Fg/1A+23Y3pkZk73F8tXECYT2nBjeRrwXby/HuD2Tyu5uRj09TGGdvRV9LqUWz/dU2noXw== dependencies: - axios "^0.27.2" long "^4.0.0" -"@keplr-wallet/unit@0.11.58": - version "0.11.58" - resolved "https://registry.yarnpkg.com/@keplr-wallet/unit/-/unit-0.11.58.tgz#9b9e71668e7b9bc5c29ecf1881c48b115eea3f51" - integrity sha512-6SRoUEtWjyQA96cox9AhKHrNZcY75ol46or0BaXBJVhhraf4wQjdtqmiOV9NZtBEID8qX6e/3DRkB8E4zCnVIw== +"@keplr-wallet/unit@0.12.71": + version "0.12.71" + resolved "https://registry.npmjs.org/@keplr-wallet/unit/-/unit-0.12.71.tgz#b067bf9318166d2a772016e24870a977130049cd" + integrity sha512-Buhq//qAjLvn10o2+b26UdWv8dSnle86wRuF6IkxLHb+B0a3gtLT8CvZ+Nn6WgOqcp+qYd0vhSg8EV+ZW1heuQ== dependencies: - "@keplr-wallet/types" "0.11.58" + "@keplr-wallet/types" "0.12.71" big-integer "^1.6.48" utility-types "^3.10.0" @@ -2531,7 +2767,7 @@ rxjs "^6.6.3" typescript "^4.6.2" -"@keystonehq/sol-keyring@^0.3.0": +"@keystonehq/sol-keyring@^0.3.1": version "0.3.1" resolved "https://registry.npmjs.org/@keystonehq/sol-keyring/-/sol-keyring-0.3.1.tgz#9ed61269bab92601eedb7f1adb9ca3258634dbbc" integrity sha512-RU6I3HQrQ9NpRDP9TwlBIy5DftVcNcyk0NWfhkPy/YanhMcCB0cRPw68iQl1rMnR6n1G2+YrBHMxm6swCW+B4Q== @@ -2543,11 +2779,13 @@ bs58 "^5.0.0" uuid "^8.3.2" -"@ledgerhq/cryptoassets@^9.5.0": - version "9.5.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-9.5.0.tgz#b77ce2b097ec51547a213d8fd9b45211a30d9392" - integrity sha512-xa5GesMmVYz2QlDCjnOgPaUwPzTjUx1tBv2tU8rdk69ep9chyzefPE3e5sO9BgQukcZhFu20oHZ+h7kIgaqALw== +"@ledgerhq/cryptoassets@^11.4.1": + version "11.4.1" + resolved "https://registry.npmjs.org/@ledgerhq/cryptoassets/-/cryptoassets-11.4.1.tgz#57ade3ddff92a8fa027702607b39ba1c06cc8508" + integrity sha512-vgOHC0RxuBjoE2ZNiQScpU8hyXnYqkslw0MIuypHGnjLF48XA6rNdABS1JlMuzIFtQB2/NebUbEJ0FUPbQFHeg== dependencies: + axios "^1.6.0" + bs58check "^2.1.2" invariant "2" "@ledgerhq/devices@6.27.1", "@ledgerhq/devices@^6.27.1": @@ -2570,88 +2808,85 @@ rxjs "6" semver "^7.3.5" -"@ledgerhq/devices@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.0.2.tgz#8086e9be0185f4925fa611d4d71dc9c141b9b089" - integrity sha512-Qnc9hgGae4YNr/4NUU/5l3xGc5fx6t2k1su6ASu4wsV/p49xmaU/iBO6PtFHqb3QCwsrkieXASU932Ac2WTw0g== - dependencies: - "@ledgerhq/errors" "^6.12.5" - "@ledgerhq/logs" "^6.10.1" - rxjs "6" - semver "^7.3.5" - -"@ledgerhq/devices@^8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.1.0.tgz#39b12feabe1c7a99b86667bedf2eafbd125cf217" - integrity sha512-Vsdv84Nwzee0qhObdwVzhkxW1+h2cFoD1AWuU8N1V/2OJKiVS35A1qloSCF0oHapg+KTJvim8tr5rRvlkCYyzQ== +"@ledgerhq/devices@^8.2.1": + version "8.2.1" + resolved "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.2.1.tgz#c59eec50bacd2f962e22c723a74600160d41fbd0" + integrity sha512-l/2I/Xzt7Z32OmGzoc/mUvaZivdn7Id/SO7hBTGpk7PtJTpBRxVAabP4GWEKCayGyOAcvTwoVxM0HMkNVfIzOQ== dependencies: - "@ledgerhq/errors" "^6.16.0" + "@ledgerhq/errors" "^6.16.2" "@ledgerhq/logs" "^6.12.0" rxjs "^7.8.1" semver "^7.3.5" -"@ledgerhq/domain-service@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/domain-service/-/domain-service-1.1.0.tgz#97b00fe01b77688a6f2b04f2ad52f533c1e33595" - integrity sha512-EVWGa3tG/k3qgaHWgesHa9tiRSp1UbCD2obtEsiHK/T/kO3Wf29Chvhn2pfzuFY+Xu4CxPRG63SHLKBRuO+zlw== +"@ledgerhq/domain-service@^1.1.18": + version "1.1.18" + resolved "https://registry.npmjs.org/@ledgerhq/domain-service/-/domain-service-1.1.18.tgz#634d4e82e8b83a26847f7b61eaf425467b1a5366" + integrity sha512-QZUEvNpuQBa7513S4TvYaaLpUvTerJHV6eXDmWnX3fTmmfrGfFrTYhJbVF5KJ79GCaJfo+Y74zNqGqTwVXgrSA== dependencies: - "@ledgerhq/cryptoassets" "^9.5.0" - "@ledgerhq/errors" "^6.12.5" - "@ledgerhq/logs" "^6.10.1" - "@ledgerhq/types-live" "^6.33.0" + "@ledgerhq/errors" "^6.16.2" + "@ledgerhq/logs" "^6.12.0" + "@ledgerhq/types-live" "^6.44.1" axios "^1.3.4" - eip55 "^2.1.0" - react "^17.0.2" - react-dom "^17.0.2" + eip55 "^2.1.1" + react "^18.2.0" + react-dom "^18.2.0" "@ledgerhq/errors@^6.10.0", "@ledgerhq/errors@^6.12.2": version "6.12.2" resolved "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.12.2.tgz#d12143caa49db8ae0c8c6ec6b2fb38f719f85630" integrity sha512-qYTkxlWHVItxPAb9pQewfVoN8nFvvFYzWEyzVRX/NuO/g3JKL5kef5lLuqTtUIFOvFROMLi3EBxU+vbvV0ktow== -"@ledgerhq/errors@^6.12.5": - version "6.12.5" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.12.5.tgz#f112b548ab3c4f21bb7fbe77e6cb62998a050992" - integrity sha512-wQlDyKD2lG4hiFmSPvWfuzhbH8wxWG4ugesM17HdZgxUt8g0SluwaBfFJ7Nx0Ym44VIhbsGMUzyBp0hHyCkVqA== - -"@ledgerhq/errors@^6.16.0": - version "6.16.0" - resolved "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.16.0.tgz#0aaf16bbf649a3b43867746781b2e3adebf7fe3a" - integrity sha512-vnew6lf4jN6E+WI0DFhD4WY0uM8LYL8HCumtUr86hNwvmEfebi7LxxpJGmYfVQD5TgEC7NibYnQ+2q9XWAc02A== - -"@ledgerhq/hw-app-cosmos@^6.29.0": - version "6.29.0" - resolved "https://registry.npmjs.org/@ledgerhq/hw-app-cosmos/-/hw-app-cosmos-6.29.0.tgz#49fe3e2bffbbac6f7c5ee449d15ec1a25518e69e" - integrity sha512-liINySbc57zpLziqNTqTnivp44sjDAH06H52FJGoYRb2v9oi+PaJrPGj/kdv26FYm8LTvRQZcUBdWrRZQ6asRQ== - dependencies: - "@ledgerhq/errors" "^6.16.0" - "@ledgerhq/hw-transport" "^6.30.0" +"@ledgerhq/errors@^6.16.2": + version "6.16.2" + resolved "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.16.2.tgz#cf3939dc92ed0871aa7fdd45e6d13446a1eaeccd" + integrity sha512-jFpohaSW+p1Obp3NDT9QSByEtT3gtBZIjVNu8m25gnrH5zdtfPVlPwH6UiuS50s+2dHQyehV8hF+IfreKDWAZA== + +"@ledgerhq/evm-tools@^1.0.16": + version "1.0.16" + resolved "https://registry.npmjs.org/@ledgerhq/evm-tools/-/evm-tools-1.0.16.tgz#b0a1d59a4871adb728aa65406466f1257e639504" + integrity sha512-51Cx5CaUpJQaV9JLjEAck/5dct6FRn7dyAomKzZ0mwXjdzq4fRdbv2+9VGlLRWzapLdRtKWxX64nA8zzQnbhoA== + dependencies: + "@ledgerhq/cryptoassets" "^11.4.1" + "@ledgerhq/live-env" "^1.0.1" + axios "^1.6.5" + crypto-js "4.2.0" + ethers "5.7.2" + +"@ledgerhq/hw-app-cosmos@^6.29.4": + version "6.29.4" + resolved "https://registry.npmjs.org/@ledgerhq/hw-app-cosmos/-/hw-app-cosmos-6.29.4.tgz#6d5ba45a3433698be50cc117dd4fdd1cd7aeb2c7" + integrity sha512-idqreCj1GKwIfmikiLfxd1OnywXa1k7OALOCuqa1ZOw4YNT6k24ATRqaAxxeL4aW4AanwMS+8Dz6hQEe9JUyEg== + dependencies: + "@ledgerhq/errors" "^6.16.2" + "@ledgerhq/hw-transport" "^6.30.4" bip32-path "^0.4.2" -"@ledgerhq/hw-app-eth@6.33.2": - version "6.33.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-6.33.2.tgz#86bc5de1f8ddd25d3621a4eca0604a287ec4469a" - integrity sha512-vmG/75gHmvxI2c4Jni7W46PnesMUwWjDoas1b0V5HE2OAqJ1LlxASHG+i9lVe5hFAnTRx+OmCb/qf9mya2P3mw== +"@ledgerhq/hw-app-eth@6.35.6": + version "6.35.6" + resolved "https://registry.npmjs.org/@ledgerhq/hw-app-eth/-/hw-app-eth-6.35.6.tgz#97ccdad943d53b9b303736fc165d35fa93bf6b0a" + integrity sha512-ecMY9KTr8ziJ4In0Ve9S+vFCqx1aztFGUMr678krdcBcEx0adohcfG4EKBoeRKOJSVGwp/qkvQMP8Fez4mCL5A== dependencies: "@ethersproject/abi" "^5.5.0" "@ethersproject/rlp" "^5.5.0" - "@ledgerhq/cryptoassets" "^9.5.0" - "@ledgerhq/domain-service" "^1.1.0" - "@ledgerhq/errors" "^6.12.5" - "@ledgerhq/hw-transport" "^6.28.3" - "@ledgerhq/hw-transport-mocker" "^6.27.14" - "@ledgerhq/logs" "^6.10.1" + "@ledgerhq/cryptoassets" "^11.4.1" + "@ledgerhq/domain-service" "^1.1.18" + "@ledgerhq/errors" "^6.16.2" + "@ledgerhq/evm-tools" "^1.0.16" + "@ledgerhq/hw-transport" "^6.30.4" + "@ledgerhq/hw-transport-mocker" "^6.28.4" + "@ledgerhq/logs" "^6.12.0" + "@ledgerhq/types-live" "^6.44.1" axios "^1.3.4" - bignumber.js "^9.1.0" - crypto-js "^4.1.1" + bignumber.js "^9.1.2" -"@ledgerhq/hw-transport-mocker@^6.27.14": - version "6.27.14" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.27.14.tgz#035194d25ac2e7a8e654dacb4bfec7e930f5c6d2" - integrity sha512-wEpI+BX5cqOW/fHqBdawDX/TYo9EAnDx1/LCo9ljnuz8IanomF8oceUe2y/FJWSLUxXoHMTIIbhk3SZjGLmY9A== +"@ledgerhq/hw-transport-mocker@^6.28.4": + version "6.28.4" + resolved "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.28.4.tgz#f52c2d77a8616799799c8f832067cd2ea5ce78e5" + integrity sha512-s4GyN8AdjenO+Y6XsxQyW1bQlbsBwNZJyax4Jz2tf+AbiDC3geblaK3wAg6FTUX0tz5K0mAarEVvM03Qxdxblw== dependencies: - "@ledgerhq/hw-transport" "^6.28.3" - "@ledgerhq/logs" "^6.10.1" + "@ledgerhq/hw-transport" "^6.30.4" + "@ledgerhq/logs" "^6.12.0" + rxjs "^7.8.1" "@ledgerhq/hw-transport-webhid@6.27.1": version "6.27.1" @@ -2663,25 +2898,25 @@ "@ledgerhq/hw-transport" "^6.27.1" "@ledgerhq/logs" "^6.10.0" -"@ledgerhq/hw-transport-webhid@6.27.14": - version "6.27.14" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.27.14.tgz#ce68a591296f77f20b371b99cfe8cd50387a350b" - integrity sha512-oSfGLJE9ztBd5pNoywi6fcSa/LGRlCe06Zre6de/S8hzZ6DIlJG99EBKt3+JYhbYiFjYK79NFJW5TGUKbbP0sQ== +"@ledgerhq/hw-transport-webhid@6.28.4": + version "6.28.4" + resolved "https://registry.npmjs.org/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.28.4.tgz#fa322ce8722317cd689a826d9e31b27bee51db55" + integrity sha512-78lbSIcWp/lby4wlOjDb3YfvD5eCzozs7J12xvdqp2sU17qcGbwDUGyPsNApFUp8Qd5uUFNOy2ffV1w5B5XvFQ== dependencies: - "@ledgerhq/devices" "^8.0.2" - "@ledgerhq/errors" "^6.12.5" - "@ledgerhq/hw-transport" "^6.28.3" - "@ledgerhq/logs" "^6.10.1" + "@ledgerhq/devices" "^8.2.1" + "@ledgerhq/errors" "^6.16.2" + "@ledgerhq/hw-transport" "^6.30.4" + "@ledgerhq/logs" "^6.12.0" -"@ledgerhq/hw-transport-webusb@6.27.14": - version "6.27.14" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-6.27.14.tgz#b32387bfd7039afccfa1ae5fffc6afd6b68a19fb" - integrity sha512-uSpjyiR0FhNXNtXxWqbmatyfCPcjeyADm8E+czuCCM7Wwf0S05AeD+2qLiEa0U1DspBZvz65WgkhPfeSmUsbZA== +"@ledgerhq/hw-transport-webusb@6.28.4": + version "6.28.4" + resolved "https://registry.npmjs.org/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-6.28.4.tgz#bc192bcb1bc6633a13afeaedc84393233037cf9a" + integrity sha512-qJcQXEhVHecOwmFcgqBy/aK4twDTrk1WzjTBmHHHJG1cdcn7zB2d7RwL93cP8dZ+r1OXyLSZPThH7erac9hFQQ== dependencies: - "@ledgerhq/devices" "^8.0.2" - "@ledgerhq/errors" "^6.12.5" - "@ledgerhq/hw-transport" "^6.28.3" - "@ledgerhq/logs" "^6.10.1" + "@ledgerhq/devices" "^8.2.1" + "@ledgerhq/errors" "^6.16.2" + "@ledgerhq/hw-transport" "^6.30.4" + "@ledgerhq/logs" "^6.12.0" "@ledgerhq/hw-transport@6.27.1": version "6.27.1" @@ -2692,13 +2927,14 @@ "@ledgerhq/errors" "^6.10.0" events "^3.3.0" -"@ledgerhq/hw-transport@6.28.3", "@ledgerhq/hw-transport@^6.28.3": - version "6.28.3" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.28.3.tgz#1108ceb8bfb9dc949f6178b17dd1bcb76dba11f0" - integrity sha512-YFPh9n51V4TfPZov7iAUbtez0cyNEVR1+49RG8tYvmsmk8ihvya2rR90U8KO2MnrT2jR4k2rlgQ3IcZJO9dBcw== +"@ledgerhq/hw-transport@6.30.4", "@ledgerhq/hw-transport@^6.30.4": + version "6.30.4" + resolved "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.30.4.tgz#05dee1e9cdec0e430594ecf7f5cf90c13721ad70" + integrity sha512-VBcVd7UG8HDrjWMoZI5rqBDz+PBxLHTIPZOGY/fdMoEUwaBbss0Z3MxuJanMyerlfaLqnBSVuL0blz7rOyagkw== dependencies: - "@ledgerhq/devices" "^8.0.2" - "@ledgerhq/errors" "^6.12.5" + "@ledgerhq/devices" "^8.2.1" + "@ledgerhq/errors" "^6.16.2" + "@ledgerhq/logs" "^6.12.0" events "^3.3.0" "@ledgerhq/hw-transport@^6.27.1": @@ -2710,15 +2946,13 @@ "@ledgerhq/errors" "^6.12.2" events "^3.3.0" -"@ledgerhq/hw-transport@^6.30.0": - version "6.30.0" - resolved "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.30.0.tgz#9c8a8f2c8281fbc4a3db1d1f3ac44a456b38281a" - integrity sha512-wrAwn/wCAaGP2Yuy78cLyqmQNzbuDvUv4gJYF/UO4djvUz0jjvD2w5kxRWxF/W93vyKT+/RplRtFk3CJzD3e3A== +"@ledgerhq/live-env@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@ledgerhq/live-env/-/live-env-1.0.1.tgz#861890b475833e631d616c346e067883b74653b3" + integrity sha512-pfc8n89MoF7TzE/2KO5Y9Ts5oR9/Pjzls/IWwKlL9keaO5+GmubuNcy3FFgeY2m3gbqXeVZK3hk3Fn8yaGZh6Q== dependencies: - "@ledgerhq/devices" "^8.1.0" - "@ledgerhq/errors" "^6.16.0" - "@ledgerhq/logs" "^6.12.0" - events "^3.3.0" + rxjs "^7.8.1" + utility-types "^3.10.0" "@ledgerhq/logs@^6.10.0", "@ledgerhq/logs@^6.10.1": version "6.10.1" @@ -2730,13 +2964,13 @@ resolved "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.12.0.tgz#ad903528bf3687a44da435d7b2479d724d374f5d" integrity sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA== -"@ledgerhq/types-live@^6.33.0": - version "6.33.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/types-live/-/types-live-6.33.0.tgz#676babc4a3b42059937321545d74f26856506379" - integrity sha512-VsiPIC0LNZ4q6DVhPgDBklFXduQmgiZHFOmM1NSKfYWN+vxq+r1SJUF34cViCC4m13SQ8lZvWwburSDssqqODQ== +"@ledgerhq/types-live@^6.44.1": + version "6.45.0" + resolved "https://registry.npmjs.org/@ledgerhq/types-live/-/types-live-6.45.0.tgz#96754bfee3eb1d89f6c768d5fad40422ca9137aa" + integrity sha512-UKcPVtI53wVOGOrcVkHwPMTNo0ajULlxs4dUmmair2al/yBFi4kosKGPw4i2T43J9rbGnKA+KVuS5G4b0dueXA== dependencies: - bignumber.js "^9.1.0" - rxjs "6" + bignumber.js "^9.1.2" + rxjs "^7.8.1" "@lerna/child-process@6.6.1": version "6.6.1" @@ -2853,11 +3087,35 @@ "@metamask/safe-event-emitter" "^2.0.0" through2 "^2.0.3" +"@metamask/rpc-errors@^5.1.1": + version "5.1.1" + resolved "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-5.1.1.tgz#f82732ad0952d34d219eca42699c0c74bee95a9e" + integrity sha512-JjZnDi2y2CfvbohhBl+FOQRzmFlJpybcQlIk37zEX8B96eVSPbH/T8S0p7cSF8IE33IWx6JkD8Ycsd+2TXFxCw== + dependencies: + "@metamask/utils" "^5.0.0" + fast-safe-stringify "^2.0.6" + "@metamask/safe-event-emitter@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== +"@metamask/utils@^5.0.0": + version "5.0.2" + resolved "https://registry.npmjs.org/@metamask/utils/-/utils-5.0.2.tgz#140ba5061d90d9dac0280c19cab101bc18c8857c" + integrity sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g== + dependencies: + "@ethereumjs/tx" "^4.1.2" + "@types/debug" "^4.1.7" + debug "^4.3.4" + semver "^7.3.8" + superstruct "^1.0.3" + +"@mobily/ts-belt@^3.13.1": + version "3.13.1" + resolved "https://registry.npmjs.org/@mobily/ts-belt/-/ts-belt-3.13.1.tgz#8f8ce2a2eca41d88c2ca70c84d0f47d0f7f5cd5f" + integrity sha512-K5KqIhPI/EoCTbA6CGbrenM9s41OouyK8A03fGJJcla/zKucsgLbz8HNbeseoLarRPgyWJsUyCYqFhI7t3Ra9Q== + "@mysten/bcs@0.7.1": version "0.7.1" resolved "https://registry.yarnpkg.com/@mysten/bcs/-/bcs-0.7.1.tgz#e8db25718143e2a15688ea858470970b743f7248" @@ -2894,6 +3152,13 @@ jsbi "^3.1.5" sha.js "^2.4.11" +"@noble/curves@1.3.0", "@noble/curves@^1.1.0", "@noble/curves@^1.2.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + "@noble/curves@^1.0.0", "@noble/curves@~1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.0.0.tgz#e40be8c7daf088aaf291887cbc73f43464a92932" @@ -2921,6 +3186,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== +"@noble/hashes@1.3.3", "@noble/hashes@^1.2.0", "@noble/hashes@^1.3.2", "@noble/hashes@^1.3.3", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + "@noble/hashes@^1", "@noble/hashes@^1.0.0", "@noble/hashes@^1.1.2", "@noble/hashes@~1.1.1": version "1.1.5" resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz#1a0377f3b9020efe2fae03290bd2a12140c95c11" @@ -3360,6 +3630,75 @@ dependencies: "@octokit/openapi-types" "^17.1.0" +"@parcel/watcher-android-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz#c2c19a3c442313ff007d2d7a9c2c1dd3e1c9ca84" + integrity sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg== + +"@parcel/watcher-darwin-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz#c817c7a3b4f3a79c1535bfe54a1c2818d9ffdc34" + integrity sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA== + +"@parcel/watcher-darwin-x64@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz#1a3f69d9323eae4f1c61a5f480a59c478d2cb020" + integrity sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg== + +"@parcel/watcher-freebsd-x64@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz#0d67fef1609f90ba6a8a662bc76a55fc93706fc8" + integrity sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w== + +"@parcel/watcher-linux-arm-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz#ce5b340da5829b8e546bd00f752ae5292e1c702d" + integrity sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA== + +"@parcel/watcher-linux-arm64-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz#6d7c00dde6d40608f9554e73998db11b2b1ff7c7" + integrity sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA== + +"@parcel/watcher-linux-arm64-musl@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz#bd39bc71015f08a4a31a47cd89c236b9d6a7f635" + integrity sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA== + +"@parcel/watcher-linux-x64-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz#0ce29966b082fb6cdd3de44f2f74057eef2c9e39" + integrity sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg== + +"@parcel/watcher-linux-x64-musl@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz#d2ebbf60e407170bb647cd6e447f4f2bab19ad16" + integrity sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ== + +"@parcel/watcher-wasm@^2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz#c4353e4fdb96ee14389856f7f6f6d21b7dcef9e1" + integrity sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA== + dependencies: + is-glob "^4.0.3" + micromatch "^4.0.5" + napi-wasm "^1.1.0" + +"@parcel/watcher-win32-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz#eb4deef37e80f0b5e2f215dd6d7a6d40a85f8adc" + integrity sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg== + +"@parcel/watcher-win32-ia32@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz#94fbd4b497be39fd5c8c71ba05436927842c9df7" + integrity sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw== + +"@parcel/watcher-win32-x64@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz#4bf920912f67cae5f2d264f58df81abfea68dadf" + integrity sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A== + "@parcel/watcher@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" @@ -3368,20 +3707,67 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@particle-network/auth@^0.5.5": - version "0.5.6" - resolved "https://registry.npmjs.org/@particle-network/auth/-/auth-0.5.6.tgz#058e00980511fdf72189b6d4a7576e67934a008a" - integrity sha512-QhRr76BamasIatyWc68Whk/JpjomKUFbxT4KoHxrSWD8lmyWTOP5T8Jo8hQliyjtO2Iuzv9KLpuJ55w7mgaC/A== +"@parcel/watcher@^2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz#a50275151a1bb110879c6123589dba90c19f1bf8" + integrity sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.4.1" + "@parcel/watcher-darwin-arm64" "2.4.1" + "@parcel/watcher-darwin-x64" "2.4.1" + "@parcel/watcher-freebsd-x64" "2.4.1" + "@parcel/watcher-linux-arm-glibc" "2.4.1" + "@parcel/watcher-linux-arm64-glibc" "2.4.1" + "@parcel/watcher-linux-arm64-musl" "2.4.1" + "@parcel/watcher-linux-x64-glibc" "2.4.1" + "@parcel/watcher-linux-x64-musl" "2.4.1" + "@parcel/watcher-win32-arm64" "2.4.1" + "@parcel/watcher-win32-ia32" "2.4.1" + "@parcel/watcher-win32-x64" "2.4.1" + +"@particle-network/analytics@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@particle-network/analytics/-/analytics-1.0.1.tgz#b3657cf7aaea57f90a7ac2c03f72b8786c298012" + integrity sha512-ApcSMo1BXQlywO+lvOpG3Y2/SVGNCpJzXO/4e3zHzE/9j+uMehsilDzPwWQwLhrCXZYwVm7mmE71Gs36yobiNw== + dependencies: + hash.js "^1.1.7" + uuidv4 "^6.2.13" + +"@particle-network/auth@^1.3.1": + version "1.3.1" + resolved "https://registry.npmjs.org/@particle-network/auth/-/auth-1.3.1.tgz#f9ee51749e3b10e700e0d8c51a8c0769ab0b9851" + integrity sha512-hu6ie5RjjN4X+6y/vfjyCsSX3pQuS8k8ZoMb61QWwhWsnZXKzpBUVeAEk55aGfxxXY+KfBkSmZosyaZHGoHnfw== + dependencies: + "@particle-network/analytics" "^1.0.1" + "@particle-network/chains" "*" + "@particle-network/crypto" "^1.0.1" + buffer "^6.0.3" + draggabilly "^3.0.0" + +"@particle-network/chains@*": + version "1.3.21" + resolved "https://registry.npmjs.org/@particle-network/chains/-/chains-1.3.21.tgz#82d2b098e165fc198e6e6e3e4c8b2154235e3aa1" + integrity sha512-tuUVuOPf+el+kDlHLFMyDy4IkoGjk+P3QvVrxT7WnmEma1NgWTE7RaNsniwqn6SYkAwAxksL/D9aADUXZxqPmw== + +"@particle-network/crypto@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@particle-network/crypto/-/crypto-1.0.1.tgz#26afef622a3eb906dca5c810fef8001ffee29029" + integrity sha512-GgvHmHcFiNkCLZdcJOgctSbgvs251yp+EAdUydOE3gSoIxN6KEr/Snu9DebENhd/nFb7FDk5ap0Hg49P7pj1fg== dependencies: crypto-js "^4.1.1" - uuid "^8.3.2" + uuidv4 "^6.2.13" -"@particle-network/solana-wallet@^0.5.0": - version "0.5.6" - resolved "https://registry.npmjs.org/@particle-network/solana-wallet/-/solana-wallet-0.5.6.tgz#701d431820c54c8c592999de29928670a26d5978" - integrity sha512-Ad0hwJsWRCbptp+mmLFsbrERDQbW+QhFQOmWRT8+6gGrY6qNTApwI9+jlpkxOzEI9rvSqFD1qKKMlqy1n+fJNA== +"@particle-network/solana-wallet@^1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@particle-network/solana-wallet/-/solana-wallet-1.3.2.tgz#9966209ccda60abb0114bf0447a524c781536b76" + integrity sha512-KviKVP87OtWq813y8IumM3rIQMNkTjHBaQmCUbTWGebz3csFOv54JIoy1r+3J3NnA+mBxBdZeRedZ5g+07v75w== dependencies: - "@particle-network/auth" "^0.5.5" + "@particle-network/auth" "^1.3.1" "@pedrouid/environment@^1.0.1": version "1.0.1" @@ -3414,7 +3800,7 @@ superstruct "^0.15.4" toml "^3.0.0" -"@project-serum/borsh@0.2.5", "@project-serum/borsh@^0.2.5": +"@project-serum/borsh@^0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== @@ -3422,14 +3808,6 @@ bn.js "^5.1.2" buffer-layout "^1.2.0" -"@project-serum/sol-wallet-adapter@0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.0.tgz#e1fa5508bf13110429bf26e10b818182015f2161" - integrity sha512-ed7wZwlDqjF88VCq7eHVO8njHqdUkBxBL8WEVOnB47ooLO4btOJt6GBdkKpKqKX86c86LiEROJclcdW8e7kIjg== - dependencies: - bs58 "^4.0.1" - eventemitter3 "^4.0.4" - "@project-serum/sol-wallet-adapter@^0.2.6": version "0.2.6" resolved "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz#b4cd25a566294354427c97c26d716112b91a0107" @@ -3491,11 +3869,21 @@ resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== +"@react-native/normalize-color@^2.0.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz#939b87a9849e81687d3640c5efa2a486ac266f91" + integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== + "@scure/base@~1.1.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== +"@scure/base@~1.1.4": + version "1.1.5" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" + integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== + "@scure/bip32@1.1.5": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" @@ -3505,6 +3893,15 @@ "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + "@scure/bip32@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.0.tgz#6c8d980ef3f290987736acd0ee2e0f0d50068d87" @@ -3530,6 +3927,14 @@ "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + "@scure/bip39@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.0.tgz#a207e2ef96de354de7d0002292ba1503538fc77b" @@ -3548,6 +3953,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sinclair/typebox@^0.31.28": + version "0.31.28" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.31.28.tgz#b68831e7bc7d09daac26968ea32f42bedc968ede" + integrity sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ== + "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -3577,13 +3987,61 @@ bigint-buffer "^1.1.5" bignumber.js "^9.0.1" -"@solana/buffer-layout@^4.0.0": +"@solana/buffer-layout@^4.0.0", "@solana/buffer-layout@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== dependencies: buffer "~6.0.3" +"@solana/codecs-core@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-experimental.8618508.tgz#4f6709dd50e671267f3bea7d09209bc6471b7ad0" + integrity sha512-JCz7mKjVKtfZxkuDtwMAUgA7YvJcA2BwpZaA1NOLcted4OMC4Prwa3DUe3f3181ixPYaRyptbF0Ikq2MbDkYEA== + +"@solana/codecs-data-structures@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-experimental.8618508.tgz#c16a704ac0f743a2e0bf73ada42d830b3402d848" + integrity sha512-sLpjL9sqzaDdkloBPV61Rht1tgaKq98BCtIKRuyscIrmVPu3wu0Bavk2n/QekmUzaTsj7K1pVSniM0YqCdnEBw== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + "@solana/codecs-numbers" "2.0.0-experimental.8618508" + +"@solana/codecs-numbers@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-experimental.8618508.tgz#d84f9ed0521b22e19125eefc7d51e217fcaeb3e4" + integrity sha512-EXQKfzFr3CkKKNzKSZPOOOzchXsFe90TVONWsSnVkonO9z+nGKALE0/L9uBmIFGgdzhhU9QQVFvxBMclIDJo2Q== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + +"@solana/codecs-strings@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-experimental.8618508.tgz#72457b884d9be80b59b263bcce73892b081e9402" + integrity sha512-b2yhinr1+oe+JDmnnsV0641KQqqDG8AQ16Z/x7GVWO+AWHMpRlHWVXOq8U1yhPMA4VXxl7i+D+C6ql0VGFp0GA== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + "@solana/codecs-numbers" "2.0.0-experimental.8618508" + +"@solana/options@2.0.0-experimental.8618508": + version "2.0.0-experimental.8618508" + resolved "https://registry.npmjs.org/@solana/options/-/options-2.0.0-experimental.8618508.tgz#95385340e85f9e8a81b2bfba089404a61c8e9520" + integrity sha512-fy/nIRAMC3QHvnKi63KEd86Xr/zFBVxNW4nEpVEU2OT0gCEKwHY4Z55YHf7XujhyuM3PNpiBKg/YYw5QlRU4vg== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + "@solana/codecs-numbers" "2.0.0-experimental.8618508" + +"@solana/spl-token-metadata@^0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.2.tgz#876e13432bd2960bd3cac16b9b0af63e69e37719" + integrity sha512-hJYnAJNkDrtkE2Q41YZhCpeOGU/0JgRFXbtrtOuGGeKc3pkEUHB9DDoxZAxx+XRno13GozUleyBi0qypz4c3bw== + dependencies: + "@solana/codecs-core" "2.0.0-experimental.8618508" + "@solana/codecs-data-structures" "2.0.0-experimental.8618508" + "@solana/codecs-numbers" "2.0.0-experimental.8618508" + "@solana/codecs-strings" "2.0.0-experimental.8618508" + "@solana/options" "2.0.0-experimental.8618508" + "@solana/spl-type-length-value" "0.1.0" + "@solana/spl-token@^0.3.5": version "0.3.7" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.7.tgz#6f027f9ad8e841f792c32e50920d9d2e714fc8da" @@ -3593,410 +4051,383 @@ "@solana/buffer-layout-utils" "^0.2.0" buffer "^6.0.3" -"@solana/spl-token@^0.3.6": - version "0.3.6" - resolved "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.6.tgz#35473ad2ed71fe91e5754a2ac72901e1b8b26a42" - integrity sha512-P9pTXjDIRvVbjr3J0mCnSamYqLnICeds7IoH1/Ro2R9OBuOHdp5pqKZoscfZ3UYrgnCWUc1bc9M2m/YPHjw+1g== +"@solana/spl-token@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.0.tgz#c057e82afd2b9ea59019525f3fbf6c9a20349a54" + integrity sha512-jjBIBG9IsclqQVl5Y82npGE6utdCh7Z9VFcF5qgJa5EUq2XgspW3Dt1wujWjH/vQDRnkp9zGO+BqQU/HhX/3wg== dependencies: "@solana/buffer-layout" "^4.0.0" "@solana/buffer-layout-utils" "^0.2.0" + "@solana/spl-token-metadata" "^0.1.2" buffer "^6.0.3" -"@solana/wallet-adapter-alpha@^0.1.7": - version "0.1.7" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-alpha/-/wallet-adapter-alpha-0.1.7.tgz#40fd4cd918575a7d2a5baa7aafddaaed369eb572" - integrity sha512-Eu/De+bhfPBiADLdpmAfJu7yKezEzDYnKjCVWtJW3oo9WbAO/Xd30Pg4bXbxvKMXdrYWRFZx3uQQruojnL+a+A== +"@solana/spl-type-length-value@0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz#b5930cf6c6d8f50c7ff2a70463728a4637a2f26b" + integrity sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + buffer "^6.0.3" -"@solana/wallet-adapter-avana@^0.1.10": +"@solana/wallet-adapter-alpha@^0.1.10": version "0.1.10" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-avana/-/wallet-adapter-avana-0.1.10.tgz#728ad60e60c6ef18964b6c237fe72fb2ea158b95" - integrity sha512-s+McAL96/9cfGh5/z1hjCrCpsQ971PJmpxiXhwPdOwnkPT/40wIkfSY7RKZjiKlENoXfpAcj64K1d8xu+lUCEw== + resolved "https://registry.npmjs.org/@solana/wallet-adapter-alpha/-/wallet-adapter-alpha-0.1.10.tgz#497ac17634dac4de17eba643768df9b30a13129a" + integrity sha512-TOUhDyUNSmp8bqeUueN0LPmurTAEmYm3PTrPGSnsq6JFeTzwTv5xZRygtCvULpBzCPZu/7AfIqh/TSoz4P92aw== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-backpack@^0.1.11": - version "0.1.11" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-backpack/-/wallet-adapter-backpack-0.1.11.tgz#b8bde3d1b10744a88e465c62e165fdce541656e3" - integrity sha512-acICFuFYzAQ5gBesHF0sykfFZ8dZurBwYuIXbF4kYDYu6tDpZeUG0eRY+7fxcNDR0J3ezPkxaNgyoibhIN6y5A== +"@solana/wallet-adapter-avana@^0.1.13": + version "0.1.13" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-avana/-/wallet-adapter-avana-0.1.13.tgz#dfa5385edcc24557fa6962ade55915a696abc74a" + integrity sha512-dvKDzaFo9KgfNh0ohI6qOBTnOU2f6cHKPiDxdtLfXVubdic1mUYzuA2PcrBZQuRc5EBcvHbGCpr3Ds90cGB+xQ== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-base@^0.9.17", "@solana/wallet-adapter-base@^0.9.18", "@solana/wallet-adapter-base@^0.9.20": +"@solana/wallet-adapter-base@^0.9.17": version "0.9.20" resolved "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.20.tgz#42a3a2f42db9f6a41e36a132ee5a06a0bd3784f0" integrity sha512-ZvnhJ4EJk61oyuBH/a9tMpUfeWQ3g3Cc0Nzl1NzE4SdqEhiNoEW8HXDig9HMemZ9bIEUxIpPWxp+SwjVl0u+rg== dependencies: eventemitter3 "^4.0.0" -"@solana/wallet-adapter-bitkeep@^0.3.16": - version "0.3.16" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-bitkeep/-/wallet-adapter-bitkeep-0.3.16.tgz#94d4bb160f552649b60cc7dba34abd761395142d" - integrity sha512-I79ZGmxVZX70K+5Nscukl0Qc9LRNvrki1KHA3dl17zl8xwQKoVrMksS8Y2WK1OGrrIRZLPhRXxYMgcX2E8TYIA== +"@solana/wallet-adapter-base@^0.9.23": + version "0.9.23" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.23.tgz#3b17c28afd44e173f44f658bf9700fd637e12a11" + integrity sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-standard-features" "^1.1.0" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + eventemitter3 "^4.0.7" -"@solana/wallet-adapter-bitpie@^0.5.15": - version "0.5.15" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-bitpie/-/wallet-adapter-bitpie-0.5.15.tgz#933cd2e5b13e893d065ef3cac3053d0121624fe4" - integrity sha512-7qcuz0eiePAkeAiOF5hGLeRLqGwJZ6sdKk5+IuEQ92YQulurhWg8uQPO5sJpRNS2Bwf1sp1dh05eoCx5KvGLqw== +"@solana/wallet-adapter-bitkeep@^0.3.20": + version "0.3.20" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-bitkeep/-/wallet-adapter-bitkeep-0.3.20.tgz#96f59932238d6dad3af3d983cee82ca6665236e8" + integrity sha512-v6Jd13CZOPNIAX0nFlopAJ3HDvC+MhiB4sde3C8sSnNbjVi9h1WLHBmaUfgqU6mAyhDjWUZjKt4zYlMhLdp/bg== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-blocto@^0.5.19": - version "0.5.19" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-blocto/-/wallet-adapter-blocto-0.5.19.tgz#c3106fac290c5d309286210ec157fad7e4c7adef" - integrity sha512-UgY8Kbsv29DoDS4nngCwCYSLQbpb7bIvmT4bMy3muOukzgMP97dV18FoABFXGV4te6/fFrDwSisJffO1WrahXA== +"@solana/wallet-adapter-bitpie@^0.5.18": + version "0.5.18" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-bitpie/-/wallet-adapter-bitpie-0.5.18.tgz#c77e6d3a43811ed133cf9a92e344aed8ddef15f5" + integrity sha512-gEflEwAyUbfmU4NEmsoDYt1JNFyoBQGm99BBvrvXdJsDdExvT6PwHNi5YlQKp1A4EAqjqaEj+nQzr6ygUpmCBQ== dependencies: - "@blocto/sdk" "^0.2.21" - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-brave@^0.1.14": - version "0.1.14" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-brave/-/wallet-adapter-brave-0.1.14.tgz#24484f8a40036556bdced56005bc6e4b33331b86" - integrity sha512-dKfh8ySglr5CpzOilciUR3FUhnzed/9K3Nwo6w7HV3GK24Z1q3CpPRDlbw8OoB8Pw+4GGcMCmFlDN4PMhZcyWw== +"@solana/wallet-adapter-clover@^0.4.19": + version "0.4.19" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-clover/-/wallet-adapter-clover-0.4.19.tgz#76e63d52d5596f34eb48c1a216f81e9600fa320b" + integrity sha512-48PoaPte/SRYeU25bvOSmSEqoKCcyOBH9CXebsDcXkrgf+g46KRlAlsY605q1ebzr+iaFEONtTdxW8LthvJtbA== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-censo@^0.1.1": - version "0.1.1" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-censo/-/wallet-adapter-censo-0.1.1.tgz#87bbd902427d98f6bd9fb470b6f5dbec4fdfe799" - integrity sha512-gPY3UauwBE0MRhhayrvANaHxMhSj5/IqHBabxgXqXXA9SRwcdxaPEdHWclB91noocgHZqZI0T9+iF211NXrQ2g== +"@solana/wallet-adapter-coin98@^0.5.20": + version "0.5.20" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-coin98/-/wallet-adapter-coin98-0.5.20.tgz#7ad234b4715cadda80bc09e2ccd9e960ceba1e77" + integrity sha512-gnDFNsFq4IeB6jtQj6fZOUthuuQpvtomCkwkwsOWARNhl8nhnsfbuNs3r4XaT4Q79my07ogNQUBPGKY/8CqjiA== dependencies: - "@censo-custody/solana-wallet-adapter" "^0.1.0" - "@solana/wallet-adapter-base" "^0.9.20" - -"@solana/wallet-adapter-clover@^0.4.16": - version "0.4.16" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-clover/-/wallet-adapter-clover-0.4.16.tgz#3ef0caa76fdb899f2887a9a1722d88c038cd45f6" - integrity sha512-5YVZVetfQedbRUCEpzqfG/HiOqn/7cFSyWI319BIvPPBc2YAK5Wtv/ILeJOnj3MjBp8B/WlASORhxyDgQJQrMg== - dependencies: - "@solana/wallet-adapter-base" "^0.9.20" - -"@solana/wallet-adapter-coin98@^0.5.17": - version "0.5.17" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-coin98/-/wallet-adapter-coin98-0.5.17.tgz#2b118a83bbf1be46928777389a61b0d3aeb2fbc7" - integrity sha512-CRGt2Aza9tt59vgtKscJbNSoT3fRYAxsj5QZk0Tb64THMP5o+t93LUT09cCYoOt15MlKWW5pr93Yx+J0Ok0dOg== - dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" bs58 "^4.0.1" -"@solana/wallet-adapter-coinbase@^0.1.15": - version "0.1.15" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-coinbase/-/wallet-adapter-coinbase-0.1.15.tgz#2190219e9245bb166ad324ba64ea075993b6d103" - integrity sha512-Rcz0TqXKx0yvTrbWp9647yKpkFugNp48PQ1kpnMIsH0amcmHMLm2tE6qJ/B36EXY/7gmlW/tdnV7HO/ToS0UXA== +"@solana/wallet-adapter-coinbase@^0.1.19": + version "0.1.19" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-coinbase/-/wallet-adapter-coinbase-0.1.19.tgz#b750fa739c67390e0918bd7ccc21f39fd602d462" + integrity sha512-hcf9ieAbQxD2g8/5glXVAt67w+3iixpjMMZC7lT7Wa8SJZsq6lmISC9AtZctDEQcWSVV0IkedZp3bg6bp22kng== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-coinhub@^0.3.15": - version "0.3.15" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-coinhub/-/wallet-adapter-coinhub-0.3.15.tgz#595687a647a7e2ef7c5091c300695f34f3790f7e" - integrity sha512-ReOUkQsoDTCG97BHuF38nHOFwab50yRvLlft5qec2dv7AQ5Y5RfcIAEe66D2z2mCc1yHAUwfzVNsMXaFsswjfA== +"@solana/wallet-adapter-coinhub@^0.3.18": + version "0.3.18" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-coinhub/-/wallet-adapter-coinhub-0.3.18.tgz#3f23b32a88328ae0ba66fc25b15d65e4b13979eb" + integrity sha512-yeJo+cHVlUBlH16Q+knnFDJrH9wzEB3zvSq57PXfqvlWSjySm4PkkK7srRoAwfNOxL/eArSJWfBwRprsymttJQ== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-exodus@^0.1.15": - version "0.1.15" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-exodus/-/wallet-adapter-exodus-0.1.15.tgz#73e5c40dc63c8a19d2a90148c26b69f638d7b096" - integrity sha512-dfTRlw7FeF2lYOE6v9Ubzs6A++/EN96nYNg5AxcEycidQ/kEJBWp7LeKrvXGj2+Ivl+uia5SCF7DfHdm5BQXdg== - dependencies: - "@solana/wallet-adapter-base" "^0.9.20" - -"@solana/wallet-adapter-fractal@^0.1.5": - version "0.1.5" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-fractal/-/wallet-adapter-fractal-0.1.5.tgz#7c5f7f470e30b618a73d6002b4a2e6a1518d81e9" - integrity sha512-JkkhLoLP5gnfS/MiJVVsE3VTvaCJFm3m6nD7Umy+Imj69P4N/60eRfwjFKe/hf8eLw6LEuYYkAQp1FFMQCOFoA== +"@solana/wallet-adapter-fractal@^0.1.8": + version "0.1.8" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-fractal/-/wallet-adapter-fractal-0.1.8.tgz#27c6a33c6d56ffb74bab157f2cc6cde7d03d1e54" + integrity sha512-lV/rXOMQSR7sBIEDx8g0jwvXP/fT2Vw/47CSj9BaVYC5LGphhuoYbcI4ko1y0Zv+dJu8JVRTeKbnaiRBjht5DA== dependencies: "@fractalwagmi/solana-wallet-adapter" "^0.1.1" - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-glow@^0.1.15": +"@solana/wallet-adapter-huobi@^0.1.15": version "0.1.15" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-glow/-/wallet-adapter-glow-0.1.15.tgz#e8bd41fb88d348daf4087e44f46a94c293f54830" - integrity sha512-25xsdUntZQFsboVLxYFMer3ujXshHfOkvpAA6a+A9m7uNlqT6ejHqT75qqluAkxq98DzaZ8tEbFtlU7hfFgdBQ== - dependencies: - "@solana/wallet-adapter-base" "^0.9.20" - -"@solana/wallet-adapter-huobi@^0.1.12": - version "0.1.12" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-huobi/-/wallet-adapter-huobi-0.1.12.tgz#287cd96e57a5a9e467f6e431eb9b2334b8f718aa" - integrity sha512-YF/AJfkm76nk0OTLM3iNdiIdk2nZzWW/354XQB3om+p+m7jN9CXY9VG38Ov36OmF9s+KEGdsE1ng8AU8cBiGMg== + resolved "https://registry.npmjs.org/@solana/wallet-adapter-huobi/-/wallet-adapter-huobi-0.1.15.tgz#a9e7eaf26fbef743f0b47572ddc46e92e6a62f44" + integrity sha512-VKwlK0fE7v97NEWwP86iBY/xgnB3fQJv2/RYaw8ODAcfJqVQZAV6EhDR8fo6++jdS1KkcWc2GcHdBMrqPli3yQ== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-hyperpay@^0.1.11": - version "0.1.11" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-hyperpay/-/wallet-adapter-hyperpay-0.1.11.tgz#6a228f40dbf269b3e069c2d5d81ae2f474c60d8c" - integrity sha512-22mHfxgDjMbKZO932Cz267mre6Y8/x/x8RqLb6YGTKr/JLiLqWcC9lqC1CkhHW37X3p5s+RFDG44L7Yhg+pmBw== +"@solana/wallet-adapter-hyperpay@^0.1.14": + version "0.1.14" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-hyperpay/-/wallet-adapter-hyperpay-0.1.14.tgz#1dcf15366165cc4e742346eb42b353c8c67f44f4" + integrity sha512-K0qMVpPHbeIVAvhwnn+2GR8jjBe/a5EP514TL/10SQQ8vTLd7ggNWZdTRCjUkHRlsbTOK7yYWAOHu3gx7429rw== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-keystone@^0.1.9": - version "0.1.9" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-keystone/-/wallet-adapter-keystone-0.1.9.tgz#07d7fdc2ccfb5700ddcd583633d0a2a7a56c3c71" - integrity sha512-EoTLhgyNCqe3W2RoccIxRBf1q1BWH0WI40zzy5OYqxeOpPiWlCAIbLKx6F+TeXrIzrJvYLKfyYI0E27bwaMyOw== +"@solana/wallet-adapter-keystone@^0.1.15": + version "0.1.15" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-keystone/-/wallet-adapter-keystone-0.1.15.tgz#baff234defdb932347451bb413f09e93433c9ba6" + integrity sha512-2A31/vuDRAfASOEyWvJ2YjtwCQohwim3/K+KzhPfvG20C4wr6agDbMXi1T2lDWwrd13kyP+dIgOzPfuLn09tWw== dependencies: - "@keystonehq/sol-keyring" "^0.3.0" - "@solana/wallet-adapter-base" "^0.9.20" + "@keystonehq/sol-keyring" "^0.3.1" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-krystal@^0.1.9": - version "0.1.9" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-krystal/-/wallet-adapter-krystal-0.1.9.tgz#6f2b7990bdf1871f373044c397925754be0fdb7c" - integrity sha512-Cgfh8ixgmwcnQE0L9yeNow6KWbG2/VIcQRbldRDqhg3jzMbhNjjoEJQ0wNh0ypllnM75Dgvb4y5+q+ZFzCpp3g== +"@solana/wallet-adapter-krystal@^0.1.12": + version "0.1.12" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-krystal/-/wallet-adapter-krystal-0.1.12.tgz#bcb6cdf6a553dde575042353fdd155a890478fdd" + integrity sha512-umQV9cbLZcqJFkcjpdOgPvTeDvUjcivRSzWgbx27drmeQ9bi4w9bYH5XkFmbj9iD98q+fjrYQUOK772IHZqrkQ== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-ledger@^0.9.22": - version "0.9.22" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-ledger/-/wallet-adapter-ledger-0.9.22.tgz#e3d4428f2669b5a8dcea074f57b99d8a856ed646" - integrity sha512-Fjm51PfB/vKMsn5FNeTc+So+BTOVSbRIIOZAnJ/vlp5OZRUNuffDQijVprl+91ZCaeyVitikjKrpP1IjB7paOw== +"@solana/wallet-adapter-ledger@^0.9.25": + version "0.9.25" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-ledger/-/wallet-adapter-ledger-0.9.25.tgz#c9243b47d94469788e8090fbe8a136867e944bd9" + integrity sha512-59yD3aveLwlzXqk4zBCaPLobeqAhmtMxPizfUBOjzwRKyepi1Nnnt9AC9Af3JrweU2x4qySRxAaZfU/iNqJ3rQ== dependencies: "@ledgerhq/devices" "6.27.1" "@ledgerhq/hw-transport" "6.27.1" "@ledgerhq/hw-transport-webhid" "6.27.1" - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" buffer "^6.0.3" -"@solana/wallet-adapter-magiceden@^0.1.10": - version "0.1.10" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-magiceden/-/wallet-adapter-magiceden-0.1.10.tgz#1f5d46da58d08e5e4920b64b5e0542aa13090c49" - integrity sha512-UUo8YK+nkZlILvxSEWQEjmyBPJmeIhNc/TTIR+pbpBipeSGPiHiuKOkPQbYTZYwMDsHuFpoCQgXhBAzyZiTwrw== - dependencies: - "@solana/wallet-adapter-base" "^0.9.20" - -"@solana/wallet-adapter-mathwallet@^0.9.15": - version "0.9.15" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-mathwallet/-/wallet-adapter-mathwallet-0.9.15.tgz#e2be52c7ea48f0b00dd031619da9f9f3ecf59c07" - integrity sha512-xac6zbXwTkabP+YK0R8REoDOb+DVWyd2B2CJ7Y82eSJdEbpbXB0qn/5B/xS5jikN1kYdJjgKHjnlC2blMD8M0Q== +"@solana/wallet-adapter-mathwallet@^0.9.18": + version "0.9.18" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-mathwallet/-/wallet-adapter-mathwallet-0.9.18.tgz#23172fef715a7dc8b600887c5d0fb996eb6c6cf0" + integrity sha512-sleBX+wB8Wahu2lLBCWihkFtnl64DMJgla/kgsf75PCNmNA93+WLA4gYOK+fFKeBkU12a/Hp5oZKEQsQGFPSOA== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-neko@^0.2.9": - version "0.2.9" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-neko/-/wallet-adapter-neko-0.2.9.tgz#52d01a990418ad483376ad69f2f98babd552767a" - integrity sha512-xY7MMuIwE18G68mjOLPYvZb3DWdVW6MOX7LUZLblOtan0BPZ9aa6CBToneww5JhAlM134jJGqihLqCJWU6IHnA== +"@solana/wallet-adapter-neko@^0.2.12": + version "0.2.12" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-neko/-/wallet-adapter-neko-0.2.12.tgz#aeacd2ca856692fd41e1c5c86bc986349df42db1" + integrity sha512-ei1QoQZhiYMuH/qm3bnXlueT0jQmH4tZfQvEwudFB8+a0fLtSA8lZU+CYI1jd1YLDjkUEIiXV6R/u32nlCuYDA== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-nightly@^0.1.12": - version "0.1.12" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-nightly/-/wallet-adapter-nightly-0.1.12.tgz#bdba0d60215487bca6a51a1571dee2ccbaa7df81" - integrity sha512-UuKMcZKzTmKJflBiVyoRPN4QD2qjxpVv5QZBWKgp3TdbAkWOTlOOlyqg0LueEv1Q5S2hBgy8p1D7fVXN4mpaXw== +"@solana/wallet-adapter-nightly@^0.1.16": + version "0.1.16" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-nightly/-/wallet-adapter-nightly-0.1.16.tgz#51be8f39d8ccac609c59c96ea1f5df95d71274ca" + integrity sha512-JaPzT8R4HHUqGn/QdElx9iRW98h0NaANBt0j3CZZYWlqsdG0f8fFfy2xofILA+qnDL6NaRI9AzQ4NcQGuVZsVQ== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-nufi@^0.1.13": - version "0.1.13" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-nufi/-/wallet-adapter-nufi-0.1.13.tgz#bcc6a0e0f6422273deac9737f7cafc03e9bdc9a5" - integrity sha512-4CtyFlMweZJVgJ/u7FWccKJDvzEzoYtMoGUbAnXWNJxi9FfnhdLG98SYPTGrc2t9zx5b7fxZvJdxxSSPEFKC1g== +"@solana/wallet-adapter-nufi@^0.1.17": + version "0.1.17" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-nufi/-/wallet-adapter-nufi-0.1.17.tgz#131a02453905aafdecaef12d251b0b0aaab08a44" + integrity sha512-ggTZKvYPJS3m/9hsMaGSH0F8kqumPqP0WdY7WNihWR6O4Pr401kDBdgXPXNSGorIahdPrRBzp5UrahnrlodvTQ== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-onto@^0.1.4": - version "0.1.4" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-onto/-/wallet-adapter-onto-0.1.4.tgz#5d8afd0e0c50f28a56b57d99c68050ab87e7b9fd" - integrity sha512-wbLRihJtU8PzfRTjzYIBSRIaMR5bam+qxmeRrjSJm7SOHaBUCvIF93MwhcdO6ShEIRoFYocx79dB7aE9bhrQBw== +"@solana/wallet-adapter-onto@^0.1.7": + version "0.1.7" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-onto/-/wallet-adapter-onto-0.1.7.tgz#f1a9b0aa8205f7bc7c552139ff9a7699e9bf753d" + integrity sha512-WS4LY0Z0J+NcyEkjdjkD11uKURkRQ/RHMYSFE59U+MuBHggEpXJFZuJzUE9SZbG1ltlLTh13hS5ZuiEz7F+faA== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-particle@^0.1.7": - version "0.1.7" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-particle/-/wallet-adapter-particle-0.1.7.tgz#4fe7e6867abde41681acc1a556696f65b7386fa6" - integrity sha512-GK7h3yIY80tf94E3QOpuvhUOyNBkUKTEzU7DzPPuYWIqo1PPqvPunET1zso8H3KRJkwCuxyWFqVx4fB5f/+H4A== +"@solana/wallet-adapter-particle@^0.1.12": + version "0.1.12" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-particle/-/wallet-adapter-particle-0.1.12.tgz#666755a156ad2ce24baa48b92bc1b1c39447a57c" + integrity sha512-6tD5pbyuyCRDswDVD5LCakVQ/vIwjO2lXlVvJFDLdhGa6MinbjTHigLmE58nkTgKATRScyS8FuCCzGmYcXGbow== dependencies: - "@particle-network/solana-wallet" "^0.5.0" - "@solana/wallet-adapter-base" "^0.9.20" + "@particle-network/solana-wallet" "^1.3.2" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-phantom@^0.9.19": - version "0.9.19" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-phantom/-/wallet-adapter-phantom-0.9.19.tgz#21564b4a891ed070d66cb0c75f24e0f03030a203" - integrity sha512-AMrS/iGDuSQmhRhEuZbJZ3gmooGqkY5Fck3aCVtZOTF7YgXnIJfwBRjgmHIVRCZVbyTDbMzlvDcHx85GN3MZsg== +"@solana/wallet-adapter-phantom@^0.9.24": + version "0.9.24" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-phantom/-/wallet-adapter-phantom-0.9.24.tgz#9cc0c55d784f99f81a711bae895c38819960b2fc" + integrity sha512-D24AxRHmRJ4AYoRvijbiuUb9LmC4xLGKLMSJS2ly+zGxVmaPASPM/ThaY/DlYTDL31QvkYtl8RzSR4yIU1gpLg== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-safepal@^0.5.15": - version "0.5.15" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-safepal/-/wallet-adapter-safepal-0.5.15.tgz#2be4daa5083f9381ec62c19403fed8ee36e5907a" - integrity sha512-g/GYTpY8A7Dn44qiuPQNN8e+ExwUtxEjrGsArwFTVI5YWkyoNMtRNu5anBf29YUZfya+fpQZBD7jUDhxBZ71dQ== +"@solana/wallet-adapter-safepal@^0.5.18": + version "0.5.18" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-safepal/-/wallet-adapter-safepal-0.5.18.tgz#7eaaeaf6cb162beaed74a61b5beb6b95a67c63ea" + integrity sha512-E/EIO5j+f0FS9Yj5o5JLJ/qHh3Se/9jP2KdHKhooWTlXWbQDzrxMjV88qIKKl5sgWEndqRYDuDbAdW+2dhw6hw== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-saifu@^0.1.12": - version "0.1.12" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-saifu/-/wallet-adapter-saifu-0.1.12.tgz#728a478d40f97d4e075f1f14f97f8fe752c944a2" - integrity sha512-EptM/g9C5tIr9vjfuvLb9Tj8aiObVLDhkr5Pr1vTEcI8GXW1Z6pv/a8Kcw0/gMBMt9ujZc1RkuiU2VC2iL/m6A== +"@solana/wallet-adapter-saifu@^0.1.15": + version "0.1.15" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-saifu/-/wallet-adapter-saifu-0.1.15.tgz#f02df273b3829486b4d26dd265a80f8af1de1960" + integrity sha512-4nrziKQ+4QInh+COsICpNNUlUt456EJ60SZLxvG/z1AOGpatuzT0gN1+RdMcwHGUtiPBPCkEneUVhFZhhbMJlg== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-salmon@^0.1.11": - version "0.1.11" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-salmon/-/wallet-adapter-salmon-0.1.11.tgz#d025c378d5cb92c6f99c96166aaecc7b2b0e5053" - integrity sha512-43I/rBicXeAr0YClZD9OgkImFSQAj8dt6Z+OTOJFTbtDsYByD7FI28RAlR6cXeS9ZYhYw0gVNbhUO+vQQk9Xgg== +"@solana/wallet-adapter-salmon@^0.1.14": + version "0.1.14" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-salmon/-/wallet-adapter-salmon-0.1.14.tgz#4a6c6d570600e07af731d4ba2565f22a23211d85" + integrity sha512-CMXdbhaj3prloCJwvxO7e1wfAyRd58QiPB8pjvB4GBbznyoSnHbFXmpxZrKX1Dk6FoJOGBgjB71xnreGcc6oMw== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" salmon-adapter-sdk "^1.1.1" -"@solana/wallet-adapter-sky@^0.1.12": - version "0.1.12" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-sky/-/wallet-adapter-sky-0.1.12.tgz#6acaf99314473e2b763de018332e83fd60add46b" - integrity sha512-mRT7d+zXRiA+hjNJeyveN4yFqhxLH4aG7W4Cba9349YQlfn34wPVh1Nch7Xt733Ic+2ay8fz+ZdjlvE7UJEbMA== +"@solana/wallet-adapter-sky@^0.1.15": + version "0.1.15" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-sky/-/wallet-adapter-sky-0.1.15.tgz#43ea9e2f1505b4ab163b276ac8bd9a6a6467d105" + integrity sha512-1vlk1/jnlOC/WfDDgDoUk3XtEhB3hq1fKtUb+xj0pVuSOg2Db+8ka9vPPYlVaKHoGvjm30iGGfr3ZrCxVfG6OQ== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-slope@^0.5.18": - version "0.5.18" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-slope/-/wallet-adapter-slope-0.5.18.tgz#630048bec052955e5ff1b63551365bc3a334a669" - integrity sha512-d7XycT6KAuWnpAM51sPlR92DITk6dBOOUvgzkmd2VeCQzN4uebVRpLDL2xW4ma/cFz+brRxh55UzVcXX5zK/ZQ== +"@solana/wallet-adapter-solflare@^0.6.28": + version "0.6.28" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-solflare/-/wallet-adapter-solflare-0.6.28.tgz#3de42a43220cca361050ebd1755078012a5b0fe2" + integrity sha512-iiUQtuXp8p4OdruDawsm1dRRnzUCcsu+lKo8OezESskHtbmZw2Ifej0P99AbJbBAcBw7q4GPI6987Vh05Si5rw== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" - bs58 "^4.0.1" + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-chains" "^1.1.0" + "@solflare-wallet/metamask-sdk" "^1.0.2" + "@solflare-wallet/sdk" "^1.3.0" + "@wallet-standard/wallet" "^1.0.1" -"@solana/wallet-adapter-solflare@^0.6.21": - version "0.6.21" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-solflare/-/wallet-adapter-solflare-0.6.21.tgz#7cd28ebe4ae8aa2852e5ce4caaaed8d10dae1fff" - integrity sha512-gaaAPzhmbYcI2m1H5RFDxIfrUD6lDv28wUds4VnBSrHEiwhP5Fz1EVpyl9gdiEujE+d31TYIU4wsc7ebudMmdg== +"@solana/wallet-adapter-solong@^0.9.18": + version "0.9.18" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-solong/-/wallet-adapter-solong-0.9.18.tgz#c7b2f043c2142d40cda7537ad028f31bd5b95815" + integrity sha512-n40eemFUbJlOP+FKvn8rgq+YAOW51lEsn7uVz5ZjmiaW6MnRQniId9KkGYPPOUjytFyM+6/4x6IXI+QJknlSqA== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" - "@solflare-wallet/sdk" "^1.2.0" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-sollet@^0.11.14": - version "0.11.14" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-sollet/-/wallet-adapter-sollet-0.11.14.tgz#a272d61bd6ea3e77a922fe79b0ef5c6bcd46fa36" - integrity sha512-iE+QLS7eUhyMAiQB5MG/cYlhXMlprYKQtYSnxwgGmUOfIxXDX9HHMZiE3YJcsmtVODf2RvtM9ecd2BWiV1Fk1Q== +"@solana/wallet-adapter-spot@^0.1.15": + version "0.1.15" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-spot/-/wallet-adapter-spot-0.1.15.tgz#f442a2f5560ed3abc0fefa5984aaa0af695f3b28" + integrity sha512-daU2iBTSJp1RGfQrB2uV06+2WHfeyW0uhjoJ3zTkz24kXqv5/ycoPHr8Gi2jkDSGMFkewnjWF8g0KMEzq2VYug== dependencies: - "@project-serum/sol-wallet-adapter" "^0.2.6" - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-solong@^0.9.15": - version "0.9.15" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-solong/-/wallet-adapter-solong-0.9.15.tgz#32e1f2e244937f7ee89d626b01da63f02d339c04" - integrity sha512-rDvqLuLCbaLiozoSYv1B1+sb+M9/edav6iA5dg+qqTYNSw6alqXiUVy3cWO4oGPo25BOJue6YBXYU1Q0jA5Qhg== +"@solana/wallet-adapter-tokenary@^0.1.12": + version "0.1.12" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-tokenary/-/wallet-adapter-tokenary-0.1.12.tgz#83d99309528794fb2380354c164729e68abe1440" + integrity sha512-iIsOzzEHfRfDUiwYy2BAVGeMl+xBUu92qYK1yAKeKxQPF5McJrnjS3FXwT/onBU5WMdxI6dWm0HKZUiDwefN6A== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-spot@^0.1.12": - version "0.1.12" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-spot/-/wallet-adapter-spot-0.1.12.tgz#b2ff5de29935e59a2c1df7956160b31fef7f9304" - integrity sha512-reT95lHTt/bL6kVz2nUFmE2/OPL4+vcyqPm4+t7jAsUo4tjq9rIxnCOpxYPkQ8MXq83hflrSnPz5FJAKNFrPVA== +"@solana/wallet-adapter-tokenpocket@^0.4.19": + version "0.4.19" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-tokenpocket/-/wallet-adapter-tokenpocket-0.4.19.tgz#a380eb15270d1d209d4d7b4e961270b977e4070e" + integrity sha512-zKXTN+tuKIr/stSxUeG9XPBks9iqeliBWS9JF8eq+8u/Qb/bIDbNSQmd8Z5u1x2lf0puiStc9/iUu/+MLaOSVg== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-strike@^0.1.10": - version "0.1.10" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-strike/-/wallet-adapter-strike-0.1.10.tgz#cee2446e6bbf3961896fadb10021bab02c09b06b" - integrity sha512-8IqEwEawELFYjhr1FrpiSEeHm9SYVtjG16dHcGgORhi59QqkebnVqkxfG3OCekPhBhayv9ToDPvyjJtv74aEXQ== +"@solana/wallet-adapter-torus@^0.11.28": + version "0.11.28" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-torus/-/wallet-adapter-torus-0.11.28.tgz#b857eeab77ff16a0e2400bc841e261ce58fb9da3" + integrity sha512-bu1oJQ+AoIZICxz8J1lVcdL+iBBrdbynnEs5N6dxwoM/cMGLbX7PGYqaH0J1dEXisA+1H5AzGAnW4UU05VBmLA== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" - "@strike-protocols/solana-wallet-adapter" "^0.1.8" + "@solana/wallet-adapter-base" "^0.9.23" + "@toruslabs/solana-embed" "^0.3.4" + assert "^2.0.0" + crypto-browserify "^3.12.0" + process "^0.11.10" + stream-browserify "^3.0.0" -"@solana/wallet-adapter-tokenary@^0.1.9": - version "0.1.9" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-tokenary/-/wallet-adapter-tokenary-0.1.9.tgz#0231c79cf4e6a8ce0186818efa22d0cd2a58c9d7" - integrity sha512-H6TPutI2Bhbg2UmVtWMdnhC7fFVeemI4PfqDRAaFBNRBeXOM0e6hvZWtidnvZ00tdQGYZMwjS0Tquz9d7vBwQw== +"@solana/wallet-adapter-trezor@^0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-trezor/-/wallet-adapter-trezor-0.1.0.tgz#78f32dc3edb4f1669200b7630171c0af4184d50c" + integrity sha512-iJe57srLXad86PVBNZaNfV+6KnYM5CJ/cmumxWVbagb9QnpizrsTK+T/WnQZOQZVpbKIOVf5oIzyKbX3g05kiA== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" + "@trezor/connect-web" "^9.1.6" + buffer "^6.0.3" -"@solana/wallet-adapter-tokenpocket@^0.4.16": - version "0.4.16" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-tokenpocket/-/wallet-adapter-tokenpocket-0.4.16.tgz#bb05502fd6d9a873c86c9b7b26784c1463afb6c8" - integrity sha512-8b2FdlgQp+ZYJCiNwHklF0oixHpuYvTs4Cqkb3sOtO4HEJZDkRWaQkbw/6VwNB93bNrvHdYXNzzQt953i9upQg== +"@solana/wallet-adapter-trust@^0.1.13": + version "0.1.13" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-trust/-/wallet-adapter-trust-0.1.13.tgz#7c67b76d1977f9e2e45a8b6f5e4c470b29c1d33e" + integrity sha512-lkmPfNdyRgx+z0K7i2cDa3a6SOKXpi3FiaYSo8Zozoxkp+Ga/NXVWxlXtMca4GAc/MnJMVp7yF/31kyFIee+3A== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-torus@^0.11.25": - version "0.11.25" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-torus/-/wallet-adapter-torus-0.11.25.tgz#7414ca85696bc44ad24a7972324b9fb454250011" - integrity sha512-nOFKjatE1HcetkBV1mFETA+FfTS/G4FBASvJiTRExu/Hfd3hg4PqeYtgH4P3kbzlMvSkJ3ZiFfHPkppqp0snqg== +"@solana/wallet-adapter-unsafe-burner@^0.1.7": + version "0.1.7" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-unsafe-burner/-/wallet-adapter-unsafe-burner-0.1.7.tgz#11e734988af382f2eeb533d0eacca297de4bf190" + integrity sha512-SuBVqQxA1NNUwP4Lo70rLPaM8aWkV1EFAlxkRoRLtwyw/gM8bxTO6+9EVyKCv+ix3yw1rCGIF3B0idXx0i37eQ== + dependencies: + "@noble/curves" "^1.1.0" + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-features" "^1.1.0" + "@solana/wallet-standard-util" "^1.1.0" + +"@solana/wallet-adapter-walletconnect@^0.1.16": + version "0.1.16" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-walletconnect/-/wallet-adapter-walletconnect-0.1.16.tgz#c335970ddec1247e546a4811fceb4f5edf9487de" + integrity sha512-jNaQwSho8hT7gF1ifePE8TJc1FULx8jCF16KX3fZPtzXDxKrj0R4VUpHMGcw4MlDknrnZNLOJAVvyiawAkPCRQ== + dependencies: + "@jnwng/walletconnect-solana" "^0.2.0" + "@solana/wallet-adapter-base" "^0.9.23" + +"@solana/wallet-adapter-wallets@0.19.30": + version "0.19.30" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-wallets/-/wallet-adapter-wallets-0.19.30.tgz#6deb0b3b12cff384dfee815cec1bd9c4cd2a8774" + integrity sha512-QlNPH87tUjta2y6assLAIhbiF5Nn+P/tE7UcoUGNv71ql5iDeapfUQZ4lSTwGcArwW5gzfmwe8obEHTGZ/84Kw== + dependencies: + "@solana/wallet-adapter-alpha" "^0.1.10" + "@solana/wallet-adapter-avana" "^0.1.13" + "@solana/wallet-adapter-bitkeep" "^0.3.20" + "@solana/wallet-adapter-bitpie" "^0.5.18" + "@solana/wallet-adapter-clover" "^0.4.19" + "@solana/wallet-adapter-coin98" "^0.5.20" + "@solana/wallet-adapter-coinbase" "^0.1.19" + "@solana/wallet-adapter-coinhub" "^0.3.18" + "@solana/wallet-adapter-fractal" "^0.1.8" + "@solana/wallet-adapter-huobi" "^0.1.15" + "@solana/wallet-adapter-hyperpay" "^0.1.14" + "@solana/wallet-adapter-keystone" "^0.1.15" + "@solana/wallet-adapter-krystal" "^0.1.12" + "@solana/wallet-adapter-ledger" "^0.9.25" + "@solana/wallet-adapter-mathwallet" "^0.9.18" + "@solana/wallet-adapter-neko" "^0.2.12" + "@solana/wallet-adapter-nightly" "^0.1.16" + "@solana/wallet-adapter-nufi" "^0.1.17" + "@solana/wallet-adapter-onto" "^0.1.7" + "@solana/wallet-adapter-particle" "^0.1.12" + "@solana/wallet-adapter-phantom" "^0.9.24" + "@solana/wallet-adapter-safepal" "^0.5.18" + "@solana/wallet-adapter-saifu" "^0.1.15" + "@solana/wallet-adapter-salmon" "^0.1.14" + "@solana/wallet-adapter-sky" "^0.1.15" + "@solana/wallet-adapter-solflare" "^0.6.28" + "@solana/wallet-adapter-solong" "^0.9.18" + "@solana/wallet-adapter-spot" "^0.1.15" + "@solana/wallet-adapter-tokenary" "^0.1.12" + "@solana/wallet-adapter-tokenpocket" "^0.4.19" + "@solana/wallet-adapter-torus" "^0.11.28" + "@solana/wallet-adapter-trezor" "^0.1.0" + "@solana/wallet-adapter-trust" "^0.1.13" + "@solana/wallet-adapter-unsafe-burner" "^0.1.7" + "@solana/wallet-adapter-walletconnect" "^0.1.16" + "@solana/wallet-adapter-xdefi" "^0.1.7" + +"@solana/wallet-adapter-xdefi@^0.1.7": + version "0.1.7" + resolved "https://registry.npmjs.org/@solana/wallet-adapter-xdefi/-/wallet-adapter-xdefi-0.1.7.tgz#caa3c134148a4b9867a474ec3d139b4d7326d522" + integrity sha512-d0icfBOQyaY8kpsdU/wQwaBIahZZPzkXkXfBjpMGwjixD8oeZUFfsg8LC7T1rOIUObeczlocaR/lwtEqWpnaeg== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" - "@toruslabs/solana-embed" "^0.3.0" - assert "^2.0.0" - crypto-browserify "^3.12.0" - process "^0.11.10" - stream-browserify "^3.0.0" + "@solana/wallet-adapter-base" "^0.9.23" -"@solana/wallet-adapter-trust@^0.1.10": - version "0.1.10" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-trust/-/wallet-adapter-trust-0.1.10.tgz#233f0700effd99a97fe689a48621d0f00a144bf7" - integrity sha512-mYEq1fUMCukxofdw1t+WQpChAfTBZNoljDoOzx/fAfTkcyc84w5c1VwS7x+5dMAdVvEZk3DNGVzGQwMJcLTU1A== +"@solana/wallet-standard-chains@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@solana/wallet-standard-chains/-/wallet-standard-chains-1.1.0.tgz#459b297e71b0d9c1196c11a0578b38c85998be7d" + integrity sha512-IRJHf94UZM8AaRRmY18d34xCJiVPJej1XVwXiTjihHnmwD0cxdQbc/CKjrawyqFyQAKJx7raE5g9mnJsAdspTg== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@wallet-standard/base" "^1.0.1" -"@solana/wallet-adapter-unsafe-burner@^0.1.4": - version "0.1.4" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-unsafe-burner/-/wallet-adapter-unsafe-burner-0.1.4.tgz#8e9385b7ecd135044f98fc3734dbf1c2599406fa" - integrity sha512-k+wySLMVFSNIlz2TyVcAQhPloRR0CMSPP2YtWHStgoNWXRNTLc1NLqed9me+GyzIDGgEC1yn6XeYy/oaYG3dfw== +"@solana/wallet-standard-features@^1.1.0", "@solana/wallet-standard-features@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@solana/wallet-standard-features/-/wallet-standard-features-1.2.0.tgz#be8b3824abf5ebcfeaa7298445bf53f76a27c935" + integrity sha512-tUd9srDLkRpe1BYg7we+c4UhRQkq+XQWswsr/L1xfGmoRDF47BPSXf4zE7ZU2GRBGvxtGt7lwJVAufQyQYhxTQ== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" -"@solana/wallet-adapter-walletconnect@^0.1.10": - version "0.1.10" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-walletconnect/-/wallet-adapter-walletconnect-0.1.10.tgz#6879737d7de5d06c6745c6446c4900211cc94b66" - integrity sha512-DvJo0s0BZOaxxvpFDQ1vjAZuaAewVesCIY1xywegBK1XEK5Oh6szkDZNnEYjuRsQAzra1nJuT1soNaR+dBO0zQ== - dependencies: - "@jnwng/walletconnect-solana" "^0.1.3" - "@solana/wallet-adapter-base" "^0.9.20" - -"@solana/wallet-adapter-wallets@^0.19.5": - version "0.19.10" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-wallets/-/wallet-adapter-wallets-0.19.10.tgz#a5c31e3a4cd1e01d15cf7b3b15b47669b6d0d950" - integrity sha512-Q73Ormg5YN+IHFbP2M//UG1e4vdG/dhcUzUHW9AkLsWNWAT6jQ8vRRTtIJEwB2XyzW3O62mCgujYNrdCoDdhxA== - dependencies: - "@solana/wallet-adapter-alpha" "^0.1.7" - "@solana/wallet-adapter-avana" "^0.1.10" - "@solana/wallet-adapter-backpack" "^0.1.11" - "@solana/wallet-adapter-bitkeep" "^0.3.16" - "@solana/wallet-adapter-bitpie" "^0.5.15" - "@solana/wallet-adapter-blocto" "^0.5.19" - "@solana/wallet-adapter-brave" "^0.1.14" - "@solana/wallet-adapter-censo" "^0.1.1" - "@solana/wallet-adapter-clover" "^0.4.16" - "@solana/wallet-adapter-coin98" "^0.5.17" - "@solana/wallet-adapter-coinbase" "^0.1.15" - "@solana/wallet-adapter-coinhub" "^0.3.15" - "@solana/wallet-adapter-exodus" "^0.1.15" - "@solana/wallet-adapter-fractal" "^0.1.5" - "@solana/wallet-adapter-glow" "^0.1.15" - "@solana/wallet-adapter-huobi" "^0.1.12" - "@solana/wallet-adapter-hyperpay" "^0.1.11" - "@solana/wallet-adapter-keystone" "^0.1.9" - "@solana/wallet-adapter-krystal" "^0.1.9" - "@solana/wallet-adapter-ledger" "^0.9.22" - "@solana/wallet-adapter-magiceden" "^0.1.10" - "@solana/wallet-adapter-mathwallet" "^0.9.15" - "@solana/wallet-adapter-neko" "^0.2.9" - "@solana/wallet-adapter-nightly" "^0.1.12" - "@solana/wallet-adapter-nufi" "^0.1.13" - "@solana/wallet-adapter-onto" "^0.1.4" - "@solana/wallet-adapter-particle" "^0.1.7" - "@solana/wallet-adapter-phantom" "^0.9.19" - "@solana/wallet-adapter-safepal" "^0.5.15" - "@solana/wallet-adapter-saifu" "^0.1.12" - "@solana/wallet-adapter-salmon" "^0.1.11" - "@solana/wallet-adapter-sky" "^0.1.12" - "@solana/wallet-adapter-slope" "^0.5.18" - "@solana/wallet-adapter-solflare" "^0.6.21" - "@solana/wallet-adapter-sollet" "^0.11.14" - "@solana/wallet-adapter-solong" "^0.9.15" - "@solana/wallet-adapter-spot" "^0.1.12" - "@solana/wallet-adapter-strike" "^0.1.10" - "@solana/wallet-adapter-tokenary" "^0.1.9" - "@solana/wallet-adapter-tokenpocket" "^0.4.16" - "@solana/wallet-adapter-torus" "^0.11.25" - "@solana/wallet-adapter-trust" "^0.1.10" - "@solana/wallet-adapter-unsafe-burner" "^0.1.4" - "@solana/wallet-adapter-walletconnect" "^0.1.10" - "@solana/wallet-adapter-xdefi" "^0.1.4" - -"@solana/wallet-adapter-xdefi@^0.1.4": - version "0.1.4" - resolved "https://registry.npmjs.org/@solana/wallet-adapter-xdefi/-/wallet-adapter-xdefi-0.1.4.tgz#2b821145df6c99c6f5b681068d3fb2db8a56b81b" - integrity sha512-5Z9gdn+SItrURBJYDS1vFp9PVqJ08RclNCH4BUJNM/KJIQ8T1uon7PADWnYvy43Q4uEqk7eUuKi25dlPp2NvBg== +"@solana/wallet-standard-util@^1.1.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@solana/wallet-standard-util/-/wallet-standard-util-1.1.1.tgz#f645fdd8b7d3c553a3b59aa19c25c51a1badce66" + integrity sha512-dPObl4ntmfOc0VAGGyyFvrqhL8UkHXmVsgbj0K9RcznKV4KB3MgjGwzo8CTSX5El5lkb0rDeEzFqvToJXRz3dw== dependencies: - "@solana/wallet-adapter-base" "^0.9.20" + "@noble/curves" "^1.1.0" + "@solana/wallet-standard-chains" "^1.1.0" + "@solana/wallet-standard-features" "^1.2.0" -"@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.44.3", "@solana/web3.js@^1.66.2": +"@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.66.2": version "1.73.0" resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.73.0.tgz#c65f9f954ac80fca6952765c931dd72e57e1b572" integrity sha512-YrgX3Py7ylh8NYkbanoINUPCj//bWUjYZ5/WPy9nQ9SK3Cl7QWCR+NmbDjmC/fTspZGR+VO9LTQslM++jr5PRw== @@ -4018,15 +4449,67 @@ rpc-websockets "^7.5.0" superstruct "^0.14.2" -"@solflare-wallet/sdk@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@solflare-wallet/sdk/-/sdk-1.2.0.tgz#3ba412f316cc6ea324679cd6233d363296770ead" - integrity sha512-J3KZJdeYJ2R7jPHa0F53iCtkQEdcD1j7yeFQ4oa6Kk6gU1MOqSEWZxrr56sVDKWuPT/gunzEXGrgcwjd7nxwjg== +"@solana/web3.js@^1.63.1", "@solana/web3.js@^1.87.6", "@solana/web3.js@^1.90.0": + version "1.90.1" + resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.90.1.tgz#1cebb50dd770a8bbec9b4d9b55515b51b2bef694" + integrity sha512-BaopDf3TN54N9/T1iILu+Fz2gthIZzi+6X2A7bb0FWvGlwI/78iKRb2WjSnCfrHmMbWVLJR5n/pmXteezMXgVw== dependencies: - "@project-serum/sol-wallet-adapter" "0.2.0" + "@babel/runtime" "^7.23.4" + "@noble/curves" "^1.2.0" + "@noble/hashes" "^1.3.3" + "@solana/buffer-layout" "^4.0.1" + agentkeepalive "^4.5.0" + bigint-buffer "^1.1.5" + bn.js "^5.2.1" + borsh "^0.7.0" bs58 "^4.0.1" - eventemitter3 "^4.0.7" - uuid "^8.3.2" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.0" + node-fetch "^2.7.0" + rpc-websockets "^7.5.1" + superstruct "^0.14.2" + +"@solana/web3.js@^1.89.1": + version "1.89.1" + resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.89.1.tgz#52df6820f2d088c4558aa359af40580a03d10ec9" + integrity sha512-t9TTLtPQxtQB3SAf/5E8xPXfVDsC6WGOsgKY02l2cbe0HLymT7ynE8Hu48Lk5qynHCquj6nhISfEHcjMkYpu/A== + dependencies: + "@babel/runtime" "^7.23.4" + "@noble/curves" "^1.2.0" + "@noble/hashes" "^1.3.2" + "@solana/buffer-layout" "^4.0.1" + agentkeepalive "^4.5.0" + bigint-buffer "^1.1.5" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.0" + node-fetch "^2.7.0" + rpc-websockets "^7.5.1" + superstruct "^0.14.2" + +"@solflare-wallet/metamask-sdk@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@solflare-wallet/metamask-sdk/-/metamask-sdk-1.0.3.tgz#3baaa22de2c86515e6ba6025285cd1f5d74b04e5" + integrity sha512-os5Px5PTMYKGS5tzOoyjDxtOtj0jZKnbI1Uwt8+Jsw1HHIA+Ib2UACCGNhQ/un2f8sIbTfLD1WuucNMOy8KZpQ== + dependencies: + "@solana/wallet-standard-features" "^1.1.0" + "@wallet-standard/base" "^1.0.1" + bs58 "^5.0.0" + eventemitter3 "^5.0.1" + uuid "^9.0.0" + +"@solflare-wallet/sdk@^1.3.0": + version "1.4.2" + resolved "https://registry.npmjs.org/@solflare-wallet/sdk/-/sdk-1.4.2.tgz#630b9a26f7bca255ee4a7088f287ae8c8335e345" + integrity sha512-jrseNWipwl9xXZgrzwZF3hhL0eIVxuEtoZOSLmuPuef7FgHjstuTtNJAeT4icA7pzdDV4hZvu54pI2r2f7SmrQ== + dependencies: + bs58 "^5.0.0" + eventemitter3 "^5.0.1" + uuid "^9.0.0" "@stablelib/aead@^1.0.1": version "1.0.1" @@ -4122,14 +4605,6 @@ "@stablelib/constant-time" "^1.0.1" "@stablelib/wipe" "^1.0.1" -"@stablelib/random@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz#4357a00cb1249d484a9a71e6054bc7b8324a7009" - integrity sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - "@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" @@ -4161,25 +4636,15 @@ resolved "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== -"@stablelib/x25519@1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.2.tgz#ae21e2ab668076ec2eb2b4853b82a27fab045fa1" - integrity sha512-wTR0t0Bp1HABLFRbYaE3vFLuco2QbAg6QvxBnzi5j9qjhYezWHW7OiCZyaWbt25UkSaoolUUT4Il0nS/2vcbSw== +"@stablelib/x25519@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" + integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== dependencies: "@stablelib/keyagreement" "^1.0.1" - "@stablelib/random" "^1.0.1" + "@stablelib/random" "^1.0.2" "@stablelib/wipe" "^1.0.1" -"@strike-protocols/solana-wallet-adapter@^0.1.8": - version "0.1.8" - resolved "https://registry.npmjs.org/@strike-protocols/solana-wallet-adapter/-/solana-wallet-adapter-0.1.8.tgz#19cef6f1f7a81dfa838b990f48929c4f63b91218" - integrity sha512-8gZAfjkoFgwf5fLFzrVuE2MtxAc7Pc0loBgi0zfcb3ijOy/FEpm5RJKLruKOhcThS6CHrfFxDU80AsZe+msObw== - dependencies: - "@solana/web3.js" "^1.44.3" - bs58 "^4.0.1" - eventemitter3 "^4.0.7" - uuid "^8.3.2" - "@suchipi/femver@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@suchipi/femver/-/femver-1.0.0.tgz#4909dcc069695e07bd23a64c4bfe411d11d9692f" @@ -4194,10 +4659,10 @@ long "^4.0.0" protobufjs "~6.11.2" -"@terra-money/terra.js@^3.1.3": - version "3.1.8" - resolved "https://registry.yarnpkg.com/@terra-money/terra.js/-/terra.js-3.1.8.tgz#71525703cb04d863c549e13fc56cc81e508e85f0" - integrity sha512-Cd/fh4MswT00fDGVckoZ0cm77EpIy4+CjSDO0RqZ3Qfp4CJBp7sWTLRNsyzUWjdYOT5iTx+1wOMCYbbyKo6LAw== +"@terra-money/terra.js@3.1.9": + version "3.1.9" + resolved "https://registry.npmjs.org/@terra-money/terra.js/-/terra.js-3.1.9.tgz#2d78f241902238ba0613a089c56c334eb1351c68" + integrity sha512-JulSvOHLM56fL7s+cIjIbZeWPBluq883X1soWxA4TG5rKkDythT/DHeLXr3jP5Ld/26VENPSg6lNvK7cEYKpiw== dependencies: "@classic-terra/terra.proto" "^1.1.0" "@terra-money/terra.proto" "^2.1.0" @@ -4229,51 +4694,45 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@toruslabs/base-controllers@^2.2.6": - version "2.5.0" - resolved "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-2.5.0.tgz#b0f93281f1be7b88f161c41d8d8a020071f4afde" - integrity sha512-NL4l/Tu8Zk8wgW+2iEpmUwwg9tuZixTGKoC/hU6rki7cIVC7KUHjEcY8BQUxL5Zj+YM70EBAy+zHeFAMUt7GDg== +"@toruslabs/base-controllers@^2.8.0": + version "2.9.0" + resolved "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-2.9.0.tgz#e23f4228b5a90bf94ba9b0b27451f3024bd1acc4" + integrity sha512-rKc+bR4QB/wdbH0CxLZC5e2PUZcIgkr9yY7TMd3oIffDklaYBnsuC5ES2/rgK1aRUDRWz+qWbTwLqsY6PlT37Q== dependencies: - "@toruslabs/broadcast-channel" "^6.1.1" - "@toruslabs/http-helpers" "^3.2.0" - "@toruslabs/openlogin-jrpc" "^2.9.0" + "@ethereumjs/util" "^8.0.6" + "@toruslabs/broadcast-channel" "^6.2.0" + "@toruslabs/http-helpers" "^3.3.0" + "@toruslabs/openlogin-jrpc" "^4.0.0" async-mutex "^0.4.0" bignumber.js "^9.1.1" bowser "^2.11.0" eth-rpc-errors "^4.0.3" - ethereumjs-util "^7.1.5" json-rpc-random-id "^1.0.1" lodash "^4.17.21" loglevel "^1.8.1" -"@toruslabs/broadcast-channel@^6.1.1": - version "6.1.1" - resolved "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-6.1.1.tgz#119ac53aed467f505dff7f085b2043d42d28f6f4" - integrity sha512-FapnmyPLpqfrdbfyawlReRpluEKQ2riqCNOOZQz9KHPF8a/XsgYi/UAdrR02k6BHaZYyV6D52Oji1gM6CPj6EQ== +"@toruslabs/broadcast-channel@^6.2.0": + version "6.3.1" + resolved "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-6.3.1.tgz#d4b0a08c3a0fa88d42d7f33387ce9be928c2d4b2" + integrity sha512-BEtJQ+9bMfFoGuCsp5NmxyY+C980Ho+3BZIKSiYwRtl5qymJ+jMX5lsoCppoQblcb34dP6FwEjeFw80Y9QC/rw== dependencies: - "@babel/runtime" "^7.19.4" - "@toruslabs/eccrypto" "^1.1.8" - "@toruslabs/metadata-helpers" "^3.0.0" + "@babel/runtime" "^7.21.0" + "@toruslabs/eccrypto" "^2.1.1" + "@toruslabs/metadata-helpers" "^3.2.0" bowser "^2.11.0" - keccak "^3.0.2" - loglevel "^1.8.0" + loglevel "^1.8.1" oblivious-set "1.1.1" - socket.io-client "^4.5.3" - unload "^2.3.1" + socket.io-client "^4.6.1" + unload "^2.4.1" -"@toruslabs/eccrypto@^1.1.8": - version "1.1.8" - resolved "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-1.1.8.tgz#ce1eac9c3964a091cdc74956a62036b5719a41eb" - integrity sha512-5dIrO2KVqvnAPOPfJ2m6bnjp9vav9GIcCZXiXRW/bJuIDRLVxJhVvRlleF4oaEZPq5yX5piHq5jVHagNNS0jOQ== +"@toruslabs/eccrypto@^2.1.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-2.2.1.tgz#19012cc4e774e8c3df7ceebb2c1a07ecfd784917" + integrity sha512-7sviL0wLYsfA5ogEAOIdb0tu/QAOFXfHc9B8ONYtF04x4Mg3Nr89LL35FhjaEm055q8Ru7cUQhEFSiqJqm9GCw== dependencies: - acorn "^8.4.1" elliptic "^6.5.4" - es6-promise "^4.2.8" - nan "^2.14.2" - optionalDependencies: - secp256k1 "^3.8.0" -"@toruslabs/http-helpers@^3.0.0", "@toruslabs/http-helpers@^3.2.0": +"@toruslabs/http-helpers@^3.2.0": version "3.2.0" resolved "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-3.2.0.tgz#9e33dd23936ef90852133372c831f03b7a8badc5" integrity sha512-fCfvBHfYzd7AyOYlBo7wihh5nj6+4Ik6V5+nI7H63oiKICjMlByTXSauTUa/qm2mjZJn/OmVYeV5guPIgxoW1w== @@ -4281,18 +4740,26 @@ lodash.merge "^4.6.2" loglevel "^1.8.0" -"@toruslabs/metadata-helpers@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-3.0.0.tgz#ebc613bcd05ed7cfcf4ac1eb01e9558500a2e590" - integrity sha512-0eWCIbKpaBx3/z3BDyWebxUisCS37Uxb0zxOEWizSXjGH/T6TJCrBeZFPmANN3hq47GoNCsRiku9cgfij1UMTQ== +"@toruslabs/http-helpers@^3.3.0", "@toruslabs/http-helpers@^3.4.0": + version "3.4.0" + resolved "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-3.4.0.tgz#6d1da9e6aba094af62e73cf639a69844c82202f3" + integrity sha512-CoeJSL32mpp0gmYjxv48odu6pfjHk/rbJHDwCtYPcMHAl+qUQ/DTpVOOn9U0fGkD+fYZrQmZbRkXFgLhiT0ajQ== dependencies: - "@toruslabs/eccrypto" "^1.1.8" - "@toruslabs/http-helpers" "^3.0.0" + lodash.merge "^4.6.2" + loglevel "^1.8.1" + +"@toruslabs/metadata-helpers@^3.2.0": + version "3.2.0" + resolved "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-3.2.0.tgz#b297933ac37481a9c86a125ac6a4e5c2f109fb78" + integrity sha512-2bCc6PNKd9y+aWfZQ1FXd47QmfyT4NmmqPGfsqk+sQS2o+MlxIyLuh9uh7deMgXo4b4qBDX+RQGbIKM1zVk56w== + dependencies: + "@toruslabs/eccrypto" "^2.1.1" + "@toruslabs/http-helpers" "^3.4.0" elliptic "^6.5.4" - json-stable-stringify "^1.0.1" - keccak "^3.0.2" + ethereum-cryptography "^2.0.0" + json-stable-stringify "^1.0.2" -"@toruslabs/openlogin-jrpc@^2.6.0", "@toruslabs/openlogin-jrpc@^2.9.0": +"@toruslabs/openlogin-jrpc@^2.6.0": version "2.9.0" resolved "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-2.9.0.tgz#766fb4ebe65e8dd9c1bf74adf031059ba5321cc6" integrity sha512-68SMBSsFqayTi/uVJe1cffnz6QxYMtVLCF7h4HxlWxM27dd3030FspPrNJHFqt7o2u8/WSCB9pax9BrbTwYglw== @@ -4306,6 +4773,34 @@ pump "^3.0.0" readable-stream "^3.6.0" +"@toruslabs/openlogin-jrpc@^3.2.0": + version "3.2.0" + resolved "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-3.2.0.tgz#fff051d05b6c01b6329e2da9b134fae99305d1e0" + integrity sha512-G+K0EHyVUaAEyeD4xGsnAZRpn/ner8lQ2HC2+pGKg6oGmzKI2wGMDcw2KMH6+HKlfBGVJ5/VR9AQfC/tZlLDmQ== + dependencies: + "@toruslabs/openlogin-utils" "^3.0.0" + end-of-stream "^1.4.4" + eth-rpc-errors "^4.0.3" + events "^3.3.0" + fast-safe-stringify "^2.1.1" + once "^1.4.0" + pump "^3.0.0" + readable-stream "^3.6.2" + +"@toruslabs/openlogin-jrpc@^4.0.0": + version "4.7.2" + resolved "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-4.7.2.tgz#e04dd6945da92d790f713a58aaa1657c57b330c8" + integrity sha512-9Eb0cPc0lPuS6v2YkQlgzfbRnZ6fLez9Ike5wznoHSFA2/JVu1onwuI56EV1HwswdDrOWPPQEyzI1j9NriZ0ew== + dependencies: + "@metamask/rpc-errors" "^5.1.1" + "@toruslabs/openlogin-utils" "^4.7.0" + end-of-stream "^1.4.4" + events "^3.3.0" + fast-safe-stringify "^2.1.1" + once "^1.4.0" + pump "^3.0.0" + readable-stream "^4.4.2" + "@toruslabs/openlogin-utils@^2.1.0": version "2.1.0" resolved "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-2.1.0.tgz#ae77dd4611970cbeb1222d90c3f4f37b3d94b407" @@ -4315,20 +4810,36 @@ keccak "^3.0.2" randombytes "^2.1.0" -"@toruslabs/solana-embed@^0.3.0": - version "0.3.2" - resolved "https://registry.npmjs.org/@toruslabs/solana-embed/-/solana-embed-0.3.2.tgz#060a263f3a48ea313c21bc241da395040eb31f99" - integrity sha512-yY0sTAi++lOM/kJ6tpR3/mRXqqpqrHNnm1PL/1Zkj1Tpnt+SmlPPp9ivveLXK+1vRLtha2UpjRk1KdsG+QJGyg== +"@toruslabs/openlogin-utils@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-3.0.0.tgz#2c264fa9a2787a1d2b8c703a38740c7c27967fa7" + integrity sha512-T5t29/AIFqXc84x4OoAkZWjd0uoP2Lk6iaFndnIIMzCPu+BwwV0spX/jd/3YYNjZ8Po8D+faEnwAhiqemYeK2w== dependencies: - "@solana/web3.js" "^1.36.0" - "@toruslabs/base-controllers" "^2.2.6" - "@toruslabs/http-helpers" "^3.2.0" - "@toruslabs/openlogin-jrpc" "^2.6.0" + base64url "^3.0.1" + keccak "^3.0.3" + randombytes "^2.1.0" + +"@toruslabs/openlogin-utils@^4.7.0": + version "4.7.0" + resolved "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-4.7.0.tgz#741d6ba1c0754b59a182b1c6dd8d0263695ed980" + integrity sha512-w6XkHs4WKuufsf/zzteBzs4EJuOknrUmJ+iv5FZ8HzIpMQeL/984CP8HYaFSEYkbGCP4ydAnhY4Uh0QAhpDbPg== + dependencies: + base64url "^3.0.1" + +"@toruslabs/solana-embed@^0.3.4": + version "0.3.4" + resolved "https://registry.npmjs.org/@toruslabs/solana-embed/-/solana-embed-0.3.4.tgz#547727e6d202f734d1e97a6658bdb3cf54599938" + integrity sha512-yj+aBJoBAneap7Jlu9/OOp7irWNuC5CqAhyhVcmb0IjWrCUFnioLdL0U7UfGaqVm/5O0leJh7/Z5Ll+3toWJBg== + dependencies: + "@solana/web3.js" "^1.63.1" + "@toruslabs/base-controllers" "^2.8.0" + "@toruslabs/http-helpers" "^3.3.0" + "@toruslabs/openlogin-jrpc" "^3.2.0" eth-rpc-errors "^4.0.3" fast-deep-equal "^3.1.3" is-stream "^2.0.1" lodash-es "^4.17.21" - loglevel "^1.8.0" + loglevel "^1.8.1" pump "^3.0.0" "@toruslabs/torus-embed@^1.39.0": @@ -4350,76 +4861,309 @@ once "^1.4.0" pump "^3.0.0" -"@trezor/blockchain-link@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@trezor/blockchain-link/-/blockchain-link-2.1.7.tgz#e93d41424b1e23f090ddfdec7d4660cee7beb518" - integrity sha512-aX6eXNLRf2r04C4PTM9aOctw0e1Cpn2OvpVlWikGm+UOQfw/2aMpvwi2qu1Exo7Tnpno5Z2fWXrhq760lascpQ== +"@trezor/analytics@1.0.14": + version "1.0.14" + resolved "https://registry.npmjs.org/@trezor/analytics/-/analytics-1.0.14.tgz#f4b073918ac46a5952d7e11ba597dab33eedc115" + integrity sha512-cnW7AADKrSCnrIAV9Bcylmfwv9RUnMfc/ljTCNGvy+MTnTPnnP9mCFiHuzM0aKWAtREhPnH5rgIwsGIZqqDM5g== + dependencies: + "@trezor/env-utils" "1.0.13" + "@trezor/utils" "9.0.21" + +"@trezor/analytics@1.0.15": + version "1.0.15" + resolved "https://registry.npmjs.org/@trezor/analytics/-/analytics-1.0.15.tgz#87faeae9b98c1f9109bd9110cff4fc6ade980999" + integrity sha512-HSo/1kYyiouLJBOJPLUidEgHQA85b9yioTjvTY4fP2MIRfJ9sblioihq8BOjW1n+CV914z2y/SLLfnbRgFYGcw== + dependencies: + "@trezor/env-utils" "1.0.14" + "@trezor/utils" "9.0.22" + +"@trezor/blockchain-link-types@1.0.13": + version "1.0.13" + resolved "https://registry.npmjs.org/@trezor/blockchain-link-types/-/blockchain-link-types-1.0.13.tgz#de90cf466ab439b94f5d5e2579974f286151de4e" + integrity sha512-DAob3rFfc6H7BcniArTo3A7VPgfoYe6js1Ffi6xsemnnsKcyS9qhFQWMaj4lcf2OTYYJHuEwEj74KEQw1H1lDQ== dependencies: - "@trezor/utils" "^9.0.5" - "@trezor/utxo-lib" "^1.0.3" - "@types/web" "^0.0.80" - bignumber.js "^9.1.0" + "@solana/web3.js" "^1.87.6" + "@trezor/type-utils" "1.0.4" + "@trezor/utxo-lib" "2.0.6" + socks-proxy-agent "6.1.1" + +"@trezor/blockchain-link-types@1.0.14": + version "1.0.14" + resolved "https://registry.npmjs.org/@trezor/blockchain-link-types/-/blockchain-link-types-1.0.14.tgz#bc79ecee1eee78b485a4a321bc42f64009197372" + integrity sha512-UDzLCRY7Kig+79KWrbMeiVd1tHQwNaSRFbkJPptkuANIQpQpHRBxOdKk526Fd2EHnCHQa6WVBUhNjAhhzk2hjQ== + dependencies: + "@solana/web3.js" "^1.90.0" + "@trezor/type-utils" "1.0.5" + "@trezor/utxo-lib" "2.0.7" + socks-proxy-agent "6.1.1" + +"@trezor/blockchain-link-utils@1.0.14": + version "1.0.14" + resolved "https://registry.npmjs.org/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.0.14.tgz#45430a194ce8f1cac019ec7b8d09771b9e325bc7" + integrity sha512-E/tDDdjBWWNt4ck2wMRfC/RqiF4cQ0mUfOPvgVgEnAsTJl0zTtu615JyzJwSrfhIRO4sFIebJyFYyImVDFennA== + dependencies: + "@mobily/ts-belt" "^3.13.1" + "@solana/web3.js" "^1.87.6" + "@trezor/utils" "9.0.21" + bignumber.js "^9.1.1" + +"@trezor/blockchain-link-utils@1.0.15": + version "1.0.15" + resolved "https://registry.npmjs.org/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.0.15.tgz#c4fc7901b6512e0331bc1bbb24eba2ab98d4727b" + integrity sha512-2iwPbfYUKBEQqx7awXlq6yqtPNAT7c1fWHJMzW36EvzHW3Nh5lwAtBWaeKUtEsRJmAF0VRfj5Dc7gRnO9Cb8Vw== + dependencies: + "@mobily/ts-belt" "^3.13.1" + "@solana/web3.js" "^1.90.0" + "@trezor/utils" "9.0.22" + bignumber.js "^9.1.2" + +"@trezor/blockchain-link@2.1.25": + version "2.1.25" + resolved "https://registry.npmjs.org/@trezor/blockchain-link/-/blockchain-link-2.1.25.tgz#1a5663d79667c28344c8c6b38afa7783bccf79d5" + integrity sha512-cTtOw4B8u4//sNhi5BmplC7X45kKFhGY+Mc/R/5LhgiLDx84S5Kx/0Xa5YF0TPFD63KqX2JXxhtLU60JZU5yeg== + dependencies: + "@solana/buffer-layout" "^4.0.1" + "@solana/web3.js" "^1.87.6" + "@trezor/blockchain-link-types" "1.0.13" + "@trezor/blockchain-link-utils" "1.0.14" + "@trezor/utils" "9.0.21" + "@trezor/utxo-lib" "2.0.6" + "@types/web" "^0.0.119" + bignumber.js "^9.1.1" events "^3.3.0" - ripple-lib "1.10.0" + ripple-lib "^1.10.1" socks-proxy-agent "6.1.1" - ws "7.4.6" + ws "^8.16.0" + +"@trezor/blockchain-link@2.1.27": + version "2.1.27" + resolved "https://registry.npmjs.org/@trezor/blockchain-link/-/blockchain-link-2.1.27.tgz#0952ea770f36dc0af8edcfaaabea0a4c1b5706c4" + integrity sha512-BMoMwjd+3ZeuHrhtphQnPOvJPcyi69NYJ0JGah/+zj3UkrRPodvEf+44qlA0pxCBUjYMjHEDqekppuuuD1hRsg== + dependencies: + "@solana/buffer-layout" "^4.0.1" + "@solana/web3.js" "^1.90.0" + "@trezor/blockchain-link-types" "1.0.14" + "@trezor/blockchain-link-utils" "1.0.15" + "@trezor/utils" "9.0.22" + "@trezor/utxo-lib" "2.0.7" + "@types/web" "^0.0.138" + bignumber.js "^9.1.2" + events "^3.3.0" + ripple-lib "^1.10.1" + socks-proxy-agent "6.1.1" + ws "^8.16.0" -"@trezor/connect-common@0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@trezor/connect-common/-/connect-common-0.0.11.tgz#0383b85c6d1c15c73d46da0a8bb5f9d710ef99dd" - integrity sha512-17a4EuNGB842DTogEO49zANDmgNYYdegpB6E6jQPaPEzSryib5LdW9EkZin8KzAnqq+igv3bV18X4wIDjoHDgQ== +"@trezor/connect-analytics@1.0.12": + version "1.0.12" + resolved "https://registry.npmjs.org/@trezor/connect-analytics/-/connect-analytics-1.0.12.tgz#404378e54d9b4cec3a5962a07ddf665faf2966ea" + integrity sha512-S+dVfk6BZ1E9AQap7O8jpTC4OT8uNnCbEMzYufy976l9+BP5nd2UcLqTiZU6vMHnKfqKJ35oKk6H9zb3J0IYNg== + dependencies: + "@trezor/analytics" "1.0.14" + +"@trezor/connect-analytics@1.0.13": + version "1.0.13" + resolved "https://registry.npmjs.org/@trezor/connect-analytics/-/connect-analytics-1.0.13.tgz#e53d28339846d0feda3da5514f89a4b7611376b1" + integrity sha512-Cbbv2UpX5zqmf1fB1yYuITO3gOctcxyl4Uxu9X/Sh/qgckU6FrJGJLMMJjUlC5+4DZWegmkhDMaZHXdtNPydZA== + dependencies: + "@trezor/analytics" "1.0.15" + +"@trezor/connect-common@0.0.28": + version "0.0.28" + resolved "https://registry.npmjs.org/@trezor/connect-common/-/connect-common-0.0.28.tgz#dcb84c390308fc6ae885cd223a3291e0635f84c8" + integrity sha512-AknDt57o+FhdbP1gYf+3YBgjryES8p3C0qVMmSDPPVTUr7W0lDPWyf3sfgmOx+d8kBMD7VsLFE7FkPYBBaaRAQ== + dependencies: + "@trezor/env-utils" "1.0.13" + "@trezor/utils" "9.0.21" + +"@trezor/connect-common@0.0.30": + version "0.0.30" + resolved "https://registry.npmjs.org/@trezor/connect-common/-/connect-common-0.0.30.tgz#4849a5cda86fca0a095f9528408f5fc1f7663b20" + integrity sha512-F7O3rH4G/U4djv3EqW3vL+f7PCXquNs01sYpgTE/JHjfODp1yoQGnQC+wy3QhAWW+6bETCz9LyIaTZgZ4n/uTQ== + dependencies: + "@trezor/env-utils" "1.0.14" + "@trezor/utils" "9.0.22" + +"@trezor/connect-web@9.2.1": + version "9.2.1" + resolved "https://registry.npmjs.org/@trezor/connect-web/-/connect-web-9.2.1.tgz#6e6fa95e93a7c8ea927d0324b60046ce1618844a" + integrity sha512-PjZQTJsEP9TVZ9gimN1j16CxdLcZoj2kLzXokli+bsgz9IxzuHSAwNYAGIjUWetGydAApQYHTcI+enPXHVi0rg== + dependencies: + "@trezor/connect" "9.2.1" + "@trezor/connect-common" "0.0.30" + "@trezor/utils" "9.0.22" + events "^3.3.0" -"@trezor/connect-web@^9.0.6": - version "9.0.6" - resolved "https://registry.yarnpkg.com/@trezor/connect-web/-/connect-web-9.0.6.tgz#29c13399763333293efaaa8f3aab19bb22a0c273" - integrity sha512-fUA+Rirc/ZSiweiEmEpkTd5URfJNAAUs10YxZOND97uEtfuJMRjInigcBStyK1uyYj/PMo1lOpnU73X6eRGqhw== +"@trezor/connect-web@^9.1.6": + version "9.1.12" + resolved "https://registry.npmjs.org/@trezor/connect-web/-/connect-web-9.1.12.tgz#b910f932974f895ded779a2375e98890cf5499e1" + integrity sha512-wkIoZwvc+lk3pN5TEMesyCrNX+aHHnXc97rodFvPwR9CUDskoDIiKIx+3I8hVsosslaD6lCde1mIqW9pyt+mzw== dependencies: - "@trezor/connect" "9.0.6" - "@trezor/utils" "^9.0.5" + "@trezor/connect" "9.1.12" + "@trezor/utils" "9.0.21" events "^3.3.0" -"@trezor/connect@9.0.6": - version "9.0.6" - resolved "https://registry.yarnpkg.com/@trezor/connect/-/connect-9.0.6.tgz#b219ab70b8c3b7ecd7d4526a356fd1e2bdf5e9db" - integrity sha512-4Kh+dI/xrDo4EvfwJ+bzPZNO76bxsl+sTKrqqsWT4Ocxq6S7UV0HKVITTdx/otXYaKmVRkkvpBcqse9vpGe7ew== - dependencies: - "@trezor/blockchain-link" "^2.1.7" - "@trezor/connect-common" "0.0.11" - "@trezor/transport" "^1.1.7" - "@trezor/utils" "^9.0.5" - "@trezor/utxo-lib" "^1.0.3" - bignumber.js "^9.1.0" +"@trezor/connect@9.1.12": + version "9.1.12" + resolved "https://registry.npmjs.org/@trezor/connect/-/connect-9.1.12.tgz#092d50737fe1f0d60a3d7668cc17fabb42c6ffcc" + integrity sha512-llCQSADHx7pzrWmziWhAaLhZRTOHTetieDrYnsybz+aMSB/OYJGzk2HiGnF8eYAIB6gKR25uQwWTjn/G4FZGZg== + dependencies: + "@ethereumjs/common" "^4.1.0" + "@ethereumjs/tx" "^5.1.0" + "@fivebinaries/coin-selection" "2.2.1" + "@trezor/blockchain-link" "2.1.25" + "@trezor/blockchain-link-types" "1.0.13" + "@trezor/connect-analytics" "1.0.12" + "@trezor/connect-common" "0.0.28" + "@trezor/protobuf" "1.0.8" + "@trezor/protocol" "1.0.5" + "@trezor/schema-utils" "1.0.1" + "@trezor/transport" "1.1.24" + "@trezor/utils" "9.0.21" + "@trezor/utxo-lib" "2.0.6" + bignumber.js "^9.1.1" blakejs "^1.2.1" - bowser "^2.11.0" - cross-fetch "^3.1.5" + bs58 "^5.0.0" + bs58check "^3.0.1" + cross-fetch "^4.0.0" events "^3.3.0" - parse-uri "1.0.7" - randombytes "2.1.0" - tslib "2.5.0" -"@trezor/transport@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@trezor/transport/-/transport-1.1.7.tgz#c4e4b01304810d39daaf1564ac32e4ade19b6e85" - integrity sha512-Xr9ArlHrSBUTKyPgVpYEOXkL3IHnm2FaoDtO+f6steyj5UEzeJDfwu8NhKdZ67C4j5298+KlzZdWKa1HPESKzA== +"@trezor/connect@9.2.1": + version "9.2.1" + resolved "https://registry.npmjs.org/@trezor/connect/-/connect-9.2.1.tgz#362b1dba4ccb24c2c8ce96e02c6d820c8507fca5" + integrity sha512-FYiPNT1/GKLu692MjXGsTimvkPSGWEuWJ53jVWEfTiLGy1QhAxoG5ZTmrVe4lqdQ+hbG+AKylrPSuvtOvBsJsA== + dependencies: + "@ethereumjs/common" "^4.2.0" + "@ethereumjs/tx" "^5.2.1" + "@fivebinaries/coin-selection" "2.2.1" + "@trezor/blockchain-link" "2.1.27" + "@trezor/blockchain-link-types" "1.0.14" + "@trezor/connect-analytics" "1.0.13" + "@trezor/connect-common" "0.0.30" + "@trezor/protobuf" "1.0.10" + "@trezor/protocol" "1.0.6" + "@trezor/schema-utils" "1.0.2" + "@trezor/transport" "1.1.26" + "@trezor/utils" "9.0.22" + "@trezor/utxo-lib" "2.0.7" + bignumber.js "^9.1.2" + blakejs "^1.2.1" + bs58 "^5.0.0" + bs58check "^3.0.1" + cross-fetch "^4.0.0" + events "^3.3.0" + +"@trezor/env-utils@1.0.13": + version "1.0.13" + resolved "https://registry.npmjs.org/@trezor/env-utils/-/env-utils-1.0.13.tgz#ac151c73046f1d7a34bf26a234da6319b8bbd9fa" + integrity sha512-oJn102PUKEu14OxwlBWUqFGBfp04xFcuSqLH4qVEguJ1Qt+iLTN0IysIDrLFI7CcuznKk9bIrkjOAF2MT255+A== + dependencies: + ua-parser-js "^1.0.37" + +"@trezor/env-utils@1.0.14": + version "1.0.14" + resolved "https://registry.npmjs.org/@trezor/env-utils/-/env-utils-1.0.14.tgz#eeaad825bd56de2729c59013770a0bdd8e9bf96c" + integrity sha512-hwJtoLhLEZeUQu2FR1NZk1AhHnck8W5Pc1f385i5VKqwHSuORKvz0ufjMbHrvqj1GBJdXbhE3WXMJI31SkZimw== + dependencies: + expo-constants "15.4.5" + ua-parser-js "^1.0.37" + +"@trezor/protobuf@1.0.10": + version "1.0.10" + resolved "https://registry.npmjs.org/@trezor/protobuf/-/protobuf-1.0.10.tgz#94eebced4934105c59de79791012e88c900329ad" + integrity sha512-XsWmHjaBcSRrga/y2gfPCwtx5Cjh+ONqgg043Dj+nwqSEu/G2HKzJeHO915piPWtQBW1nmtnh3FsSo2FltCASw== dependencies: - "@trezor/utils" "^9.0.5" - bytebuffer "^5.0.1" + "@trezor/schema-utils" "1.0.2" + long "^4.0.0" + protobufjs "7.2.6" + +"@trezor/protobuf@1.0.8": + version "1.0.8" + resolved "https://registry.npmjs.org/@trezor/protobuf/-/protobuf-1.0.8.tgz#f4497fc9c68a25d994e23df273c3fa99b52caf9e" + integrity sha512-zibOuhAuFdZhtpxHEyWaw39EouVJrXrZVGVHiajvkp8GhbzxpbtvV0/rx6qkGnsc1nLHmILydQsS1bDGRUSFGw== + dependencies: + "@trezor/schema-utils" "1.0.1" + long "^4.0.0" + protobufjs "7.2.5" + +"@trezor/protocol@1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@trezor/protocol/-/protocol-1.0.5.tgz#93cf0d97aa92249a355529c8998da5c0aed96536" + integrity sha512-xRqn6k4Rn9pvDlGu7aBuoDL4fG+BN1dj+nBV2ULt03+evKmrcC0ya6bZ74cWqoaGtWrNSo6opONr1VF7tN2fKg== + +"@trezor/protocol@1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@trezor/protocol/-/protocol-1.0.6.tgz#27295d29929b7249cd18524f36da85cdc43eb927" + integrity sha512-5agka7qFoS8DysFT+/sJbfV4IJniy+yaUHf4KKhx24CtgtxmqJFNEMF13HzEZeGPLHHg59FAK29G3tSl+I9alw== + +"@trezor/schema-utils@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@trezor/schema-utils/-/schema-utils-1.0.1.tgz#b42b4f1c31ad14dbd13e380f55f15587533fb489" + integrity sha512-2g9urHSFzac817tdWEKRH2PwPLeDefhOWLCddThIQeb6NCfRkKPhtrc6MNweLjlb6TCZDCFZ6LRXp/8zbDHkKQ== + dependencies: + "@sinclair/typebox" "^0.31.28" + ts-mixer "^6.0.3" + +"@trezor/schema-utils@1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@trezor/schema-utils/-/schema-utils-1.0.2.tgz#187bcaf4455dbe277585d9d8e097bbc98b76edaa" + integrity sha512-VqD0m/nm0x4fRkK0NXLQMg7sDvQwZLSei/TRjrynXn4LOrL7RhuEbaVTTIUqI536+lNnDEo0d4GwPE38aT0/1g== + dependencies: + "@sinclair/typebox" "^0.31.28" + ts-mixer "^6.0.3" + +"@trezor/transport@1.1.24": + version "1.1.24" + resolved "https://registry.npmjs.org/@trezor/transport/-/transport-1.1.24.tgz#2b0bd34ba4bd464bfbbf7decb4d45511af1e93a6" + integrity sha512-vFMMQ1hrSe9WFdA6EKdzTXqvIyjO5msQJsSnyAC9r08e/V7wqWGS9Jh5fMtKahI16nrSHOilYiJT2fe8G9HF2g== + dependencies: + "@trezor/protobuf" "1.0.8" + "@trezor/protocol" "1.0.5" + "@trezor/utils" "9.0.21" + cross-fetch "^4.0.0" json-stable-stringify "^1.0.2" long "^4.0.0" - prettier "2.8.0" - protobufjs "^6.11.3" + protobufjs "7.2.5" + usb "^2.11.0" + +"@trezor/transport@1.1.26": + version "1.1.26" + resolved "https://registry.npmjs.org/@trezor/transport/-/transport-1.1.26.tgz#c4e29d1dc305aa9e6393929e29dfb76efd153a11" + integrity sha512-Wb1ht0zy3o+9gKhI3fZZrvIwoGTinWQ3DWIkJlzlimrz+DkVe45Kfar9eqvncBaoc7LbT+F3jK/65+r3QeFlHA== + dependencies: + "@trezor/protobuf" "1.0.10" + "@trezor/protocol" "1.0.6" + "@trezor/utils" "9.0.22" + json-stable-stringify "^1.1.1" + long "^4.0.0" + protobufjs "7.2.6" + usb "^2.11.0" -"@trezor/utils@^9.0.5": - version "9.0.5" - resolved "https://registry.yarnpkg.com/@trezor/utils/-/utils-9.0.5.tgz#f8ee4fc7a9477ec81d4b4f9cc64bbd6db44e94f0" - integrity sha512-sUYE9ZLkfKcvidME/TXqKVDe821zSy0aJ5IkK2uy94b3kmD2uv3Drt7YfOcR6M49FYeiptrxqz1FnL2tg+JwTw== +"@trezor/type-utils@1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@trezor/type-utils/-/type-utils-1.0.4.tgz#e989ef87e98e9659244e4d38b778fbcbacfced63" + integrity sha512-1+zpG7/yYH//UPj49EV3gpcRLN+Y6VF7wFclJ7NZXsvifD0SwuJk7u2cwkiy0VPF6V+JCWxI4QWwxnecw1N88g== -"@trezor/utxo-lib@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-1.0.3.tgz#e424ac2c923f7019b059c7aa759fafa6aa58600f" - integrity sha512-epWH8WsFpw1ak2hWqW9Ep9hEjkL2vRheIAvIc4kwz8cGXhZXEG3Aaufx57HWg1ean48xFVtnsYEURVMzakycFA== +"@trezor/type-utils@1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@trezor/type-utils/-/type-utils-1.0.5.tgz#5efdd6ab1ebd5086878d9123cfe4eb70440072e6" + integrity sha512-AK8Gg5yoPAMvxqK49LXr8yoop1oxIXRxkOhCuWGV51fDM02/L1dhGNKC04UyCTyG7jZ+H1f5ywuna81BVT/ptQ== + +"@trezor/utils@9.0.21": + version "9.0.21" + resolved "https://registry.npmjs.org/@trezor/utils/-/utils-9.0.21.tgz#89c8bdb55dbe6fb12b3f03feaf91081e4210463b" + integrity sha512-Qdff78pC+O/YG05f33/v5x2tL1TW/Xkqr2GNUJZ7FBFzWS/6wTyHiLLnk3h1H1jj/bTaMsv77aNbS8ctBpGl7Q== + +"@trezor/utils@9.0.22": + version "9.0.22" + resolved "https://registry.npmjs.org/@trezor/utils/-/utils-9.0.22.tgz#f17483f33c7a78a0547d39ff7a6198c12cd3286e" + integrity sha512-DJ7pORsIoS79cqac/p1hXmf7N72jCleifQqDUGicPOF+fIDiRoAtRSnrtwiwOF3vOXLMa//zXylA15CZl3RSjQ== + +"@trezor/utxo-lib@2.0.6": + version "2.0.6" + resolved "https://registry.npmjs.org/@trezor/utxo-lib/-/utxo-lib-2.0.6.tgz#ffba544fc1873011b6c7a74308a348621f5a3315" + integrity sha512-aVsTNJuHKoEkEme/pMFZagZ9ko1rA8etNji+UvatzPDD8Pfxreq4USxk38se9GDg2y8TY8lcSGhOhtxU2b3SfQ== dependencies: - "@trezor/utils" "^9.0.5" + "@trezor/utils" "9.0.21" bchaddrjs "^0.5.2" bech32 "^2.0.0" bip66 "^1.1.5" @@ -4428,7 +5172,7 @@ blakejs "^1.2.1" bn.js "^5.2.1" bs58 "^5.0.0" - bs58check "^2.1.2" + bs58check "^3.0.1" create-hash "^1.2.0" create-hmac "^1.1.7" int64-buffer "^1.0.1" @@ -4436,7 +5180,31 @@ tiny-secp256k1 "^1.1.6" typeforce "^1.18.0" varuint-bitcoin "^1.1.2" - wif "^2.0.6" + wif "^4.0.0" + +"@trezor/utxo-lib@2.0.7": + version "2.0.7" + resolved "https://registry.npmjs.org/@trezor/utxo-lib/-/utxo-lib-2.0.7.tgz#b634f3ed2da8279701eae536b54a560ead1c3a3d" + integrity sha512-st0HI0cK+wDCnWGM3zJx0N3eja96uGquJ80iODkGUb/Zp/E/ILyDzh9Idh+SiOCvA6II+YIQIRnhltu/iHq4rg== + dependencies: + "@trezor/utils" "9.0.22" + bchaddrjs "^0.5.2" + bech32 "^2.0.0" + bip66 "^1.1.5" + bitcoin-ops "^1.4.1" + blake-hash "^2.0.0" + blakejs "^1.2.1" + bn.js "^5.2.1" + bs58 "^5.0.0" + bs58check "^3.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + int64-buffer "^1.0.1" + pushdata-bitcoin "^1.0.1" + tiny-secp256k1 "^1.1.6" + typeforce "^1.18.0" + varuint-bitcoin "^1.1.2" + wif "^4.0.0" "@tsconfig/node10@^1.0.7": version "1.0.9" @@ -4525,6 +5293,13 @@ dependencies: "@types/node" "*" +"@types/debug@^4.1.7": + version "4.1.12" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + "@types/eth-sig-util@^2.1.1": version "2.1.1" resolved "https://registry.npmjs.org/@types/eth-sig-util/-/eth-sig-util-2.1.1.tgz#839f784da04c8d2e12add9b37692c3f05a80603a" @@ -4646,6 +5421,11 @@ resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== +"@types/ms@*": + version "0.7.34" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + "@types/node@*", "@types/node@>=13.7.0", "@types/node@^18.0.3", "@types/node@^18.6.2": version "18.11.18" resolved "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" @@ -4720,15 +5500,25 @@ resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/uuid@^8.3.1": +"@types/uuid@8.3.4", "@types/uuid@^8.3.1": version "8.3.4" resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== -"@types/web@^0.0.80": - version "0.0.80" - resolved "https://registry.yarnpkg.com/@types/web/-/web-0.0.80.tgz#bbf499be42b0e4ec1c417b89fde51e5afe062044" - integrity sha512-HLbRwqCL5VVkmpAAzqRGXDkUO4teKhOOY2FJDHQl3k5OTuDTPzkI74AJSoGaS6oHOVVYhI/X5Ahw/ltC8KZQuw== +"@types/w3c-web-usb@^1.0.6": + version "1.0.10" + resolved "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz#cf89cccd2d93b6245e784c19afe0a9f5038d4528" + integrity sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ== + +"@types/web@^0.0.119": + version "0.0.119" + resolved "https://registry.npmjs.org/@types/web/-/web-0.0.119.tgz#848ae9b66608acd257b603b3e716fe5ffc9de8a8" + integrity sha512-CQVOcEWrxr0MXbQbR3rrw6GHo2mcr8WlhLHQkOKDhhySTjz15/35jk0Zm2FbHRyCvSEjr/J7A2iDD5GRrGxE2A== + +"@types/web@^0.0.138": + version "0.0.138" + resolved "https://registry.npmjs.org/@types/web/-/web-0.0.138.tgz#52ca1e688275a0b82a5522a7accaaa182aa029b1" + integrity sha512-oQD74hl+cNCZdSWIupJCXZ2azTuB3MJ/mrWlgYt+v4pD7/Dr78gl5hKAdieZNf9NrAqwUez79bHtnFVSNSscWA== "@types/ws@^7.2.0", "@types/ws@^7.4.4": version "7.4.7" @@ -4867,6 +5657,25 @@ "@typescript-eslint/types" "5.48.0" eslint-visitor-keys "^3.3.0" +"@wallet-standard/base@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@wallet-standard/base/-/base-1.0.1.tgz#860dd94d47c9e3c5c43b79d91c6afdbd7a36264e" + integrity sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w== + +"@wallet-standard/features@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@wallet-standard/features/-/features-1.0.3.tgz#c992876c5e4f7a0672f8869c4146c87e0dfe48c8" + integrity sha512-m8475I6W5LTatTZuUz5JJNK42wFRgkJTB0I9tkruMwfqBF2UN2eomkYNVf9RbrsROelCRzSFmugqjKZBFaubsA== + dependencies: + "@wallet-standard/base" "^1.0.1" + +"@wallet-standard/wallet@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@wallet-standard/wallet/-/wallet-1.0.1.tgz#95438941a2a1ee12a794444357b59d53e19b374c" + integrity sha512-qkhJeuQU2afQTZ02yMZE5SFc91Fo3hyFjFkpQglHudENNyiSG0oUKcIjky8X32xVSaumgTZSQUAzpXnCTWHzKQ== + dependencies: + "@wallet-standard/base" "^1.0.1" + "@walletconnect/browser-utils@^1.8.0": version "1.8.0" resolved "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.8.0.tgz#33c10e777aa6be86c713095b5206d63d32df0951" @@ -4878,43 +5687,37 @@ "@walletconnect/window-metadata" "1.0.0" detect-browser "5.2.0" -"@walletconnect/core@2.0.0-rc.3": - version "2.0.0-rc.3" - resolved "https://registry.npmjs.org/@walletconnect/core/-/core-2.0.0-rc.3.tgz#c2388ad2edef59ca77d649c713f22306c4ba9b70" - integrity sha512-ErnwoAZVnu8658GT9Aw3WjaOctFu1TQYyhOSL6LRF4pa+K4wvHOikiBLxPG7HsrkqyZ8ItdROmkw2ycSipmMow== - dependencies: - "@walletconnect/heartbeat" "1.0.0" - "@walletconnect/jsonrpc-provider" "1.0.5" - "@walletconnect/jsonrpc-utils" "1.0.3" - "@walletconnect/jsonrpc-ws-connection" "1.0.3" - "@walletconnect/keyvaluestorage" "1.0.0" - "@walletconnect/logger" "1.0.1" - "@walletconnect/relay-api" "1.0.6" - "@walletconnect/relay-auth" "1.0.3" - "@walletconnect/safe-json" "1.0.0" - "@walletconnect/time" "1.0.1" - "@walletconnect/types" "2.0.0-rc.3" - "@walletconnect/utils" "2.0.0-rc.3" +"@walletconnect/core@2.11.2": + version "2.11.2" + resolved "https://registry.npmjs.org/@walletconnect/core/-/core-2.11.2.tgz#35286be92c645fa461fecc0dfe25de9f076fca8f" + integrity sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g== + dependencies: + "@walletconnect/heartbeat" "1.2.1" + "@walletconnect/jsonrpc-provider" "1.0.13" + "@walletconnect/jsonrpc-types" "1.0.3" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/jsonrpc-ws-connection" "1.0.14" + "@walletconnect/keyvaluestorage" "^1.1.1" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/relay-api" "^1.0.9" + "@walletconnect/relay-auth" "^1.0.4" + "@walletconnect/safe-json" "^1.0.2" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.11.2" + "@walletconnect/utils" "2.11.2" + events "^3.3.0" + isomorphic-unfetch "3.1.0" lodash.isequal "4.5.0" - pino "6.7.0" - pino-pretty "4.3.0" - uint8arrays "3.1.0" + uint8arrays "^3.1.0" -"@walletconnect/environment@^1.0.0", "@walletconnect/environment@^1.0.1": +"@walletconnect/environment@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== dependencies: tslib "1.14.1" -"@walletconnect/events@1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.0.tgz#000033a52a618345713d5bd43e8780d120c5accc" - integrity sha512-LLf8krnHo+PsObwMZbGhVaG24SvGTJM0MEtPNhrlQmp27CRV+LwYpHLh7fhABcnUon4aeo7dojCJMmx5jBNWuQ== - dependencies: - keyvaluestorage-interface "^1.0.0" - -"@walletconnect/events@^1.0.0": +"@walletconnect/events@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== @@ -4922,30 +5725,33 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" -"@walletconnect/heartbeat@1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.0.0.tgz#d77d10aab467aafc45a09e25547d2158da630198" - integrity sha512-WMWbUNHVkVd7FS38P0DMDlvR38P/kSZcda94t54h8XtC1CfI2M/Cn9TGS6mC6MNuDkZZm+cOdkekibQc+9sNdQ== +"@walletconnect/heartbeat@1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz#afaa3a53232ae182d7c9cff41c1084472d8f32e9" + integrity sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q== dependencies: - "@walletconnect/events" "^1.0.0" - "@walletconnect/time" "^1.0.1" + "@walletconnect/events" "^1.0.1" + "@walletconnect/time" "^1.0.2" + tslib "1.14.1" -"@walletconnect/jsonrpc-provider@1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.5.tgz#1a66053b6f083a9885a32b7c2c8f6a376f1a4458" - integrity sha512-v61u4ZIV8+p9uIHS2Kl2YRj/2idrQiHcrbrJXw3McQkEJtj9mkCofr1Hu/n419wSRM5uiNK8Z4WRS9zGTTAhWQ== +"@walletconnect/jsonrpc-provider@1.0.13": + version "1.0.13" + resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" + integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.3" - "@walletconnect/safe-json" "^1.0.0" + "@walletconnect/jsonrpc-utils" "^1.0.8" + "@walletconnect/safe-json" "^1.0.2" + tslib "1.14.1" -"@walletconnect/jsonrpc-types@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.1.tgz#a96b4bb2bcc8838a70e06f15c1b5ab11c47d8e95" - integrity sha512-+6coTtOuChCqM+AoYyi4Q83p9l/laI6NvuM2/AHaZFuf0gT0NjW7IX2+86qGyizn7Ptq4AYZmfxurAxTnhefuw== +"@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" + integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== dependencies: keyvaluestorage-interface "^1.0.0" + tslib "1.14.1" -"@walletconnect/jsonrpc-types@^1.0.1", "@walletconnect/jsonrpc-types@^1.0.2": +"@walletconnect/jsonrpc-types@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.2.tgz#b79519f679cd6a5fa4a1bea888f27c1916689a20" integrity sha512-CZe8tjJX73OWdHjrBHy7HtAapJ2tT0Q3TYhPBhRxi3643lwPIQWC9En45ldY14TZwgSewkbZ0FtGBZK0G7Bbyg== @@ -4953,53 +5759,48 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" -"@walletconnect/jsonrpc-utils@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.3.tgz#5bd49865eef0eae48e8b45a06731dc18691cf8c7" - integrity sha512-3yb49bPk16MNLk6uIIHPSHQCpD6UAo1OMOx1rM8cW/MPEAYAzrSW5hkhG7NEUwX9SokRIgnZK3QuQkiyNzBMhQ== - dependencies: - "@walletconnect/environment" "^1.0.0" - "@walletconnect/jsonrpc-types" "^1.0.1" - -"@walletconnect/jsonrpc-utils@^1.0.3": - version "1.0.4" - resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.4.tgz#2009ba3907b02516f2caacd2fb871ff0d472b2cb" - integrity sha512-y0+tDxcTZ9BHBBKBJbjZxLUXb+zQZCylf7y/jTvDPNx76J0hYYc+F9zHzyqBLeorSKepLTk6yI8hw3NXbAQB3g== +"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.8": + version "1.0.8" + resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" + integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== dependencies: "@walletconnect/environment" "^1.0.1" - "@walletconnect/jsonrpc-types" "^1.0.2" + "@walletconnect/jsonrpc-types" "^1.0.3" tslib "1.14.1" -"@walletconnect/jsonrpc-ws-connection@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.3.tgz#a2c9dce8ccbdeda4f7923356b32644ea4908375f" - integrity sha512-+tKT3y8HvSdwXZkvF3+6FwnT9MYVdR7rxr1/x/hCPCB4DCLl4ZfDm8rP4doXbDaMJHaMrGn2JNT3RPABlOXSnw== +"@walletconnect/jsonrpc-ws-connection@1.0.14": + version "1.0.14" + resolved "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.14.tgz#eec700e74766c7887de2bd76c91a0206628732aa" + integrity sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA== dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.3" - "@walletconnect/safe-json" "^1.0.0" + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.2" + events "^3.3.0" ws "^7.5.1" -"@walletconnect/keyvaluestorage@1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.0.0.tgz#2733fc32c868f534419308f90b079fba0ef7d66e" - integrity sha512-dlIrX/pCjuXMUprkLdy0hw0Ibr3To9nCdG19mPqd/lRdRWsPItBL+79LClVplMxb0cuF3qlTuGTNx/hmUKYmWA== +"@walletconnect/keyvaluestorage@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz#dd2caddabfbaf80f6b8993a0704d8b83115a1842" + integrity sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== dependencies: - localStorage "^1.0.4" - safe-json-utils "^1.1.1" + "@walletconnect/safe-json" "^1.0.1" + idb-keyval "^6.2.1" + unstorage "^1.9.0" -"@walletconnect/logger@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@walletconnect/logger/-/logger-1.0.1.tgz#680e45099b62ec20262a7f87ff374f73d08109be" - integrity sha512-veJCZTA2uhJP8qS5J8FGYXSduShFZflNFIYesm80fW6zKIQ+Hvg0GR0r4LeXk5cnve5qT7QO+FUnO29v/aYtPQ== +"@walletconnect/logger@^2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" + integrity sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ== dependencies: - pino "^6.7.0" + pino "7.11.0" + tslib "1.14.1" "@walletconnect/mobile-registry@^1.4.0": version "1.4.0" resolved "https://registry.npmjs.org/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5" integrity sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw== -"@walletconnect/qrcode-modal@1.8.0": +"@walletconnect/qrcode-modal@^1.8.0": version "1.8.0" resolved "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.8.0.tgz#ddd6f5c9b7ee52c16adf9aacec2a3eac4994caea" integrity sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg== @@ -5011,22 +5812,24 @@ preact "10.4.1" qrcode "1.4.4" -"@walletconnect/relay-api@1.0.6": - version "1.0.6" - resolved "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.6.tgz#6972b20a0fceee68f164a2d65064eaf458d4d27d" - integrity sha512-KW7juHNomtzZWGZy+7MuzppXlUenBOz4AvLKNwXf5c9x8T0LhpodM/NnrsJsxB+Gu3dJl5Zv5R86CcCQIqxlKg== +"@walletconnect/relay-api@^1.0.9": + version "1.0.9" + resolved "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" + integrity sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg== dependencies: - "@walletconnect/jsonrpc-types" "^1.0.1" + "@walletconnect/jsonrpc-types" "^1.0.2" + tslib "1.14.1" -"@walletconnect/relay-auth@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.3.tgz#5a20fa0a95b0678fb26d7e96dc0e3f780867deec" - integrity sha512-73BHB4oTftTGveNIFO0g73KjAl9dSPKUZ/3hgEo4FRs7SzXORUQKjeDsZnOWFYWaDeiozH2ckaJv5GJtORI79Q== +"@walletconnect/relay-auth@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" + integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== dependencies: "@stablelib/ed25519" "^1.0.2" "@stablelib/random" "^1.0.1" - "@walletconnect/safe-json" "^1.0.0" - "@walletconnect/time" "^1.0.1" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/time" "^1.0.2" + tslib "1.14.1" uint8arrays "^3.0.0" "@walletconnect/safe-json@1.0.0": @@ -5034,84 +5837,78 @@ resolved "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2" integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg== -"@walletconnect/safe-json@^1.0.0": - version "1.0.1" - resolved "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.1.tgz#9813fa0a7a544b16468730c2d7bed046ed160957" - integrity sha512-Fm7e31oSYY15NQr8SsLJheKAy5L744udZf2lJKcz6wFmPJEzf7hOF0866o/rrldRzJnjZ4H2GJ45pFudsnLW5A== +"@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" + integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== dependencies: tslib "1.14.1" -"@walletconnect/sign-client@2.0.0-rc.3": - version "2.0.0-rc.3" - resolved "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.0.0-rc.3.tgz#f9eff245db6eab0878526efa6f91352ad294f0eb" - integrity sha512-M/+tmccQvNIM86CJ3RsQBZVaECSq8jH1CEj1iUDmhxuG0eEg3Zesf5yJMg41aFFNVi2vSdBCeP0zcqWCDChf/g== - dependencies: - "@walletconnect/core" "2.0.0-rc.3" - "@walletconnect/events" "1.0.0" - "@walletconnect/heartbeat" "1.0.0" - "@walletconnect/jsonrpc-provider" "1.0.5" - "@walletconnect/jsonrpc-utils" "1.0.3" - "@walletconnect/logger" "1.0.1" - "@walletconnect/time" "1.0.1" - "@walletconnect/types" "2.0.0-rc.3" - "@walletconnect/utils" "2.0.0-rc.3" - pino "6.7.0" - pino-pretty "4.3.0" - -"@walletconnect/time@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.1.tgz#645f596887e67c56522edbc2b170d46a97c87ce0" - integrity sha512-LtNtHupTNranehLMh8Z/JN6xVySysSoJNjNCQ0ML+hOUkim5QX/VdvfovSpaX9qA2b95u7bIuTcq0O3UBk7Iyw== +"@walletconnect/sign-client@^2.7.2": + version "2.11.2" + resolved "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.11.2.tgz#855609653855f0d23b0502cdbdcf43402e34c459" + integrity sha512-MfBcuSz2GmMH+P7MrCP46mVE5qhP0ZyWA0FyIH6/WuxQ6G+MgKsGfaITqakpRPsykWOJq8tXMs3XvUPDU413OQ== + dependencies: + "@walletconnect/core" "2.11.2" + "@walletconnect/events" "^1.0.1" + "@walletconnect/heartbeat" "1.2.1" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.11.2" + "@walletconnect/utils" "2.11.2" + events "^3.3.0" -"@walletconnect/time@^1.0.1": +"@walletconnect/time@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== dependencies: tslib "1.14.1" -"@walletconnect/types@2.0.0-rc.3": - version "2.0.0-rc.3" - resolved "https://registry.npmjs.org/@walletconnect/types/-/types-2.0.0-rc.3.tgz#fdb8b9d8e2d55e87faaad2723a2a56b4762a2714" - integrity sha512-PkzgdBr4tSXQtyGT91P6cdQJ44dCwRRwIW4BDW6tRqsvziPcyt6aQzWYfKQiMl6i2fIMK/8fgr1oDYPcLQLvbA== +"@walletconnect/types@2.11.2": + version "2.11.2" + resolved "https://registry.npmjs.org/@walletconnect/types/-/types-2.11.2.tgz#d0359dd4106fcaa1634241a00428d3ea08d0d3c7" + integrity sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q== dependencies: - "@walletconnect/events" "1.0.0" - "@walletconnect/heartbeat" "1.0.0" - "@walletconnect/jsonrpc-types" "1.0.1" - "@walletconnect/keyvaluestorage" "1.0.0" + "@walletconnect/events" "^1.0.1" + "@walletconnect/heartbeat" "1.2.1" + "@walletconnect/jsonrpc-types" "1.0.3" + "@walletconnect/keyvaluestorage" "^1.1.1" + "@walletconnect/logger" "^2.0.1" + events "^3.3.0" "@walletconnect/types@^1.8.0": version "1.8.0" resolved "https://registry.npmjs.org/@walletconnect/types/-/types-1.8.0.tgz#3f5e85b2d6b149337f727ab8a71b8471d8d9a195" integrity sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg== -"@walletconnect/utils@2.0.0-rc.3": - version "2.0.0-rc.3" - resolved "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.0.0-rc.3.tgz#4032deb8212888e7c36cde09cb7f95d07ac84b12" - integrity sha512-ThMv+uLZiU9iSEN28cLZy98/LyQmHQ6eq29P9qsET9ZginF5QplmvTRKQvLSeLrU4K4rcRaXs/FndhxxiRhPcQ== +"@walletconnect/utils@2.11.2", "@walletconnect/utils@^2.4.5": + version "2.11.2" + resolved "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.11.2.tgz#dee0f19adf5e38543612cbe9fa4de7ed28eb7e85" + integrity sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw== dependencies: "@stablelib/chacha20poly1305" "1.0.1" "@stablelib/hkdf" "1.0.1" - "@stablelib/random" "1.0.1" + "@stablelib/random" "^1.0.2" "@stablelib/sha256" "1.0.1" - "@stablelib/x25519" "1.0.2" - "@walletconnect/jsonrpc-utils" "1.0.3" - "@walletconnect/relay-api" "1.0.6" - "@walletconnect/safe-json" "1.0.0" - "@walletconnect/time" "1.0.1" - "@walletconnect/types" "2.0.0-rc.3" - "@walletconnect/window-getters" "1.0.0" - "@walletconnect/window-metadata" "1.0.0" + "@stablelib/x25519" "^1.0.3" + "@walletconnect/relay-api" "^1.0.9" + "@walletconnect/safe-json" "^1.0.2" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.11.2" + "@walletconnect/window-getters" "^1.0.1" + "@walletconnect/window-metadata" "^1.0.1" detect-browser "5.3.0" - query-string "7.1.1" - uint8arrays "3.1.0" + query-string "7.1.3" + uint8arrays "^3.1.0" "@walletconnect/window-getters@1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8" integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA== -"@walletconnect/window-getters@^1.0.0": +"@walletconnect/window-getters@^1.0.0", "@walletconnect/window-getters@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== @@ -5125,6 +5922,14 @@ dependencies: "@walletconnect/window-getters" "^1.0.0" +"@walletconnect/window-metadata@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" + integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== + dependencies: + "@walletconnect/window-getters" "^1.0.1" + tslib "1.14.1" + "@wry/context@^0.7.0": version "0.7.0" resolved "https://registry.npmjs.org/@wry/context/-/context-0.7.0.tgz#be88e22c0ddf62aeb0ae9f95c3d90932c619a5c8" @@ -5146,6 +5951,16 @@ dependencies: tslib "^2.3.0" +"@xmldom/xmldom@^0.8.8": + version "0.8.10" + resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + +"@xmldom/xmldom@~0.7.7": + version "0.7.13" + resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz#ff34942667a4e19a9f4a0996a76814daac364cf3" + integrity sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g== + "@xpla/xpla.js@^0.2.1": version "0.2.3" resolved "https://registry.yarnpkg.com/@xpla/xpla.js/-/xpla.js-0.2.3.tgz#c614d98e599fe03f9edc425f50f66481983e8dac" @@ -5245,6 +6060,11 @@ acorn@^7.4.0: resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.11.3: + version "8.11.3" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + acorn@^8.4.1: version "8.8.1" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" @@ -5276,6 +6096,13 @@ agentkeepalive@^4.2.1: depd "^1.1.2" humanize-ms "^1.2.1" +agentkeepalive@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -5329,14 +6156,13 @@ algo-msgpack-with-bigint@^2.1.1: resolved "https://registry.yarnpkg.com/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz#38bb717220525b3ff42232eefdcd9efb9ad405d6" integrity sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ== -algosdk@^1.15.0: - version "1.24.1" - resolved "https://registry.yarnpkg.com/algosdk/-/algosdk-1.24.1.tgz#afc4102457ae0c38a32de6b84f4d713aedfc9e89" - integrity sha512-9moZxdqeJ6GdE4N6fA/GlUP4LrbLZMYcYkt141J4Ss68OfEgH9qW0wBuZ3ZOKEx/xjc5bg7mLP2Gjg7nwrkmww== +algosdk@^2.4.0: + version "2.7.0" + resolved "https://registry.npmjs.org/algosdk/-/algosdk-2.7.0.tgz#6ebab130d25fc3cb4c74dce4d8753c7e86db1404" + integrity sha512-sBE9lpV7bup3rZ+q2j3JQaFAE9JwZvjWKX00vPlG8e9txctXbgLL56jZhSWZndqhDI9oI+0P4NldkuQIWdrUyg== dependencies: algo-msgpack-with-bigint "^2.1.1" - buffer "^6.0.2" - cross-fetch "^3.1.5" + buffer "^6.0.3" hi-base32 "^0.5.1" js-sha256 "^0.9.0" js-sha3 "^0.8.0" @@ -5408,6 +6234,11 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -5416,7 +6247,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, anymatch@~3.1.2: +anymatch@^3.0.3, anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -5495,16 +6326,6 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -args@^5.0.1: - version "5.0.3" - resolved "https://registry.npmjs.org/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" - integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== - dependencies: - camelcase "5.0.0" - chalk "2.4.2" - leven "2.1.0" - mri "1.1.4" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -5681,6 +6502,24 @@ axios@^1.0.0, axios@^1.3.4: form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@^1.6.0: + version "1.6.5" + resolved "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" + integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@^1.6.5: + version "1.6.7" + resolved "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-jest@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.4.3.tgz#478b84d430972b277ad67dd631be94abea676792" @@ -5782,7 +6621,7 @@ base-x@^4.0.0: resolved "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== -base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: +base64-js@^1.0.2, base64-js@^1.2.3, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -5852,6 +6691,11 @@ big-integer@1.6.36: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== +big-integer@1.6.x: + version "1.6.52" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + big-integer@^1.6.48: version "1.6.51" resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" @@ -5864,11 +6708,16 @@ bigint-buffer@^1.1.5: dependencies: bindings "^1.3.0" -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.1: version "9.1.1" resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== +bignumber.js@^9.1.2: + version "9.1.2" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + bin-links@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" @@ -5894,7 +6743,7 @@ binary-parser@^2.2.1: resolved "https://registry.yarnpkg.com/binary-parser/-/binary-parser-2.2.1.tgz#4edc6da2dc56db73fa5ba450dfe6382ede8294ce" integrity sha512-5ATpz/uPDgq5GgEDxTB4ouXCde7q2lqAQlSdBRQVl/AJnxmQmhIfyxJx+0MGu//D5rHQifkfGbWWlaysG0o9NA== -bindings@^1.2.1, bindings@^1.3.0, bindings@^1.5.0: +bindings@^1.3.0, bindings@^1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== @@ -6001,6 +6850,20 @@ boxen@1.3.0: term-size "^1.2.0" widest-line "^2.0.0" +bplist-creator@0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" + integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== + dependencies: + stream-buffers "2.2.x" + +bplist-parser@0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" + integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== + dependencies: + big-integer "1.6.x" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -6049,7 +6912,7 @@ browser-headers@^0.4.1: resolved "https://registry.npmjs.org/browser-headers/-/browser-headers-0.4.1.tgz#4308a7ad3b240f4203dbb45acedb38dc2d65dd02" integrity sha512-CA9hsySZVo9371qEHjHZtYxV2cFtVj5Wj/ZHi8ooEsrtm4vOnl9Y9HmyYWk9q+05d7K3rdoAE0j3MVEFVvtQtg== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -6143,6 +7006,14 @@ bs58check@2.1.2, bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" +bs58check@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz#2094d13720a28593de1cba1d8c4e48602fdd841c" + integrity sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ== + dependencies: + "@noble/hashes" "^1.2.0" + bs58 "^5.0.0" + bser@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -6199,7 +7070,7 @@ buffer@6.0.1: base64-js "^1.3.1" ieee754 "^1.2.1" -buffer@6.0.3, buffer@^6.0.2, buffer@^6.0.3, buffer@~6.0.3: +buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -6239,13 +7110,6 @@ byte-size@7.0.0: resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== -bytebuffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" - integrity sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ== - dependencies: - long "~3" - bytes@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -6321,6 +7185,17 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.5: + version "1.0.7" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -6335,11 +7210,6 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - camelcase@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -6391,15 +7261,6 @@ chalk@2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -6408,7 +7269,16 @@ chalk@4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -6498,6 +7368,13 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +citty@^0.1.5, citty@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== + dependencies: + consola "^3.2.3" + cjs-module-lexer@^1.0.0: version "1.2.2" resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" @@ -6562,6 +7439,15 @@ clipboardy@2.3.0: execa "^1.0.0" is-wsl "^2.1.1" +clipboardy@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz#e73ced93a76d19dd379ebf1f297565426dffdca1" + integrity sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w== + dependencies: + execa "^8.0.1" + is-wsl "^3.1.0" + is64bit "^2.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -6603,6 +7489,11 @@ clone@^1.0.2: resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + cmd-shim@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" @@ -6697,6 +7588,11 @@ commander@^2.20.3: resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@^8.2.0: version "8.3.0" resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" @@ -6808,6 +7704,11 @@ connect@^3.6.6: parseurl "~1.3.3" utils-merge "1.0.1" +consola@^3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" + integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== + console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -6932,6 +7833,11 @@ convert-source-map@^2.0.0: resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +cookie-es@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/cookie-es/-/cookie-es-1.0.0.tgz#4759684af168dfc54365b2c2dda0a8d7ee1e4865" + integrity sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -7014,14 +7920,6 @@ cosmiconfig@^8.0.0: parse-json "^5.0.0" path-type "^4.0.0" -cosmjs-types@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.7.1.tgz#7ad355f63206fb829b565ed3463791d33b10c3d7" - integrity sha512-qP89SGwi6YpvMTrM9CPzTfZ0JPNlXzgimqMLsa/ZjzW+L6MC8TCr6XmoWtFOT6GSfefvJLwFWq7YCtL456Bdzg== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" - cosmjs-types@^0.8.0: version "0.8.0" resolved "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.8.0.tgz#2ed78f3e990f770229726f95f3ef5bf9e2b6859b" @@ -7030,6 +7928,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.npmjs.org/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.npmjs.org/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" @@ -7092,6 +7995,13 @@ cross-fetch@^3.1.5: dependencies: node-fetch "2.6.7" +cross-fetch@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -7121,6 +8031,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crossws@^0.2.0, crossws@^0.2.2: + version "0.2.4" + resolved "https://registry.npmjs.org/crossws/-/crossws-0.2.4.tgz#82a8b518bff1018ab1d21ced9e35ffbe1681ad03" + integrity sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg== + crypto-addr-codec@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz#e16cea892730178fe25a38f6d15b680cab3124ae" @@ -7156,6 +8071,11 @@ crypto-hash@^1.3.0: resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== +crypto-js@4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + crypto-js@^4.0.0, crypto-js@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" @@ -7198,7 +8118,7 @@ dargs@^7.0.0: resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -dateformat@^3.0.0, dateformat@^3.0.3: +dateformat@^3.0.0: version "3.0.3" resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== @@ -7242,7 +8162,7 @@ decimal.js@^10.2.0, decimal.js@^10.2.1: resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -decode-uri-component@^0.2.0: +decode-uri-component@^0.2.0, decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== @@ -7274,6 +8194,15 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-data-property@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -7309,6 +8238,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defu@^6.1.3, defu@^6.1.4: + version "6.1.4" + resolved "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + del@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -7343,6 +8277,11 @@ delegates@^1.0.0: resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -7366,6 +8305,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destr@^2.0.1, destr@^2.0.2, destr@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz#7f9e97cb3d16dbdca7be52aca1644ce402cfe449" + integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== + destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -7396,6 +8340,11 @@ detect-indent@^5.0.0: resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -7478,20 +8427,29 @@ dotenv@~10.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== -drbg.js@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" - integrity sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g== +draggabilly@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/draggabilly/-/draggabilly-3.0.0.tgz#48defe10a67f346a0338caaa40c0765c4d3912d6" + integrity sha512-aEs+B6prbMZQMxc9lgTpCBfyCUhRur/VFucHhIOvlvvdARTj7TcDmX/cdOUtqbjJJUh7+agyJXR5Z6IFe1MxwQ== dependencies: - browserify-aes "^1.0.6" - create-hash "^1.1.2" - create-hmac "^1.1.4" + get-size "^3.0.0" + unidragger "^3.0.0" duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +duplexify@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + dynamic-dedupe@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" @@ -7516,12 +8474,12 @@ eip1193-provider@^1.0.1: dependencies: "@json-rpc-tools/provider" "^1.5.5" -eip55@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eip55/-/eip55-2.1.0.tgz#a1e870cc6e15fb9ec8d338b68317f3db546728f1" - integrity sha512-jtOfFne69XvSYz58oBXqfKHk1cJwwHcAzKm9jbzOKsedKEaulMPCA4fq2UXS9NaxkdVOdbSG0kg7fM09+K4gjw== +eip55@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/eip55/-/eip55-2.1.1.tgz#28b743c4701ac3c811b1e9fe67e39cf1d0781b96" + integrity sha512-WcagVAmNu2Ww2cDUfzuWVntYwFxbvZ5MvIyLZpMjTTkjD6sCvkGOiS86jTppzu9/gWsc8isLHAeMBWK02OnZmA== dependencies: - keccak "^1.3.0" + keccak "^3.0.3" ejs@^3.1.7: version "3.1.9" @@ -7587,17 +8545,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: dependencies: once "^1.4.0" -engine.io-client@~6.2.3: - version "6.2.3" - resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz#a8cbdab003162529db85e9de31575097f6d29458" - integrity sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - engine.io-parser "~5.0.3" - ws "~8.2.3" - xmlhttprequest-ssl "~2.0.0" - engine.io-client@~6.5.2: version "6.5.3" resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" @@ -7609,11 +8556,6 @@ engine.io-client@~6.5.2: ws "~8.11.0" xmlhttprequest-ssl "~2.0.0" -engine.io-parser@~5.0.3: - version "5.0.4" - resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" - integrity sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg== - engine.io-parser@~5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz#9f213c77512ff1a6cc0c7a86108a7ffceb16fcfb" @@ -7700,6 +8642,18 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.9" +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-set-tostringtag@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.0.tgz#b33fdef554fb35a264fe022c1f095f1f2022fa85" @@ -7747,7 +8701,7 @@ es6-object-assign@^1.1.0: resolved "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== -es6-promise@^4.0.3, es6-promise@^4.2.8: +es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== @@ -8060,6 +9014,16 @@ ethereum-cryptography@^1.1.2: "@scure/bip32" "1.1.5" "@scure/bip39" "1.1.1" +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + ethereumjs-abi@^0.6.8: version "0.6.8" resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" @@ -8105,7 +9069,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@^5.7.2: +ethers@5.7.2, ethers@^5.7.2: version "5.7.2" resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -8149,6 +9113,11 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +ev-emitter@^2.0.0: + version "2.1.2" + resolved "https://registry.npmjs.org/ev-emitter/-/ev-emitter-2.1.2.tgz#91737a2deae9fa95453e7e86cfae976f8c3ced38" + integrity sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q== + event-stream@3.3.4: version "3.3.4" resolved "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" @@ -8172,6 +9141,11 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4, eventemitter3@^4.0.7: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + events@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -8241,6 +9215,21 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + exenv@^1.2.0: version "1.2.2" resolved "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -8282,6 +9271,13 @@ expect@^29.0.0, expect@^29.4.3: jest-message-util "^29.4.3" jest-util "^29.4.3" +expo-constants@15.4.5: + version "15.4.5" + resolved "https://registry.npmjs.org/expo-constants/-/expo-constants-15.4.5.tgz#81756a4c4e1c020f840a419cd86a124a6d1fb35b" + integrity sha512-1pVVjwk733hbbIjtQcvUFCme540v4gFemdNlaxM2UXKbfRCOh2hzgKN5joHMOysoXQe736TTUrRj7UaZI5Yyhg== + dependencies: + "@expo/config" "~8.5.0" + ext@^1.1.2: version "1.7.0" resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" @@ -8379,7 +9375,7 @@ fast-redact@^3.0.0: resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz#d58e69e9084ce9fa4c1a6fa98a3e1ecf5d7839aa" integrity sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw== -fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.0.8, fast-safe-stringify@^2.1.1: +fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== @@ -8496,7 +9492,7 @@ find-root@1.1.0: resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@5.0.0, find-up@^5.0.0: +find-up@5.0.0, find-up@^5.0.0, find-up@~5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -8549,11 +9545,6 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatstr@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" - integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== - flatted@^3.1.0: version "3.2.7" resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" @@ -8564,6 +9555,11 @@ follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.14.8, fo resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -8680,6 +9676,11 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -8747,6 +9748,17 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -8767,11 +9779,21 @@ get-pkg-repo@^4.0.0: through2 "^2.0.0" yargs "^16.2.0" +get-port-please@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" + integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== + get-port@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-size@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-size/-/get-size-3.0.0.tgz#00e39a8042a3de237b2fcf288eaf55d3f472417c" + integrity sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw== + get-stdin@~8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" @@ -8799,6 +9821,11 @@ get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -8812,6 +9839,11 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== +getenv@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31" + integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg== + git-raw-commits@^2.0.0, git-raw-commits@^2.0.8: version "2.0.11" resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" @@ -8888,6 +9920,18 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@7.2.3, glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -9047,6 +10091,22 @@ graphql@^16.3.0: resolved "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== +h3@^1.10.2, h3@^1.8.2: + version "1.11.1" + resolved "https://registry.npmjs.org/h3/-/h3-1.11.1.tgz#e9414ae6f2a076a345ea07256b320edb29bab9f7" + integrity sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A== + dependencies: + cookie-es "^1.0.0" + crossws "^0.2.2" + defu "^6.1.4" + destr "^2.0.3" + iron-webcrypto "^1.0.0" + ohash "^1.1.3" + radix3 "^1.1.0" + ufo "^1.4.0" + uncrypto "^0.1.3" + unenv "^1.9.0" + handlebars@^4.7.7: version "4.7.7" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" @@ -9086,6 +10146,13 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" @@ -9163,6 +10230,13 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + hdkey@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/hdkey/-/hdkey-2.0.1.tgz#0a211d0c510bfc44fa3ec9d44b13b634641cad74" @@ -9304,6 +10378,11 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-shutdown@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" + integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== + http-status-codes@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.2.0.tgz#bb2efe63d941dfc2be18e15f703da525169622be" @@ -9322,6 +10401,11 @@ human-signals@^2.1.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -9348,6 +10432,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +idb-keyval@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" + integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== + ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -9522,11 +10611,31 @@ invariant@2: dependencies: loose-envify "^1.0.0" +ioredis@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" + integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + ip@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +iron-webcrypto@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz#e3b689c0c61b434a0a4cb82d0aeabbc8b672a867" + integrity sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -9677,6 +10786,11 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -9740,6 +10854,13 @@ is-hexadecimal@^1.0.0: resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -9861,6 +10982,11 @@ is-stream@^2.0.0, is-stream@^2.0.1: resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -9932,6 +11058,20 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +is64bit@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz#198c627cbcb198bbec402251f88e5e1a51236c07" + integrity sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw== + dependencies: + system-architecture "^0.1.0" + isarray@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -9942,7 +11082,7 @@ isarray@1.0.0, isarray@~1.0.0: resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isarray@^2.0.1: +isarray@^2.0.1, isarray@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== @@ -9964,6 +11104,14 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isomorphic-unfetch@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" + isomorphic-ws@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" @@ -10049,7 +11197,7 @@ jayson@^3.4.4: uuid "^8.3.2" ws "^7.4.5" -jayson@^4.0.0: +jayson@^4.0.0, jayson@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.0.tgz#60dc946a85197317f2b1439d672a8b0a99cea2f9" integrity sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A== @@ -10438,15 +11586,10 @@ jest@^29.4.3: import-local "^3.0.2" jest-cli "^29.4.3" -jmespath@^0.15.0: - version "0.15.0" - resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" - integrity sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w== - -joycon@^2.2.5: - version "2.2.5" - resolved "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" - integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ== +jiti@^1.21.0: + version "1.21.0" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== js-base64@^3.6.1: version "3.7.4" @@ -10555,13 +11698,23 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stable-stringify@^1.0.1, json-stable-stringify@^1.0.2: +json-stable-stringify@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== dependencies: jsonify "^0.0.1" +json-stable-stringify@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" + integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== + dependencies: + call-bind "^1.0.5" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + json-stringify-nice@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" @@ -10589,6 +11742,11 @@ jsonc-parser@3.2.0, jsonc-parser@^3.0.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + jsonc-parser@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" @@ -10647,16 +11805,6 @@ keccak256@^1.0.6: buffer "^6.0.3" keccak "^3.0.2" -keccak@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" - integrity sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw== - dependencies: - bindings "^1.2.1" - inherits "^2.0.3" - nan "^2.2.1" - safe-buffer "^5.1.0" - keccak@^3.0.0, keccak@^3.0.2: version "3.0.3" resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" @@ -10666,6 +11814,15 @@ keccak@^3.0.0, keccak@^3.0.2: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keccak@^3.0.3: + version "3.0.4" + resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keyvaluestorage-interface@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" @@ -10782,11 +11939,6 @@ lerna@6.6.1: yargs "16.2.0" yargs-parser "20.2.4" -leven@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== - leven@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -10835,7 +11987,7 @@ libsodium-wrappers-sumo@^0.7.11: libsodium-wrappers@^0.7.6, "libsodium-wrappers@npm:@bangjelkoski/noop", "libsodium@npm:@bangjelkoski/noop": version "0.0.1" - resolved "https://registry.yarnpkg.com/@bangjelkoski/noop/-/noop-0.0.1.tgz#172235ce00dd4269258c420f01464f07eb9801ed" + resolved "https://registry.npmjs.org/@bangjelkoski/noop/-/noop-0.0.1.tgz#172235ce00dd4269258c420f01464f07eb9801ed" integrity sha512-lQgYJJbok2Unu2vKh0TAtWxXo16kLXNrjqmfo0hQTAuE/tVvz5zVqMgGsj+gMkkWfsInEbUndG0nlyCwaFv8hQ== lines-and-columns@^1.1.6: @@ -10882,6 +12034,30 @@ lint-staged@^11.1.2: stringify-object "3.3.0" supports-color "8.1.1" +listhen@^1.5.5: + version "1.7.2" + resolved "https://registry.npmjs.org/listhen/-/listhen-1.7.2.tgz#66b81740692269d5d8cafdc475020f2fc51afbae" + integrity sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g== + dependencies: + "@parcel/watcher" "^2.4.1" + "@parcel/watcher-wasm" "^2.4.1" + citty "^0.1.6" + clipboardy "^4.0.0" + consola "^3.2.3" + crossws "^0.2.0" + defu "^6.1.4" + get-port-please "^3.1.2" + h3 "^1.10.2" + http-shutdown "^1.2.2" + jiti "^1.21.0" + mlly "^1.6.1" + node-forge "^1.3.1" + pathe "^1.1.2" + std-env "^3.7.0" + ufo "^1.4.0" + untun "^0.1.3" + uqr "^0.1.2" + listr2@^3.12.2: version "3.14.0" resolved "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" @@ -10935,11 +12111,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -localStorage@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/localStorage/-/localStorage-1.0.4.tgz#57dfa28084385f81431accb8ae24b196398223f7" - integrity sha512-r35zrihcDiX+dqWlJSeIwS9nrF95OQTgqMFm3FB2D/+XgdmZtcutZOb7t0xXkhOEM8a9kpuu7cc28g1g36I5DQ== - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -10980,6 +12151,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + lodash.differencewith@~4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz#bafafbc918b55154e179176a00bb0aefaac854b7" @@ -10995,6 +12171,11 @@ lodash.get@^4: resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + lodash.isequal@4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -11088,11 +12269,6 @@ long@^5.2.0: resolved "https://registry.npmjs.org/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== -long@~3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" - integrity sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg== - longest@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" @@ -11112,6 +12288,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^10.0.2: + version "10.2.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -11356,6 +12537,11 @@ merge@^2.1.1: resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + micromark@~2.11.0: version "2.11.4" resolved "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" @@ -11383,7 +12569,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -11428,11 +12614,21 @@ mime@1.6.0: resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -11642,6 +12838,21 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mlly@^1.2.0, mlly@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" + integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + +mobx@^6.1.7: + version "6.12.0" + resolved "https://registry.npmjs.org/mobx/-/mobx-6.12.0.tgz#72b2685ca5af031aaa49e77a4d76ed67fcbf9135" + integrity sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ== + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -11658,10 +12869,10 @@ morgan@^1.9.1: on-finished "~2.3.0" on-headers "~1.0.2" -mri@1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== +mri@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== ms@2.0.0: version "2.0.0" @@ -11709,7 +12920,16 @@ mylas@^2.1.9: resolved "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz#1e23b37d58fdcc76e15d8a5ed23f9ae9fc0cbdf4" integrity sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg== -nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.14.2, nan@^2.2.1: +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1, nan@^2.13.2: version "2.17.0" resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== @@ -11731,6 +12951,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-wasm@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/napi-wasm/-/napi-wasm-1.1.0.tgz#bbe617823765ae9c1bc12ff5942370eae7b2ba4e" + integrity sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -11791,6 +13016,16 @@ node-addon-api@^3.0.0, node-addon-api@^3.2.1: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== +node-addon-api@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb" + integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g== + +node-fetch-native@^1.4.0, node-fetch-native@^1.4.1, node-fetch-native@^1.6.1: + version "1.6.2" + resolved "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.2.tgz#f439000d972eb0c8a741b65dcda412322955e1c6" + integrity sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w== + node-fetch@2, node-fetch@2.6.7, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -11805,6 +13040,18 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.12, node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.5.0" resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" @@ -11815,6 +13062,11 @@ node-gyp-build@^4.2.2: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== +node-gyp-build@^4.5.0: + version "4.8.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + node-gyp@^9.0.0: version "9.3.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" @@ -12094,6 +13346,13 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + npmlog@6.0.2, npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" @@ -12172,7 +13431,7 @@ o3@^1.0.3: dependencies: capability "^0.2.5" -object-assign@^4, object-assign@^4.1.1, object-assign@latest: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1, object-assign@latest: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -12251,6 +13510,25 @@ oblivious-set@1.1.1: resolved "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.1.1.tgz#d9d38e9491d51f27a5c3ec1681d2ba40aa81e98b" integrity sha512-Oh+8fK09mgGmAshFdH6hSVco6KZmd1tTwNFWj35OvzdmJTMZtAkbn05zar2iG3v6sDs1JLEtOiBGNb6BHwkb2w== +ofetch@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz#588cb806a28e5c66c2c47dd8994f9059a036d8c0" + integrity sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg== + dependencies: + destr "^2.0.1" + node-fetch-native "^1.4.0" + ufo "^1.3.0" + +ohash@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz#f12c3c50bfe7271ce3fd1097d42568122ccdcf07" + integrity sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw== + +on-exit-leak-free@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" + integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -12284,6 +13562,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -12573,11 +13858,6 @@ parse-path@^7.0.0: dependencies: protocols "^2.0.0" -parse-uri@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/parse-uri/-/parse-uri-1.0.7.tgz#287629a09328a97e398468f21b8a00c4a2d9cc73" - integrity sha512-eWuZCMKNlVkXrEoANdXxbmqhu2SQO9jUMCSpdbJDObin0JxISn6e400EWsSRbr/czdKvWKkhZnMKEGUwf/Plmg== - parse-url@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" @@ -12630,6 +13910,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -12660,6 +13945,11 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + pause-stream@0.0.11: version "0.0.11" resolved "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -12708,57 +13998,40 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pino-pretty@4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.3.0.tgz#18695606fd4f1e21cd1585d18999cd84d429e1d8" - integrity sha512-uEc9SUCCGVEs0goZvyznKXBHtI1PNjGgqHviJHxOCEFEWZN6Z/IQKv5pO9gSdm/b+WfX+/dfheWhtZUyScqjlQ== +pino-abstract-transport@v0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" + integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== dependencies: - "@hapi/bourne" "^2.0.0" - args "^5.0.1" - chalk "^4.0.0" - dateformat "^3.0.3" - fast-safe-stringify "^2.0.7" - jmespath "^0.15.0" - joycon "^2.2.5" - pump "^3.0.0" - readable-stream "^3.6.0" - split2 "^3.1.1" - strip-json-comments "^3.1.1" - -pino-std-serializers@^2.4.2: - version "2.5.0" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz#40ead781c65a0ce7ecd9c1c33f409d31fe712315" - integrity sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg== - -pino-std-serializers@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671" - integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== + duplexify "^4.1.2" + split2 "^4.0.0" -pino@6.7.0: - version "6.7.0" - resolved "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz#d5d96b7004fed78816b5694fda3eab02b5ca6d23" - integrity sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw== - dependencies: - fast-redact "^3.0.0" - fast-safe-stringify "^2.0.7" - flatstr "^1.0.12" - pino-std-serializers "^2.4.2" - quick-format-unescaped "^4.0.1" - sonic-boom "^1.0.2" +pino-std-serializers@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" + integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== -pino@^6.7.0: - version "6.14.0" - resolved "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz#b745ea87a99a6c4c9b374e4f29ca7910d4c69f78" - integrity sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg== +pino@7.11.0: + version "7.11.0" + resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" + integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== dependencies: + atomic-sleep "^1.0.0" fast-redact "^3.0.0" - fast-safe-stringify "^2.0.8" - flatstr "^1.0.12" - pino-std-serializers "^3.1.0" + on-exit-leak-free "^0.2.0" + pino-abstract-transport v0.5.0 + pino-std-serializers "^4.0.0" process-warning "^1.0.0" quick-format-unescaped "^4.0.3" - sonic-boom "^1.0.2" + real-require "^0.1.0" + safe-stable-stringify "^2.1.0" + sonic-boom "^2.2.1" + thread-stream "^0.15.1" + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pirates@^4.0.4: version "4.0.5" @@ -12772,6 +14045,15 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -12786,6 +14068,15 @@ plimit-lit@^1.2.6: dependencies: queue-lit "^1.5.0" +plist@^3.0.5: + version "3.1.0" + resolved "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== + dependencies: + "@xmldom/xmldom" "^0.8.8" + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + pngjs@^3.3.0: version "3.4.0" resolved "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" @@ -12821,11 +14112,6 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9" - integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA== - prettier@^2.4.1: version "2.8.1" resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" @@ -12922,7 +14208,43 @@ proto-list@~1.2.1: resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== -protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: +protobufjs@7.2.5: + version "7.2.5" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d" + integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +protobufjs@7.2.6: + version "7.2.6" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz#4a0ccd79eb292717aacf07530a07e0ed20278215" + integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +protobufjs@^6.11.2, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: version "6.11.3" resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== @@ -13048,12 +14370,12 @@ qrcode@1.4.4: pngjs "^3.3.0" yargs "^13.2.4" -query-string@7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/query-string/-/query-string-7.1.1.tgz#754620669db978625a90f635f12617c271a088e1" - integrity sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w== +query-string@7.1.3: + version "7.1.3" + resolved "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" + integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== dependencies: - decode-uri-component "^0.2.0" + decode-uri-component "^0.2.2" filter-obj "^1.1.0" split-on-first "^1.0.0" strict-uri-encode "^2.0.0" @@ -13068,7 +14390,7 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-format-unescaped@^4.0.1, quick-format-unescaped@^4.0.3: +quick-format-unescaped@^4.0.3: version "4.0.4" resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== @@ -13078,7 +14400,12 @@ quick-lru@^4.0.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -randombytes@2.1.0, randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +radix3@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/radix3/-/radix3-1.1.0.tgz#9745df67a49c522e94a33d0a93cf743f104b6e0d" + integrity sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -13123,14 +14450,13 @@ react-dom@16.13.1: prop-types "^15.6.2" scheduler "^0.19.1" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" @@ -13175,13 +14501,12 @@ react@16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-cmd-shim@3.0.0: version "3.0.0" @@ -13304,7 +14629,7 @@ readable-stream@^2.0.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1: +readable-stream@^3.1.1, readable-stream@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -13323,6 +14648,17 @@ readable-stream@^4.1.0: events "^3.3.0" process "^0.11.10" +readable-stream@^4.4.2: + version "4.5.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readable-stream@~1.0.31: version "1.0.34" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -13354,6 +14690,11 @@ readonly-date@^1.0.0: resolved "https://registry.npmjs.org/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== +real-require@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" + integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -13369,6 +14710,18 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -13386,6 +14739,11 @@ regenerator-runtime@^0.13.11: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.15.1: version "0.15.1" resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" @@ -13641,10 +14999,10 @@ ripple-lib-transactionparser@0.8.2: bignumber.js "^9.0.0" lodash "^4.17.15" -ripple-lib@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/ripple-lib/-/ripple-lib-1.10.0.tgz#e41aaf17d5c6e6f8bcc8116736ac108ff3d6b810" - integrity sha512-Cg2u73UybfM1PnzcuLt5flvLKZn35ovdIp+1eLrReVB4swuRuUF/SskJG9hf5wMosbvh+E+jZu8A6IbYJoyFIA== +ripple-lib@^1.10.1: + version "1.10.1" + resolved "https://registry.npmjs.org/ripple-lib/-/ripple-lib-1.10.1.tgz#9c353702792b25465cdb269265d6f5bb27b1471b" + integrity sha512-OQk+Syl2JfxKxV2KuF/kBMtnh012I5tNnziP3G4WDGCGSIAgeqkOgkR59IQ0YDNrs1YW8GbApxrdMSRi/QClcA== dependencies: "@types/lodash" "^4.14.136" "@types/ws" "^7.2.0" @@ -13772,6 +15130,11 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" +safe-stable-stringify@^2.1.0: + version "2.4.3" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -13785,6 +15148,11 @@ salmon-adapter-sdk@^1.1.1: "@project-serum/sol-wallet-adapter" "^0.2.6" eventemitter3 "^4.0.7" +sax@>=0.6.0: + version "1.3.0" + resolved "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + scheduler@^0.19.1: version "0.19.1" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" @@ -13793,13 +15161,12 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" scrypt-js@3.0.1, scrypt-js@^3.0.0: version "3.0.1" @@ -13811,20 +15178,6 @@ sdp@^2.12.0, sdp@^2.6.0: resolved "https://registry.npmjs.org/sdp/-/sdp-2.12.0.tgz#338a106af7560c86e4523f858349680350d53b22" integrity sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw== -secp256k1@^3.8.0: - version "3.8.0" - resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" - integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== - dependencies: - bindings "^1.5.0" - bip66 "^1.1.5" - bn.js "^4.11.8" - create-hash "^1.2.0" - drbg.js "^1.0.1" - elliptic "^6.5.2" - nan "^2.14.0" - safe-buffer "^5.1.2" - secp256k1@^4.0.0, secp256k1@^4.0.1, secp256k1@^4.0.2, secp256k1@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" @@ -13865,6 +15218,13 @@ semver@7.3.8, semver@7.x, semver@^7.1.1, semver@^7.2.1, semver@^7.3.4, semver@^7 dependencies: lru-cache "^6.0.0" +semver@7.5.3: + version "7.5.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -13877,6 +15237,13 @@ semver@^7.0.0, semver@^7.3.8: dependencies: lru-cache "^6.0.0" +semver@^7.5.3: + version "7.6.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + send@latest: version "0.18.0" resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -13943,6 +15310,18 @@ set-blocking@^2.0.0: resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -14059,6 +15438,11 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.1.tgz#96a61033896120ec9335d96851d902cc98f0ba2a" integrity sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sigstore@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.4.0.tgz#2e3a28c08b1b8246744c27cfb179c525c3f164d8" @@ -14068,6 +15452,15 @@ sigstore@^1.3.0: make-fetch-happen "^11.0.1" tuf-js "^1.1.3" +simple-plist@^1.1.0: + version "1.3.1" + resolved "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" + integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== + dependencies: + bplist-creator "0.1.0" + bplist-parser "0.3.1" + plist "^3.0.5" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -14096,6 +15489,11 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slugify@^1.3.4, slugify@^1.6.6: + version "1.6.6" + resolved "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" + integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== + smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" @@ -14148,16 +15546,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socket.io-client@^4.5.3: - version "4.5.4" - resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz#d3cde8a06a6250041ba7390f08d2468ccebc5ac9" - integrity sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.2" - engine.io-client "~6.2.3" - socket.io-parser "~4.2.1" - socket.io-client@^4.6.1: version "4.7.2" resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz#f2f13f68058bd4e40f94f2a1541f275157ff2c08" @@ -14168,14 +15556,6 @@ socket.io-client@^4.6.1: engine.io-client "~6.5.2" socket.io-parser "~4.2.4" -socket.io-parser@~4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz#01c96efa11ded938dcb21cbe590c26af5eff65e5" - integrity sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - socket.io-parser@~4.2.4: version "4.2.4" resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" @@ -14210,13 +15590,12 @@ socks@^2.6.1, socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -sonic-boom@^1.0.2: - version "1.4.1" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e" - integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg== +sonic-boom@^2.2.1: + version "2.8.0" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" + integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== dependencies: atomic-sleep "^1.0.0" - flatstr "^1.0.12" sort-keys@^2.0.0: version "2.0.0" @@ -14305,13 +15684,18 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^3.0.0, split2@^3.1.1: +split2@^3.0.0: version "3.2.2" resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + split@0.3: version "0.3.3" resolved "https://registry.npmjs.org/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" @@ -14352,6 +15736,11 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + "standard-error@>= 1.1.0 < 2": version "1.1.0" resolved "https://registry.npmjs.org/standard-error/-/standard-error-1.1.0.tgz#23e5168fa1c0820189e5812701a79058510d0d34" @@ -14382,6 +15771,11 @@ statuses@2.0.1: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +std-env@^3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + store2@^2.12.0: version "2.14.2" resolved "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068" @@ -14395,6 +15789,11 @@ stream-browserify@^3.0.0: inherits "~2.0.4" readable-stream "^3.5.0" +stream-buffers@2.2.x: + version "2.2.0" + resolved "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== + stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" @@ -14402,6 +15801,11 @@ stream-combiner@~0.0.4: dependencies: duplexer "~0.1.1" +stream-shift@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -14487,7 +15891,7 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -14570,6 +15974,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" @@ -14608,6 +16017,19 @@ sturdy-websocket@^0.2.1: resolved "https://registry.npmjs.org/sturdy-websocket/-/sturdy-websocket-0.2.1.tgz#20a58fd53372ef96eaa08f3c61c91a10b07c7c05" integrity sha512-NnzSOEKyv4I83qbuKw9ROtJrrT6Z/Xt7I0HiP/e6H6GnpeTDvzwGIGeJ8slai+VwODSHQDooW2CAilJwT9SpRg== +sucrase@3.34.0: + version "3.34.0" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" + integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + superstruct@^0.14.2: version "0.14.2" resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" @@ -14659,6 +16081,11 @@ symbol-observable@^4.0.0: resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== +system-architecture@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz#71012b3ac141427d97c67c56bc7921af6bff122d" + integrity sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== + table@^6.0.9: version "6.8.1" resolved "https://registry.npmjs.org/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" @@ -14757,6 +16184,27 @@ text-table@^0.2.0: resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thread-stream@^0.15.1: + version "0.15.2" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" + integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== + dependencies: + real-require "^0.1.0" + through2@^2.0.0, through2@^2.0.1, through2@^2.0.3: version "2.0.5" resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -14879,6 +16327,11 @@ trim-newlines@^3.0.0: resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + ts-invariant@^0.10.3: version "0.10.3" resolved "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" @@ -14900,6 +16353,11 @@ ts-jest@^29.0.5: semver "7.x" yargs-parser "^21.0.1" +ts-mixer@^6.0.3: + version "6.0.4" + resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz#1da39ceabc09d947a82140d9f09db0f84919ca28" + integrity sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA== + ts-node-dev@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-2.0.0.tgz#bdd53e17ab3b5d822ef519928dc6b4a7e0f13065" @@ -14993,11 +16451,6 @@ tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - tslib@^2, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: version "2.4.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" @@ -15147,24 +16600,27 @@ u3@^0.1.1: resolved "https://registry.yarnpkg.com/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== +ua-parser-js@^1.0.37: + version "1.0.37" + resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" + integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== + uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== +ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2, ufo@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" + integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== + uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== -uint8arrays@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.0.tgz#8186b8eafce68f28bd29bd29d683a311778901e2" - integrity sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog== - dependencies: - multiformats "^9.4.2" - -uint8arrays@^3.0.0: +uint8arrays@^3.0.0, uint8arrays@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== @@ -15181,6 +16637,27 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + +unenv@^1.9.0: + version "1.9.0" + resolved "https://registry.npmjs.org/unenv/-/unenv-1.9.0.tgz#469502ae85be1bd3a6aa60f810972b1a904ca312" + integrity sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g== + dependencies: + consola "^3.2.3" + defu "^6.1.3" + mime "^3.0.0" + node-fetch-native "^1.6.1" + pathe "^1.1.1" + +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -15204,6 +16681,13 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unidragger@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/unidragger/-/unidragger-3.0.1.tgz#72b2e63f2571ca6e95a884b139dfec764e08c7f3" + integrity sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw== + dependencies: + ev-emitter "^2.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -15271,7 +16755,7 @@ unix-crypt-td-js@^1.1.4: resolved "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz#4912dfad1c8aeb7d20fa0a39e4c31918c1d5d5dd" integrity sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw== -unload@^2.3.1: +unload@^2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/unload/-/unload-2.4.1.tgz#b0c5b7fb44e17fcbf50dcb8fb53929c59dd226a5" integrity sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw== @@ -15289,11 +16773,37 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unstorage@^1.9.0: + version "1.10.1" + resolved "https://registry.npmjs.org/unstorage/-/unstorage-1.10.1.tgz#bf8cc00a406e40a6293e893da9807057d95875b0" + integrity sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw== + dependencies: + anymatch "^3.1.3" + chokidar "^3.5.3" + destr "^2.0.2" + h3 "^1.8.2" + ioredis "^5.3.2" + listhen "^1.5.5" + lru-cache "^10.0.2" + mri "^1.2.0" + node-fetch-native "^1.4.1" + ofetch "^1.3.3" + ufo "^1.3.1" + untildify@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== +untun@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz#5d10dee37a3a5737ff03d158be877dae0a0e58a6" + integrity sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ== + dependencies: + citty "^0.1.5" + consola "^3.2.3" + pathe "^1.1.1" + upath@2.0.1, upath@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" @@ -15320,6 +16830,11 @@ update-check@1.5.2: registry-auth-token "3.3.2" registry-url "3.1.0" +uqr@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d" + integrity sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -15332,6 +16847,15 @@ urix@^0.1.0: resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== +usb@^2.11.0: + version "2.12.0" + resolved "https://registry.npmjs.org/usb/-/usb-2.12.0.tgz#3c00faf6d3bf830b5a45fa510157f23df10e7d73" + integrity sha512-C/egt5PQWcBZq5jABOpBCbhZrB2ftyXdx+cEnK7qowo0ALkfclfrQGlCMbj0VbirfIGayvmWMYQ8Dnii5A4pXQ== + dependencies: + "@types/w3c-web-usb" "^1.0.6" + node-addon-api "^7.0.0" + node-gyp-build "^4.5.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -15380,6 +16904,24 @@ uuid@^3.0.0: resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +uuidv4@^6.2.13: + version "6.2.13" + resolved "https://registry.npmjs.org/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" + integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== + dependencies: + "@types/uuid" "8.3.4" + uuid "8.3.2" + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -15598,6 +17140,13 @@ wif@^2.0.6: dependencies: bs58check "<3.0.0" +wif@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/wif/-/wif-4.0.0.tgz#598d4659f361b1d2a8aed13214783fa374b4b146" + integrity sha512-kADznC+4AFJNXpT8rLhbsfI7EmAcorc5nWvAdKUchGmwXEBD3n55q0/GZ3DBmc6auAvuTSsr/utiKizuXdNYOQ== + dependencies: + bs58check "^3.0.1" + word-wrap@^1.0.3, word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -15666,7 +17215,7 @@ write-file-atomic@4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -write-file-atomic@^2.4.2: +write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== @@ -15727,21 +17276,52 @@ ws@^8.13.0: resolved "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== +ws@^8.16.0: + version "8.16.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + ws@^8.5.0, ws@~8.11.0: version "8.11.0" resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== +xcode@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" + integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== + dependencies: + simple-plist "^1.1.0" + uuid "^7.0.3" + +xml2js@0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz#07afc447a97d2bd6507a1f76eeadddb09f7a8282" + integrity sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" xml@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== +xmlbuilder@^14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz#876b5aec4f05ffd5feb97b0a871c855d16fbeb8c" + integrity sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg== + +xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlhttprequest-ssl@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"