diff --git a/packages/devtools-evm-hardhat/package.json b/packages/devtools-evm-hardhat/package.json index de2f37285..883fecad3 100644 --- a/packages/devtools-evm-hardhat/package.json +++ b/packages/devtools-evm-hardhat/package.json @@ -43,6 +43,7 @@ "test": "jest --ci --forceExit" }, "dependencies": { + "@gnosis.pm/safe-core-sdk": "2.0.0", "@layerzerolabs/export-deployments": "~0.0.1", "micro-memoize": "~4.1.2", "p-memoize": "~4.0.4", diff --git a/packages/devtools-evm-hardhat/src/transactions/signer.ts b/packages/devtools-evm-hardhat/src/transactions/signer.ts index b9f774a27..807599295 100644 --- a/packages/devtools-evm-hardhat/src/transactions/signer.ts +++ b/packages/devtools-evm-hardhat/src/transactions/signer.ts @@ -1,16 +1,22 @@ import pMemoize from 'p-memoize' import type { OmniSignerFactory } from '@layerzerolabs/devtools' -import { OmniSignerEVM } from '@layerzerolabs/devtools-evm' +import { GnosisOmniSignerEVM, OmniSignerEVM } from '@layerzerolabs/devtools-evm' import { createProviderFactory } from '@/provider' +import { createGetHreByEid } from '@/runtime' export const createSignerFactory = ( addressOrIndex?: string | number, - providerFactory = createProviderFactory() -): OmniSignerFactory => { + providerFactory = createProviderFactory(), + networkEnvironmentFactory = createGetHreByEid() +): OmniSignerFactory => { return pMemoize(async (eid) => { const provider = await providerFactory(eid) const signer = provider.getSigner(addressOrIndex) - return new OmniSignerEVM(eid, signer) + const env = await networkEnvironmentFactory(eid) + const safeConfig = env.network.config.safeConfig + return safeConfig + ? new GnosisOmniSignerEVM(eid, signer, safeConfig.safeUrl, safeConfig) + : new OmniSignerEVM(eid, signer) }) } diff --git a/packages/devtools-evm-hardhat/src/type-extensions.ts b/packages/devtools-evm-hardhat/src/type-extensions.ts index 919bd3f15..34cc2bcbf 100644 --- a/packages/devtools-evm-hardhat/src/type-extensions.ts +++ b/packages/devtools-evm-hardhat/src/type-extensions.ts @@ -1,13 +1,16 @@ import 'hardhat/types/config' import { EndpointId } from '@layerzerolabs/lz-definitions' +import { ConnectSafeConfig } from '@gnosis.pm/safe-core-sdk' declare module 'hardhat/types/config' { interface HardhatNetworkUserConfig { eid?: never + safeConfig?: never } interface HardhatNetworkConfig { eid?: never + safeConfig?: never } interface HttpNetworkUserConfig { @@ -17,10 +20,15 @@ declare module 'hardhat/types/config' { * on this network. * * This allows you to use arbitrary network names while maintaining - * allowing you to easilty find deployment and artifact information + * allowing you to easily find deployment and artifact information * for LayerZero protocol contracts using the standard hardhat deploy methods */ eid?: EndpointId + + /** + * Optional gnosis safe config. + */ + safeConfig?: SafeConfig } interface HttpNetworkConfig { @@ -30,10 +38,19 @@ declare module 'hardhat/types/config' { * on this network. * * This allows you to use arbitrary network names while maintaining - * allowing you to easilty find deployment and artifact information + * allowing you to easily find deployment and artifact information * for LayerZero protocol contracts using the standard hardhat deploy methods */ eid?: EndpointId + + /** + * Optional gnosis safe config. + */ + safeConfig?: SafeConfig + } + interface SafeConfig extends ConnectSafeConfig { + safeUrl: string + safeAddress: string // override to make ConnectSafeConfig.safeAddress mandatory } interface HardhatUserConfig { diff --git a/packages/devtools-evm/package.json b/packages/devtools-evm/package.json index 9875feccd..ee044fc17 100644 --- a/packages/devtools-evm/package.json +++ b/packages/devtools-evm/package.json @@ -36,6 +36,11 @@ "test": "jest --ci" }, "dependencies": { + "@gnosis.pm/safe-core-sdk": "^2.0.0", + "@gnosis.pm/safe-core-sdk-types": "^1.0.0", + "@gnosis.pm/safe-ethers-lib": "^1.7.0", + "@gnosis.pm/safe-service-client": "1.1.1", + "ethers": "5.7.2", "p-memoize": "~4.0.4" }, "devDependencies": { diff --git a/packages/devtools-evm/src/signer/sdk.ts b/packages/devtools-evm/src/signer/sdk.ts index 5fe8b30c1..be8474556 100644 --- a/packages/devtools-evm/src/signer/sdk.ts +++ b/packages/devtools-evm/src/signer/sdk.ts @@ -1,5 +1,9 @@ import type { TransactionReceipt, TransactionRequest } from '@ethersproject/abstract-provider' import type { Signer } from '@ethersproject/abstract-signer' +import Safe, { ConnectSafeConfig } from '@gnosis.pm/safe-core-sdk' +import { SafeTransactionDataPartial } from '@gnosis.pm/safe-core-sdk-types' +import EthersAdapter from '@gnosis.pm/safe-ethers-lib' +import SafeServiceClient from '@gnosis.pm/safe-service-client' import type { EndpointId } from '@layerzerolabs/lz-definitions' import { formatEid, @@ -10,23 +14,46 @@ import { } from '@layerzerolabs/devtools' import assert from 'assert' +import { ethers } from 'ethers' + +export abstract class OmniSignerEVMBase implements OmniSigner { + protected constructor( + public readonly eid: EndpointId, + public readonly signer: Signer + ) {} + + protected assertTransaction(transaction: OmniTransaction) { + assert( + transaction.point.eid === this.eid, + `Could not use signer for ${formatEid(this.eid)} to sign a transaction for ${formatOmniPoint( + transaction.point + )}` + ) + } + + abstract sign(transaction: OmniTransaction): Promise + abstract signAndSend(transaction: OmniTransaction): Promise +} + /** * Implements an OmniSigner interface for EVM-compatible chains */ -export class OmniSignerEVM implements OmniSigner { +export class OmniSignerEVM extends OmniSignerEVMBase { constructor( - public readonly eid: EndpointId, - public readonly signer: Signer - ) {} + public override readonly eid: EndpointId, + public override readonly signer: Signer + ) { + super(eid, signer) + } async sign(transaction: OmniTransaction): Promise { - this.#assertTransaction(transaction) + this.assertTransaction(transaction) return this.signer.signTransaction(this.#serializeTransaction(transaction)) } async signAndSend(transaction: OmniTransaction): Promise> { - this.#assertTransaction(transaction) + this.assertTransaction(transaction) const nativeTransaction = this.#serializeTransaction(transaction) const { hash, ...response } = await this.signer.sendTransaction(nativeTransaction) @@ -37,41 +64,91 @@ export class OmniSignerEVM implements OmniSigner { } } - #assertTransaction(transaction: OmniTransaction) { - assert( - transaction.point.eid === this.eid, - `Could not use signer for ${formatEid(this.eid)} to sign a transaction for ${formatOmniPoint( - transaction.point - )}` - ) - } - #serializeTransaction(transaction: OmniTransaction): TransactionRequest { - // Still missing - // + return { + // mandatory + to: transaction.point.address, + data: transaction.data, - // from?: string, - // nonce?: BigNumberish, + // optional + ...(transaction.gasLimit && { gasLimit: transaction.gasLimit }), + ...(transaction.value && { value: transaction.value }), + } + } +} - // gasPrice?: BigNumberish, +/** + * Implements an OmniSigner interface for EVM-compatible chains using Gnosis Safe. + */ +export class GnosisOmniSignerEVM extends OmniSignerEVMBase { + // TODO: upgrade from @gnosis.pm to @safeglobal dependencies once the codebase upgrades to Ethers v6. Currently, + // devtools only supports Ethers v5, and @safeglobal only supports Ethers v6. - // data?: BytesLike, - // chainId?: number + protected safeSdk: Safe | undefined + protected safeService: SafeServiceClient | undefined - // type?: number; - // accessList?: AccessListish; + constructor( + public override readonly eid: EndpointId, + public override readonly signer: Signer, + protected readonly safeUrl: string, + protected readonly safeConfig: TSafeConfig + ) { + super(eid, signer) + } - // maxPriorityFeePerGas?: BigNumberish; - // maxFeePerGas?: BigNumberish; + async sign(_transaction: OmniTransaction): Promise { + throw new Error('Method not implemented.') + } + async signAndSend(transaction: OmniTransaction): Promise { + this.assertTransaction(transaction) + const { safeSdk, safeService } = await this.#initSafe() + const safeTransaction = await safeSdk.createTransaction([this.#serializeTransaction(transaction)]) + const safeTxHash = await safeSdk.getTransactionHash(safeTransaction) + const safeAddress = safeSdk.getAddress() + const senderAddress = await this.signer.getAddress() + await safeService.proposeTransaction({ + safeAddress, + safeTransaction, + safeTxHash, + senderAddress, + }) + return { + transactionHash: safeTxHash, + wait: async (_confirmations?: number) => { + return { + transactionHash: safeTxHash, + } + }, + } + } + + #serializeTransaction(transaction: OmniTransaction): SafeTransactionDataPartial { return { - // mandatory to: transaction.point.address, data: transaction.data, + value: '0', + } + } - // optional - ...(transaction.gasLimit && { gasLimit: transaction.gasLimit }), - ...(transaction.value && { value: transaction.value }), + async #initSafe() { + if (this.safeConfig && (!this.safeSdk || !this.safeService)) { + const ethAdapter = new EthersAdapter({ + ethers, + signerOrProvider: this.signer, + }) + this.safeService = new SafeServiceClient(this.safeUrl) + + const contractNetworks = this.safeConfig.contractNetworks + this.safeSdk = await Safe.create({ + ethAdapter, + safeAddress: this.safeConfig.safeAddress!, + ...(!!contractNetworks && { contractNetworks }), + }) + } + if (!this.safeSdk || !this.safeService) { + throw new Error('Safe SDK not initialized') } + return { safeSdk: this.safeSdk, safeService: this.safeService } } } diff --git a/packages/devtools-evm/test/signer/sdk.test.ts b/packages/devtools-evm/test/signer/sdk.test.ts index 5629f4134..55b8520a4 100644 --- a/packages/devtools-evm/test/signer/sdk.test.ts +++ b/packages/devtools-evm/test/signer/sdk.test.ts @@ -1,9 +1,11 @@ import fc from 'fast-check' import { endpointArbitrary, pointArbitrary } from '@layerzerolabs/test-devtools' import { Signer } from '@ethersproject/abstract-signer' -import { OmniSignerEVM } from '@/signer' +import { GnosisOmniSignerEVM, OmniSignerEVM } from '@/signer' +import Safe, { SafeConfig } from '@gnosis.pm/safe-core-sdk' +import SafeServiceClient from '@gnosis.pm/safe-service-client' -describe('signer/sdk', () => { +describe('signer/ethers', () => { const transactionHashArbitrary = fc.hexaString() const signedTransactionArbitrary = fc.hexaString() const transactionArbitrary = fc.record({ @@ -78,4 +80,68 @@ describe('signer/sdk', () => { }) }) }) + describe('GnosisOmniSignerEVM', () => { + describe('sign', () => { + it('should throw', async () => { + await fc.assert( + fc.asyncProperty(endpointArbitrary, transactionArbitrary, async (eid, transaction) => { + const signer = {} as Signer + const omniSigner = new GnosisOmniSignerEVM(eid, signer, '', {} as SafeConfig) + await expect(() => omniSigner.sign(transaction)).rejects.toThrow(/Method not implemented/) + }) + ) + }) + }) + describe('signAndSend', () => { + it('should reject if the eid of the transaction does not match the eid of the signer', async () => { + await fc.assert( + fc.asyncProperty(endpointArbitrary, transactionArbitrary, async (eid, transaction) => { + fc.pre(eid !== transaction.point.eid) + + const signer = {} as Signer + const omniSigner = new GnosisOmniSignerEVM(eid, signer, '', {} as SafeConfig) + + await expect(() => omniSigner.signAndSend(transaction)).rejects.toThrow(/Could not use signer/) + }) + ) + }) + it('should send the transaction using the signer if the eids match', async () => { + await fc.assert( + fc.asyncProperty( + transactionArbitrary, + transactionHashArbitrary, + async (transaction, transactionHash) => { + const sendTransaction = jest.fn() + const getAddress = jest.fn() + const signer = { getAddress, sendTransaction } as unknown as Signer + const omniSigner = new GnosisOmniSignerEVM( + transaction.point.eid, + signer, + '', + {} as SafeConfig + ) + omniSigner['safeSdk'] = { + createTransaction: jest.fn(), + getTransactionHash: jest.fn().mockResolvedValue(transactionHash), + getAddress: jest.fn(), + } as unknown as Safe + const safeService = (omniSigner['safeService'] = { + proposeTransaction: jest.fn(), + } as unknown as SafeServiceClient) + + const result = await omniSigner.signAndSend(transaction) + expect(result.transactionHash).toEqual(transactionHash) + expect(await result.wait()).toEqual({ transactionHash }) + expect(safeService.proposeTransaction).toHaveBeenCalledWith({ + safeAddress: undefined, + safeTransaction: undefined, + safeTxHash: transactionHash, + senderAddress: undefined, + }) + } + ) + ) + }) + }) + }) }) diff --git a/packages/ua-devtools-evm-hardhat/src/tasks/oapp/wire/index.ts b/packages/ua-devtools-evm-hardhat/src/tasks/oapp/wire/index.ts index b1beaa2ad..25d2a04fc 100644 --- a/packages/ua-devtools-evm-hardhat/src/tasks/oapp/wire/index.ts +++ b/packages/ua-devtools-evm-hardhat/src/tasks/oapp/wire/index.ts @@ -60,7 +60,6 @@ const action: ActionType = async ( `There are ${transactions.length} transactions required to configure the OApp` ) ) - // Now sign & send the transactions const signAndSendResult = await hre.run(SUBTASK_LZ_SIGN_AND_SEND, { transactions, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc39f276c..d19836208 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -455,6 +455,21 @@ importers: packages/devtools-evm: dependencies: + '@gnosis.pm/safe-core-sdk': + specifier: ^2.0.0 + version: 2.4.1 + '@gnosis.pm/safe-core-sdk-types': + specifier: ^1.0.0 + version: 1.7.0 + '@gnosis.pm/safe-ethers-lib': + specifier: ^1.7.0 + version: 1.7.0 + '@gnosis.pm/safe-service-client': + specifier: 1.1.1 + version: 1.1.1 + ethers: + specifier: 5.7.2 + version: 5.7.2 p-memoize: specifier: ~4.0.4 version: 4.0.4 @@ -531,6 +546,9 @@ importers: packages/devtools-evm-hardhat: dependencies: + '@gnosis.pm/safe-core-sdk': + specifier: 2.0.0 + version: 2.0.0 '@layerzerolabs/export-deployments': specifier: ~0.0.1 version: link:../export-deployments @@ -2895,7 +2913,6 @@ packages: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} hasBin: true - dev: true /@ethereumjs/util@8.1.0: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} @@ -2904,7 +2921,6 @@ packages: '@ethereumjs/rlp': 4.0.1 ethereum-cryptography: 2.1.3 micro-ftch: 0.3.1 - dev: true /@ethersproject/abi@5.7.0: resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} @@ -3195,6 +3211,101 @@ packages: resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} engines: {node: '>=14'} + /@gnosis.pm/safe-core-sdk-types@1.7.0: + resolution: {integrity: sha512-4afyjdYxlwT61UtbrJwgFM8cxcu+TIrEcP3xrxtqyXotlvMGOkEwynHoOOSRNwL/npe3dHwDCNzxgrXVIS9Vjw==} + deprecated: Package no longer supported. It has been migrated to @safe-global/safe-core-sdk-types. Please, update your dependencies. + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@gnosis.pm/safe-deployments': 1.17.0 + web3-core: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@gnosis.pm/safe-core-sdk-utils@1.5.0: + resolution: {integrity: sha512-rfcCdqBnxj9QKYzqO1UpR9+a0fhvVoHD8aYb1FBimAoMbYwcKEjY/OpEQs1m5wl6VBrDkMiUmq5a+aSTsi6W6w==} + deprecated: Package no longer supported. It has been migrated to @safe-global/safe-core-sdk-utils. Please, update your dependencies. + dependencies: + '@gnosis.pm/safe-core-sdk-types': 1.7.0 + semver: 7.6.0 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@gnosis.pm/safe-core-sdk@2.0.0: + resolution: {integrity: sha512-fAUxRrQ/pyTV80S9e5DMCWIGLDDvUsdBzPUZupqe+Uc0FwnbJhMpCofzoHkTEONhnJQJCU3AzPcOBEkmtw8voQ==} + deprecated: Package no longer supported. It has been migrated to @safe-global/protocol-kit. Please, update your dependencies. + dependencies: + '@ethersproject/solidity': 5.7.0 + '@gnosis.pm/safe-core-sdk-types': 1.7.0 + '@gnosis.pm/safe-deployments': 1.17.0 + ethereumjs-util: 7.1.5 + semver: 7.6.0 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@gnosis.pm/safe-core-sdk@2.4.1: + resolution: {integrity: sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw==} + deprecated: Package no longer supported. It has been migrated to @safe-global/protocol-kit. Please, update your dependencies. + dependencies: + '@ethersproject/solidity': 5.7.0 + '@gnosis.pm/safe-core-sdk-types': 1.7.0 + '@gnosis.pm/safe-deployments': 1.15.0 + ethereumjs-util: 7.1.5 + semver: 7.6.0 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@gnosis.pm/safe-deployments@1.15.0: + resolution: {integrity: sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==} + deprecated: 'WARNING: This project has been renamed to @safe-global/safe-deployments . Please, update your dependencies.' + dependencies: + semver: 7.6.0 + dev: false + + /@gnosis.pm/safe-deployments@1.17.0: + resolution: {integrity: sha512-vfl13IuSMqJZxTPraRcKZqJcaSCDWTt/JXH6VURa8LHMYATOqd96IGbqqOKRPAgSzAyXpA2thOD4YUQ0X8XKyQ==} + deprecated: 'WARNING: This project has been renamed to @safe-global/safe-deployments . Please, update your dependencies.' + dependencies: + semver: 7.6.0 + dev: false + + /@gnosis.pm/safe-ethers-lib@1.7.0: + resolution: {integrity: sha512-+1GAGEGNil/y9R54sgvU2y3M0R50vYYIcs4Zh+C6qaw700bPUAUNkkxPoh4Xa0U/OUEPkI6MlTXTm0XKIU1u7A==} + deprecated: Package no longer supported. It has been migrated to @safe-global/safe-ethers-lib. Please, update your dependencies. + dependencies: + '@gnosis.pm/safe-core-sdk-types': 1.7.0 + '@gnosis.pm/safe-core-sdk-utils': 1.5.0 + ethers: 5.7.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@gnosis.pm/safe-service-client@1.1.1: + resolution: {integrity: sha512-RkpwnfM16DWTMmn6g7PhEFWYGOhHTi/z3boYj71WPyMQmOJoSNAGcqz82+qZgKa/rTm5AFsnHYeYPk9wSsw+Ow==} + deprecated: Package no longer supported. It has been migrated to @safe-global/api-kit. Please, update your dependencies. + dependencies: + '@gnosis.pm/safe-core-sdk-types': 1.7.0 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -4265,7 +4376,6 @@ packages: '@noble/curves': 1.3.0 '@noble/hashes': 1.3.3 '@scure/base': 1.1.5 - dev: true /@scure/bip39@1.1.1: resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} @@ -4278,7 +4388,6 @@ packages: dependencies: '@noble/hashes': 1.3.3 '@scure/base': 1.1.5 - dev: true /@sentry/core@5.30.0: resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} @@ -4989,6 +5098,10 @@ packages: web3-utils: 1.10.4 dev: true + /abortcontroller-polyfill@1.7.5: + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + dev: false + /abstract-level@1.0.4: resolution: {integrity: sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==} engines: {node: '>=12'} @@ -5273,7 +5386,6 @@ packages: /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - dev: true /axios@0.21.4(debug@4.3.4): resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} @@ -5387,6 +5499,10 @@ packages: resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} engines: {node: '>=14.0.0'} + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: false + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -5401,7 +5517,6 @@ packages: /bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} - dev: true /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} @@ -5583,7 +5698,6 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.2.0 - dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -5970,6 +6084,14 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + /cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -6012,6 +6134,24 @@ packages: stream-transform: 2.1.3 dev: true + /d@1.0.1: + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + dependencies: + es5-ext: 0.10.62 + type: 1.2.0 + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -6107,7 +6247,6 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -6363,6 +6502,24 @@ packages: is-symbol: 1.0.4 dev: true + /es5-ext@0.10.62: + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.1.0 + dev: false + + /es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-symbol: 3.1.3 + dev: false + /es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} @@ -6371,6 +6528,13 @@ packages: dependencies: es6-promise: 4.2.8 + /es6-symbol@3.1.3: + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + dependencies: + d: 1.0.1 + ext: 1.7.0 + dev: false + /esbuild-plugin-copy@2.1.1(esbuild@0.19.11): resolution: {integrity: sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==} peerDependencies: @@ -6861,7 +7025,6 @@ packages: resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} dependencies: js-sha3: 0.8.0 - dev: true /ethereum-cryptography@0.1.3: resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} @@ -6897,7 +7060,6 @@ packages: '@noble/hashes': 1.3.3 '@scure/bip32': 1.3.3 '@scure/bip39': 1.2.2 - dev: true /ethereumjs-abi@0.6.8: resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} @@ -6916,6 +7078,17 @@ packages: ethjs-util: 0.1.6 rlp: 2.2.7 + /ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/bn.js': 5.1.5 + bn.js: 5.2.1 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + dev: false + /ethers@5.7.2: resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} dependencies: @@ -6959,7 +7132,6 @@ packages: dependencies: bn.js: 4.11.6 number-to-bn: 1.7.0 - dev: true /ethjs-util@0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} @@ -6969,6 +7141,10 @@ packages: strip-hex-prefix: 1.0.0 bundledDependencies: false + /eventemitter3@4.0.4: + resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} + dev: false + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -7032,6 +7208,12 @@ packages: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} dev: false + /ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + dev: false + /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true @@ -7195,7 +7377,6 @@ packages: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 - dev: true /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -7284,7 +7465,6 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} @@ -7332,7 +7512,6 @@ packages: has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - dev: true /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -7482,7 +7661,6 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.2 - dev: true /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} @@ -7656,24 +7834,20 @@ packages: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: get-intrinsic: 1.2.2 - dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: true /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} @@ -7694,7 +7868,6 @@ packages: engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - dev: true /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} @@ -7729,6 +7902,10 @@ packages: statuses: 2.0.1 toidentifier: 1.0.1 + /http-https@1.0.0: + resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} + dev: false + /http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -7957,6 +8134,14 @@ packages: dependencies: fp-ts: 1.19.3 + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: false + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -8014,7 +8199,6 @@ packages: /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: true /is-ci@2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} @@ -8071,7 +8255,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -8175,7 +8358,10 @@ packages: engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.13 - dev: true + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} @@ -9103,7 +9289,6 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /lru_map@0.3.3: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} @@ -9196,7 +9381,6 @@ packages: /micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} - dev: true /micro-memoize@4.1.2: resolution: {integrity: sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==} @@ -9372,6 +9556,10 @@ packages: engines: {node: '>=4'} dev: true + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -9406,6 +9594,10 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: false + /nise@5.1.7: resolution: {integrity: sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ==} dependencies: @@ -9480,7 +9672,6 @@ packages: dependencies: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 - dev: true /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -9555,6 +9746,12 @@ packages: /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + /oboe@2.1.5: + resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} + dependencies: + http-https: 1.0.0 + dev: false + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -10347,7 +10544,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} @@ -10367,7 +10563,6 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: true /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} @@ -11310,6 +11505,14 @@ packages: engines: {node: '>=14.16'} dev: true + /type@1.2.0: + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} + dev: false + + /type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + dev: false + /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -11348,6 +11551,12 @@ packages: is-typed-array: 1.1.12 dev: true + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} @@ -11410,11 +11619,20 @@ packages: /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} - dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.12 + which-typed-array: 1.1.13 + dev: false + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -11450,6 +11668,70 @@ packages: defaults: 1.0.4 dev: true + /web3-core-helpers@1.10.4: + resolution: {integrity: sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==} + engines: {node: '>=8.0.0'} + dependencies: + web3-eth-iban: 1.10.4 + web3-utils: 1.10.4 + dev: false + + /web3-core-method@1.10.4: + resolution: {integrity: sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/transactions': 5.7.0 + web3-core-helpers: 1.10.4 + web3-core-promievent: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-utils: 1.10.4 + dev: false + + /web3-core-promievent@1.10.4: + resolution: {integrity: sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + dev: false + + /web3-core-requestmanager@1.10.4: + resolution: {integrity: sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==} + engines: {node: '>=8.0.0'} + dependencies: + util: 0.12.5 + web3-core-helpers: 1.10.4 + web3-providers-http: 1.10.4 + web3-providers-ipc: 1.10.4 + web3-providers-ws: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /web3-core-subscriptions@1.10.4: + resolution: {integrity: sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.4 + dev: false + + /web3-core@1.10.4: + resolution: {integrity: sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 5.1.5 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-core-requestmanager: 1.10.4 + web3-utils: 1.10.4 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /web3-eth-abi@1.10.4: resolution: {integrity: sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==} engines: {node: '>=8.0.0'} @@ -11458,6 +11740,45 @@ packages: web3-utils: 1.10.4 dev: true + /web3-eth-iban@1.10.4: + resolution: {integrity: sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 5.2.1 + web3-utils: 1.10.4 + dev: false + + /web3-providers-http@1.10.4: + resolution: {integrity: sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==} + engines: {node: '>=8.0.0'} + dependencies: + abortcontroller-polyfill: 1.7.5 + cross-fetch: 4.0.0 + es6-promise: 4.2.8 + web3-core-helpers: 1.10.4 + transitivePeerDependencies: + - encoding + dev: false + + /web3-providers-ipc@1.10.4: + resolution: {integrity: sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==} + engines: {node: '>=8.0.0'} + dependencies: + oboe: 2.1.5 + web3-core-helpers: 1.10.4 + dev: false + + /web3-providers-ws@1.10.4: + resolution: {integrity: sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.4 + websocket: 1.0.34 + transitivePeerDependencies: + - supports-color + dev: false + /web3-utils@1.10.4: resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} engines: {node: '>=8.0.0'} @@ -11470,7 +11791,6 @@ packages: number-to-bn: 1.7.0 randombytes: 2.1.0 utf8: 3.0.0 - dev: true /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -11479,6 +11799,20 @@ packages: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true + /websocket@1.0.34: + resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} + engines: {node: '>=4.0.0'} + dependencies: + bufferutil: 4.0.8 + debug: 2.6.9 + es5-ext: 0.10.62 + typedarray-to-buffer: 3.1.5 + utf-8-validate: 5.0.10 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + dev: false + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -11551,7 +11885,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -11703,6 +12036,11 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + /yaeti@0.0.6: + resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} + engines: {node: '>=0.10.32'} + dev: false + /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} dev: true @@ -11712,7 +12050,6 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}