diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b53fd77b..daef60b1 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -3,9 +3,9 @@ name: ci
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
- branches: [main, nautilus, nexus]
+ branches: [main, nautilus, nexus, injective]
pull_request:
- branches: [main, nautilus, nexus]
+ branches: [main, nautilus, nexus, injective]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
diff --git a/CUSTOMIZE.md b/CUSTOMIZE.md
index 21b75ed5..682c7913 100644
--- a/CUSTOMIZE.md
+++ b/CUSTOMIZE.md
@@ -33,7 +33,7 @@ The logo images you should change are:
- `./src/images/logos/app-logo.svg`
- `./src/images/logos/app-name.svg`
-- `./src/images/logos/app-title.png`
+- `./src/images/logos/app-title.svg`
These are images are primarily used in the header and footer files:
diff --git a/package.json b/package.json
index 0f0c15e2..5367a54e 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@hyperlane-xyz/warp-ui-template",
"description": "A web app template for building Hyperlane Warp Route UIs",
- "version": "3.5.1",
+ "version": "3.6.1",
"author": "J M Rossy",
"dependencies": {
"@chakra-ui/next-js": "^2.1.5",
@@ -16,8 +16,8 @@
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@headlessui/react": "^1.7.14",
- "@hyperlane-xyz/sdk": "^3.5.1",
- "@hyperlane-xyz/utils": "^3.5.1",
+ "@hyperlane-xyz/sdk": "^3.6.1",
+ "@hyperlane-xyz/utils": "^3.6.1",
"@hyperlane-xyz/widgets": "^3.1.4",
"@metamask/jazzicon": "https://github.com/jmrossy/jazzicon#7a8df28974b4e81129bfbe3cab76308b889032a6",
"@rainbow-me/rainbowkit": "1.3.0",
@@ -89,10 +89,12 @@
},
"types": "dist/src/index.d.ts",
"resolutions": {
- "ethers": "^5.7",
- "zustand": "^4.4",
+ "axios": "0.27.2",
"bn.js": "^5.2",
+ "cosmjs-types": "0.9",
+ "ethers": "^5.7",
+ "lit-html": "2.8.0",
"viem": "1.20.0",
- "lit-html": "2.8.0"
+ "zustand": "^4.4"
}
}
diff --git a/public/browserconfig.xml b/public/browserconfig.xml
index f4a9f372..d416bc53 100644
--- a/public/browserconfig.xml
+++ b/public/browserconfig.xml
@@ -3,7 +3,7 @@
- #025aa1
+ #ffffff
diff --git a/public/icon.png b/public/icon.png
deleted file mode 100644
index 2f14c8d6..00000000
Binary files a/public/icon.png and /dev/null differ
diff --git a/public/logo-with-text.png b/public/logo-with-text.png
deleted file mode 100644
index c944efa3..00000000
Binary files a/public/logo-with-text.png and /dev/null differ
diff --git a/public/logo.png b/public/logo.png
new file mode 100644
index 00000000..774c5ce5
Binary files /dev/null and b/public/logo.png differ
diff --git a/public/logo.svg b/public/logo.svg
deleted file mode 100644
index 39b16cad..00000000
--- a/public/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/components/layout/AppLayout.tsx b/src/components/layout/AppLayout.tsx
index ca467468..5f4c283d 100644
--- a/src/components/layout/AppLayout.tsx
+++ b/src/components/layout/AppLayout.tsx
@@ -2,6 +2,7 @@ import Head from 'next/head';
import Image from 'next/image';
import { PropsWithChildren } from 'react';
+import { APP_NAME } from '../../consts/app';
import Planet1 from '../../images/planets/planet-1.webp';
import Planet2 from '../../images/planets/planet-2.webp';
import { Footer } from '../nav/Footer';
@@ -13,7 +14,7 @@ export function AppLayout({ children }: PropsWithChildren) {
{/* https://nextjs.org/docs/messages/no-document-viewport-meta */}
- Hyperlane Nexus Bridge
+ {APP_NAME}
; // Optional map of API keys for block explorer
showTipBox: boolean; // Show/Hide the blue tip box above the transfer form
@@ -21,7 +21,7 @@ interface Config {
}
export const config: Config = Object.freeze({
- debug: isDevMode,
+ isDevMode,
version,
explorerApiKeys,
showTipBox: true,
diff --git a/src/consts/igpQuotes.ts b/src/consts/igpQuotes.ts
new file mode 100644
index 00000000..85650c43
--- /dev/null
+++ b/src/consts/igpQuotes.ts
@@ -0,0 +1,11 @@
+import { ProtocolType } from '@hyperlane-xyz/utils';
+
+// IGP Quote overrides can be set here
+// If specified, this value will be used instead of querying the token adapter
+// Protocol to value | map
+export const DEFAULT_IGP_QUOTES: Partial<
+ Record>
+> = {
+ [ProtocolType.Sealevel]: '10000',
+ [ProtocolType.Cosmos]: '270000',
+};
diff --git a/src/consts/values.ts b/src/consts/values.ts
index 17a28d8b..b7c66e66 100644
--- a/src/consts/values.ts
+++ b/src/consts/values.ts
@@ -3,7 +3,5 @@ export const SOL_ZERO_ADDRESS = '00000000000000000000000000000000000000000000';
export const COSMOS_ZERO_ADDRESS = 'cosmos100000000000000000000000000000000000000';
// Strangely, this is not included in any of the Solana packages
export const SOL_SPL_NOOP_ADDRESS = 'noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV';
-export const SOL_IGP_QUOTE = '10000';
-export const COSM_IGP_QUOTE = '270000';
// Placeholder chain for use with cosmos-kit wallet hooks that require a chain name
export const PLACEHOLDER_COSMOS_CHAIN = 'cosmoshub';
diff --git a/src/features/chains/cosmosDefault.ts b/src/features/chains/cosmosDefault.ts
index 20c85568..03906fe1 100644
--- a/src/features/chains/cosmosDefault.ts
+++ b/src/features/chains/cosmosDefault.ts
@@ -9,6 +9,7 @@ export const cosmosDefaultChain: ChainMetadata = {
domainId: 1234, // TODO
bech32Prefix: 'cosmos',
slip44: 118,
+ grpcUrls: [{ http: 'grpc-cosmoshub-ia.cosmosia.notional.ventures:443' }],
rpcUrls: [{ http: 'https://rpc-cosmoshub.blockapsis.com' }],
restUrls: [{ http: 'https://lcd-cosmoshub.blockapsis.com' }],
nativeToken: {
diff --git a/src/features/chains/utils.ts b/src/features/chains/utils.ts
index b3605316..85d54404 100644
--- a/src/features/chains/utils.ts
+++ b/src/features/chains/utils.ts
@@ -10,7 +10,7 @@ export function getChainDisplayName(id: ChainCaip2Id, shortName = false) {
const metadata = getMultiProvider().tryGetChainMetadata(reference || 0);
if (!metadata) return 'Unknown';
const displayName = shortName ? metadata.displayNameShort : metadata.displayName;
- return toTitleCase(displayName || metadata.displayName || metadata.name);
+ return displayName || metadata.displayName || toTitleCase(metadata.name);
}
export function isPermissionlessChain(id: ChainCaip2Id) {
diff --git a/src/features/tokens/AdapterFactory.ts b/src/features/tokens/AdapterFactory.ts
index dde892fc..b514b1bb 100644
--- a/src/features/tokens/AdapterFactory.ts
+++ b/src/features/tokens/AdapterFactory.ts
@@ -240,7 +240,7 @@ export class AdapterFactory {
token: convertToProtocolAddress(baseTokenAddress, protocol, bech32Prefix),
warpRouter: convertToProtocolAddress(routerAddress, protocol, bech32Prefix),
},
- tokenMetadata.igpTokenAddress || baseTokenAddress,
+ tokenMetadata.igpTokenAddressOrDenom || baseTokenAddress,
);
} else {
throw new Error(`Unsupported protocol: ${protocol}`);
diff --git a/src/features/tokens/types.ts b/src/features/tokens/types.ts
index 43eef6ad..8733550f 100644
--- a/src/features/tokens/types.ts
+++ b/src/features/tokens/types.ts
@@ -18,7 +18,7 @@ const commonTokenFields = z.object({
symbol: z.string().optional(),
decimals: z.number().nonnegative().optional(), // decimals == 0 for NFTs
logoURI: z.string().optional(),
- igpTokenAddress: z.string().optional(),
+ igpTokenAddressOrDenom: z.string().optional(),
});
type CommonTokenFields = z.infer;
@@ -91,7 +91,7 @@ interface BaseTokenMetadata extends MinimalTokenMetadata {
type: ExtendedTokenType;
tokenCaip19Id: TokenCaip19Id;
routerAddress: Address; // Shared name for hypCollateralAddr or hypNativeAddr
- igpTokenAddress?: Address;
+ igpTokenAddressOrDenom?: Address;
logoURI?: string;
}
diff --git a/src/features/transfer/useIgpQuote.ts b/src/features/transfer/useIgpQuote.ts
index 355e2fca..feebe80e 100644
--- a/src/features/transfer/useIgpQuote.ts
+++ b/src/features/transfer/useIgpQuote.ts
@@ -2,11 +2,11 @@ import { useQuery } from '@tanstack/react-query';
import { useEffect } from 'react';
import { IHypTokenAdapter } from '@hyperlane-xyz/sdk';
-import { ProtocolType, fromWei } from '@hyperlane-xyz/utils';
+import { ProtocolType, fromWei, isAddress } from '@hyperlane-xyz/utils';
import { useToastError } from '../../components/toast/useToastError';
-import { COSM_IGP_QUOTE, SOL_IGP_QUOTE } from '../../consts/values';
-import { getChainReference, getProtocolType } from '../caip/chains';
+import { DEFAULT_IGP_QUOTES } from '../../consts/igpQuotes';
+import { getChainReference, parseCaip2Id } from '../caip/chains';
import { AssetNamespace, getCaip19Id, getNativeTokenAddress } from '../caip/tokens';
import { getChainMetadata, getMultiProvider } from '../multiProvider';
import { Route } from '../routes/types';
@@ -22,11 +22,6 @@ import { findTokensByAddress, getToken } from '../tokens/metadata';
import { IgpQuote, IgpTokenType } from './types';
-const DEFAULT_IGP_QUOTES = {
- [ProtocolType.Sealevel]: SOL_IGP_QUOTE,
- [ProtocolType.Cosmos]: COSM_IGP_QUOTE,
-};
-
export function useIgpQuote(route?: Route) {
const setIgpQuote = useStore((state) => state.setIgpQuote);
@@ -49,14 +44,16 @@ export function useIgpQuote(route?: Route) {
export async function fetchIgpQuote(route: Route, adapter?: IHypTokenAdapter): Promise {
const { baseTokenCaip19Id, originCaip2Id, destCaip2Id: destinationCaip2Id } = route;
- const originProtocol = getProtocolType(originCaip2Id);
+ const { protocol: originProtocol, reference: originChainId } = parseCaip2Id(originCaip2Id);
const baseToken = getToken(baseTokenCaip19Id);
if (!baseToken) throw new Error(`No base token found for ${baseTokenCaip19Id}`);
let weiAmount: string;
- if (DEFAULT_IGP_QUOTES[originProtocol]) {
- // If a default is set for the origin protocol, use that
- weiAmount = DEFAULT_IGP_QUOTES[originProtocol];
+ const defaultQuotes = DEFAULT_IGP_QUOTES[originProtocol];
+ if (typeof defaultQuotes === 'string') {
+ weiAmount = defaultQuotes;
+ } else if (defaultQuotes?.[originChainId]) {
+ weiAmount = defaultQuotes[originChainId];
} else {
// Otherwise, compute IGP quote via the adapter
adapter ||= AdapterFactory.HypTokenAdapterFromRouteOrigin(route);
@@ -73,9 +70,13 @@ export async function fetchIgpQuote(route: Route, adapter?: IHypTokenAdapter): P
let tokenDecimals: number;
// If the token has an explicit IGP token address set, use that
// Custom igpTokenAddress configs are supported only from the base (i.e. collateral) token is supported atm
- if (isRouteFromBase && baseToken.igpTokenAddress) {
+ if (
+ isRouteFromBase &&
+ baseToken.igpTokenAddressOrDenom &&
+ isAddress(baseToken.igpTokenAddressOrDenom)
+ ) {
type = IgpTokenType.TokenSeparate;
- const igpToken = findTokensByAddress(baseToken.igpTokenAddress)[0];
+ const igpToken = findTokensByAddress(baseToken.igpTokenAddressOrDenom)[0];
tokenCaip19Id = igpToken.tokenCaip19Id;
// Note this assumes the u prefix because only cosmos tokens use this case
tokenSymbol = igpToken.symbol;
diff --git a/src/features/transfer/useTokenTransfer.ts b/src/features/transfer/useTokenTransfer.ts
index 3a195375..b1668795 100644
--- a/src/features/transfer/useTokenTransfer.ts
+++ b/src/features/transfer/useTokenTransfer.ts
@@ -17,7 +17,6 @@ import {
import { ProtocolType, toWei } from '@hyperlane-xyz/utils';
import { toastTxSuccess } from '../../components/toast/TxSuccessToast';
-import { COSM_IGP_QUOTE } from '../../consts/values';
import { logger } from '../../utils/logger';
import { parseCaip2Id } from '../caip/chains';
import { isNonFungibleToken } from '../caip/tokens';
@@ -179,7 +178,7 @@ async function executeTransfer({
logger.debug('Transfer transaction confirmed, hash:', transferTxHash);
toastTxSuccess('Remote transfer started!', transferTxHash, originCaip2Id);
} catch (error) {
- logger.error(`Error at stage ${status} `, error);
+ logger.error(`Error at stage ${status}`, error);
updateTransferStatus(transferIndex, TransferStatus.Failed);
if (JSON.stringify(error).includes('ChainMismatchError')) {
// Wagmi switchNetwork call helps prevent this but isn't foolproof
@@ -399,6 +398,7 @@ async function executeIbcTransfer({
};
let adapter: IHypTokenAdapter;
+ let txValue: string | undefined = undefined;
if (isIbcOnlyRoute(tokenRoute)) {
adapter = new CosmIbcTokenAdapter(chainName, multiProvider, {}, adapterProperties);
} else {
@@ -416,6 +416,8 @@ async function executeIbcTransfer({
intermediateChainName,
},
);
+ const igpQuote = await fetchIgpQuote(tokenRoute, adapter);
+ txValue = igpQuote.weiAmount;
}
const transferTxRequest = (await adapter.populateTransferRemoteTx({
@@ -423,9 +425,7 @@ async function executeIbcTransfer({
recipient: recipientAddress,
fromAccountOwner: activeAccountAddress,
destination: destinationDomainId,
- // TODO have this use fetchIgpQuote?
- // Will be required if/when cosmos uses dynamic IGP fees
- txValue: COSM_IGP_QUOTE,
+ txValue,
})) as MsgTransferEncodeObject;
updateStatus(TransferStatus.SigningTransfer);
diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx
index cd5298fa..fabed210 100644
--- a/src/pages/_document.tsx
+++ b/src/pages/_document.tsx
@@ -1,5 +1,7 @@
import { Head, Html, Main, NextScript } from 'next/document';
+import { APP_BRAND_COLOR, APP_DESCRIPTION, APP_NAME, APP_URL } from '../consts/app';
+
export default function Document() {
return (
@@ -10,33 +12,24 @@ export default function Document() {
-
+
-
+
-
-
-
+
+
+
-
+
-
-
+
+
-
-
+
+
diff --git a/src/scripts/buildConfigs/routes.ts b/src/scripts/buildConfigs/routes.ts
index 9816fca8..b26c9739 100644
--- a/src/scripts/buildConfigs/routes.ts
+++ b/src/scripts/buildConfigs/routes.ts
@@ -54,25 +54,49 @@ export async function fetchRemoteHypTokens(
const chain = getCaip2Id(protocol, context.multiProvider.getChainId(router.domain));
const formattedAddress = bytesToProtocolAddress(router.address, protocol);
if (isNft) return { chain, router: formattedAddress, decimals: 0 };
- // Attempt to find the decimals from the token list
- const routerMetadata = context.tokens.find((token) =>
- eqAddress(formattedAddress, token.routerAddress),
- );
- if (routerMetadata)
- return { chain, router: formattedAddress, decimals: routerMetadata.decimals };
- // Otherwise try to query the contract
- const remoteAdapter = AdapterFactory.HypSyntheticTokenAdapterFromAddress(
- baseTokenCaip19Id,
- chain,
+
+ const routerDecimals = await getRemoteRouterDecimals(
+ context,
formattedAddress,
+ chain,
+ baseTokenCaip19Id,
+ baseToken.decimals,
);
- const metadata = await remoteAdapter.getMetadata();
- return { chain, router: formattedAddress, decimals: metadata.decimals };
+ return { chain, router: formattedAddress, decimals: routerDecimals };
}),
);
return { ...baseToken, hypTokens };
}
+async function getRemoteRouterDecimals(
+ context: WarpContext,
+ router: Address,
+ chain: ChainCaip2Id,
+ baseToken: TokenCaip19Id,
+ originDecimals: number,
+) {
+ // Attempt to find the decimals from the token list
+ const routerMetadata = context.tokens.find((token) => eqAddress(router, token.routerAddress));
+ if (routerMetadata) return routerMetadata.decimals;
+
+ // Otherwise try to query the contract
+ try {
+ const remoteAdapter = AdapterFactory.HypSyntheticTokenAdapterFromAddress(
+ baseToken,
+ chain,
+ router,
+ );
+ const metadata = await remoteAdapter.getMetadata();
+ return metadata.decimals;
+ } catch (error) {
+ logger.warn(`Failed to get metadata for router ${router} on chain ${chain}`);
+ }
+
+ // Fallback to using origin router's decimals
+ logger.warn('Falling back to origin decimals', originDecimals);
+ return originDecimals;
+}
+
// Process token list to populates routesCache with all possible token routes (e.g. router pairs)
export function computeTokenRoutes(tokens: TokenMetadataWithHypTokens[]): RoutesMap {
const tokenRoutes: RoutesMap = {};
diff --git a/src/scripts/buildConfigs/tokens.ts b/src/scripts/buildConfigs/tokens.ts
index 2a18d4d0..86a37978 100644
--- a/src/scripts/buildConfigs/tokens.ts
+++ b/src/scripts/buildConfigs/tokens.ts
@@ -49,7 +49,7 @@ async function parseTokenConfigs(
const parsedConfig = result.data;
const tokenMetadata: TokenMetadata[] = [];
for (const config of parsedConfig) {
- const { type, chainId, logoURI, igpTokenAddress } = config;
+ const { type, chainId, logoURI, igpTokenAddressOrDenom } = config;
const protocol = multiProvider.getChainMetadata(chainId).protocol || ProtocolType.Ethereum;
const chainCaip2Id = getCaip2Id(protocol, chainId);
@@ -83,7 +83,7 @@ async function parseTokenConfigs(
type,
tokenCaip19Id,
routerAddress,
- igpTokenAddress,
+ igpTokenAddressOrDenom,
});
}
return tokenMetadata;
diff --git a/src/utils/logger.ts b/src/utils/logger.ts
index d159b924..1a6bdcd6 100644
--- a/src/utils/logger.ts
+++ b/src/utils/logger.ts
@@ -1,16 +1,20 @@
/* eslint-disable no-console */
import { captureException } from '@sentry/nextjs';
+import { config } from '../consts/config';
+
export const logger = {
debug: (...args: any[]) => console.debug(...args),
info: (...args: any[]) => console.info(...args),
warn: (...args: any[]) => console.warn(...args),
error: (message: string, err: any, ...args: any[]) => {
- console.error(...args);
- const filteredArgs = args.filter(isSafeSentryArg);
- const extra = filteredArgs.reduce((acc, arg, i) => ({ ...acc, [`arg${i}`]: arg }), {});
- extra['message'] = message;
- captureException(err, { extra });
+ console.error(message, err, ...args);
+ if (!config.isDevMode) {
+ const filteredArgs = args.filter(isSafeSentryArg);
+ const extra = filteredArgs.reduce((acc, arg, i) => ({ ...acc, [`arg${i}`]: arg }), {});
+ extra['message'] = message;
+ captureException(err, { extra });
+ }
},
};
diff --git a/yarn.lock b/yarn.lock
index de250fd3..08b57095 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2995,30 +2995,30 @@ __metadata:
languageName: node
linkType: hard
-"@hyperlane-xyz/core@npm:3.5.1":
- version: 3.5.1
- resolution: "@hyperlane-xyz/core@npm:3.5.1"
+"@hyperlane-xyz/core@npm:3.6.1":
+ version: 3.6.1
+ resolution: "@hyperlane-xyz/core@npm:3.6.1"
dependencies:
"@eth-optimism/contracts": "npm:^0.6.0"
- "@hyperlane-xyz/utils": "npm:3.5.1"
+ "@hyperlane-xyz/utils": "npm:3.6.1"
"@openzeppelin/contracts": "npm:^4.9.3"
"@openzeppelin/contracts-upgradeable": "npm:^v4.9.3"
peerDependencies:
"@ethersproject/abi": "*"
"@ethersproject/providers": "*"
"@types/sinon-chai": "*"
- checksum: ed32e9fc9055dd5f11c3ad8fd319cd0b9440ea5c9fd390f45ea4f1a1619cff570d038c13a36cfb95fcab2b4174e474829624b8e2a828cb69614a6fea9bb1e9ab
+ checksum: 15cf69663a6f80ef8c656f283a2af84c9be58cb2a84f88820cda5b6233157aaac69557b97983ad4138078b0dc0a77cb37f6bc992d4ba8bf4b5e512cbf942526f
languageName: node
linkType: hard
-"@hyperlane-xyz/sdk@npm:^3.5.1":
- version: 3.5.1
- resolution: "@hyperlane-xyz/sdk@npm:3.5.1"
+"@hyperlane-xyz/sdk@npm:^3.6.1":
+ version: 3.6.1
+ resolution: "@hyperlane-xyz/sdk@npm:3.6.1"
dependencies:
"@cosmjs/cosmwasm-stargate": "npm:^0.31.3"
"@cosmjs/stargate": "npm:^0.31.3"
- "@hyperlane-xyz/core": "npm:3.5.1"
- "@hyperlane-xyz/utils": "npm:3.5.1"
+ "@hyperlane-xyz/core": "npm:3.6.1"
+ "@hyperlane-xyz/utils": "npm:3.6.1"
"@solana/spl-token": "npm:^0.3.8"
"@solana/web3.js": "npm:^1.78.0"
"@types/coingecko-api": "npm:^1.0.10"
@@ -3035,19 +3035,19 @@ __metadata:
peerDependencies:
"@ethersproject/abi": "*"
"@ethersproject/providers": "*"
- checksum: 59bac962050ea59ed98fad0369309fcbb8c83af4add7a0c5f043e5bfd4b1abd9e2ae91ec615b6b4bd295c4cfa098965de996c4fc6e65d170e499a2d6be35cc38
+ checksum: 9c5b0cd9c44ff8f8193740cd895a87c84990d9466ffd695a35f1a0f71dafb8dee2ac294295df3be2849f520ef4ec236cc641f98eb93369a67d2727a75249c7cb
languageName: node
linkType: hard
-"@hyperlane-xyz/utils@npm:3.5.1, @hyperlane-xyz/utils@npm:^3.5.1":
- version: 3.5.1
- resolution: "@hyperlane-xyz/utils@npm:3.5.1"
+"@hyperlane-xyz/utils@npm:3.6.1, @hyperlane-xyz/utils@npm:^3.6.1":
+ version: 3.6.1
+ resolution: "@hyperlane-xyz/utils@npm:3.6.1"
dependencies:
"@cosmjs/encoding": "npm:^0.31.3"
"@solana/web3.js": "npm:^1.78.0"
bignumber.js: "npm:^9.1.1"
ethers: "npm:^5.7.2"
- checksum: a9f6f716dc4d4638d328fcae156169e7b0f341fea41a45d4f7deaa9eebe56fbf8f4aac1a1cb03ccdde7bfd83fed1eb33a50473240f69cb55333c7819ac343075
+ checksum: dca6656ba047fac0ab8e8e9cc4687cdc1784d2245efa57bf4826f35eac6fa0f2c6fb9834f1dc3b699ce3cb0b5ccfd02940d7eb3b574204d8c2b4f4778aa6d301
languageName: node
linkType: hard
@@ -3067,8 +3067,8 @@ __metadata:
"@emotion/react": "npm:^11.11.1"
"@emotion/styled": "npm:^11.11.0"
"@headlessui/react": "npm:^1.7.14"
- "@hyperlane-xyz/sdk": "npm:^3.5.1"
- "@hyperlane-xyz/utils": "npm:^3.5.1"
+ "@hyperlane-xyz/sdk": "npm:^3.6.1"
+ "@hyperlane-xyz/utils": "npm:^3.6.1"
"@hyperlane-xyz/widgets": "npm:^3.1.4"
"@metamask/jazzicon": "https://github.com/jmrossy/jazzicon#7a8df28974b4e81129bfbe3cab76308b889032a6"
"@next/bundle-analyzer": "npm:^14.0.4"
@@ -7913,6 +7913,13 @@ __metadata:
languageName: node
linkType: hard
+"asynckit@npm:^0.4.0":
+ version: 0.4.0
+ resolution: "asynckit@npm:0.4.0"
+ checksum: 3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8
+ languageName: node
+ linkType: hard
+
"atomic-sleep@npm:^1.0.0":
version: 1.0.0
resolution: "atomic-sleep@npm:1.0.0"
@@ -7952,12 +7959,13 @@ __metadata:
languageName: node
linkType: hard
-"axios@npm:^0.21.0, axios@npm:^0.21.2":
- version: 0.21.4
- resolution: "axios@npm:0.21.4"
+"axios@npm:0.27.2":
+ version: 0.27.2
+ resolution: "axios@npm:0.27.2"
dependencies:
- follow-redirects: "npm:^1.14.0"
- checksum: da644592cb6f8f9f8c64fdabd7e1396d6769d7a4c1ea5f8ae8beb5c2eb90a823e3a574352b0b934ac62edc762c0f52647753dc54f7d07279127a7e5c4cd20272
+ follow-redirects: "npm:^1.14.9"
+ form-data: "npm:^4.0.0"
+ checksum: 2efaf18dd0805f7bc772882bc86f004abd92d51007b54c5081f74db0d08ce3593e2c010261896d25a14318eeaa2e966fd825e34f810e8a3339dc64b9d177cf70
languageName: node
linkType: hard
@@ -8780,6 +8788,15 @@ __metadata:
languageName: node
linkType: hard
+"combined-stream@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "combined-stream@npm:1.0.8"
+ dependencies:
+ delayed-stream: "npm:~1.0.0"
+ checksum: 2e969e637d05d09fa50b02d74c83a1186f6914aae89e6653b62595cc75a221464f884f55f231b8f4df7a49537fba60bdc0427acd2bf324c09a1dbb84837e36e4
+ languageName: node
+ linkType: hard
+
"commander@npm:^2.20.3":
version: 2.20.3
resolution: "commander@npm:2.20.3"
@@ -8893,17 +8910,7 @@ __metadata:
languageName: node
linkType: hard
-"cosmjs-types@npm:^0.8.0":
- version: 0.8.0
- resolution: "cosmjs-types@npm:0.8.0"
- dependencies:
- long: "npm:^4.0.0"
- protobufjs: "npm:~6.11.2"
- checksum: 9a6ac37a77349416bf5e3abab21b1084da4d293e76a77d11bb9fbaeef27c6f36b64b47b92ee587a0a5b66a543bfcd62078820dc0d14f9e39bd037a4801013dc1
- languageName: node
- linkType: hard
-
-"cosmjs-types@npm:^0.9.0":
+"cosmjs-types@npm:0.9":
version: 0.9.0
resolution: "cosmjs-types@npm:0.9.0"
checksum: c61137bf0aba5c4b73f5191590472e6de61203c3e3dc0081643ac388c9f27f65de052298a0c6b239543adaba7829f5ff9c9fb95ab44d7b4186b080b8478e3b27
@@ -9186,6 +9193,13 @@ __metadata:
languageName: node
linkType: hard
+"delayed-stream@npm:~1.0.0":
+ version: 1.0.0
+ resolution: "delayed-stream@npm:1.0.0"
+ checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020
+ languageName: node
+ linkType: hard
+
"delegates@npm:^1.0.0":
version: 1.0.0
resolution: "delegates@npm:1.0.0"
@@ -10240,13 +10254,13 @@ __metadata:
languageName: node
linkType: hard
-"follow-redirects@npm:^1.14.0":
- version: 1.15.1
- resolution: "follow-redirects@npm:1.15.1"
+"follow-redirects@npm:^1.14.9":
+ version: 1.15.5
+ resolution: "follow-redirects@npm:1.15.5"
peerDependenciesMeta:
debug:
optional: true
- checksum: a57f93ce566d4602fe7b2f6cef8f8d3d053891b3d8f2feae7e97eec18aa0003d23aeec8e857801d93887eee27e1617276a16f6a3d5c9d78e45882346612462d5
+ checksum: d467f13c1c6aa734599b8b369cd7a625b20081af358f6204ff515f6f4116eb440de9c4e0c49f10798eeb0df26c95dd05d5e0d9ddc5786ab1a8a8abefe92929b4
languageName: node
linkType: hard
@@ -10259,6 +10273,17 @@ __metadata:
languageName: node
linkType: hard
+"form-data@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "form-data@npm:4.0.0"
+ dependencies:
+ asynckit: "npm:^0.4.0"
+ combined-stream: "npm:^1.0.8"
+ mime-types: "npm:^2.1.12"
+ checksum: 7264aa760a8cf09482816d8300f1b6e2423de1b02bba612a136857413fdc96d7178298ced106817655facc6b89036c6e12ae31c9eb5bdc16aabf502ae8a5d805
+ languageName: node
+ linkType: hard
+
"formik@npm:^2.4.5":
version: 2.4.5
resolution: "formik@npm:2.4.5"
@@ -12557,6 +12582,22 @@ __metadata:
languageName: node
linkType: hard
+"mime-db@npm:1.52.0":
+ version: 1.52.0
+ resolution: "mime-db@npm:1.52.0"
+ checksum: 54bb60bf39e6f8689f6622784e668a3d7f8bed6b0d886f5c3c446cb3284be28b30bf707ed05d0fe44a036f8469976b2629bbea182684977b084de9da274694d7
+ languageName: node
+ linkType: hard
+
+"mime-types@npm:^2.1.12":
+ version: 2.1.35
+ resolution: "mime-types@npm:2.1.35"
+ dependencies:
+ mime-db: "npm:1.52.0"
+ checksum: 89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a
+ languageName: node
+ linkType: hard
+
"mime@npm:^3.0.0":
version: 3.0.0
resolution: "mime@npm:3.0.0"
@@ -13735,7 +13776,7 @@ __metadata:
languageName: node
linkType: hard
-"protobufjs@npm:^6.11.2, protobufjs@npm:^6.8.8, protobufjs@npm:~6.11.2, protobufjs@npm:~6.11.3":
+"protobufjs@npm:^6.11.2, protobufjs@npm:^6.8.8, protobufjs@npm:~6.11.3":
version: 6.11.4
resolution: "protobufjs@npm:6.11.4"
dependencies: