diff --git a/package.json b/package.json
index 4d54d6df..67c44cf3 100644
--- a/package.json
+++ b/package.json
@@ -18,9 +18,9 @@
"@emotion/styled": "^11.13.0",
"@headlessui/react": "^2.2.0",
"@hyperlane-xyz/registry": "23.4.0",
- "@hyperlane-xyz/sdk": "19.5.0",
- "@hyperlane-xyz/utils": "19.5.0",
- "@hyperlane-xyz/widgets": "19.5.0",
+ "@hyperlane-xyz/sdk": "19.7.0",
+ "@hyperlane-xyz/utils": "19.7.0",
+ "@hyperlane-xyz/widgets": "19.7.0",
"@interchain-ui/react": "^1.23.28",
"@metamask/post-message-stream": "6.1.2",
"@metamask/providers": "10.2.1",
diff --git a/src/features/transfer/FeeSectionButton.tsx b/src/features/transfer/FeeSectionButton.tsx
index 01b9415c..dbe42fd7 100644
--- a/src/features/transfer/FeeSectionButton.tsx
+++ b/src/features/transfer/FeeSectionButton.tsx
@@ -18,7 +18,7 @@ export function FeeSectionButton({
return (
<>
-
+
{isLoading ? (
) : fees ? (
diff --git a/src/features/transfer/TransferFeeModal.tsx b/src/features/transfer/TransferFeeModal.tsx
index fb5fa8ce..73980c35 100644
--- a/src/features/transfer/TransferFeeModal.tsx
+++ b/src/features/transfer/TransferFeeModal.tsx
@@ -61,6 +61,20 @@ export function TransferFeeModal({
)}
)}
+ {fees?.tokenFeeQuote && fees.tokenFeeQuote.amount > 0n && (
+
+
+ Token Fee
+
+ {isLoading ? (
+
+ ) : (
+ {`${fees.tokenFeeQuote.getDecimalFormattedAmount().toFixed(8) || '0'} ${
+ fees.tokenFeeQuote.token.symbol || ''
+ }`}
+ )}
+
+ )}
Read more about{' '}
>
);
@@ -696,6 +696,7 @@ function ReviewDetails({
return (
<>
{!isReview && }
+
0n && (
Local Gas (est.)
- {`${fees.localQuote.getDecimalFormattedAmount().toFixed(4) || '0'} ${
+ {`${fees.localQuote.getDecimalFormattedAmount().toFixed(8) || '0'} ${
fees.localQuote.token.symbol || ''
}`}
@@ -751,11 +752,19 @@ function ReviewDetails({
{fees?.interchainQuote && fees.interchainQuote.amount > 0n && (
Interchain Gas
- {`${fees.interchainQuote.getDecimalFormattedAmount().toFixed(4) || '0'} ${
+ {`${fees.interchainQuote.getDecimalFormattedAmount().toFixed(8) || '0'} ${
fees.interchainQuote.token.symbol || ''
}`}
)}
+ {fees?.tokenFeeQuote && fees.tokenFeeQuote.amount > 0n && (
+
+ Token Fee
+ {`${fees.tokenFeeQuote.getDecimalFormattedAmount().toFixed(8) || '0'} ${
+ fees.tokenFeeQuote.token.symbol || ''
+ }`}
+
+ )}
>
@@ -845,8 +854,20 @@ async function validateForm(
return [{ recipient: 'Warp Route address is not valid as recipient' }, null];
}
- const transferToken = await getTransferToken(warpCore, token, destinationToken);
- const amountWei = toWei(amount, transferToken.decimals);
+ const { address: sender, publicKey: senderPubKey } = getAccountAddressAndPubKey(
+ warpCore.multiProvider,
+ origin,
+ accounts,
+ );
+ const amountWei = toWei(amount, token.decimals);
+ const transferToken = await getLowestFeeTransferToken(
+ warpCore,
+ token,
+ destinationToken,
+ amountWei,
+ recipient,
+ sender,
+ );
const multiCollateralLimit = isMultiCollateralLimitExceeded(token, destination, amountWei);
if (multiCollateralLimit) {
@@ -858,17 +879,11 @@ async function validateForm(
];
}
- const { address, publicKey: senderPubKey } = getAccountAddressAndPubKey(
- warpCore.multiProvider,
- origin,
- accounts,
- );
-
const result = await warpCore.validateTransfer({
originTokenAmount: transferToken.amount(amountWei),
destination,
recipient,
- sender: address || '',
+ sender: sender || '',
senderPubKey: await senderPubKey,
});
diff --git a/src/features/transfer/fees.ts b/src/features/transfer/fees.ts
index 03c9d09c..cfe1df42 100644
--- a/src/features/transfer/fees.ts
+++ b/src/features/transfer/fees.ts
@@ -4,6 +4,7 @@ import { chainsRentEstimate } from '../../consts/chains';
import { logger } from '../../utils/logger';
import { getTokensWithSameCollateralAddresses, isValidMultiCollateralToken } from '../tokens/utils';
+// get the total amount combined of all the fees
export function getTotalFee({
interchainQuote,
localQuote,
@@ -55,11 +56,14 @@ export function getInterchainQuote(
// Checks if a token is a multi-collateral token and if so
// look for other tokens that are the same and returns
-// the one with the highest collateral in the destination
-export async function getTransferToken(
+// the one with the lowest fee
+export async function getLowestFeeTransferToken(
warpCore: WarpCore,
originToken: Token,
destinationToken: IToken,
+ amountWei: string,
+ recipient: string,
+ sender: string | undefined,
) {
if (!isValidMultiCollateralToken(originToken, destinationToken)) return originToken;
@@ -73,37 +77,76 @@ export async function getTransferToken(
if (tokensWithSameCollateralAddresses.length <= 1) return originToken;
logger.debug(
- 'Multiple multi-collateral tokens found for same collateral address, retrieving balances...',
+ 'Multiple multi-collateral tokens found for same collateral address, retrieving routes with collateral balance...',
);
- const tokenBalances: Array<{ token: Token; balance: bigint }> = [];
// fetch each destination token balance
const balanceResults = await Promise.allSettled(
tokensWithSameCollateralAddresses.map(async ({ originToken, destinationToken }) => {
try {
const balance = await warpCore.getTokenCollateral(destinationToken);
- return { token: originToken, balance };
+ return { originToken, destinationToken, balance };
} catch {
return null;
}
}),
);
+ const amountWeiBigInt = BigInt(amountWei);
+ const tokenBalances: Array<{ originToken: Token; destinationToken: Token; balance: bigint }> = [];
+ // filter tokens that have lower collateral in destination than the amount
for (const result of balanceResults) {
- if (result.status === 'fulfilled' && result.value) {
+ if (
+ result.status === 'fulfilled' &&
+ result.value?.balance &&
+ result.value.balance >= amountWeiBigInt
+ ) {
tokenBalances.push(result.value);
}
}
-
if (!tokenBalances.length) return originToken;
- // sort by balance to return the highest one
- tokenBalances.sort((a, b) => {
- if (a.balance > b.balance) return -1;
- else if (a.balance < b.balance) return 1;
- else return 0;
+ logger.debug('Retrieving fees for multi-collateral routes...');
+ // fetch each route fees
+ const feeResults = await Promise.allSettled(
+ tokenBalances.map(async ({ originToken, destinationToken }) => {
+ try {
+ const originTokenAmount = new TokenAmount(amountWei, originToken);
+ const fees = await warpCore.getInterchainTransferFee({
+ originTokenAmount,
+ destination: destinationToken.chainName,
+ recipient,
+ sender,
+ });
+ return { token: originToken, fees };
+ } catch {
+ return null;
+ }
+ }),
+ );
+
+ const tokenFees: Array<{ token: Token; tokenFee?: TokenAmount }> = [];
+ for (const result of feeResults) {
+ if (result.status === 'fulfilled' && result.value) {
+ tokenFees.push({ token: result.value.token, tokenFee: result.value.fees.tokenFeeQuote });
+ }
+ }
+ if (!tokenFees.length) return originToken;
+
+ // sort by token fees, no fees routes take precedence, then lowest fee to highest
+ tokenFees.sort((a, b) => {
+ const aFee = a.tokenFee?.amount;
+ const bFee = b.tokenFee?.amount;
+
+ if (aFee === undefined && bFee !== undefined) return -1;
+ if (aFee !== undefined && bFee === undefined) return 1;
+ if (aFee === undefined && bFee === undefined) return 0;
+
+ if (aFee! < bFee!) return -1;
+ if (aFee! > bFee!) return 1;
+ return 0;
});
- logger.debug('Found route with higher collateral in destination, switching route...');
- return tokenBalances[0].token;
+ logger.debug('Found route with lower fee, switching route...');
+ return tokenFees[0].token;
}
diff --git a/src/features/transfer/maxAmount.ts b/src/features/transfer/maxAmount.ts
index 50c70a5a..cf3cec6b 100644
--- a/src/features/transfer/maxAmount.ts
+++ b/src/features/transfer/maxAmount.ts
@@ -1,4 +1,4 @@
-import { MultiProtocolProvider, TokenAmount, WarpCore } from '@hyperlane-xyz/sdk';
+import { MultiProtocolProvider, Token, TokenAmount, WarpCore } from '@hyperlane-xyz/sdk';
import { ProtocolType } from '@hyperlane-xyz/utils';
import { AccountInfo, getAccountAddressAndPubKey } from '@hyperlane-xyz/widgets';
import { useMutation } from '@tanstack/react-query';
@@ -7,6 +7,7 @@ import { logger } from '../../utils/logger';
import { useMultiProvider } from '../chains/hooks';
import { isMultiCollateralLimitExceeded } from '../limits/utils';
import { useWarpCore } from '../tokens/hooks';
+import { getLowestFeeTransferToken } from './fees';
interface FetchMaxParams {
accounts: Record;
@@ -34,11 +35,26 @@ async function fetchMaxAmount(
try {
const { address, publicKey } = getAccountAddressAndPubKey(multiProvider, origin, accounts);
if (!address) return balance;
+ const originToken = new Token(balance.token);
+ const destinationToken = originToken.getConnectionForChain(destination)?.token;
+ if (!destinationToken) return undefined;
+
+ const transferToken = await getLowestFeeTransferToken(
+ warpCore,
+ originToken,
+ destinationToken,
+ balance.amount.toString(),
+ address,
+ address,
+ );
+ const tokenAmount = new TokenAmount(balance.amount, transferToken);
const maxAmount = await warpCore.getMaxTransferAmount({
- balance,
+ balance: tokenAmount,
destination,
sender: address,
senderPubKey: await publicKey,
+ // defaulting to address here for recipient
+ recipient: address,
});
const multiCollateralLimit = isMultiCollateralLimitExceeded(
diff --git a/src/features/transfer/useFeeQuotes.ts b/src/features/transfer/useFeeQuotes.ts
index c8f54853..fbf43bf8 100644
--- a/src/features/transfer/useFeeQuotes.ts
+++ b/src/features/transfer/useFeeQuotes.ts
@@ -1,23 +1,24 @@
import { Token, WarpCore, WarpCoreFeeEstimate } from '@hyperlane-xyz/sdk';
-import { HexString } from '@hyperlane-xyz/utils';
-import { getAccountAddressAndPubKey, useAccounts } from '@hyperlane-xyz/widgets';
+import { HexString, toWei } from '@hyperlane-xyz/utils';
+import { getAccountAddressAndPubKey, useAccounts, useDebounce } from '@hyperlane-xyz/widgets';
import { useQuery } from '@tanstack/react-query';
import { logger } from '../../utils/logger';
import { useMultiProvider } from '../chains/hooks';
import { useWarpCore } from '../tokens/hooks';
-import { getTransferToken } from './fees';
+import { getLowestFeeTransferToken } from './fees';
import { TransferFormValues } from './types';
const FEE_QUOTE_REFRESH_INTERVAL = 30_000; // 30s
export function useFeeQuotes(
- { destination, tokenIndex }: TransferFormValues,
+ { destination, amount, recipient, tokenIndex }: TransferFormValues,
enabled: boolean,
originToken: Token | undefined,
- searchForHighestCollateralToken: boolean = false,
+ searchForLowestFee: boolean = false,
) {
const multiProvider = useMultiProvider();
const warpCore = useWarpCore();
+ const debouncedAmount = useDebounce(amount, 500);
const { accounts } = useAccounts(multiProvider);
const { address: sender, publicKey: senderPubKey } = getAccountAddressAndPubKey(
@@ -26,13 +27,21 @@ export function useFeeQuotes(
accounts,
);
- const isFormValid = !!(originToken && destination && sender);
+ const isFormValid = !!(originToken && destination && debouncedAmount && recipient && sender);
const shouldFetch = enabled && isFormValid;
const { isLoading, isError, data, isFetching } = useQuery({
// The WarpCore class is not serializable, so we can't use it as a key
// eslint-disable-next-line @tanstack/query/exhaustive-deps
- queryKey: ['useFeeQuotes', destination, tokenIndex, sender, senderPubKey],
+ queryKey: [
+ 'useFeeQuotes',
+ tokenIndex,
+ destination,
+ sender,
+ senderPubKey,
+ debouncedAmount,
+ recipient,
+ ],
queryFn: () =>
fetchFeeQuotes(
warpCore,
@@ -40,7 +49,9 @@ export function useFeeQuotes(
destination,
sender,
senderPubKey,
- searchForHighestCollateralToken,
+ debouncedAmount,
+ recipient,
+ searchForLowestFee,
),
enabled: shouldFetch,
refetchInterval: FEE_QUOTE_REFRESH_INTERVAL,
@@ -55,23 +66,36 @@ async function fetchFeeQuotes(
destination?: ChainName,
sender?: Address,
senderPubKey?: Promise,
- searchForHighestCollateralToken: boolean = false,
+ amount?: string,
+ recipient?: string,
+ searchForLowestFee: boolean = false,
): Promise {
- if (!destination || !sender || !originToken) return null;
+ if (!originToken || !destination || !sender || !originToken || !amount || !recipient) return null;
let transferToken = originToken;
+ const amountWei = toWei(amount, transferToken.decimals);
- if (searchForHighestCollateralToken) {
+ // when true attempt to get route with lowest fee
+ if (searchForLowestFee) {
const destinationToken = originToken.getConnectionForChain(destination)?.token;
if (destinationToken) {
- transferToken = await getTransferToken(warpCore, originToken, destinationToken);
+ transferToken = await getLowestFeeTransferToken(
+ warpCore,
+ originToken,
+ destinationToken,
+ amountWei,
+ recipient,
+ sender,
+ );
}
}
+ const originTokenAmount = transferToken.amount(amountWei);
logger.debug('Fetching fee quotes');
return warpCore.estimateTransferRemoteFees({
- originToken: transferToken,
+ originTokenAmount,
destination,
sender,
senderPubKey: await senderPubKey,
+ recipient: recipient,
});
}
diff --git a/yarn.lock b/yarn.lock
index 56aec1d4..2a2f8724 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4605,14 +4605,14 @@ __metadata:
languageName: node
linkType: hard
-"@hyperlane-xyz/core@npm:9.0.17":
- version: 9.0.17
- resolution: "@hyperlane-xyz/core@npm:9.0.17"
+"@hyperlane-xyz/core@npm:10.0.1":
+ version: 10.0.1
+ resolution: "@hyperlane-xyz/core@npm:10.0.1"
dependencies:
"@arbitrum/nitro-contracts": "npm:^1.2.1"
"@chainlink/contracts-ccip": "npm:^1.5.0"
"@eth-optimism/contracts": "npm:^0.6.0"
- "@hyperlane-xyz/utils": "npm:19.5.0"
+ "@hyperlane-xyz/utils": "npm:19.7.0"
"@matterlabs/hardhat-zksync-solc": "npm:1.2.5"
"@matterlabs/hardhat-zksync-verify": "npm:1.7.1"
"@openzeppelin/contracts": "npm:^4.9.3"
@@ -4621,41 +4621,41 @@ __metadata:
"@ethersproject/abi": "*"
"@ethersproject/providers": "*"
"@types/sinon-chai": "*"
- checksum: 10/ac1774d353db6e4963f2cc1b7c5ac731d5fab1c29aedd432b0f8edb8cab90f72fb7556a6bef852fa57a7e54bff6bd3c40ed36e53ca5111be263d8475bb3fee25
+ checksum: 10/f33b921e57255214bd5c09189fd24313a5949ce446c4222665b0702298f0d9648d1d62044720b7a7e6ab081ec25bcdf4bed3a7a3f0d2005229a7917648e2fc35
languageName: node
linkType: hard
-"@hyperlane-xyz/cosmos-sdk@npm:19.5.0":
- version: 19.5.0
- resolution: "@hyperlane-xyz/cosmos-sdk@npm:19.5.0"
+"@hyperlane-xyz/cosmos-sdk@npm:19.7.0":
+ version: 19.7.0
+ resolution: "@hyperlane-xyz/cosmos-sdk@npm:19.7.0"
dependencies:
"@cosmjs/stargate": "npm:^0.32.4"
- "@hyperlane-xyz/cosmos-types": "npm:19.5.0"
- "@hyperlane-xyz/utils": "npm:19.5.0"
- checksum: 10/59efc866733d00fffca45a29f0bf59138fb63e54f624d61143131979127d5b246b3184b62f5985e890a0f838abddadf93426cae7c4df7695013c5a826c36edda
+ "@hyperlane-xyz/cosmos-types": "npm:19.7.0"
+ "@hyperlane-xyz/utils": "npm:19.7.0"
+ checksum: 10/7d5fe4f64af84f1dcb3005c13e90fb788c7273bccb04d88411627be920dc9a09e3af850df4181e4727cbaadbde91fe256a4d82739e45db9bd4a391a3845be2cf
languageName: node
linkType: hard
-"@hyperlane-xyz/cosmos-types@npm:19.5.0":
- version: 19.5.0
- resolution: "@hyperlane-xyz/cosmos-types@npm:19.5.0"
+"@hyperlane-xyz/cosmos-types@npm:19.7.0":
+ version: 19.7.0
+ resolution: "@hyperlane-xyz/cosmos-types@npm:19.7.0"
dependencies:
long: "npm:^5.2.4"
protobufjs: "npm:^7.4.0"
- checksum: 10/fcc7e0976860ce38c4fc401fa63a2fbdf1f5e580b1934d652a34a081da39f2c8c2d2632aa922955eeae94c5bca1bd2b271a69aa03e690cdda6527ceaf7c74800
+ checksum: 10/2c673e68ae5577c2df8928ee71af5709a75d36e0c6212e7a3dcad0875bb564f399fddfef443a4d504ed27248def24eaaf5ce052f95c90791da20ca676aeff362
languageName: node
linkType: hard
-"@hyperlane-xyz/radix-sdk@npm:19.5.0":
- version: 19.5.0
- resolution: "@hyperlane-xyz/radix-sdk@npm:19.5.0"
+"@hyperlane-xyz/radix-sdk@npm:19.7.0":
+ version: 19.7.0
+ resolution: "@hyperlane-xyz/radix-sdk@npm:19.7.0"
dependencies:
- "@hyperlane-xyz/utils": "npm:19.5.0"
+ "@hyperlane-xyz/utils": "npm:19.7.0"
"@radixdlt/babylon-core-api-sdk": "npm:^1.3.0"
"@radixdlt/babylon-gateway-api-sdk": "npm:^1.10.1"
"@radixdlt/radix-engine-toolkit": "npm:^1.0.5"
bignumber.js: "npm:^9.1.1"
- checksum: 10/891df33e29a094ccf2d425c498a9a0a69c413a876e24e60273b06091be0ad9ec93b1f702c77f2df591b2f1334456d0964ca10e76392177f3370769a7eaa22251
+ checksum: 10/249b4d4b8953568c0420267ce8d062879d9b27956f1ba34c521fc44eed2446a286317e3bcac6c0a72fbb08f74e27eaa9ff15a9fe8db74d3ae52299e451aa3a7a
languageName: node
linkType: hard
@@ -4670,9 +4670,9 @@ __metadata:
languageName: node
linkType: hard
-"@hyperlane-xyz/sdk@npm:19.5.0":
- version: 19.5.0
- resolution: "@hyperlane-xyz/sdk@npm:19.5.0"
+"@hyperlane-xyz/sdk@npm:19.7.0":
+ version: 19.7.0
+ resolution: "@hyperlane-xyz/sdk@npm:19.7.0"
dependencies:
"@arbitrum/sdk": "npm:^4.0.0"
"@aws-sdk/client-s3": "npm:^3.577.0"
@@ -4680,11 +4680,11 @@ __metadata:
"@cosmjs/cosmwasm-stargate": "npm:^0.32.4"
"@cosmjs/proto-signing": "npm:^0.32.4"
"@cosmjs/stargate": "npm:^0.32.4"
- "@hyperlane-xyz/core": "npm:9.0.17"
- "@hyperlane-xyz/cosmos-sdk": "npm:19.5.0"
- "@hyperlane-xyz/radix-sdk": "npm:19.5.0"
- "@hyperlane-xyz/starknet-core": "npm:19.5.0"
- "@hyperlane-xyz/utils": "npm:19.5.0"
+ "@hyperlane-xyz/core": "npm:10.0.1"
+ "@hyperlane-xyz/cosmos-sdk": "npm:19.7.0"
+ "@hyperlane-xyz/radix-sdk": "npm:19.7.0"
+ "@hyperlane-xyz/starknet-core": "npm:19.7.0"
+ "@hyperlane-xyz/utils": "npm:19.7.0"
"@safe-global/api-kit": "npm:4.0.0"
"@safe-global/protocol-kit": "npm:6.1.1"
"@safe-global/safe-core-sdk-types": "npm:5.1.0"
@@ -4704,22 +4704,22 @@ __metadata:
peerDependencies:
"@ethersproject/abi": "*"
"@ethersproject/providers": "*"
- checksum: 10/a0194fbe8749808ac52e9eae89e4cebaa51b610c7757bdb83779ecf382d3c8cf5e4433f6b96a08e2fc04a1d3505f65c2f7fa81fb1c7729ee09e448feacaa4752
+ checksum: 10/d233f402e8f1fa56f0746949508111c16aa7bbba4181c68a27051c7055dfa17dfe6d10cc82fad5b2f6b25cd358bf2fc1c002106fec8501c2f4c0a893037ea9fa
languageName: node
linkType: hard
-"@hyperlane-xyz/starknet-core@npm:19.5.0":
- version: 19.5.0
- resolution: "@hyperlane-xyz/starknet-core@npm:19.5.0"
+"@hyperlane-xyz/starknet-core@npm:19.7.0":
+ version: 19.7.0
+ resolution: "@hyperlane-xyz/starknet-core@npm:19.7.0"
dependencies:
starknet: "npm:^7.4.0"
- checksum: 10/131bb9c91bb1a0f96aa0442997cf0ef76f46e272e0b855127b22817fe10f0f3b5d28b596cbcc75bae36fb99c2509a69dd36615d61cefaff44497ef8ca9460bb7
+ checksum: 10/c025466b179bf90e9536cea28b35f0f934bb8f0660f8c215feb1532c7f229081eec06e3d0834300a9ba3bc62b826e5f75a7fa8f35658dd48f4440e035c9d6b94
languageName: node
linkType: hard
-"@hyperlane-xyz/utils@npm:19.5.0":
- version: 19.5.0
- resolution: "@hyperlane-xyz/utils@npm:19.5.0"
+"@hyperlane-xyz/utils@npm:19.7.0":
+ version: 19.7.0
+ resolution: "@hyperlane-xyz/utils@npm:19.7.0"
dependencies:
"@cosmjs/encoding": "npm:^0.32.4"
"@solana/web3.js": "npm:^1.98.4"
@@ -4738,7 +4738,7 @@ __metadata:
optional: true
pino-pretty:
optional: true
- checksum: 10/cf5568f5d26985388cc682a6f9bdcf2c0c725bdd8fe49f62fe39985188909554d557e3cc31746d1f6638626fbcc6d38f99235f6974612ab4261a976ef579c81c
+ checksum: 10/4e5d8d94a33ed147c1a25c402bac829d47a5c5e1e7a8f07e80220030c04698973fd08858a5f27718f41bff7e42a71c0aef8d6d9073557a3996ab656dc2770741
languageName: node
linkType: hard
@@ -4760,9 +4760,9 @@ __metadata:
"@emotion/styled": "npm:^11.13.0"
"@headlessui/react": "npm:^2.2.0"
"@hyperlane-xyz/registry": "npm:23.4.0"
- "@hyperlane-xyz/sdk": "npm:19.5.0"
- "@hyperlane-xyz/utils": "npm:19.5.0"
- "@hyperlane-xyz/widgets": "npm:19.5.0"
+ "@hyperlane-xyz/sdk": "npm:19.7.0"
+ "@hyperlane-xyz/utils": "npm:19.7.0"
+ "@hyperlane-xyz/widgets": "npm:19.7.0"
"@interchain-ui/react": "npm:^1.23.28"
"@metamask/post-message-stream": "npm:6.1.2"
"@metamask/providers": "npm:10.2.1"
@@ -4821,16 +4821,16 @@ __metadata:
languageName: unknown
linkType: soft
-"@hyperlane-xyz/widgets@npm:19.5.0":
- version: 19.5.0
- resolution: "@hyperlane-xyz/widgets@npm:19.5.0"
+"@hyperlane-xyz/widgets@npm:19.7.0":
+ version: 19.7.0
+ resolution: "@hyperlane-xyz/widgets@npm:19.7.0"
dependencies:
"@cosmjs/stargate": "npm:^0.32.4"
"@cosmos-kit/react": "npm:^2.18.0"
"@headlessui/react": "npm:^2.1.8"
- "@hyperlane-xyz/cosmos-sdk": "npm:19.5.0"
- "@hyperlane-xyz/sdk": "npm:19.5.0"
- "@hyperlane-xyz/utils": "npm:19.5.0"
+ "@hyperlane-xyz/cosmos-sdk": "npm:19.7.0"
+ "@hyperlane-xyz/sdk": "npm:19.7.0"
+ "@hyperlane-xyz/utils": "npm:19.7.0"
"@interchain-ui/react": "npm:^1.23.28"
"@radixdlt/babylon-gateway-api-sdk": "npm:^1.10.1"
"@radixdlt/radix-dapp-toolkit": "npm:^2.2.1"
@@ -4847,7 +4847,7 @@ __metadata:
peerDependencies:
react: ^18
react-dom: ^18
- checksum: 10/96002af01f2b42b01aeee9ed1bab032025dacb38dcf4cb5ee94e1fe22dcc4373ac79f263112dffca1c2c090c7a19a076b221afff19deae8dffedbd5924370321
+ checksum: 10/d6297e460fe9b7decfc749c41c78c10ba76a9b8bbf368aea6e55dd0633fed327074c5ba02b5e9e1fa16852db6a5e10fa36faf91bc9e4fc29b3a04de6b89a40cb
languageName: node
linkType: hard
@@ -5541,10 +5541,10 @@ __metadata:
languageName: node
linkType: hard
-"@lit-labs/ssr-dom-shim@npm:^1.2.0":
- version: 1.3.0
- resolution: "@lit-labs/ssr-dom-shim@npm:1.3.0"
- checksum: 10/a15c5d145a20f367a392cff91f2091ffe54457119ac26569670bbbe32760f86d1e250f865dc1bd0604641106376776c4862a8fff9adb44f9881b510747c08680
+"@lit-labs/ssr-dom-shim@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "@lit-labs/ssr-dom-shim@npm:1.4.0"
+ checksum: 10/a592a2d134f6f9c0e40aef2122226114b82d22f3308d375cb28e231342ee1dec8529bfcf283e8c9d80511c5cfc54bb6eaaaecf5f93f9a04d2be9d1663ab54705
languageName: node
linkType: hard
@@ -5558,11 +5558,11 @@ __metadata:
linkType: hard
"@lit/reactive-element@npm:^2.1.0":
- version: 2.1.0
- resolution: "@lit/reactive-element@npm:2.1.0"
+ version: 2.1.1
+ resolution: "@lit/reactive-element@npm:2.1.1"
dependencies:
- "@lit-labs/ssr-dom-shim": "npm:^1.2.0"
- checksum: 10/c13dbc370550b8f3cbdfff3524c4bf58fbda6e91689951ca376104d95c80df96182e0b1c9480786740711f67493f50166d261c79b020eb7a4a10b6794921c790
+ "@lit-labs/ssr-dom-shim": "npm:^1.4.0"
+ checksum: 10/5bd091d8149a8cb07e51ab58e218693204563ab87894528c7639e828aac9eb463b6d68048557c37a43f493cf310fff75ee337c3ced274903879c5e5e335df919
languageName: node
linkType: hard
@@ -9390,8 +9390,8 @@ __metadata:
linkType: hard
"@rollup/rollup-linux-x64-gnu@npm:^4.24.0":
- version: 4.44.2
- resolution: "@rollup/rollup-linux-x64-gnu@npm:4.44.2"
+ version: 4.52.5
+ resolution: "@rollup/rollup-linux-x64-gnu@npm:4.52.5"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
@@ -19550,13 +19550,13 @@ __metadata:
linkType: hard
"lit-element@npm:^4.2.0":
- version: 4.2.0
- resolution: "lit-element@npm:4.2.0"
+ version: 4.2.1
+ resolution: "lit-element@npm:4.2.1"
dependencies:
- "@lit-labs/ssr-dom-shim": "npm:^1.2.0"
+ "@lit-labs/ssr-dom-shim": "npm:^1.4.0"
"@lit/reactive-element": "npm:^2.1.0"
lit-html: "npm:^3.3.0"
- checksum: 10/0760140f9cf7eb71e327f04d51a41e3ae4c3fca2ddccca05fa3458d67124a2008044ef3d3812d021e2297ba8b3af7c06fa56b03860877bc09567c334b9d390ad
+ checksum: 10/0d1d306cb12c3ba840cd9baf376997891ece751220049aa4a3cbd6bab25ba21e30d45012662eddaccccc94fe9930e8a0ef36fb779bf22fbcd2184b7a794fee3d
languageName: node
linkType: hard
@@ -19581,13 +19581,13 @@ __metadata:
linkType: hard
"lit@npm:^3.1.2":
- version: 3.3.0
- resolution: "lit@npm:3.3.0"
+ version: 3.3.1
+ resolution: "lit@npm:3.3.1"
dependencies:
"@lit/reactive-element": "npm:^2.1.0"
lit-element: "npm:^4.2.0"
lit-html: "npm:^3.3.0"
- checksum: 10/442b8eabd5d1b4aee0ab34db0b67d5c07a988f30d345f4a68263275acf826816ba30937bb8d5d331dc260c2127cd8953f332dcc45edbf080d61c21291cb06330
+ checksum: 10/ec70ff33db610537fd7cfc608cc7728126ecfae2d5593aa94844c614d2f6840448f1b995a58aeba593b0bf0e8169af5988036c11d3c5b55313fe8e722417c17d
languageName: node
linkType: hard
@@ -24536,9 +24536,9 @@ __metadata:
linkType: hard
"tslog@npm:>=4.8.0":
- version: 4.9.3
- resolution: "tslog@npm:4.9.3"
- checksum: 10/134ea14335902b64a49e3ab02f03bab7746e114e1bed6c4a0e9aaf7927d2f7816f5fad50406b905e52fac9f9897cb3f19bd7be84e2c23153f0fc7752277d2622
+ version: 4.10.2
+ resolution: "tslog@npm:4.10.2"
+ checksum: 10/fb8f8a154876bcacd1a9ad7f4e40974623554508efe610edab5242562ccac2f7aa30a53971c49172e8fb9f4d096f2d0ca26a154f48d32d159d21f7d3a0dd0dc7
languageName: node
linkType: hard