From a378b3403e081b875186f3abe98bdf3a6dfe0cb1 Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 23 Dec 2024 14:25:47 +0700 Subject: [PATCH 1/6] chore: fix sui chain object parsing --- apps/maestro/src/server/routers/sui/index.ts | 3 +- pnpm-lock.yaml | 120 ++++++++++++++----- 2 files changed, 89 insertions(+), 34 deletions(-) diff --git a/apps/maestro/src/server/routers/sui/index.ts b/apps/maestro/src/server/routers/sui/index.ts index 3bf088b4..6439ba70 100644 --- a/apps/maestro/src/server/routers/sui/index.ts +++ b/apps/maestro/src/server/routers/sui/index.ts @@ -76,7 +76,8 @@ export const suiRouter = router({ const response = await fetch( `${suiServiceBaseUrl}/chain/devnet-amplifier` ); - const chainConfig = await response.json(); + const _chainConfig = await response.json(); + const chainConfig = _chainConfig.chains.sui; const { sender, symbol, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce1c937e..ace22405 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,8 +96,8 @@ importers: specifier: 0.0.0-snapshot.424bc13 version: 0.0.0-snapshot.424bc13(bufferutil@4.0.8)(utf-8-validate@6.0.3) '@axelar-network/axelarjs-sdk': - specifier: 0.17.1-alpha.5 - version: 0.17.1-alpha.5(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@6.0.3) + specifier: 0.17.1-alpha.10 + version: 0.17.1-alpha.10(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@6.0.3) '@axelarjs/api': specifier: workspace:* version: link:../../packages/api @@ -1096,8 +1096,8 @@ packages: resolution: {integrity: sha512-PQjV+HeJynmSRMhyM3SexwnbFNruSaiRUeNCWjV8/7CkdPsDqypoqIXVRVU8Zk92DUUHeqZZzL/3qP2LYuvlnA==} engines: {node: '>=16'} - '@axelar-network/axelarjs-sdk@0.17.1-alpha.5': - resolution: {integrity: sha512-4808AmhATVdtPULEukpr+nSiMfHF7g1q84uxHVo1tKv8jO7TQlguTknpJv7tZQ4s6p3K+b6+30wko6PEiN7iXQ==} + '@axelar-network/axelarjs-sdk@0.17.1-alpha.10': + resolution: {integrity: sha512-ZWpTAfnIPsc37UZuZJeobYErq0d9J27n9GDgv/D60cTFdLi06wak8/7zIt0v0HJnzgKVSUG1J27qDum4nbPRKQ==} '@axelar-network/axelarjs-types@0.33.0': resolution: {integrity: sha512-aCbX/5G+tgWPjr9tl3dQfJftWwRMkILz61ytach7dKqxtO9G9jlxpNvELJQ6gKVOodUtSY8qBCO/fWU19v4hdQ==} @@ -3435,10 +3435,6 @@ packages: resolution: {integrity: sha512-+5kSXmoPFrecxUb+fweqqy4eXRpgvv6H51IwRzJbxlolE0AmnM+5IJbLpTlM5RNZEmmocE7p5bUn1OijbuDVkw==} engines: {node: '>=18'} - '@mysten/sui@1.16.2': - resolution: {integrity: sha512-1Nfm7iTs3IVsiCXFPrnci9Y7fP9ldtwNOTe7JRkaHTg58VRhSe/nhHOvt6UsYiswVPUBqlsSF73KER5MpirCvw==} - engines: {node: '>=18'} - '@mysten/sui@1.17.0': resolution: {integrity: sha512-vL6QrH3l10dTatimPmz/feqMbYfEjvh8MPf3Xwn5tjuwDwBCS0ha1kdN+4vUpu6t0aCFviK+Df/vanORS8cbGQ==} engines: {node: '>=18'} @@ -4621,6 +4617,15 @@ packages: '@stablelib/x25519@1.0.3': resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + '@stellar/js-xdr@3.1.2': + resolution: {integrity: sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==} + + '@stellar/stellar-base@13.0.1': + resolution: {integrity: sha512-Xbd12mc9Oj/130Tv0URmm3wXG77XMshZtZ2yNCjqX5ZbMD5IYpbBs3DVCteLU/4SLj/Fnmhh1dzhrQXnk4r+pQ==} + + '@stellar/stellar-sdk@13.1.0': + resolution: {integrity: sha512-ARQkUdyGefXdTgwSF0eONkzv/geAqUfyfheJ9Nthz6GAr5b41fNwWW9UtE8JpXC4IpvE3t5elIUN5hKJzASN9w==} + '@storybook/addon-actions@8.4.7': resolution: {integrity: sha512-mjtD5JxcPuW74T6h7nqMxWTvDneFtokg88p6kQ5OnC1M259iAXb//yiSZgu/quunMHPCXSiqn4FNOSgASTSbsA==} peerDependencies: @@ -6070,6 +6075,10 @@ packages: base-x@5.0.0: resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==} + base32.js@0.1.0: + resolution: {integrity: sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==} + engines: {node: '>=0.12.0'} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -7420,6 +7429,10 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource@2.0.2: + resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} + engines: {node: '>=12.0.0'} + evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -7509,6 +7522,9 @@ packages: picomatch: optional: true + feaxios@0.0.23: + resolution: {integrity: sha512-eghR0A21fvbkcQBgZuMfQhrXxJzC0GNUGC9fXhBge33D+mFDTwl0aJ35zoQQn575BhyjQitRc5N4f+L4cP708g==} + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -8258,6 +8274,10 @@ packages: resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} engines: {node: '>= 0.4'} + is-retry-allowed@3.0.0: + resolution: {integrity: sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A==} + engines: {node: '>=12'} + is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -10670,6 +10690,9 @@ packages: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} + sodium-native@4.3.1: + resolution: {integrity: sha512-YdP64gAdpIKHfL4ttuX4aIfjeunh9f+hNeQJpE9C8UMndB3zkgZ7YmmGT4J2+v6Ibyp6Wem8D1TcSrtdW0bqtg==} + solc@0.8.26: resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} engines: {node: '>=10.0.0'} @@ -11115,6 +11138,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -11518,6 +11544,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + urijs@1.19.11: + resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} + url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -12144,7 +12173,7 @@ snapshots: '@axelar-network/axelar-gmp-sdk-solidity@5.6.4': {} - '@axelar-network/axelarjs-sdk@0.17.1-alpha.5(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@6.0.3)': + '@axelar-network/axelarjs-sdk@0.17.1-alpha.10(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@6.0.3)': dependencies: '@axelar-network/axelar-cgp-solidity': 6.4.0 '@axelar-network/axelarjs-types': 0.33.0 @@ -12153,7 +12182,8 @@ snapshots: '@ethersproject/abstract-provider': 5.7.0 '@ethersproject/networks': 5.7.1 '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) - '@mysten/sui': 1.16.2(typescript@5.7.2) + '@mysten/sui': 1.17.0(typescript@5.7.2) + '@stellar/stellar-sdk': 13.1.0 '@types/uuid': 8.3.4 bech32: 2.0.0 clone-deep: 4.0.1 @@ -15027,7 +15057,7 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.1.0 - '@noble/hashes': 1.5.0 + '@noble/hashes': 1.6.1 '@scure/base': 1.2.1 '@types/debug': 4.1.12 debug: 4.4.0(supports-color@8.1.1) @@ -15041,7 +15071,7 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.1.0 - '@noble/hashes': 1.5.0 + '@noble/hashes': 1.6.1 '@scure/base': 1.2.1 '@types/debug': 4.1.12 debug: 4.4.0(supports-color@8.1.1) @@ -15148,27 +15178,6 @@ snapshots: - '@gql.tada/vue-support' - typescript - '@mysten/sui@1.16.2(typescript@5.7.2)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) - '@mysten/bcs': 1.2.0 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@scure/bip32': 1.6.0 - '@scure/bip39': 1.5.0 - '@suchipi/femver': 1.0.0 - bech32: 2.0.0 - gql.tada: 1.8.9(graphql@16.9.0)(typescript@5.7.2) - graphql: 16.9.0 - jose: 5.9.6 - poseidon-lite: 0.2.1 - tweetnacl: 1.0.3 - valibot: 0.36.0 - transitivePeerDependencies: - - '@gql.tada/svelte-support' - - '@gql.tada/vue-support' - - typescript - '@mysten/sui@1.17.0(typescript@5.7.2)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -16611,6 +16620,32 @@ snapshots: '@stablelib/random': 1.0.2 '@stablelib/wipe': 1.0.1 + '@stellar/js-xdr@3.1.2': {} + + '@stellar/stellar-base@13.0.1': + dependencies: + '@stellar/js-xdr': 3.1.2 + base32.js: 0.1.0 + bignumber.js: 9.1.2 + buffer: 6.0.3 + sha.js: 2.4.11 + tweetnacl: 1.0.3 + optionalDependencies: + sodium-native: 4.3.1 + + '@stellar/stellar-sdk@13.1.0': + dependencies: + '@stellar/stellar-base': 13.0.1 + axios: 1.7.9 + bignumber.js: 9.1.2 + eventsource: 2.0.2 + feaxios: 0.0.23 + randombytes: 2.1.0 + toml: 3.0.0 + urijs: 1.19.11 + transitivePeerDependencies: + - debug + '@storybook/addon-actions@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.3))': dependencies: '@storybook/global': 5.0.0 @@ -19266,6 +19301,8 @@ snapshots: base-x@5.0.0: {} + base32.js@0.1.0: {} + base64-js@1.5.1: {} bech32@1.1.4: {} @@ -20958,6 +20995,8 @@ snapshots: events@3.3.0: {} + eventsource@2.0.2: {} + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 @@ -21068,6 +21107,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + feaxios@0.0.23: + dependencies: + is-retry-allowed: 3.0.0 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -21893,6 +21936,8 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + is-retry-allowed@3.0.0: {} + is-set@2.0.3: {} is-shared-array-buffer@1.0.3: @@ -24810,6 +24855,11 @@ snapshots: transitivePeerDependencies: - supports-color + sodium-native@4.3.1: + dependencies: + node-gyp-build: 4.8.4 + optional: true + solc@0.8.26(debug@4.4.0): dependencies: command-exists: 1.2.9 @@ -25331,6 +25381,8 @@ snapshots: toidentifier@1.0.1: {} + toml@3.0.0: {} + totalist@3.0.1: {} tr46@0.0.3: {} @@ -25752,6 +25804,8 @@ snapshots: dependencies: punycode: 2.3.1 + urijs@1.19.11: {} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 From 40eb040a1ea81f9b476f970704d6c7495ad8d47d Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 23 Dec 2024 14:26:55 +0700 Subject: [PATCH 2/6] chore: consider token decimals when renders gas fee --- .../DeployAndRegister.state.ts | 21 ++++++++----------- .../DeployAndRegister.state.ts | 11 +++++++--- apps/maestro/src/lib/utils/bigint.ts | 6 +++--- .../ConnectedInterchainTokensPage.tsx | 2 +- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/apps/maestro/src/features/CanonicalTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts b/apps/maestro/src/features/CanonicalTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts index fa532edd..f2f95c0f 100644 --- a/apps/maestro/src/features/CanonicalTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts +++ b/apps/maestro/src/features/CanonicalTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts @@ -1,3 +1,4 @@ +import { Maybe } from "@axelarjs/utils"; import { useEffect, useState } from "react"; import { formatEther } from "viem"; @@ -6,7 +7,8 @@ import { NEXT_PUBLIC_INTERCHAIN_DEPLOYMENT_EXECUTE_DATA, NEXT_PUBLIC_INTERCHAIN_DEPLOYMENT_GAS_LIMIT, } from "~/config/env"; -import { useChainId } from "~/lib/hooks"; +import { useBalance, useChainId } from "~/lib/hooks"; +import { toNumericString } from "~/lib/utils/bigint"; import { useEstimateGasFeeMultipleChainsQuery } from "~/services/axelarjsSDK/hooks"; import { useEVMChainConfigsQuery } from "~/services/axelarscan/hooks"; import { useCanonicalTokenDeploymentStateContainer } from "../../CanonicalTokenDeployment.state"; @@ -18,6 +20,7 @@ export type UseStep3ChainSelectionStateProps = { export function useStep3ChainSelectionState() { const { data: evmChains } = useEVMChainConfigsQuery(); const chainId = useChainId(); + const userBalance = useBalance(); const [isDeploying, setIsDeploying] = useState(false); const [totalGasFee, $setTotalGasFee] = useState(formatEther(0n)); const [sourceChainId, setSourceChainId] = useState( @@ -38,23 +41,17 @@ export function useStep3ChainSelectionState() { gasMultiplier: "auto", }); - useEffect( - () => - remoteDeploymentGasFees && - setTotalGasFee(remoteDeploymentGasFees.totalGasFee), - [remoteDeploymentGasFees] - ); + useEffect(() => { + Maybe.of(remoteDeploymentGasFees?.totalGasFee) + .map((value) => toNumericString(value, userBalance?.decimals || 18)) + .map($setTotalGasFee); + }, [remoteDeploymentGasFees, $setTotalGasFee, userBalance?.decimals]); const resetState = () => { setIsDeploying(false); $setTotalGasFee(formatEther(0n)); }; - const setTotalGasFee = (total: bigint) => { - const num = Number(formatEther(total)); - $setTotalGasFee(num.toFixed(4)); - }; - useEffect(() => { const candidateChain = evmChains?.find( (evmChain) => evmChain.chain_id === chainId diff --git a/apps/maestro/src/features/InterchainTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts b/apps/maestro/src/features/InterchainTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts index 9a002845..e7222f6b 100644 --- a/apps/maestro/src/features/InterchainTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts +++ b/apps/maestro/src/features/InterchainTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts @@ -7,7 +7,7 @@ import { NEXT_PUBLIC_INTERCHAIN_DEPLOYMENT_EXECUTE_DATA, NEXT_PUBLIC_INTERCHAIN_DEPLOYMENT_GAS_LIMIT, } from "~/config/env"; -import { useChainId } from "~/lib/hooks"; +import { useBalance, useChainId } from "~/lib/hooks"; import { toNumericString } from "~/lib/utils/bigint"; import { useEstimateGasFeeMultipleChainsQuery } from "~/services/axelarjsSDK/hooks"; import { useEVMChainConfigsQuery } from "~/services/axelarscan/hooks"; @@ -20,6 +20,7 @@ export type UseStep2ChainSelectionStateProps = { export function useStep2ChainSelectionState() { const { data: evmChains } = useEVMChainConfigsQuery(); const chainId = useChainId(); + const userBalance = useBalance(); const [isDeploying, setIsDeploying] = useState(false); const [totalGasFee, setTotalGasFee] = useState(formatEther(0n)); const [sourceChainId, setSourceChainId] = useState( @@ -40,11 +41,13 @@ export function useStep2ChainSelectionState() { gasMultiplier: "auto", }); + console.log("remoteDeploymentGasFees", remoteDeploymentGasFees); + useEffect(() => { Maybe.of(remoteDeploymentGasFees?.totalGasFee) - .map(toNumericString) + .map((value) => toNumericString(value, userBalance?.decimals || 18)) .map(setTotalGasFee); - }, [remoteDeploymentGasFees, setTotalGasFee]); + }, [remoteDeploymentGasFees, setTotalGasFee, userBalance?.decimals]); const resetState = () => { setIsDeploying(false); @@ -60,6 +63,8 @@ export function useStep2ChainSelectionState() { setSourceChainId(candidateChain.chain_name); }, [evmChains, chainId, sourceChainId]); + console.log("totalGasFee", totalGasFee); + return { state: { isDeploying, diff --git a/apps/maestro/src/lib/utils/bigint.ts b/apps/maestro/src/lib/utils/bigint.ts index 3df17aef..dd12ad50 100644 --- a/apps/maestro/src/lib/utils/bigint.ts +++ b/apps/maestro/src/lib/utils/bigint.ts @@ -1,7 +1,7 @@ -import { formatEther } from "viem"; +import { formatUnits } from "viem"; -export const toNumericString = (num: bigint) => - Number(formatEther(num)).toLocaleString("en", { +export const toNumericString = (num: bigint, decimals = 18) => + Number(formatUnits(num, decimals)).toLocaleString("en", { minimumFractionDigits: 2, maximumFractionDigits: 4, }); diff --git a/apps/maestro/src/ui/pages/InterchainTokenDetailsPage/ConnectedInterchainTokensPage.tsx b/apps/maestro/src/ui/pages/InterchainTokenDetailsPage/ConnectedInterchainTokensPage.tsx index bdfbeddc..0a9be5b8 100644 --- a/apps/maestro/src/ui/pages/InterchainTokenDetailsPage/ConnectedInterchainTokensPage.tsx +++ b/apps/maestro/src/ui/pages/InterchainTokenDetailsPage/ConnectedInterchainTokensPage.tsx @@ -382,7 +382,7 @@ const ConnectedInterchainTokensPage: FC = (
≈{" "} Date: Mon, 23 Dec 2024 14:27:36 +0700 Subject: [PATCH 3/6] feat: use axelarjs-sdk to estimate multihope gas fee --- .../maestro/src/services/axelarjsSDK/index.ts | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/apps/maestro/src/services/axelarjsSDK/index.ts b/apps/maestro/src/services/axelarjsSDK/index.ts index d23dfc2a..503a1f1c 100644 --- a/apps/maestro/src/services/axelarjsSDK/index.ts +++ b/apps/maestro/src/services/axelarjsSDK/index.ts @@ -16,24 +16,41 @@ export const client = new AxelarQueryAPI({ }); async function estimateGasFee(params: EstimateGasFeeInput): Promise { - let response; - console.log("params estimateGasFee", params); // TODO: remove when sdk support for sui is ready if ( params.sourceChainId.includes("sui") || params.destinationChainId.includes("sui") ) { - response = "20000000000000000"; - } else - response = await client.estimateGasFee( - params.sourceChainId, - params.destinationChainId, - params.gasLimit, - params.gasMultiplier, - params.sourceChainTokenSymbol, - params.minGasPrice, - params.executeData as `0x${string}` | undefined - ); + const hopParams = [ + { + ...params, + sourceChain: params.sourceChainId, + destinationChain: "axelar", + gasLimit: params.gasLimit.toString(), + }, + { + ...params, + sourceChain: "axelar", + destinationChain: params.destinationChainId, + gasLimit: params.gasLimit.toString(), + }, + ]; + + const fee = await client.estimateMultihopFee(hopParams); + + console.log("estimateMultihopFee", fee); + return BigInt(fee as string); + } + + const response = await client.estimateGasFee( + params.sourceChainId, + params.destinationChainId, + params.gasLimit, + params.gasMultiplier, + params.sourceChainTokenSymbol, + params.minGasPrice, + params.executeData as `0x${string}` | undefined + ); const rawFee = typeof response === "string" From d1e1c547bf260ac58df2b5e2099f1222726c8312 Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 23 Dec 2024 14:37:09 +0700 Subject: [PATCH 4/6] feat: implement multi hop fee --- .../DeployAndRegister.state.ts | 4 -- .../maestro/src/services/axelarjsSDK/index.ts | 64 ++++++------------- 2 files changed, 18 insertions(+), 50 deletions(-) diff --git a/apps/maestro/src/features/InterchainTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts b/apps/maestro/src/features/InterchainTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts index e7222f6b..c4229855 100644 --- a/apps/maestro/src/features/InterchainTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts +++ b/apps/maestro/src/features/InterchainTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts @@ -41,8 +41,6 @@ export function useStep2ChainSelectionState() { gasMultiplier: "auto", }); - console.log("remoteDeploymentGasFees", remoteDeploymentGasFees); - useEffect(() => { Maybe.of(remoteDeploymentGasFees?.totalGasFee) .map((value) => toNumericString(value, userBalance?.decimals || 18)) @@ -63,8 +61,6 @@ export function useStep2ChainSelectionState() { setSourceChainId(candidateChain.chain_name); }, [evmChains, chainId, sourceChainId]); - console.log("totalGasFee", totalGasFee); - return { state: { isDeploying, diff --git a/apps/maestro/src/services/axelarjsSDK/index.ts b/apps/maestro/src/services/axelarjsSDK/index.ts index 503a1f1c..9e9b96a7 100644 --- a/apps/maestro/src/services/axelarjsSDK/index.ts +++ b/apps/maestro/src/services/axelarjsSDK/index.ts @@ -16,52 +16,24 @@ export const client = new AxelarQueryAPI({ }); async function estimateGasFee(params: EstimateGasFeeInput): Promise { - // TODO: remove when sdk support for sui is ready - if ( - params.sourceChainId.includes("sui") || - params.destinationChainId.includes("sui") - ) { - const hopParams = [ - { - ...params, - sourceChain: params.sourceChainId, - destinationChain: "axelar", - gasLimit: params.gasLimit.toString(), - }, - { - ...params, - sourceChain: "axelar", - destinationChain: params.destinationChainId, - gasLimit: params.gasLimit.toString(), - }, - ]; - - const fee = await client.estimateMultihopFee(hopParams); - - console.log("estimateMultihopFee", fee); - return BigInt(fee as string); - } - - const response = await client.estimateGasFee( - params.sourceChainId, - params.destinationChainId, - params.gasLimit, - params.gasMultiplier, - params.sourceChainTokenSymbol, - params.minGasPrice, - params.executeData as `0x${string}` | undefined - ); - - const rawFee = - typeof response === "string" - ? response - : response.baseFee + - response.l1ExecutionFeeWithMultiplier + - response.executionFeeWithMultiplier; - - console.log("rawFee", rawFee); - - return BigInt(rawFee); + const hopParams = [ + { + ...params, + sourceChain: params.sourceChainId, + destinationChain: "axelar", + gasLimit: params.gasLimit.toString(), + }, + { + ...params, + sourceChain: "axelar", + destinationChain: params.destinationChainId, + gasLimit: params.gasLimit.toString(), + }, + ]; + + const fee = await client.estimateMultihopFee(hopParams); + + return BigInt(fee as string); } async function estimateGasFeeMultipleChains( From a5c6ba7a87ca0831a5726b881cb6b74853dbb65e Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 23 Dec 2024 14:40:25 +0700 Subject: [PATCH 5/6] chore: update the js sdk --- apps/maestro/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/maestro/package.json b/apps/maestro/package.json index 7a9a7e91..3aec8ccb 100644 --- a/apps/maestro/package.json +++ b/apps/maestro/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "@axelar-network/axelar-cgp-sui": "0.0.0-snapshot.424bc13", - "@axelar-network/axelarjs-sdk": "0.17.1-alpha.5", + "@axelar-network/axelarjs-sdk": "0.17.1-alpha.10", "@axelarjs/api": "workspace:*", "@axelarjs/core": "workspace:*", "@axelarjs/evm": "workspace:*", From ca239e1103076b44f09290f50c906acc5597edfc Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 23 Dec 2024 14:50:21 +0700 Subject: [PATCH 6/6] chore: fix build error --- .../steps/deploy-and-register/DeployAndRegister.state.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/maestro/src/features/CanonicalTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts b/apps/maestro/src/features/CanonicalTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts index f2f95c0f..9d41adce 100644 --- a/apps/maestro/src/features/CanonicalTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts +++ b/apps/maestro/src/features/CanonicalTokenDeployment/steps/deploy-and-register/DeployAndRegister.state.ts @@ -74,7 +74,7 @@ export function useStep3ChainSelectionState() { actions: { resetState, setIsDeploying, - setTotalGasFee, + $setTotalGasFee, setSourceChainId, }, };