From e1ec010359dc91f22f64f9f7b90df8a1201f2716 Mon Sep 17 00:00:00 2001 From: Pegasus <83475418+0xp3gasus@users.noreply.github.com> Date: Fri, 2 Feb 2024 13:36:32 +0100 Subject: [PATCH] 1026 Thorchain util functions (#1027) * Util functions * Changeset version file * Typo --- .changeset/slimy-balloons-tie.md | 5 +++ packages/xchain-thorchain/package.json | 1 + packages/xchain-thorchain/src/client.ts | 17 ++------- packages/xchain-thorchain/src/utils.ts | 50 ++++++++++++++++++++++++- yarn.lock | 18 ++++----- 5 files changed, 67 insertions(+), 24 deletions(-) create mode 100644 .changeset/slimy-balloons-tie.md diff --git a/.changeset/slimy-balloons-tie.md b/.changeset/slimy-balloons-tie.md new file mode 100644 index 000000000..14a777518 --- /dev/null +++ b/.changeset/slimy-balloons-tie.md @@ -0,0 +1,5 @@ +--- +'@xchainjs/xchain-thorchain': patch +--- + +getDenom, getChainId and getPrefix util functions diff --git a/packages/xchain-thorchain/package.json b/packages/xchain-thorchain/package.json index 02d456266..6e3c18069 100644 --- a/packages/xchain-thorchain/package.json +++ b/packages/xchain-thorchain/package.json @@ -39,6 +39,7 @@ "@xchainjs/xchain-client": "0.16.1", "@xchainjs/xchain-cosmos-sdk": "0.2.1", "@xchainjs/xchain-util": "0.13.2", + "axios": "1.3.6", "bignumber.js": "9.0.0", "protobufjs": "6.11.4" }, diff --git a/packages/xchain-thorchain/src/client.ts b/packages/xchain-thorchain/src/client.ts index d88348677..b0e33aeb0 100644 --- a/packages/xchain-thorchain/src/client.ts +++ b/packages/xchain-thorchain/src/client.ts @@ -17,7 +17,7 @@ import { bech32ToBase64, makeClientPath, } from '@xchainjs/xchain-cosmos-sdk' -import { Address, Asset, assetFromString, assetToString, isSynthAsset } from '@xchainjs/xchain-util' +import { Address, Asset, assetFromString } from '@xchainjs/xchain-util' import { BigNumber } from 'bignumber.js' import { TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx' @@ -32,7 +32,7 @@ import { defaultClientConfig, } from './const' import { DepositParam, DepositTx, TxOfflineParams } from './types' -import { getDefaultExplorers, getExplorerAddressUrl, getExplorerTxUrl, isAssetRuneNative as isAssetRune } from './utils' +import { getDefaultExplorers, getDenom, getExplorerAddressUrl, getExplorerTxUrl, getPrefix } from './utils' /** * Interface for custom Thorchain client @@ -70,14 +70,7 @@ export class Client extends CosmosSDKClient implements ThorchainClient { * @returns the address prefix */ protected getPrefix(network: Network): string { - switch (network) { - case Network.Mainnet: - return 'thor' - case Network.Stagenet: - return 'sthor' - case Network.Testnet: - return 'tthor' - } + return getPrefix(network) } /** @@ -139,9 +132,7 @@ export class Client extends CosmosSDKClient implements ThorchainClient { * @returns {string} The denomination of the given asset. */ public getDenom(asset: Asset): string | null { - if (isAssetRune(asset)) return RUNE_DENOM - if (isSynthAsset(asset)) return assetToString(asset).toLowerCase() - return asset.symbol.toLowerCase() + return getDenom(asset) } /** diff --git a/packages/xchain-thorchain/src/utils.ts b/packages/xchain-thorchain/src/utils.ts index 2d5f8d4b9..d3acd93e7 100644 --- a/packages/xchain-thorchain/src/utils.ts +++ b/packages/xchain-thorchain/src/utils.ts @@ -1,7 +1,8 @@ import { Network, RootDerivationPaths, TxHash } from '@xchainjs/xchain-client' -import { Address, Asset, assetToString } from '@xchainjs/xchain-util' +import { Address, Asset, assetToString, isSynthAsset } from '@xchainjs/xchain-util' +import axios from 'axios' -import { AssetRuneNative as AssetRUNE, DEFAULT_EXPLORER_URL } from './const' +import { AssetRuneNative as AssetRUNE, DEFAULT_EXPLORER_URL, RUNE_DENOM } from './const' export const getDefaultClientUrls = (): Record => { return { @@ -41,3 +42,48 @@ export const getExplorerTxUrl = (tx: TxHash): Record => ({ * @returns {boolean} `true` or `false` */ export const isAssetRuneNative = (asset: Asset): boolean => assetToString(asset) === assetToString(AssetRUNE) + +/** + * Get denomination from Asset + * + * @param {Asset} asset + * @returns {string} The denomination of the given asset. + */ +export const getDenom = (asset: Asset) => { + if (isAssetRuneNative(asset)) return RUNE_DENOM + if (isSynthAsset(asset)) return assetToString(asset).toLowerCase() + return asset.symbol.toLowerCase() +} + +/** + * Get chain id from node url + * + * @param {string} nodeUrl + * @returns the chainId + */ +export const getChainId = async (nodeUrl: string): Promise => { + /** + * TODO: To avoid axios dependency. ChainId can be retrieved from the Stargate client, to achieve this, + * getChainId has to work with JSON-RPC endpoint instead of REST endpoints + */ + const { data } = await axios.get<{ default_node_info?: { network?: string } }>( + `${nodeUrl}/cosmos/base/tendermint/v1beta1/node_info`, + ) + return data?.default_node_info?.network || Promise.reject('Could not parse chain id') +} + +/** + * Get address prefix by network + * @param {Network} network The network of which return the prefix + * @returns the address prefix + */ +export const getPrefix = (network: Network): string => { + switch (network) { + case Network.Mainnet: + return 'thor' + case Network.Stagenet: + return 'sthor' + case Network.Testnet: + return 'tthor' + } +} diff --git a/yarn.lock b/yarn.lock index d8c335a7e..ab38b47f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3578,6 +3578,15 @@ axios@0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" +axios@1.3.6, axios@^1.0.0, axios@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.6.tgz#1ace9a9fb994314b5f6327960918406fa92c6646" + integrity sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axios@^0.19.0: version "0.19.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" @@ -3599,15 +3608,6 @@ axios@^0.23.0: dependencies: follow-redirects "^1.14.4" -axios@^1.0.0, axios@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.6.tgz#1ace9a9fb994314b5f6327960918406fa92c6646" - integrity sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - b4a@^1.6.0: version "1.6.3" resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.3.tgz#cce6e8a2f0d0774e5fe8062086827e979970266d"