diff --git a/packages/extension-compat-metamask/package.json b/packages/extension-compat-metamask/package.json index 02392b1..c0d88fb 100644 --- a/packages/extension-compat-metamask/package.json +++ b/packages/extension-compat-metamask/package.json @@ -25,8 +25,8 @@ "@pezkuwi/extension-inject": "0.62.27", "@pezkuwi/types": "^16.5.37", "@pezkuwi/util": "^14.0.26", - "tslib": "^2.8.1", - "web3": "^4.7.0" + "@pezkuwi/util-crypto": "^14.0.26", + "tslib": "^2.8.1" }, "peerDependencies": { "@pezkuwi/api": "*", diff --git a/packages/extension-compat-metamask/src/bundle.ts b/packages/extension-compat-metamask/src/bundle.ts index 99d5e58..dd675b3 100644 --- a/packages/extension-compat-metamask/src/bundle.ts +++ b/packages/extension-compat-metamask/src/bundle.ts @@ -6,10 +6,11 @@ import type { SignerPayloadRaw, SignerResult } from '@pezkuwi/types/types'; import type { HexString } from '@pezkuwi/util/types'; import detectEthereumProvider from '@metamask/detect-provider'; -import Web3 from 'web3'; import { assert } from '@pezkuwi/util'; +import { ethSignHash } from './ethSignHash.js'; + export { packageInfo } from './packageInfo.js'; interface RequestArguments { @@ -77,7 +78,7 @@ function injectMetaMaskWeb3 (win: Web3Window): void { }, signer: { signRaw: async (raw: SignerPayloadRaw): Promise => { - const signature = (await provider.request({ method: 'eth_sign', params: [raw.address, Web3.utils.sha3(raw.data)] })) as HexString; + const signature = (await provider.request({ method: 'eth_sign', params: [raw.address, ethSignHash(raw.data)] })) as HexString; return { id: 0, signature }; } diff --git a/packages/extension-compat-metamask/src/ethSignHash.spec.ts b/packages/extension-compat-metamask/src/ethSignHash.spec.ts new file mode 100644 index 0000000..649ad5b --- /dev/null +++ b/packages/extension-compat-metamask/src/ethSignHash.spec.ts @@ -0,0 +1,24 @@ +// Copyright 2019-2026 @pezkuwi/extension-compat-metamask authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +/// + +import { ethSignHash } from './ethSignHash.js'; + +// Expected values were produced by web3 4.16 Web3.utils.sha3, which this replaces. +describe('ethSignHash', (): void => { + it('hashes hex data as bytes', (): void => { + expect(ethSignHash('0x1234abcd')).toBe('0xfb89609961b35c222ceb5dacad207b44f9e09c11fa5f5f02a7cf958c030b7261'); + expect(ethSignHash('0xABCDEF')).toBe('0x800d501693feda2226878e1ec7869eef8919dbc5bd10c2bcd031b94d73492860'); + }); + + it('hashes other data as UTF-8', (): void => { + expect(ethSignHash('hello')).toBe('0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8'); + expect(ethSignHash('0x1234')).toBe('0xf844540359c03c3ff02fb9afa4fca69333774af89989dd1f18a555e30414d27e'); + }); + + it('refuses empty data', (): void => { + expect(() => ethSignHash('')).toThrow('Cannot sign empty data'); + expect(() => ethSignHash('0x')).toThrow('Cannot sign empty data'); + }); +}); diff --git a/packages/extension-compat-metamask/src/ethSignHash.ts b/packages/extension-compat-metamask/src/ethSignHash.ts new file mode 100644 index 0000000..86f1430 --- /dev/null +++ b/packages/extension-compat-metamask/src/ethSignHash.ts @@ -0,0 +1,19 @@ +// Copyright 2019-2026 @pezkuwi/extension-compat-metamask authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { HexString } from '@pezkuwi/util/types'; + +import { assert } from '@pezkuwi/util'; +import { keccakAsHex } from '@pezkuwi/util-crypto'; + +/** + * The digest handed to MetaMask's eth_sign: keccak-256 of the data, read as + * bytes when it is hex and as UTF-8 otherwise (what web3's utils.sha3 did). + * web3 returned nothing for empty data and the request failed in MetaMask; + * this refuses it here instead of signing the empty-input hash. + */ +export function ethSignHash (data: string): HexString { + assert(data !== '' && data !== '0x', 'Cannot sign empty data'); + + return keccakAsHex(data); +} diff --git a/packages/extension-compat-metamask/tsconfig.build.json b/packages/extension-compat-metamask/tsconfig.build.json index b27ae67..e080ec5 100644 --- a/packages/extension-compat-metamask/tsconfig.build.json +++ b/packages/extension-compat-metamask/tsconfig.build.json @@ -5,6 +5,9 @@ "outDir": "./build", "rootDir": "./src" }, + "exclude": [ + "**/*.spec.ts" + ], "references": [ { "path": "../extension-inject/tsconfig.build.json" } ] diff --git a/packages/extension-compat-metamask/tsconfig.spec.json b/packages/extension-compat-metamask/tsconfig.spec.json new file mode 100644 index 0000000..b09dfb1 --- /dev/null +++ b/packages/extension-compat-metamask/tsconfig.spec.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "..", + "outDir": "./build", + "rootDir": "./src", + "emitDeclarationOnly": false, + "noEmit": true + }, + "include": [ + "**/*.spec.ts" + ], + "references": [ + { "path": "../extension-compat-metamask/tsconfig.build.json" } + ] +} diff --git a/packages/extension-ui/package.json b/packages/extension-ui/package.json index 9937f76..36eee1b 100644 --- a/packages/extension-ui/package.json +++ b/packages/extension-ui/package.json @@ -22,7 +22,7 @@ "@fortawesome/free-regular-svg-icons": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.0", - "@paraspell/xcm-analyser": "^1.3.1", + "@paraspell/xcm-analyser": "^3.4.0", "@pezkuwi/api": "^16.5.37", "@pezkuwi/extension-base": "0.62.27", "@pezkuwi/extension-chains": "0.62.27", diff --git a/packages/extension-ui/src/Popup/Signing/Extrinsic.tsx b/packages/extension-ui/src/Popup/Signing/Extrinsic.tsx index fa093af..1890ca6 100644 --- a/packages/extension-ui/src/Popup/Signing/Extrinsic.tsx +++ b/packages/extension-ui/src/Popup/Signing/Extrinsic.tsx @@ -7,13 +7,13 @@ import type { AnyJson, SignerPayloadJSON } from '@pezkuwi/types/types'; import type { BN } from '@pezkuwi/util'; import type { TFunction } from '../../hooks/useTranslation.js'; -import { convertMultilocationToUrl } from '@paraspell/xcm-analyser'; import React, { useMemo, useRef } from 'react'; import { bnToBn, formatNumber } from '@pezkuwi/util'; import { Table } from '../../components/index.js'; import { useMetadata, useTranslation } from '../../hooks/index.js'; +import { assetIdUrl } from './assetIdUrl.js'; interface Decoded { args: AnyJson | null; @@ -107,14 +107,6 @@ function mortalityAsString (era: ExtrinsicEra, hexBlockNumber: string, t: TFunct }); } -function getHumanReadableAssetId (assetId: unknown): string | undefined { - try { - return convertMultilocationToUrl(assetId); - } catch (_) { - return undefined; - } -} - function Extrinsic ({ className, payload, request: { blockNumber, genesisHash, method, specVersion: hexSpec }, url }: Props): React.ReactElement { const { t } = useTranslation(); const chain = useMetadata(genesisHash); @@ -128,7 +120,7 @@ function Extrinsic ({ className, payload, request: { blockNumber, genesisHash, m const humanReadablePayload = payload.toHuman() as Record; const assetId = humanReadablePayload['assetId']; - const humanReadableAssetId = getHumanReadableAssetId(assetId); + const humanReadableAssetId = assetIdUrl(assetId); return ( + +import { assetIdUrl } from './assetIdUrl.js'; + +// Inputs are in the shape SignerPayload.toHuman() gives the signing popup. +describe('assetIdUrl', (): void => { + it('reads grouped digit strings as numbers', (): void => { + expect(assetIdUrl({ interior: { X2: [{ PalletInstance: '50' }, { GeneralIndex: '1,984' }] }, parents: '0' })).toBe('./PalletInstance(50)/GeneralIndex(1984)'); + expect(assetIdUrl({ interior: { X1: { Parachain: '1,000' } }, parents: '1' })).toBe('../Parachain(1000)'); + expect(assetIdUrl({ interior: { X1: [{ Parachain: '2,034' }] }, parents: '1' })).toBe('../Parachain(2034)'); + }); + + it('leaves hex and names alone', (): void => { + expect(assetIdUrl({ interior: { X2: [{ Parachain: '2,004' }, { AccountKey20: { key: '0x931715fee2d06333043d11f658c8ce934ac61d0c', network: null } }] }, parents: '1' })).toBe('../Parachain(2004)/AccountKey20(null, 0x931715fee2d06333043d11f658c8ce934ac61d0c)'); + expect(assetIdUrl({ interior: { X1: { GlobalConsensus: 'Polkadot' } }, parents: '2' })).toBe('../../GlobalConsensus(Polkadot)'); + }); + + it('gives nothing for what is not a location', (): void => { + expect(assetIdUrl(undefined)).toBeUndefined(); + expect(assetIdUrl(null)).toBeUndefined(); + expect(assetIdUrl('1,984')).toBeUndefined(); + expect(assetIdUrl({})).toBeUndefined(); + }); +}); diff --git a/packages/extension-ui/src/Popup/Signing/assetIdUrl.ts b/packages/extension-ui/src/Popup/Signing/assetIdUrl.ts new file mode 100644 index 0000000..84d540e --- /dev/null +++ b/packages/extension-ui/src/Popup/Signing/assetIdUrl.ts @@ -0,0 +1,31 @@ +// Copyright 2019-2026 @pezkuwi/extension-ui authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { convertLocationToUrl } from '@paraspell/xcm-analyser'; + +// toHuman() renders integers as grouped digit strings ("1,984"); the +// analyser's schema takes numbers, so those are turned back before parsing. +const GROUPED_INTEGER = /^\d{1,3}(,\d{3})*$/; + +function fromHuman (value: unknown): unknown { + if (typeof value === 'string') { + return GROUPED_INTEGER.test(value) + ? Number(value.replace(/,/g, '')) + : value; + } else if (Array.isArray(value)) { + return value.map(fromHuman); + } else if (value && typeof value === 'object') { + return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, fromHuman(v)])); + } + + return value; +} + +/** The asset location of a signing payload, from its toHuman() form, as an XCM path. */ +export function assetIdUrl (assetId: unknown): string | undefined { + try { + return convertLocationToUrl(fromHuman(assetId)); + } catch { + return undefined; + } +} diff --git a/tsconfig.build.json b/tsconfig.build.json index 4eceb04..4adf09c 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "./packages/extension-base/tsconfig.spec.json" }, { "path": "./packages/extension-chains/tsconfig.build.json" }, { "path": "./packages/extension-compat-metamask/tsconfig.build.json" }, + { "path": "./packages/extension-compat-metamask/tsconfig.spec.json" }, { "path": "./packages/extension-dapp/tsconfig.build.json" }, { "path": "./packages/extension-dapp/tsconfig.spec.json" }, { "path": "./packages/extension-inject/tsconfig.build.json" }, diff --git a/yarn.lock b/yarn.lock index bec11ac..e3004b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,13 +5,6 @@ __metadata: version: 8 cacheKey: 10 -"@adraffy/ens-normalize@npm:^1.8.8": - version: 1.11.1 - resolution: "@adraffy/ens-normalize@npm:1.11.1" - checksum: 10/dd19274d9fcaf99bf08a62b64e54f4748de11b235767addbd3f7385ae1b7777bd704d17ff003ffaa3295a0b9d035929381cf3b38329c96260bff96aab8ad7b37 - languageName: node - linkType: hard - "@asamuzakjp/css-color@npm:^3.2.0": version: 3.2.0 resolution: "@asamuzakjp/css-color@npm:3.2.0" @@ -629,24 +622,6 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/rlp@npm:^4.0.1": - version: 4.0.1 - resolution: "@ethereumjs/rlp@npm:4.0.1" - bin: - rlp: bin/rlp - checksum: 10/bfdffd634ce72f3b17e3d085d071f2fe7ce9680aebdf10713d74b30afd80ef882d17f19ff7175fcb049431a56e800bd3558d3b028bd0d82341927edb303ab450 - languageName: node - linkType: hard - -"@ethereumjs/rlp@npm:^5.0.2": - version: 5.0.2 - resolution: "@ethereumjs/rlp@npm:5.0.2" - bin: - rlp: bin/rlp.cjs - checksum: 10/2af80d98faf7f64dfb6d739c2df7da7350ff5ad52426c3219897e843ee441215db0ffa346873200a6be6d11142edb9536e66acd62436b5005fa935baaf7eb6bd - languageName: node - linkType: hard - "@fortawesome/fontawesome-common-types@npm:6.7.2": version: 6.7.2 resolution: "@fortawesome/fontawesome-common-types@npm:6.7.2" @@ -1241,15 +1216,6 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:1.4.2, @noble/curves@npm:~1.4.0": - version: 1.4.2 - resolution: "@noble/curves@npm:1.4.2" - dependencies: - "@noble/hashes": "npm:1.4.0" - checksum: 10/f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 - languageName: node - linkType: hard - "@noble/curves@npm:^1.9.7, @noble/curves@npm:~1.9.2": version: 1.9.7 resolution: "@noble/curves@npm:1.9.7" @@ -1259,13 +1225,6 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.4.0, @noble/hashes@npm:~1.4.0": - version: 1.4.0 - resolution: "@noble/hashes@npm:1.4.0" - checksum: 10/e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 - languageName: node - linkType: hard - "@noble/hashes@npm:1.8.0, @noble/hashes@npm:^1.3.3, @noble/hashes@npm:^1.8.0, @noble/hashes@npm:~1.8.0": version: 1.8.0 resolution: "@noble/hashes@npm:1.8.0" @@ -1470,12 +1429,12 @@ __metadata: languageName: node linkType: hard -"@paraspell/xcm-analyser@npm:^1.3.1": - version: 1.5.9 - resolution: "@paraspell/xcm-analyser@npm:1.5.9" +"@paraspell/xcm-analyser@npm:^3.4.0": + version: 3.4.0 + resolution: "@paraspell/xcm-analyser@npm:3.4.0" dependencies: - zod: "npm:^3.25.67" - checksum: 10/2027550108cd7aa299c5a980eb2080ba930f1952f8993e8acdadd8677aa3ccd2e0753ca7acaa08bd8d84eac2012d473d32d61c3b189dcf081bf3a2f5206fe6c4 + zod: "npm:^4.6.7" + checksum: 10/6a11cd9352145c552c26efe85b2a0cc02e8490cd013df53ba71a4105acfb3348e88974f8ee88df60a9c91da31703df6e92644411f94bad327a3e3c86656a6c49 languageName: node linkType: hard @@ -1852,8 +1811,8 @@ __metadata: "@pezkuwi/extension-inject": "npm:0.62.27" "@pezkuwi/types": "npm:^16.5.37" "@pezkuwi/util": "npm:^14.0.26" + "@pezkuwi/util-crypto": "npm:^14.0.26" tslib: "npm:^2.8.1" - web3: "npm:^4.7.0" peerDependencies: "@pezkuwi/api": "*" "@pezkuwi/util": "*" @@ -1914,7 +1873,7 @@ __metadata: "@fortawesome/free-regular-svg-icons": "npm:^6.7.2" "@fortawesome/free-solid-svg-icons": "npm:^6.7.2" "@fortawesome/react-fontawesome": "npm:^0.2.0" - "@paraspell/xcm-analyser": "npm:^1.3.1" + "@paraspell/xcm-analyser": "npm:^3.4.0" "@pezkuwi/api": "npm:^16.5.37" "@pezkuwi/dev-test": "npm:^0.86.3" "@pezkuwi/extension-base": "npm:0.62.27" @@ -2831,34 +2790,6 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:~1.1.6": - version: 1.1.9 - resolution: "@scure/base@npm:1.1.9" - checksum: 10/f0ab7f687bbcdee2a01377fe3cd808bf63977999672751295b6a92625d5322f4754a96d40f6bd579bc367aad48ecf8a4e6d0390e70296e6ded1076f52adb16bb - languageName: node - linkType: hard - -"@scure/bip32@npm:1.4.0": - version: 1.4.0 - resolution: "@scure/bip32@npm:1.4.0" - dependencies: - "@noble/curves": "npm:~1.4.0" - "@noble/hashes": "npm:~1.4.0" - "@scure/base": "npm:~1.1.6" - checksum: 10/6cd5062d902564d9e970597ec8b1adacb415b2eadfbb95aee1a1a0480a52eb0de4d294d3753aa8b48548064c9795ed108d348a31a8ce3fc88785377bb12c63b9 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.3.0": - version: 1.3.0 - resolution: "@scure/bip39@npm:1.3.0" - dependencies: - "@noble/hashes": "npm:~1.4.0" - "@scure/base": "npm:~1.1.6" - checksum: 10/7d71fd58153de22fe8cd65b525f6958a80487bc9d0fbc32c71c328aeafe41fa259f989d2f1e0fa4fdfeaf83b8fcf9310d52ed9862987e46c2f2bfb9dd8cf9fc1 - languageName: node - linkType: hard - "@sinonjs/commons@npm:^1, @sinonjs/commons@npm:^1.3.0, @sinonjs/commons@npm:^1.4.0, @sinonjs/commons@npm:^1.7.0": version: 1.8.6 resolution: "@sinonjs/commons@npm:1.8.6" @@ -3377,15 +3308,6 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:8.5.3": - version: 8.5.3 - resolution: "@types/ws@npm:8.5.3" - dependencies: - "@types/node": "npm:*" - checksum: 10/08aac698ce6480b532d8311f790a8744ae489ccdd98f374cfe4b8245855439825c64b031abcbba4f30fb280da6cc2b02a4e261e16341d058ffaeecaa24ba2bd3 - languageName: node - linkType: hard - "@types/ws@npm:^8.18.1": version: 8.18.2 resolution: "@types/ws@npm:8.18.2" @@ -4059,19 +3981,6 @@ __metadata: languageName: node linkType: hard -"abitype@npm:0.7.1": - version: 0.7.1 - resolution: "abitype@npm:0.7.1" - peerDependencies: - typescript: ">=4.9.4" - zod: ^3 >=3.19.1 - peerDependenciesMeta: - zod: - optional: true - checksum: 10/deee4a18c9c7218ab2e5e57e07e4cb3e2f3e785657be364d098ab0587cd552c4fbb41e1bdddbc6fa52387f51ebd181461fe70a13127cc77091655775fdfb18fe - languageName: node - linkType: hard - "accepts@npm:^2.0.0": version: 2.0.0 resolution: "accepts@npm:2.0.0" @@ -5305,24 +5214,6 @@ __metadata: languageName: node linkType: hard -"crc-32@npm:^1.2.2": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" - bin: - crc32: bin/crc32.njs - checksum: 10/824f696a5baaf617809aa9cd033313c8f94f12d15ebffa69f10202480396be44aef9831d900ab291638a8022ed91c360696dd5b1ba691eb3f34e60be8835b7c3 - languageName: node - linkType: hard - -"cross-fetch@npm:^4.0.0": - version: 4.1.0 - resolution: "cross-fetch@npm:4.1.0" - dependencies: - node-fetch: "npm:^2.7.0" - checksum: 10/07624940607b64777d27ec9c668ddb6649e8c59ee0a5a10e63a51ce857e2bbb1294a45854a31c10eccb91b65909a5b199fcb0217339b44156f85900a7384f489 - languageName: node - linkType: hard - "cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -6680,18 +6571,6 @@ __metadata: languageName: node linkType: hard -"ethereum-cryptography@npm:^2.0.0": - version: 2.2.1 - resolution: "ethereum-cryptography@npm:2.2.1" - dependencies: - "@noble/curves": "npm:1.4.2" - "@noble/hashes": "npm:1.4.0" - "@scure/bip32": "npm:1.4.0" - "@scure/bip39": "npm:1.3.0" - checksum: 10/ab123bbfe843500ac2d645ce9edc4bc814962ffb598db6bf8bf01fbecac656e6c81ff4cf2472f1734844bbcbad2bf658d8b699cb7248d768e0f06ae13ecf43b8 - languageName: node - linkType: hard - "eventemitter3@npm:^5.0.1": version: 5.0.4 resolution: "eventemitter3@npm:5.0.4" @@ -7896,16 +7775,6 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4": - version: 1.2.0 - resolution: "is-arguments@npm:1.2.0" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10/471a8ef631b8ee8829c43a8ab05c081700c0e25180c73d19f3bf819c1a8448c426a9e8e601f278973eca68966384b16ceb78b8c63af795b099cd199ea5afc457 - languageName: node - linkType: hard - "is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" @@ -8036,7 +7905,7 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": +"is-generator-function@npm:^1.0.10": version: 1.1.2 resolution: "is-generator-function@npm:1.1.2" dependencies: @@ -8244,7 +8113,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": version: 1.1.15 resolution: "is-typed-array@npm:1.1.15" dependencies: @@ -8351,15 +8220,6 @@ __metadata: languageName: node linkType: hard -"isomorphic-ws@npm:^5.0.0": - version: 5.0.0 - resolution: "isomorphic-ws@npm:5.0.0" - peerDependencies: - ws: "*" - checksum: 10/e20eb2aee09ba96247465fda40c6d22c1153394c0144fa34fe6609f341af4c8c564f60ea3ba762335a7a9c306809349f9b863c8beedf2beea09b299834ad5398 - languageName: node - linkType: hard - "iterator.prototype@npm:^1.1.5": version: 1.1.5 resolution: "iterator.prototype@npm:1.1.5" @@ -9273,20 +9133,6 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10/b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 - languageName: node - linkType: hard - "node-fetch@npm:^3.3.2": version: 3.3.2 resolution: "node-fetch@npm:3.3.2" @@ -11110,13 +10956,6 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: 10/76e3f5d7f4b581b6100ff819761f04a984fa3f3990e72a6554b57188ded53efce2d3d6c0932c10f810b7c59414f85e2ab3c11521877d1dea1ce0b56dc906f485 - languageName: node - linkType: hard - "setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -11987,13 +11826,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10/8f1f5aa6cb232f9e1bdc86f485f916b7aa38caee8a778b378ffec0b70d9307873f253f5cbadbe2955ece2ac5c83d0dc14a77513166ccd0a0c7fe197e21396695 - languageName: node - linkType: hard - "tree-dump@npm:^1.0.3, tree-dump@npm:^1.1.0": version: 1.1.0 resolution: "tree-dump@npm:1.1.0" @@ -12430,19 +12262,6 @@ __metadata: languageName: node linkType: hard -"util@npm:^0.12.5": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: "npm:^2.0.3" - is-arguments: "npm:^1.0.4" - is-generator-function: "npm:^1.0.7" - is-typed-array: "npm:^1.1.3" - which-typed-array: "npm:^1.1.2" - checksum: 10/61a10de7753353dd4d744c917f74cdd7d21b8b46379c1e48e1c4fd8e83f8190e6bd9978fc4e5102ab6a10ebda6019d1b36572fa4a325e175ec8b789a121f6147 - languageName: node - linkType: hard - "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -12571,280 +12390,6 @@ __metadata: languageName: node linkType: hard -"web3-core@npm:^4.4.0, web3-core@npm:^4.5.0, web3-core@npm:^4.6.0, web3-core@npm:^4.7.1": - version: 4.7.1 - resolution: "web3-core@npm:4.7.1" - dependencies: - web3-errors: "npm:^1.3.1" - web3-eth-accounts: "npm:^4.3.1" - web3-eth-iban: "npm:^4.0.7" - web3-providers-http: "npm:^4.2.0" - web3-providers-ipc: "npm:^4.0.7" - web3-providers-ws: "npm:^4.0.8" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - dependenciesMeta: - web3-providers-ipc: - optional: true - checksum: 10/c6b9447e62f5c57ccc3c96492adf5630cb3256968c15ce5675c660dec1f6da0bf60397efa88588029640f749ff45a1adaa0167a402ba0b4a46e600d8eda76334 - languageName: node - linkType: hard - -"web3-errors@npm:^1.1.3, web3-errors@npm:^1.2.0, web3-errors@npm:^1.3.0, web3-errors@npm:^1.3.1": - version: 1.3.1 - resolution: "web3-errors@npm:1.3.1" - dependencies: - web3-types: "npm:^1.10.0" - checksum: 10/0d1cb0e02701a4bd619f856b0a6702fdd4cdc0a434029c3c3dcde3f3cc4acaca418117ad10238002aa697745840e7fd312bd43ad5341482b3ff8f9e6eb438a31 - languageName: node - linkType: hard - -"web3-eth-abi@npm:^4.4.1": - version: 4.4.1 - resolution: "web3-eth-abi@npm:4.4.1" - dependencies: - abitype: "npm:0.7.1" - web3-errors: "npm:^1.3.1" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/0c7f4f9f05f04e0ac98f6029edfb3bf7e514efc325f6be83e999203f49c7a0cdc9759f4b1011ce12d80c2044c74a867f7fc0ee83538408c2ebb4c9f407027b7f - languageName: node - linkType: hard - -"web3-eth-accounts@npm:^4.3.1": - version: 4.3.1 - resolution: "web3-eth-accounts@npm:4.3.1" - dependencies: - "@ethereumjs/rlp": "npm:^4.0.1" - crc-32: "npm:^1.2.2" - ethereum-cryptography: "npm:^2.0.0" - web3-errors: "npm:^1.3.1" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/f8b689146c908d88b983bd467c3e794ed96e284490aa3f74e665580202db4f0826d4108f0aa95dc6ef1e14f9a8a41939ff2c4485e9713744dc6474d7082d9239 - languageName: node - linkType: hard - -"web3-eth-contract@npm:^4.5.0, web3-eth-contract@npm:^4.7.2": - version: 4.7.2 - resolution: "web3-eth-contract@npm:4.7.2" - dependencies: - "@ethereumjs/rlp": "npm:^5.0.2" - web3-core: "npm:^4.7.1" - web3-errors: "npm:^1.3.1" - web3-eth: "npm:^4.11.1" - web3-eth-abi: "npm:^4.4.1" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/f5dd22199a69c6f10b0c38daee790341f80247a0155bad03e7c1a9ffad2d6c47722010b4fd0e3fe7832a43eb72a2fceadfd2892712ef199898c1e43067a92c0d - languageName: node - linkType: hard - -"web3-eth-ens@npm:^4.4.0": - version: 4.4.0 - resolution: "web3-eth-ens@npm:4.4.0" - dependencies: - "@adraffy/ens-normalize": "npm:^1.8.8" - web3-core: "npm:^4.5.0" - web3-errors: "npm:^1.2.0" - web3-eth: "npm:^4.8.0" - web3-eth-contract: "npm:^4.5.0" - web3-net: "npm:^4.1.0" - web3-types: "npm:^1.7.0" - web3-utils: "npm:^4.3.0" - web3-validator: "npm:^2.0.6" - checksum: 10/25a1535e095d8ffcbc0641041af69e42aa60ba2989477108a5678c42a06135df9134ccc6024c89c216cb3408848e3905ee178d5b12e3bb740e895ee6ee0bd2cf - languageName: node - linkType: hard - -"web3-eth-iban@npm:^4.0.7": - version: 4.0.7 - resolution: "web3-eth-iban@npm:4.0.7" - dependencies: - web3-errors: "npm:^1.1.3" - web3-types: "npm:^1.3.0" - web3-utils: "npm:^4.0.7" - web3-validator: "npm:^2.0.3" - checksum: 10/9d7521b4d4aef3a0d697905c7859d8e4d7ce82234320beecba9b24d254592a7ccf0354f329289b4e11a816fcbe3eceb842c4c87678f5e8ec622c8351bc1b9170 - languageName: node - linkType: hard - -"web3-eth-personal@npm:^4.1.0": - version: 4.1.0 - resolution: "web3-eth-personal@npm:4.1.0" - dependencies: - web3-core: "npm:^4.6.0" - web3-eth: "npm:^4.9.0" - web3-rpc-methods: "npm:^1.3.0" - web3-types: "npm:^1.8.0" - web3-utils: "npm:^4.3.1" - web3-validator: "npm:^2.0.6" - checksum: 10/a560b0ef1f28961101c47824aa6fc71722c4e581ef5ffc5b68cf1b7db0fd5804032239f872a167a589b3c0ebe223353b8112b38e247e1f5b5ac48991e12f853c - languageName: node - linkType: hard - -"web3-eth@npm:^4.11.1, web3-eth@npm:^4.8.0, web3-eth@npm:^4.9.0": - version: 4.11.1 - resolution: "web3-eth@npm:4.11.1" - dependencies: - setimmediate: "npm:^1.0.5" - web3-core: "npm:^4.7.1" - web3-errors: "npm:^1.3.1" - web3-eth-abi: "npm:^4.4.1" - web3-eth-accounts: "npm:^4.3.1" - web3-net: "npm:^4.1.0" - web3-providers-ws: "npm:^4.0.8" - web3-rpc-methods: "npm:^1.3.0" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/b39f5f1559a012ece0017f3976207ffb5358c4ebb2e8518721efcc4975005ed8948814613795d1ceee67eb28f33608cbc89f6b231534241052de231c6477ed17 - languageName: node - linkType: hard - -"web3-net@npm:^4.1.0": - version: 4.1.0 - resolution: "web3-net@npm:4.1.0" - dependencies: - web3-core: "npm:^4.4.0" - web3-rpc-methods: "npm:^1.3.0" - web3-types: "npm:^1.6.0" - web3-utils: "npm:^4.3.0" - checksum: 10/2899ed28d9afda9f9faee6424752cb967dabf79128bce25321318e069a41571b9bd9477b480f290fd65f07cd6c0c641def0d72f31a730705112bd14c301f4e5e - languageName: node - linkType: hard - -"web3-providers-http@npm:^4.2.0": - version: 4.2.0 - resolution: "web3-providers-http@npm:4.2.0" - dependencies: - cross-fetch: "npm:^4.0.0" - web3-errors: "npm:^1.3.0" - web3-types: "npm:^1.7.0" - web3-utils: "npm:^4.3.1" - checksum: 10/812b05d1e0dd8b6c5005bdcfe3c5fbddfe6cdd082bd2654dfe171ad98c3b7ff85b0bab371c70366d2bace2cf45fbf7d2f087b4cb281dbfa12372b902b8138eeb - languageName: node - linkType: hard - -"web3-providers-ipc@npm:^4.0.7": - version: 4.0.7 - resolution: "web3-providers-ipc@npm:4.0.7" - dependencies: - web3-errors: "npm:^1.1.3" - web3-types: "npm:^1.3.0" - web3-utils: "npm:^4.0.7" - checksum: 10/b953818479f5d9c7b748e10977430fd7e377696f9160ae19b1917c0317e89671c4be824c06723b6fda190258927160fcec0e8e7c1aa87a5f0344008ef7649cda - languageName: node - linkType: hard - -"web3-providers-ws@npm:^4.0.8": - version: 4.0.8 - resolution: "web3-providers-ws@npm:4.0.8" - dependencies: - "@types/ws": "npm:8.5.3" - isomorphic-ws: "npm:^5.0.0" - web3-errors: "npm:^1.2.0" - web3-types: "npm:^1.7.0" - web3-utils: "npm:^4.3.1" - ws: "npm:^8.17.1" - checksum: 10/9b9fa96fa1fc9455fb1b632de50f542d2589710002ea2cb0cd6a5c1ed9f72960d80ce219ac66b038ea6d0a767056fe653aa258a1c084aa78d5745870cc2703b4 - languageName: node - linkType: hard - -"web3-rpc-methods@npm:^1.3.0": - version: 1.3.0 - resolution: "web3-rpc-methods@npm:1.3.0" - dependencies: - web3-core: "npm:^4.4.0" - web3-types: "npm:^1.6.0" - web3-validator: "npm:^2.0.6" - checksum: 10/8c134b1f2ae1cf94d5c452c53fe699d5951c22c62ea82084559db06722a5f0db2047be4209172ff90432c42f70cf8081fea0ea85a024e4cbcd0e037efd9acfa8 - languageName: node - linkType: hard - -"web3-rpc-providers@npm:^1.0.0-rc.4": - version: 1.0.0-rc.4 - resolution: "web3-rpc-providers@npm:1.0.0-rc.4" - dependencies: - web3-errors: "npm:^1.3.1" - web3-providers-http: "npm:^4.2.0" - web3-providers-ws: "npm:^4.0.8" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/a6dff5ce76e6905eb3e8e7175984305b859a35f17ffad9511371e0840097cdccc4d8dd4a4bc893aeb78f93c22034b4c73cac79551a4d7cba204e55590018909b - languageName: node - linkType: hard - -"web3-types@npm:^1.10.0, web3-types@npm:^1.3.0, web3-types@npm:^1.6.0, web3-types@npm:^1.7.0, web3-types@npm:^1.8.0": - version: 1.10.0 - resolution: "web3-types@npm:1.10.0" - checksum: 10/849f05a001896b27082c5b5c46c62b65a28f463366eeec7223802418a61db6d3487ebfb73d1fe6dcad3f0849a76e20706098819cb4e266df4f75ca24617e62a1 - languageName: node - linkType: hard - -"web3-utils@npm:^4.0.7, web3-utils@npm:^4.3.0, web3-utils@npm:^4.3.1, web3-utils@npm:^4.3.3": - version: 4.3.3 - resolution: "web3-utils@npm:4.3.3" - dependencies: - ethereum-cryptography: "npm:^2.0.0" - eventemitter3: "npm:^5.0.1" - web3-errors: "npm:^1.3.1" - web3-types: "npm:^1.10.0" - web3-validator: "npm:^2.0.6" - checksum: 10/c91ebbe67e469fe184ab258564b1f002f6f0e563a91637429c8e5bd3f0653b970d0c45dac544402021a5512297f0bea39aa2dd0b4c9bc6f54d4b58897f2dd002 - languageName: node - linkType: hard - -"web3-validator@npm:^2.0.3, web3-validator@npm:^2.0.6": - version: 2.0.6 - resolution: "web3-validator@npm:2.0.6" - dependencies: - ethereum-cryptography: "npm:^2.0.0" - util: "npm:^0.12.5" - web3-errors: "npm:^1.2.0" - web3-types: "npm:^1.6.0" - zod: "npm:^3.21.4" - checksum: 10/4df08e5317d55cdb674cbd11d7534a6cb41abfa4912cf3ff976c2b34a98e84500732fa0cade68a848e57b61259b4c9b377773f57de6bb69a5029c2ddef1cd0ab - languageName: node - linkType: hard - -"web3@npm:^4.7.0": - version: 4.16.0 - resolution: "web3@npm:4.16.0" - dependencies: - web3-core: "npm:^4.7.1" - web3-errors: "npm:^1.3.1" - web3-eth: "npm:^4.11.1" - web3-eth-abi: "npm:^4.4.1" - web3-eth-accounts: "npm:^4.3.1" - web3-eth-contract: "npm:^4.7.2" - web3-eth-ens: "npm:^4.4.0" - web3-eth-iban: "npm:^4.0.7" - web3-eth-personal: "npm:^4.1.0" - web3-net: "npm:^4.1.0" - web3-providers-http: "npm:^4.2.0" - web3-providers-ws: "npm:^4.0.8" - web3-rpc-methods: "npm:^1.3.0" - web3-rpc-providers: "npm:^1.0.0-rc.4" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/8d63e70404914d2717d2675ba19350f112b07e50583a0703a68dd326eeb43a5c82b56f1165f4339cd89e697967581e0cd65fdb42ca0f1150fb7a3ce612f1a829 - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10/b65b9f8d6854572a84a5c69615152b63371395f0c5dcd6729c45789052296df54314db2bc3e977df41705eacb8bc79c247cee139a63fa695192f95816ed528ad - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -13097,16 +12642,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10/f95adbc1e80820828b45cc671d97da7cd5e4ef9deb426c31bcd5ab00dc7103042291613b3ef3caec0a2335ed09e0d5ed026c940755dbb6d404e2b27f940fdf07 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -13153,7 +12688,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19, which-typed-array@npm:^1.1.2": +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19": version: 1.1.20 resolution: "which-typed-array@npm:1.1.20" dependencies: @@ -13222,7 +12757,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.17.1, ws@npm:^8.18.0, ws@npm:^8.20.0, ws@npm:^8.8.1": +"ws@npm:^8.18.0, ws@npm:^8.20.0, ws@npm:^8.8.1": version: 8.22.0 resolution: "ws@npm:8.22.0" peerDependencies: @@ -13334,16 +12869,9 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.21.4, zod@npm:^3.25.67": - version: 3.25.76 - resolution: "zod@npm:3.25.76" - checksum: 10/f0c963ec40cd96858451d1690404d603d36507c1fc9682f2dae59ab38b578687d542708a7fdbf645f77926f78c9ed558f57c3d3aa226c285f798df0c4da16995 - languageName: node - linkType: hard - -"zod@npm:^3.25.0 || ^4.0.0": - version: 4.6.6 - resolution: "zod@npm:4.6.6" - checksum: 10/ce628fb33400b531f48b63ad1bd9b5ab95ec3ac60d4e8025892d90af9ca5d03b168aaaf74071928345ad1b1bcd735a7d5cf33230ece7de885240bb0f2b7bb492 +"zod@npm:^3.25.0 || ^4.0.0, zod@npm:^4.6.7": + version: 4.6.7 + resolution: "zod@npm:4.6.7" + checksum: 10/3ca8b8d6bb401538e59504c543db629ea7beaa775e504c3f22269b406fdffbf1431c856d59a597bf66d8487e4d2be12b03a55d76fc2c63d9f046eae1ca173bca languageName: node linkType: hard