diff --git a/docs/guides/message-debugging.mdx b/docs/guides/message-debugging.mdx index fe82f957..80068ac9 100644 --- a/docs/guides/message-debugging.mdx +++ b/docs/guides/message-debugging.mdx @@ -1,7 +1,8 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -import CosmosMessageDelivered from "@site/src/components/CosmosMessageDelivered"; +import NonEvmMessageDelivered from "@site/src/components/NonEvmMessageDelivered"; +import SealevelWarpTransferInfo from "@site/src/components/SealevelWarpTransferInfo"; # Message debugging @@ -36,18 +37,28 @@ import CosmosMessageDelivered from "@site/src/components/CosmosMessageDelivered"
Example on Mintscan showing the log on an origin transaction.
+ + When viewing the origin transaction on the origin chain's block explorer, scroll to the logs at the very bottom. + + The log starting with **Dispatched message to** contains the message ID. + +
+ ![](/img/message-debugging/dispatch-id-log-sealevel.png) +
Example on Eclipse's explorer showing the log on an origin transaction.
+
+
- **Debugging a message to a Cosmos chain** + **Debugging a message to a non-EVM chain (e.g. a Cosmos or Sealevel chain)**
At the moment, the [Hyperlane Explorer](https://explorer.hyperlane.xyz) doesn't support non-EVM chains. To check if your message has been delivered, select the destination chain and input your message ID below: - +
@@ -110,6 +121,9 @@ import CosmosMessageDelivered from "@site/src/components/CosmosMessageDelivered"
Example on Mintscan showing the log on an origin transaction.
+ + + diff --git a/docusaurus.config.js b/docusaurus.config.js index 79dfb70b..79ed736a 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -38,6 +38,7 @@ const config = { }, plugins: [ + './webpackPlugin', [ "@docusaurus/plugin-client-redirects", { diff --git a/package.json b/package.json index 665999b5..eea23d13 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,25 @@ "@hyperlane-xyz/core": "5.3.0", "@hyperlane-xyz/registry": "4.4.1", "@hyperlane-xyz/sdk": "5.3.0", + "@hyperlane-xyz/utils": "^5.3.0", "@mdx-js/react": "^3.0.0", + "assert": "^2.1.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", "clsx": "^2.0.0", + "crypto-browserify": "^3.12.0", + "https-browserify": "^1.0.0", "prism-react-renderer": "^2.1.0", + "process": "^0.11.10", + "querystring-es3": "^0.2.1", "raw-loader": "^4.0.2", "react": "^18.2.0", "react-dom": "^18.2.0", "rehype-katex": "7", - "remark-math": "6" + "remark-math": "6", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "url": "^0.11.4" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.0.1", diff --git a/src/components/CosmosMessageDelivered.tsx b/src/components/NonEvmMessageDelivered.tsx similarity index 53% rename from src/components/CosmosMessageDelivered.tsx rename to src/components/NonEvmMessageDelivered.tsx index f5bb92c5..fa4ca9f7 100644 --- a/src/components/CosmosMessageDelivered.tsx +++ b/src/components/NonEvmMessageDelivered.tsx @@ -1,27 +1,40 @@ +import * as buffer from "buffer"; import { useState } from "react"; -import { chainMetadata } from "@hyperlane-xyz/registry"; + +import { CosmWasmCoreAdapter, MultiProtocolCore, MultiProtocolProvider } from "@hyperlane-xyz/sdk"; +import { chainMetadata, chainAddresses } from "@hyperlane-xyz/registry"; +import { ProtocolType, strip0x } from "@hyperlane-xyz/utils"; import ChainDropdown from './ChainDropdown'; +import { useMultiProtocolProvider } from "../utils/registry"; +import useIsBrowser from "@docusaurus/useIsBrowser"; // TODO: these should be in the registry, but for now we'll hardcode them. // Once they're in the registry, we can move away from this. -const mailboxes = { - 'neutron': 'neutron1sjzzd4gwkggy6hrrs8kxxatexzcuz3jecsxm3wqgregkulzj8r7qlnuef4', - 'injective': 'inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt', +const addressesOverrides = { + neutron: { + mailbox: 'neutron1sjzzd4gwkggy6hrrs8kxxatexzcuz3jecsxm3wqgregkulzj8r7qlnuef4', + }, + injective: { + mailbox: 'inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt', + } }; -const cosmosChains = Object.keys(mailboxes); - -// Adding @hyperlane-xyz/utils as a dependency breaks things, so we copy the function here. -export function strip0x(hexstr: string) { - return hexstr.startsWith('0x') ? hexstr.slice(2) : hexstr; -} - -export default function CosmosMessageDelivered({ +export default function NonEvmMessageDelivered({ + chains, +}: { + chains: string[]; }) { - const [destinationChain, setDestinationChain] = useState(cosmosChains[0]); + const isBrowser = useIsBrowser(); + if (!isBrowser) { + // Difficulty polyfilling Buffer in the browser to be consumed by some Solana libs, so we do this instead + window.Buffer = buffer.Buffer; + } + + const [destinationChain, setDestinationChain] = useState(chains[0]); const [messageId, setMessageId] = useState(''); const [status, setStatus] = useState(''); + const multiProvider = useMultiProtocolProvider(); const onButtonClick = async () => { const strippedMessageId = strip0x(messageId); @@ -31,45 +44,39 @@ export default function CosmosMessageDelivered({ } const metadata = chainMetadata[destinationChain]; - const mailbox = mailboxes[destinationChain]; - if (!mailbox) { - setStatus(`⛔️ No known Mailbox found for chain ${destinationChain}`); - return; - } if (!metadata) { - setStatus(`⛔️ No known Mailbox found for chain ${destinationChain}`); + setStatus(`⛔️ No metadata found for chain ${destinationChain}`); return; } - const restUrl = metadata.restUrls?.[0]?.http; - if (!restUrl) { - setStatus(`⛔️ No available API set for chain ${destinationChain}`); - return; - } - const payload = { - mailbox: { - message_delivered: { - id: strippedMessageId, - } - } - }; - const base64Payload = window.btoa(JSON.stringify(payload)); - const url = `${restUrl}/cosmwasm/wasm/v1/contract/${mailbox}/smart/${base64Payload}`; + + const multiProtocolCore = MultiProtocolCore.fromAddressesMap( + // @ts-ignore - doesn't like the types of some recent Sealevel chains and the overrides we provide + { + ...chainAddresses, + ...addressesOverrides, + }, multiProvider); + const core = multiProtocolCore.adapter(destinationChain); + setStatus(`⏳ Checking if message is delivered...`); - let responseJson; - console.log(`Fetching from ${url}`); + + let delivered = false; try { - const response = await fetch(url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - }, - }); - responseJson = await response.json(); + switch (metadata.protocol) { + case ProtocolType.Cosmos: + // `waitForMessageProcessed` is not implemented on cosmos -- instead we + // use the adapter directly. + const cosmosCore = core as CosmWasmCoreAdapter; + delivered = await cosmosCore.delivered(strip0x(messageId)); + break; + default: + delivered = await core.waitForMessageProcessed(messageId, destinationChain, 0, 1); + break; + } } catch (e) { setStatus(`⛔️ Error checking message delivery: ${e}`); return; } - const delivered = responseJson?.data?.delivered ?? false; + if (delivered) { setStatus(`Message successfully delivered: ✅`); } else { @@ -85,7 +92,7 @@ export default function CosmosMessageDelivered({ }}> diff --git a/src/components/SealevelWarpTransferInfo.tsx b/src/components/SealevelWarpTransferInfo.tsx new file mode 100644 index 00000000..64ba66e8 --- /dev/null +++ b/src/components/SealevelWarpTransferInfo.tsx @@ -0,0 +1,111 @@ +import * as buffer from "buffer"; +import { useState } from "react"; + +import { chainMetadata } from "@hyperlane-xyz/registry"; +import { addressToBytesEvm, bytesToAddressSol, ensure0x, hexOrBase58ToHex, strip0x } from "@hyperlane-xyz/utils"; + +import ChainDropdown from './ChainDropdown'; +import { useMultiProtocolProvider } from "../utils/registry"; +import useIsBrowser from "@docusaurus/useIsBrowser"; + +export default function NonEvmMessageDelivered({ + chains, +}: { + chains: string[]; +}) { + const isBrowser = useIsBrowser(); + if (!isBrowser) { + // Difficulty polyfilling Buffer in the browser to be consumed by some Solana libs, so we do this instead + window.Buffer = buffer.Buffer; + } + + const [originChain, setOriginChain] = useState(chains[0]); + const [txId, setTxId] = useState(''); + const [status, setStatus] = useState(''); + const multiProvider = useMultiProtocolProvider(); + + const setTransferRecipient = async () => { + const metadata = chainMetadata[originChain]; + if (!metadata) { + setStatus(`⛔️ No metadata found for chain ${originChain}`); + return; + } + + const sealevelProvider = multiProvider.getSolanaWeb3Provider(originChain) + setStatus(`⏳ Getting transaction...`); + let tx = await sealevelProvider.getParsedTransaction(txId); + if (!tx) { + setStatus(`⛔️ Transaction not found`); + return; + } + + const finalInstruction = tx.transaction.message.instructions.length - 1; + // Types don't all include `data`, but in practice we have it. + const transferRemoteInstruction: any = tx.transaction.message.instructions[finalInstruction]; + const transferRemoteData = transferRemoteInstruction.data; + if (!transferRemoteData) { + setStatus(`⛔️ No data found in instruction`); + return; + } + + const hex = strip0x(hexOrBase58ToHex(transferRemoteData)); + // The first 13 bytes (2 chars per byte) are the instruction discriminator. After that, we have the 32 byte recipient address. + const recipientHex = ensure0x(hex.slice(26, 26 + 64)); + const recipientBytes = addressToBytesEvm(recipientHex); + const recipientBase58 = bytesToAddressSol(recipientBytes); + + setStatus(`🕵️‍♂️ Transfer recipient (hex): ${recipientHex}\n🕵️‍♂️ Transfer recipient (base58): ${recipientBase58}`); + }; + + const onButtonClick = async () => { + try { + await setTransferRecipient(); + } catch (e) { + setStatus(`⛔️ Error: ${e.message}`); + } + } + + return ( +
+ +
+ Origin tx id (signature):{"\t"} + setTxId(e.target.value)} + placeholder="Abc..." + style={{ + width: "100%", + padding: "5px", + borderRadius: "5px", + border: "1px solid #ccc", + fontSize: "1.05em", + }} + /> +
+ +
+ {status} +
+
+ ); +} diff --git a/src/utils/registry.ts b/src/utils/registry.ts index 96703216..b970d429 100644 --- a/src/utils/registry.ts +++ b/src/utils/registry.ts @@ -1,5 +1,6 @@ import { chainAddresses, chainMetadata } from "@hyperlane-xyz/registry"; -import type { ChainMetadata, ChainName } from "@hyperlane-xyz/sdk"; +import { MultiProtocolProvider, type ChainMetadata, type ChainName } from "@hyperlane-xyz/sdk"; +import { deepCopy, objMerge } from "@hyperlane-xyz/utils"; import { useMemo } from "react"; const ABACUS_WORKS_DEPLOYER_NAME = "abacus works"; @@ -30,3 +31,15 @@ export function getAbacusWorksChainNames(isTestnet = false): ChainName[] { export function useAbacusWorksChainNames(isTestnet = false) { return useMemo(() => getAbacusWorksChainNames(isTestnet), [isTestnet]); } + +export function useMultiProtocolProvider() { + return useMemo(() => { + const chainMetadataCopied = deepCopy(chainMetadata); + // The default public Solana RPC aggressively rate limits, so we add another public node to the list + chainMetadataCopied.solanamainnet.rpcUrls.unshift({ + http: 'https://solana-rpc.publicnode.com' + }); + + return new MultiProtocolProvider(chainMetadataCopied); + }, []); +} diff --git a/static/img/message-debugging/dispatch-id-log-sealevel.png b/static/img/message-debugging/dispatch-id-log-sealevel.png new file mode 100644 index 00000000..55989139 Binary files /dev/null and b/static/img/message-debugging/dispatch-id-log-sealevel.png differ diff --git a/webpackPlugin.js b/webpackPlugin.js new file mode 100644 index 00000000..8ab015fc --- /dev/null +++ b/webpackPlugin.js @@ -0,0 +1,32 @@ +import webpack from 'webpack'; +import { createRequire } from 'node:module'; +const require = createRequire(import.meta.url); + +module.exports = function (_context, _options) { + return { + name: 'custom-docusaurus-plugin', + configureWebpack(_config, _isServer, _utils) { + return { + resolve: { + // Various libraries required by Solana tooling + fallback: { + "crypto": require.resolve("crypto-browserify"), + "zlib": require.resolve("browserify-zlib"), + "url": require.resolve("url/"), + "https": require.resolve("https-browserify"), + "http": require.resolve("stream-http"), + "querystring": require.resolve("querystring-es3"), + "stream": require.resolve("stream-browserify"), + "buffer": require.resolve("buffer/"), + "vm": false, + }, + }, + plugins: [ + new webpack.ProvidePlugin({ + Buffer: ['buffer', 'Buffer'], + }), + ] + }; + }, + }; +}; diff --git a/yarn.lock b/yarn.lock index d40134a8..c7a1c49c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4512,7 +4512,7 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/utils@npm:5.3.0": +"@hyperlane-xyz/utils@npm:5.3.0, @hyperlane-xyz/utils@npm:^5.3.0": version: 5.3.0 resolution: "@hyperlane-xyz/utils@npm:5.3.0" dependencies: @@ -7499,6 +7499,17 @@ __metadata: languageName: node linkType: hard +"asn1.js@npm:^4.10.1": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" + dependencies: + bn.js: "npm:^4.0.0" + inherits: "npm:^2.0.1" + minimalistic-assert: "npm:^1.0.0" + checksum: afa7f3ab9e31566c80175a75b182e5dba50589dcc738aa485be42bdd787e2a07246a4b034d481861123cbe646a7656f318f4f1cad2e9e5e808a210d5d6feaa88 + languageName: node + linkType: hard + "asn1@npm:~0.2.3": version: 0.2.6 resolution: "asn1@npm:0.2.6" @@ -7515,6 +7526,19 @@ __metadata: languageName: node linkType: hard +"assert@npm:^2.1.0": + version: 2.1.0 + resolution: "assert@npm:2.1.0" + dependencies: + call-bind: "npm:^1.0.2" + is-nan: "npm:^1.3.2" + object-is: "npm:^1.1.5" + object.assign: "npm:^4.1.4" + util: "npm:^0.12.5" + checksum: 7271a5da883c256a1fa690677bf1dd9d6aa882139f2bed1cd15da4f9e7459683e1da8e32a203d6cc6767e5e0f730c77a9532a87b896b4b0af0dd535f668775f0 + languageName: node + linkType: hard + "assertion-error@npm:^1.1.0": version: 1.1.0 resolution: "assertion-error@npm:1.1.0" @@ -7811,7 +7835,7 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.11.6, bn.js@npm:^4.11.9": +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.6, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 9736aaa317421b6b3ed038ff3d4491935a01419ac2d83ddcfebc5717385295fcfcf0c57311d90fe49926d0abbd7a9dbefdd8861e6129939177f7e67ebc645b21 @@ -7962,14 +7986,14 @@ __metadata: languageName: node linkType: hard -"brorand@npm:^1.1.0": +"brorand@npm:^1.0.1, brorand@npm:^1.1.0": version: 1.1.0 resolution: "brorand@npm:1.1.0" checksum: 6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 languageName: node linkType: hard -"browserify-aes@npm:^1.2.0": +"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" dependencies: @@ -7983,6 +8007,67 @@ __metadata: languageName: node linkType: hard +"browserify-cipher@npm:^1.0.0": + version: 1.0.1 + resolution: "browserify-cipher@npm:1.0.1" + dependencies: + browserify-aes: "npm:^1.0.4" + browserify-des: "npm:^1.0.0" + evp_bytestokey: "npm:^1.0.0" + checksum: aa256dcb42bc53a67168bbc94ab85d243b0a3b56109dee3b51230b7d010d9b78985ffc1fb36e145c6e4db151f888076c1cfc207baf1525d3e375cbe8187fe27d + languageName: node + linkType: hard + +"browserify-des@npm:^1.0.0": + version: 1.0.2 + resolution: "browserify-des@npm:1.0.2" + dependencies: + cipher-base: "npm:^1.0.1" + des.js: "npm:^1.0.0" + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 943eb5d4045eff80a6cde5be4e5fbb1f2d5002126b5a4789c3c1aae3cdddb1eb92b00fb92277f512288e5c6af330730b1dbabcf7ce0923e749e151fcee5a074d + languageName: node + linkType: hard + +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": + version: 4.1.1 + resolution: "browserify-rsa@npm:4.1.1" + dependencies: + bn.js: "npm:^5.2.1" + randombytes: "npm:^2.1.0" + safe-buffer: "npm:^5.2.1" + checksum: b650ee1192e3d7f3d779edc06dd96ed8720362e72ac310c367b9d7fe35f7e8dbb983c1829142b2b3215458be8bf17c38adc7224920843024ed8cf39e19c513c0 + languageName: node + linkType: hard + +"browserify-sign@npm:^4.0.0": + version: 4.2.3 + resolution: "browserify-sign@npm:4.2.3" + dependencies: + bn.js: "npm:^5.2.1" + browserify-rsa: "npm:^4.1.0" + create-hash: "npm:^1.2.0" + create-hmac: "npm:^1.1.7" + elliptic: "npm:^6.5.5" + hash-base: "npm:~3.0" + inherits: "npm:^2.0.4" + parse-asn1: "npm:^5.1.7" + readable-stream: "npm:^2.3.8" + safe-buffer: "npm:^5.2.1" + checksum: 30c0eba3f5970a20866a4d3fbba2c5bd1928cd24f47faf995f913f1499214c6f3be14bb4d6ec1ab5c6cafb1eca9cb76ba1c2e1c04ed018370634d4e659c77216 + languageName: node + linkType: hard + +"browserify-zlib@npm:^0.2.0": + version: 0.2.0 + resolution: "browserify-zlib@npm:0.2.0" + dependencies: + pako: "npm:~1.0.5" + checksum: 9ab10b6dc732c6c5ec8ebcbe5cb7fe1467f97402c9b2140113f47b5f187b9438f93a8e065d8baf8b929323c18324fbf1105af479ee86d9d36cab7d7ef3424ad9 + languageName: node + linkType: hard + "browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.18.1, browserslist@npm:^4.20.3": version: 4.21.3 resolution: "browserslist@npm:4.21.3" @@ -8103,6 +8188,13 @@ __metadata: languageName: node linkType: hard +"builtin-status-codes@npm:^3.0.0": + version: 3.0.0 + resolution: "builtin-status-codes@npm:3.0.0" + checksum: c37bbba11a34c4431e56bd681b175512e99147defbe2358318d8152b3a01df7bf25e0305873947e5b350073d5ef41a364a22b37e48f1fb6d2fe6d5286a0f348c + languageName: node + linkType: hard + "bytes@npm:3.0.0": version: 3.0.0 resolution: "bytes@npm:3.0.0" @@ -8198,7 +8290,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.2, call-bind@npm:^1.0.7": +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" dependencies: @@ -8977,6 +9069,16 @@ __metadata: languageName: node linkType: hard +"create-ecdh@npm:^4.0.0": + version: 4.0.4 + resolution: "create-ecdh@npm:4.0.4" + dependencies: + bn.js: "npm:^4.1.0" + elliptic: "npm:^6.5.3" + checksum: 77b11a51360fec9c3bce7a76288fc0deba4b9c838d5fb354b3e40c59194d23d66efe6355fd4b81df7580da0661e1334a235a2a5c040b7569ba97db428d466e7f + languageName: node + linkType: hard + "create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": version: 1.2.0 resolution: "create-hash@npm:1.2.0" @@ -8990,7 +9092,7 @@ __metadata: languageName: node linkType: hard -"create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": version: 1.1.7 resolution: "create-hmac@npm:1.1.7" dependencies: @@ -9046,6 +9148,25 @@ __metadata: languageName: node linkType: hard +"crypto-browserify@npm:^3.12.0": + version: 3.12.0 + resolution: "crypto-browserify@npm:3.12.0" + dependencies: + browserify-cipher: "npm:^1.0.0" + browserify-sign: "npm:^4.0.0" + create-ecdh: "npm:^4.0.0" + create-hash: "npm:^1.1.0" + create-hmac: "npm:^1.1.0" + diffie-hellman: "npm:^5.0.0" + inherits: "npm:^2.0.1" + pbkdf2: "npm:^3.0.3" + public-encrypt: "npm:^4.0.0" + randombytes: "npm:^2.0.0" + randomfill: "npm:^1.0.3" + checksum: 0c20198886576050a6aa5ba6ae42f2b82778bfba1753d80c5e7a090836890dc372bdc780986b2568b4fb8ed2a91c958e61db1f0b6b1cc96af4bd03ffc298ba92 + languageName: node + linkType: hard + "crypto-random-string@npm:^4.0.0": version: 4.0.0 resolution: "crypto-random-string@npm:4.0.0" @@ -9931,6 +10052,16 @@ __metadata: languageName: node linkType: hard +"des.js@npm:^1.0.0": + version: 1.1.0 + resolution: "des.js@npm:1.1.0" + dependencies: + inherits: "npm:^2.0.1" + minimalistic-assert: "npm:^1.0.0" + checksum: 671354943ad67493e49eb4c555480ab153edd7cee3a51c658082fcde539d2690ed2a4a0b5d1f401f9cde822edf3939a6afb2585f32c091f2d3a1b1665cd45236 + languageName: node + linkType: hard + "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -9987,6 +10118,17 @@ __metadata: languageName: node linkType: hard +"diffie-hellman@npm:^5.0.0": + version: 5.0.3 + resolution: "diffie-hellman@npm:5.0.3" + dependencies: + bn.js: "npm:^4.1.0" + miller-rabin: "npm:^4.0.0" + randombytes: "npm:^2.0.0" + checksum: ce53ccafa9ca544b7fc29b08a626e23a9b6562efc2a98559a0c97b4718937cebaa9b5d7d0a05032cc9c1435e9b3c1532b9e9bf2e0ede868525922807ad6e1ecf + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -10197,7 +10339,7 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:^6.4.0, elliptic@npm:^6.5.4": +"elliptic@npm:^6.4.0, elliptic@npm:^6.5.3, elliptic@npm:^6.5.4, elliptic@npm:^6.5.5": version: 6.5.7 resolution: "elliptic@npm:6.5.7" dependencies: @@ -10779,7 +10921,7 @@ __metadata: languageName: node linkType: hard -"evp_bytestokey@npm:^1.0.3": +"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": version: 1.0.3 resolution: "evp_bytestokey@npm:1.0.3" dependencies: @@ -11844,6 +11986,16 @@ __metadata: languageName: node linkType: hard +"hash-base@npm:~3.0": + version: 3.0.4 + resolution: "hash-base@npm:3.0.4" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + checksum: a13357dccb3827f0bb0b56bf928da85c428dc8670f6e4a1c7265e4f1653ce02d69030b40fd01b0f1d218a995a066eea279cded9cec72d207b593bcdfe309c2f0 + languageName: node + linkType: hard + "hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": version: 1.1.7 resolution: "hash.js@npm:1.1.7" @@ -12324,6 +12476,13 @@ __metadata: languageName: node linkType: hard +"https-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "https-browserify@npm:1.0.0" + checksum: e17b6943bc24ea9b9a7da5714645d808670af75a425f29baffc3284962626efdc1eb3aa9bbffaa6e64028a6ad98af5b09fabcb454a8f918fb686abfdc9e9b8ae + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1": version: 7.0.2 resolution: "https-proxy-agent@npm:7.0.2" @@ -12365,18 +12524,29 @@ __metadata: "@hyperlane-xyz/core": "npm:5.3.0" "@hyperlane-xyz/registry": "npm:4.4.1" "@hyperlane-xyz/sdk": "npm:5.3.0" + "@hyperlane-xyz/utils": "npm:^5.3.0" "@mdx-js/react": "npm:^3.0.0" "@types/react": "npm:^18.2.37" "@types/react-dom": "npm:^18.2.15" + assert: "npm:^2.1.0" + browserify-zlib: "npm:^0.2.0" + buffer: "npm:^6.0.3" clsx: "npm:^2.0.0" + crypto-browserify: "npm:^3.12.0" + https-browserify: "npm:^1.0.0" prism-react-renderer: "npm:^2.1.0" + process: "npm:^0.11.10" + querystring-es3: "npm:^0.2.1" raw-loader: "npm:^4.0.2" react: "npm:^18.2.0" react-dom: "npm:^18.2.0" rehype-katex: "npm:7" remark-code-import: "npm:^1.2.0" remark-math: "npm:6" + stream-browserify: "npm:^3.0.0" + stream-http: "npm:^3.2.0" typescript: "npm:^5.2.2" + url: "npm:^0.11.4" webpack: "npm:^5.89.0" languageName: unknown linkType: soft @@ -12504,7 +12674,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -12771,6 +12941,16 @@ __metadata: languageName: node linkType: hard +"is-nan@npm:^1.3.2": + version: 1.3.2 + resolution: "is-nan@npm:1.3.2" + dependencies: + call-bind: "npm:^1.0.0" + define-properties: "npm:^1.1.3" + checksum: 8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 + languageName: node + linkType: hard + "is-npm@npm:^6.0.0": version: 6.0.0 resolution: "is-npm@npm:6.0.0" @@ -14772,6 +14952,18 @@ __metadata: languageName: node linkType: hard +"miller-rabin@npm:^4.0.0": + version: 4.0.1 + resolution: "miller-rabin@npm:4.0.1" + dependencies: + bn.js: "npm:^4.0.0" + brorand: "npm:^1.0.1" + bin: + miller-rabin: bin/miller-rabin + checksum: 26b2b96f6e49dbcff7faebb78708ed2f5f9ae27ac8cbbf1d7c08f83cf39bed3d418c0c11034dce997da70d135cc0ff6f3a4c15dc452f8e114c11986388a64346 + languageName: node + linkType: hard + "mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -15422,6 +15614,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.13.1": + version: 1.13.2 + resolution: "object-inspect@npm:1.13.2" + checksum: b97835b4c91ec37b5fd71add84f21c3f1047d1d155d00c0fcd6699516c256d4fcc6ff17a1aced873197fe447f91a3964178fd2a67a1ee2120cdaf60e81a050b4 + languageName: node + linkType: hard + "object-inspect@npm:^1.9.0": version: 1.12.2 resolution: "object-inspect@npm:1.12.2" @@ -15429,6 +15628,16 @@ __metadata: languageName: node linkType: hard +"object-is@npm:^1.1.5": + version: 1.1.6 + resolution: "object-is@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + checksum: 506af444c4dce7f8e31f34fc549e2fb8152d6b9c4a30c6e62852badd7f520b579c679af433e7a072f9d78eb7808d230dc12e1cf58da9154dfbf8813099ea0fe0 + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -15448,6 +15657,18 @@ __metadata: languageName: node linkType: hard +"object.assign@npm:^4.1.4": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + has-symbols: "npm:^1.0.3" + object-keys: "npm:^1.1.1" + checksum: 60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 + languageName: node + linkType: hard + "oboe@npm:2.1.5": version: 2.1.5 resolution: "oboe@npm:2.1.5" @@ -15655,6 +15876,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:~1.0.5": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 86dd99d8b34c3930345b8bbeb5e1cd8a05f608eeb40967b293f72fe469d0e9c88b783a8777e4cc7dc7c91ce54c5e93d88ff4b4f060e6ff18408fd21030d9ffbe + languageName: node + linkType: hard + "param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" @@ -15674,6 +15902,20 @@ __metadata: languageName: node linkType: hard +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": + version: 5.1.7 + resolution: "parse-asn1@npm:5.1.7" + dependencies: + asn1.js: "npm:^4.10.1" + browserify-aes: "npm:^1.2.0" + evp_bytestokey: "npm:^1.0.3" + hash-base: "npm:~3.0" + pbkdf2: "npm:^3.1.2" + safe-buffer: "npm:^5.2.1" + checksum: 05eb5937405c904eb5a7f3633bab1acc11f4ae3478a07ef5c6d81ce88c3c0e505ff51f9c7b935ebc1265c868343793698fc91025755a895d0276f620f95e8a82 + languageName: node + linkType: hard + "parse-entities@npm:^4.0.0": version: 4.0.1 resolution: "parse-entities@npm:4.0.1" @@ -15879,7 +16121,7 @@ __metadata: languageName: node linkType: hard -"pbkdf2@npm:^3.0.17": +"pbkdf2@npm:^3.0.17, pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.1.2": version: 3.1.2 resolution: "pbkdf2@npm:3.1.2" dependencies: @@ -16690,6 +16932,20 @@ __metadata: languageName: node linkType: hard +"public-encrypt@npm:^4.0.0": + version: 4.0.3 + resolution: "public-encrypt@npm:4.0.3" + dependencies: + bn.js: "npm:^4.1.0" + browserify-rsa: "npm:^4.0.0" + create-hash: "npm:^1.1.0" + parse-asn1: "npm:^5.0.0" + randombytes: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 6c2cc19fbb554449e47f2175065d6b32f828f9b3badbee4c76585ac28ae8641aafb9bb107afc430c33c5edd6b05dbe318df4f7d6d7712b1093407b11c4280700 + languageName: node + linkType: hard + "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -16707,7 +16963,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^1.3.2": +"punycode@npm:^1.3.2, punycode@npm:^1.4.1": version: 1.4.1 resolution: "punycode@npm:1.4.1" checksum: 354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 @@ -16755,6 +17011,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.12.3": + version: 6.13.0 + resolution: "qs@npm:6.13.0" + dependencies: + side-channel: "npm:^1.0.6" + checksum: 62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 + languageName: node + linkType: hard + "qs@npm:~6.5.2": version: 6.5.3 resolution: "qs@npm:6.5.3" @@ -16773,6 +17038,13 @@ __metadata: languageName: node linkType: hard +"querystring-es3@npm:^0.2.1": + version: 0.2.1 + resolution: "querystring-es3@npm:0.2.1" + checksum: 476938c1adb45c141f024fccd2ffd919a3746e79ed444d00e670aad68532977b793889648980e7ca7ff5ffc7bfece623118d0fbadcaf217495eeb7059ae51580 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -16803,7 +17075,7 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.1.0": +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" dependencies: @@ -16812,6 +17084,16 @@ __metadata: languageName: node linkType: hard +"randomfill@npm:^1.0.3": + version: 1.0.4 + resolution: "randomfill@npm:1.0.4" + dependencies: + randombytes: "npm:^2.0.5" + safe-buffer: "npm:^5.1.0" + checksum: 11aeed35515872e8f8a2edec306734e6b74c39c46653607f03c68385ab8030e2adcc4215f76b5e4598e028c4750d820afd5c65202527d831d2a5f207fe2bc87c + languageName: node + linkType: hard + "range-parser@npm:1.2.0": version: 1.2.0 resolution: "range-parser@npm:1.2.0" @@ -17050,6 +17332,21 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^2.3.8": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa + languageName: node + linkType: hard + "readable-stream@npm:^3.0.6": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" @@ -17061,7 +17358,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -18124,6 +18421,18 @@ __metadata: languageName: node linkType: hard +"side-channel@npm:^1.0.6": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + object-inspect: "npm:^1.13.1" + checksum: d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f + languageName: node + linkType: hard + "signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -18417,6 +18726,28 @@ __metadata: languageName: node linkType: hard +"stream-browserify@npm:^3.0.0": + version: 3.0.0 + resolution: "stream-browserify@npm:3.0.0" + dependencies: + inherits: "npm:~2.0.4" + readable-stream: "npm:^3.5.0" + checksum: ec3b975a4e0aa4b3dc5e70ffae3fc8fd29ac725353a14e72f213dff477b00330140ad014b163a8cbb9922dfe90803f81a5ea2b269e1bbfd8bd71511b88f889ad + languageName: node + linkType: hard + +"stream-http@npm:^3.2.0": + version: 3.2.0 + resolution: "stream-http@npm:3.2.0" + dependencies: + builtin-status-codes: "npm:^3.0.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.6.0" + xtend: "npm:^4.0.2" + checksum: f128fb8076d60cd548f229554b6a1a70c08a04b7b2afd4dbe7811d20f27f7d4112562eb8bce86d72a8691df3b50573228afcf1271e55e81f981536c67498bc41 + languageName: node + linkType: hard + "strict-uri-encode@npm:^1.0.0": version: 1.1.0 resolution: "strict-uri-encode@npm:1.1.0" @@ -19382,6 +19713,16 @@ __metadata: languageName: node linkType: hard +"url@npm:^0.11.4": + version: 0.11.4 + resolution: "url@npm:0.11.4" + dependencies: + punycode: "npm:^1.4.1" + qs: "npm:^6.12.3" + checksum: cc93405ae4a9b97a2aa60ca67f1cb1481c0221cb4725a7341d149be5e2f9cfda26fd432d64dbbec693d16593b68b8a46aad8e5eab21f814932134c9d8620c662 + languageName: node + linkType: hard + "utf-8-validate@npm:^5.0.2": version: 5.0.10 resolution: "utf-8-validate@npm:5.0.10" @@ -20393,7 +20734,7 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0": +"xtend@npm:^4.0.0, xtend@npm:^4.0.2": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: 366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e