From 6a2f9fc38626266b9a5f7b413f333aca72895c1d Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 13:30:25 +0100 Subject: [PATCH 01/12] - Automatically derive the EIP712 version via the domain separator --- CHANGELOG.md | 4 ++ package.json | 2 +- src/eas.ts | 29 ++++++++---- src/offchain/delegated.ts | 76 +++++++++++++++++++++--------- src/offchain/offchain.ts | 13 +++-- src/offchain/typed-data-handler.ts | 29 ++++++------ src/offchain/versions.ts | 2 + 7 files changed, 106 insertions(+), 49 deletions(-) create mode 100644 src/offchain/versions.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index a020fcc..8d002b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.6.0 (2024-04-07) + +- Automatically derive the EIP712 version via the domain separator + ## 1.5.0 (2024-02-16) - Introduce framework-agnostic `TransactionSigner` and `TypeDataSigner` interfaces which replace the previous usage of the signer/provider diff --git a/package.json b/package.json index bf75754..d8a51a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ethereum-attestation-service/eas-sdk", - "version": "1.5.0", + "version": "1.6.0", "description": "Ethereum Attestation Service - TypeScript/JavaScript SDK", "repository": "git@github.com:ethereum-attestation-service/eas-sdk.git", "author": "Leonid Beder ", diff --git a/src/eas.ts b/src/eas.ts index d98ab11..8b95efb 100644 --- a/src/eas.ts +++ b/src/eas.ts @@ -140,7 +140,14 @@ export class EAS extends Base { public async attest( { schema, - data: { recipient = ZERO_ADDRESS, data, expirationTime = NO_EXPIRATION, revocable = true, refUID = ZERO_BYTES32, value = 0n } + data: { + recipient = ZERO_ADDRESS, + data, + expirationTime = NO_EXPIRATION, + revocable = true, + refUID = ZERO_BYTES32, + value = 0n + } }: AttestationRequest, overrides?: Overrides ): Promise> { @@ -157,10 +164,16 @@ export class EAS extends Base { public async attestByDelegation( { schema, - data: { recipient = ZERO_ADDRESS, data, expirationTime = NO_EXPIRATION, revocable = true, refUID = ZERO_BYTES32, value = 0n }, + data: { + recipient = ZERO_ADDRESS, + data, + expirationTime = NO_EXPIRATION, + revocable = true, + refUID = ZERO_BYTES32, + value = 0n + }, signature, - attester, - deadline = NO_EXPIRATION + attester }: DelegatedAttestationRequest, overrides?: Overrides ): Promise> { @@ -176,9 +189,9 @@ export class EAS extends Base { value }, signature, - attester, - deadline - }, + attester + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any, { value, ...overrides } ); @@ -441,7 +454,7 @@ export class EAS extends Base { private async setDelegated(): Promise { this.delegated = new Delegated({ address: await this.contract.getAddress(), - version: await this.getVersion(), + domainSeparator: await this.getDomainSeparator(), chainId: await this.getChainId() }); diff --git a/src/offchain/delegated.ts b/src/offchain/delegated.ts index a823c31..6f7dd76 100644 --- a/src/offchain/delegated.ts +++ b/src/offchain/delegated.ts @@ -5,23 +5,14 @@ import { EIP712Params, EIP712Response, EIP712Types, - PartialTypedDataConfig, TypeDataSigner, TypedDataHandler } from './typed-data-handler'; +import { EIP712_NAME, EIP712_VERSIONS } from './versions'; -export { - EIP712MessageTypes, - EIP712TypedData, - EIP712Request, - EIP712Response, - PartialTypedDataConfig, - Signature -} from './typed-data-handler'; +export { EIP712MessageTypes, EIP712TypedData, EIP712Request, EIP712Response, Signature } from './typed-data-handler'; -export const EIP712_NAME = 'EAS'; - -export enum DelegatedAttestationVersion { +enum DelegatedAttestationVersion { Legacy = 0, Version1 = 1, Version2 = 2 @@ -154,17 +145,54 @@ interface EIP712FullRevocationParams extends EIP712RevocationParams { revoker: string; } +interface DelegatedConfig { + address: string; + chainId: bigint; + version?: string; + domainSeparator?: string; +} + export class Delegated extends TypedDataHandler { public readonly version: DelegatedAttestationVersion; private readonly attestType: DelegatedAttestationType; private readonly revokeType: DelegatedAttestationType; - constructor(config: PartialTypedDataConfig) { - super({ ...config, name: EIP712_NAME }); + constructor(config: DelegatedConfig) { + let { version } = config; + if (!version) { + const { domainSeparator } = config; + + if (!domainSeparator) { + throw new Error('Neither EIP712 version or domain separator were provided'); + } + + // If only the domain separator was provided, let's try to deduce the version accordingly. + for (const eip712Version of EIP712_VERSIONS) { + if ( + domainSeparator === + TypedDataHandler.getDomainSeparator({ + address: config.address, + name: EIP712_NAME, + version: eip712Version, + chainId: config.chainId + }) + ) { + version = eip712Version; - if (semver.lt(config.version, '1.2.0')) { + break; + } + } + + if (!version) { + throw new Error(`Unable to find version for domain separator: ${domainSeparator}`); + } + } + + super({ ...config, version, name: EIP712_NAME }); + + if (semver.lt(version, '1.2.0')) { this.version = DelegatedAttestationVersion.Legacy; - } else if (semver.lt(config.version, '1.3.0')) { + } else if (semver.lt(version, '1.3.0')) { this.version = DelegatedAttestationVersion.Version1; } else { this.version = DelegatedAttestationVersion.Version2; @@ -183,9 +211,11 @@ export class Delegated extends TypedDataHandler { ...params }; - if (this.version === DelegatedAttestationVersion.Legacy) { - // Committing to a value or to a deadline isn't supported for legacy attestations, therefore they will be ignored - effectiveParams = omit(params, ['value', 'deadline']) as EIP712FullAttestationParams; + switch (this.version) { + case DelegatedAttestationVersion.Legacy: + effectiveParams = omit(params, ['value', 'deadline']) as EIP712FullAttestationParams; + + break; } return this.signTypedDataRequest( @@ -223,9 +253,11 @@ export class Delegated extends TypedDataHandler { ...params }; - if (this.version === DelegatedAttestationVersion.Legacy) { - // Committing to a value or to a deadline isn't supported for legacy revocations, therefore they will be ignored - effectiveParams = omit(params, ['value', 'deadline']) as EIP712FullRevocationParams; + switch (this.version) { + case DelegatedAttestationVersion.Legacy: + effectiveParams = omit(params, ['value', 'deadline']) as EIP712FullRevocationParams; + + break; } return this.signTypedDataRequest( diff --git a/src/offchain/offchain.ts b/src/offchain/offchain.ts index 3b80d22..4742325 100644 --- a/src/offchain/offchain.ts +++ b/src/offchain/offchain.ts @@ -1,7 +1,6 @@ import { AbiCoder, hexlify, keccak256, randomBytes, toUtf8Bytes } from 'ethers'; import { EAS } from '../eas'; import { getOffchainUID, ZERO_BYTES32 } from '../utils'; -import { EIP712_NAME } from './delegated'; import { DomainTypedData, EIP712MessageTypes, @@ -10,12 +9,12 @@ import { EIP712Types, InvalidPrimaryType, InvalidTypes, - PartialTypedDataConfig, TypeDataSigner, TypedDataHandler } from './typed-data-handler'; +import { EIP712_NAME } from './versions'; -export { EIP712Request, PartialTypedDataConfig, EIP712MessageTypes } from './typed-data-handler'; +export { EIP712Request, EIP712MessageTypes } from './typed-data-handler'; export interface OffchainAttestationType extends EIP712Types { domain: string; @@ -143,13 +142,19 @@ export interface SignedOffchainAttestation extends EIP712Response OffchainAttestationVersion.Version2) { throw new Error('Unsupported version'); } diff --git a/src/offchain/typed-data-handler.ts b/src/offchain/typed-data-handler.ts index 52cd4fb..1bfd4a9 100644 --- a/src/offchain/typed-data-handler.ts +++ b/src/offchain/typed-data-handler.ts @@ -22,16 +22,6 @@ export interface TypeDataSigner extends Addressable { ): Promise; } -export interface PartialTypedDataConfig { - address: string; - version: string; - chainId: bigint; -} - -export interface TypedDataConfig extends PartialTypedDataConfig { - name: string; -} - export interface DomainTypedData { chainId: bigint; name: string; @@ -104,6 +94,13 @@ export class InvalidPrimaryType extends Error {} export class InvalidTypes extends Error {} export class InvalidAddress extends Error {} +export interface TypedDataConfig { + address: string; + version: string; + chainId: bigint; + name: string; +} + export abstract class TypedDataHandler { public config: TypedDataConfig; @@ -112,15 +109,19 @@ export abstract class TypedDataHandler { } public getDomainSeparator() { + return TypedDataHandler.getDomainSeparator(this.config); + } + + public static getDomainSeparator(config: TypedDataConfig) { return keccak256( AbiCoder.defaultAbiCoder().encode( ['bytes32', 'bytes32', 'bytes32', 'uint256', 'address'], [ keccak256(toUtf8Bytes(EIP712_DOMAIN)), - keccak256(toUtf8Bytes(this.config.name)), - keccak256(toUtf8Bytes(this.config.version)), - this.config.chainId, - this.config.address + keccak256(toUtf8Bytes(config.name)), + keccak256(toUtf8Bytes(config.version)), + config.chainId, + config.address ] ) ); diff --git a/src/offchain/versions.ts b/src/offchain/versions.ts new file mode 100644 index 0000000..955c813 --- /dev/null +++ b/src/offchain/versions.ts @@ -0,0 +1,2 @@ +export const EIP712_NAME = 'EAS'; +export const EIP712_VERSIONS = ['0.26', '1.0.1', '1.0.2', '1.1.0', '1.2.0', '1.3.0', '1.4.0']; From 8c418837221b83e79af225351f225deed2ab1b11 Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 13:39:20 +0100 Subject: [PATCH 02/12] Fix connect --- src/transaction.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/transaction.ts b/src/transaction.ts index ec40710..bbb64e9 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -40,6 +40,7 @@ export class Base { constructor(factory: ContractFactory, address: string, signer?: TransactionSigner) { this.contract = factory.attach(address) as C; + if (signer) { this.connect(signer); } @@ -49,6 +50,8 @@ export class Base { public connect(signer: TransactionSigner) { this.contract = this.contract.connect(signer as unknown as ContractRunner) as C; + this.connect(signer); + return this; } From dbf17b8c0187ee8282f905b3366b6aac44a136a6 Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 16:41:45 +0100 Subject: [PATCH 03/12] Improve delegated attestation backward compatibility --- CHANGELOG.md | 1 + package.json | 1 + pnpm-lock.yaml | 256 ++++- src/eas.ts | 268 +++-- src/offchain/versions.ts | 2 +- src/transaction.ts | 6 +- test/components/Contracts.ts | 26 +- test/test/eas.ts | 1887 +++++++++++++++++----------------- 8 files changed, 1435 insertions(+), 1012 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d002b6..6df4ecd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.6.0 (2024-04-07) - Automatically derive the EIP712 version via the domain separator +- Improve delegated attestation backward compatibility ## 1.5.0 (2024-02-16) diff --git a/package.json b/package.json index d8a51a3..9739e38 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ }, "dependencies": { "@ethereum-attestation-service/eas-contracts": "1.3.7", + "@ethereum-attestation-service/eas-contracts-legacy": "npm:@ethereum-attestation-service/eas-contracts@1.0.0-beta.0", "ethers": "^6.11.1", "js-base64": "^3.7.6", "lodash": "^4.17.21", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 442a0aa..bbc34bf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@ethereum-attestation-service/eas-contracts': specifier: 1.3.7 version: 1.3.7(ts-node@10.9.2)(typescript@5.3.3) + '@ethereum-attestation-service/eas-contracts-legacy': + specifier: npm:@ethereum-attestation-service/eas-contracts@1.0.0-beta.0 + version: /@ethereum-attestation-service/eas-contracts@1.0.0-beta.0(ts-node@10.9.2)(typescript@5.3.3) ethers: specifier: ^6.11.1 version: 6.11.1 @@ -361,6 +364,18 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@ethereum-attestation-service/eas-contracts@1.0.0-beta.0(ts-node@10.9.2)(typescript@5.3.3): + resolution: {integrity: sha512-kMe8XVl5QXI1L8ANqlVJqLv3WDs2uzz9+dzY9LUXvBKWF00tBhNji9lxEg4LKN0vz4YVL9bAUDuDeeSv8BOWdw==} + dependencies: + hardhat: 2.17.0(ts-node@10.9.2)(typescript@5.3.3) + transitivePeerDependencies: + - bufferutil + - supports-color + - ts-node + - typescript + - utf-8-validate + dev: false + /@ethereum-attestation-service/eas-contracts@1.3.7(ts-node@10.9.2)(typescript@5.3.3): resolution: {integrity: sha512-msCKGDhqSjfkx0lbs0PPkf/Z6bWxaYT9ze/uLoRh1tM7W8N27mobX4g6AsjATqGC+eWHRfliK9eCwJQj7TU8WA==} dependencies: @@ -901,6 +916,22 @@ packages: fastq: 1.17.0 dev: true + /@nomicfoundation/ethereumjs-block@5.0.1: + resolution: {integrity: sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@nomicfoundation/ethereumjs-block@5.0.2: resolution: {integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==} engines: {node: '>=14'} @@ -917,6 +948,29 @@ packages: - utf-8-validate dev: false + /@nomicfoundation/ethereumjs-blockchain@7.0.1: + resolution: {integrity: sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-ethash': 3.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + abstract-level: 1.0.4 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + level: 8.0.1 + lru-cache: 5.1.1 + memory-level: 1.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /@nomicfoundation/ethereumjs-blockchain@7.0.2: resolution: {integrity: sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==} engines: {node: '>=14'} @@ -940,6 +994,13 @@ packages: - utf-8-validate dev: false + /@nomicfoundation/ethereumjs-common@4.0.1: + resolution: {integrity: sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==} + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.1 + crc-32: 1.2.2 + dev: false + /@nomicfoundation/ethereumjs-common@4.0.2: resolution: {integrity: sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==} dependencies: @@ -947,6 +1008,21 @@ packages: crc-32: 1.2.2 dev: false + /@nomicfoundation/ethereumjs-ethash@3.0.1: + resolution: {integrity: sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + abstract-level: 1.0.4 + bigint-crypto-utils: 3.3.0 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@nomicfoundation/ethereumjs-ethash@3.0.2: resolution: {integrity: sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==} engines: {node: '>=14'} @@ -962,6 +1038,24 @@ packages: - utf-8-validate dev: false + /@nomicfoundation/ethereumjs-evm@2.0.1: + resolution: {integrity: sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==} + engines: {node: '>=14'} + dependencies: + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /@nomicfoundation/ethereumjs-evm@2.0.2: resolution: {integrity: sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==} engines: {node: '>=14'} @@ -980,12 +1074,33 @@ packages: - utf-8-validate dev: false + /@nomicfoundation/ethereumjs-rlp@5.0.1: + resolution: {integrity: sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==} + engines: {node: '>=14'} + hasBin: true + dev: false + /@nomicfoundation/ethereumjs-rlp@5.0.2: resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} engines: {node: '>=14'} hasBin: true dev: false + /@nomicfoundation/ethereumjs-statemanager@2.0.1: + resolution: {integrity: sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + js-sdsl: 4.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /@nomicfoundation/ethereumjs-statemanager@2.0.2: resolution: {integrity: sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==} dependencies: @@ -1001,6 +1116,17 @@ packages: - utf-8-validate dev: false + /@nomicfoundation/ethereumjs-trie@6.0.1: + resolution: {integrity: sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + '@types/readable-stream': 2.3.15 + ethereum-cryptography: 0.1.3 + readable-stream: 3.6.2 + dev: false + /@nomicfoundation/ethereumjs-trie@6.0.2: resolution: {integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==} engines: {node: '>=14'} @@ -1012,6 +1138,21 @@ packages: readable-stream: 3.6.2 dev: false + /@nomicfoundation/ethereumjs-tx@5.0.1: + resolution: {integrity: sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.9.4 + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@nomicfoundation/ethereumjs-tx@5.0.2: resolution: {integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==} engines: {node: '>=14'} @@ -1027,6 +1168,15 @@ packages: - utf-8-validate dev: false + /@nomicfoundation/ethereumjs-util@9.0.1: + resolution: {integrity: sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.10.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + ethereum-cryptography: 0.1.3 + dev: false + /@nomicfoundation/ethereumjs-util@9.0.2: resolution: {integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==} engines: {node: '>=14'} @@ -1036,6 +1186,29 @@ packages: ethereum-cryptography: 0.1.3 dev: false + /@nomicfoundation/ethereumjs-vm@7.0.1: + resolution: {integrity: sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-blockchain': 7.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-evm': 2.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-statemanager': 2.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /@nomicfoundation/ethereumjs-vm@7.0.2: resolution: {integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==} engines: {node: '>=14'} @@ -1498,6 +1671,13 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + /abstract-level@1.0.4: resolution: {integrity: sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==} engines: {node: '>=12'} @@ -2507,7 +2687,11 @@ packages: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 dev: false - bundledDependencies: false + + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -2779,6 +2963,76 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true + /hardhat@2.17.0(ts-node@10.9.2)(typescript@5.3.3): + resolution: {integrity: sha512-CaEGa13tkJNe2/rdaBiive4pmdNShwxvdWVhr1zfb6aVpRhQt9VNO0l/UIBt/zzajz38ZFjvhfM2bj8LDXo9gw==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-blockchain': 7.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-evm': 2.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-statemanager': 2.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + '@nomicfoundation/ethereumjs-vm': 7.0.1 + '@nomicfoundation/solidity-analyzer': 0.1.1 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 + abort-controller: 3.0.0 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + chalk: 2.4.2 + chokidar: 3.5.3 + ci-info: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.5 + io-ts: 1.10.4 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.2.0 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.7.3(debug@4.3.4) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3) + tsort: 0.0.1 + typescript: 5.3.3 + undici: 5.28.2 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /hardhat@2.19.1(ts-node@10.9.2)(typescript@5.3.3): resolution: {integrity: sha512-bsWa63g1GB78ZyMN08WLhFElLPA+J+pShuKD1BFO2+88g3l+BL3R07vj9deIi9dMbssxgE714Gof1dBEDGqnCw==} hasBin: true diff --git a/src/eas.ts b/src/eas.ts index 8b95efb..787e825 100644 --- a/src/eas.ts +++ b/src/eas.ts @@ -1,5 +1,10 @@ -import { EAS__factory, EAS as EASContract } from '@ethereum-attestation-service/eas-contracts'; -import { Overrides, TransactionReceipt } from 'ethers'; +import { EAS as EASContract, EAS__factory as EASFactory } from '@ethereum-attestation-service/eas-contracts'; +import { + EAS as EASLegacyContract, + EAS__factory as EASLegacyFactory +} from '@ethereum-attestation-service/eas-contracts-legacy'; +import { ContractTransactionResponse, Overrides, TransactionReceipt } from 'ethers'; +import semver from 'semver'; import { EIP712Proxy } from './eip712-proxy'; import { legacyVersion } from './legacy/version'; import { Delegated, Offchain, OffchainAttestationVersion } from './offchain'; @@ -27,6 +32,8 @@ import { ZERO_BYTES32 } from './utils'; +const LEGACY_VERSION = '1.1.0'; + export { Overrides } from 'ethers'; export * from './request'; @@ -52,11 +59,13 @@ export class EAS extends Base { private proxy?: EIP712Proxy; private delegated?: Delegated; private offchain?: Offchain; + private version?: string; + private legacyEAS: Base; constructor(address: string, options?: EASOptions) { const { signer, proxy } = options || {}; - super(new EAS__factory(), address, signer); + super(new EASFactory(), address, signer); // Check for ethers v6 compatibility if (!this.contract.getAddress) { @@ -66,6 +75,8 @@ export class EAS extends Base { if (proxy) { this.proxy = proxy; } + + this.legacyEAS = new Base(new EASLegacyFactory(), address, signer); } // Connects the API to a specific signer @@ -75,12 +86,20 @@ export class EAS extends Base { super.connect(signer); + if (this.legacyEAS) { + this.legacyEAS.connect(signer); + } + return this; } // Returns the version of the contract public async getVersion(): Promise { - return (await legacyVersion(this.contract)) ?? this.contract.version(); + if (this.version) { + return this.version; + } + + return (this.version = (await legacyVersion(this.contract)) ?? (await this.contract.version())); } // Returns an existing schema by attestation UID @@ -173,27 +192,49 @@ export class EAS extends Base { value = 0n }, signature, - attester + attester, + deadline = NO_EXPIRATION }: DelegatedAttestationRequest, overrides?: Overrides ): Promise> { - const tx = await this.contract.attestByDelegation( - { - schema, - data: { - recipient, - expirationTime, - revocable, - refUID, - data, - value + let tx: ContractTransactionResponse; + + if (await this.isLegacyContract()) { + tx = await this.legacyEAS.contract.attestByDelegation( + { + schema, + data: { + recipient, + expirationTime, + revocable, + refUID, + data, + value + }, + signature, + attester }, - signature, - attester - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any, - { value, ...overrides } - ); + { value, ...overrides } + ); + } else { + tx = await this.contract.attestByDelegation( + { + schema, + data: { + recipient, + expirationTime, + revocable, + refUID, + data, + value + }, + signature, + attester, + deadline + }, + { value, ...overrides } + ); + } // eslint-disable-next-line require-await return new Transaction(tx, async (receipt: TransactionReceipt) => getUIDsFromAttestReceipt(receipt)[0]); @@ -232,30 +273,58 @@ export class EAS extends Base { requests: MultiDelegatedAttestationRequest[], overrides?: Overrides ): Promise> { - const multiAttestationRequests = requests.map((r) => ({ - schema: r.schema, - data: r.data.map((d) => ({ - recipient: d.recipient ?? ZERO_ADDRESS, - expirationTime: d.expirationTime ?? NO_EXPIRATION, - revocable: d.revocable ?? true, - refUID: d.refUID ?? ZERO_BYTES32, - data: d.data ?? ZERO_BYTES32, - value: d.value ?? 0n - })), - signatures: r.signatures, - attester: r.attester, - deadline: r.deadline ?? NO_EXPIRATION - })); - - const requestedValue = multiAttestationRequests.reduce((res, { data }) => { - const total = data.reduce((res, r) => res + r.value, 0n); - return res + total; - }, 0n); - - const tx = await this.contract.multiAttestByDelegation(multiAttestationRequests, { - value: requestedValue, - ...overrides - }); + let tx: ContractTransactionResponse; + + if (await this.isLegacyContract()) { + const multiAttestationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + recipient: d.recipient ?? ZERO_ADDRESS, + expirationTime: d.expirationTime ?? NO_EXPIRATION, + revocable: d.revocable ?? true, + refUID: d.refUID ?? ZERO_BYTES32, + data: d.data ?? ZERO_BYTES32, + value: d.value ?? 0n + })), + signatures: r.signatures, + attester: r.attester + })); + + const requestedValue = multiAttestationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + + tx = await this.legacyEAS.contract.multiAttestByDelegation(multiAttestationRequests, { + value: requestedValue, + ...overrides + }); + } else { + const multiAttestationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + recipient: d.recipient ?? ZERO_ADDRESS, + expirationTime: d.expirationTime ?? NO_EXPIRATION, + revocable: d.revocable ?? true, + refUID: d.refUID ?? ZERO_BYTES32, + data: d.data ?? ZERO_BYTES32, + value: d.value ?? 0n + })), + signatures: r.signatures, + attester: r.attester, + deadline: r.deadline ?? NO_EXPIRATION + })); + + const requestedValue = multiAttestationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + + tx = await this.contract.multiAttestByDelegation(multiAttestationRequests, { + value: requestedValue, + ...overrides + }); + } // eslint-disable-next-line require-await return new Transaction(tx, async (receipt: TransactionReceipt) => getUIDsFromAttestReceipt(receipt)); @@ -276,19 +345,36 @@ export class EAS extends Base { { schema, data: { uid, value = 0n }, signature, revoker, deadline = NO_EXPIRATION }: DelegatedRevocationRequest, overrides?: Overrides ): Promise> { - const tx = await this.contract.revokeByDelegation( - { - schema, - data: { - uid, - value + let tx: ContractTransactionResponse; + + if (await this.isLegacyContract()) { + tx = await this.legacyEAS.contract.revokeByDelegation( + { + schema, + data: { + uid, + value + }, + signature, + revoker }, - signature, - revoker, - deadline - }, - { value, ...overrides } - ); + { value, ...overrides } + ); + } else { + tx = await this.contract.revokeByDelegation( + { + schema, + data: { + uid, + value + }, + signature, + revoker, + deadline + }, + { value, ...overrides } + ); + } return new Transaction(tx, async () => {}); } @@ -321,26 +407,50 @@ export class EAS extends Base { requests: MultiDelegatedRevocationRequest[], overrides?: Overrides ): Promise> { - const multiRevocationRequests = requests.map((r) => ({ - schema: r.schema, - data: r.data.map((d) => ({ - uid: d.uid, - value: d.value ?? 0n - })), - signatures: r.signatures, - revoker: r.revoker, - deadline: r.deadline ?? NO_EXPIRATION - })); - - const requestedValue = multiRevocationRequests.reduce((res, { data }) => { - const total = data.reduce((res, r) => res + r.value, 0n); - return res + total; - }, 0n); - - const tx = await this.contract.multiRevokeByDelegation(multiRevocationRequests, { - value: requestedValue, - ...overrides - }); + let tx: ContractTransactionResponse; + + if (await this.isLegacyContract()) { + const multiRevocationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + uid: d.uid, + value: d.value ?? 0n + })), + signatures: r.signatures, + revoker: r.revoker + })); + + const requestedValue = multiRevocationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + + tx = await this.legacyEAS.contract.multiRevokeByDelegation(multiRevocationRequests, { + value: requestedValue, + ...overrides + }); + } else { + const multiRevocationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + uid: d.uid, + value: d.value ?? 0n + })), + signatures: r.signatures, + revoker: r.revoker, + deadline: r.deadline ?? NO_EXPIRATION + })); + + const requestedValue = multiRevocationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + + tx = await this.contract.multiRevokeByDelegation(multiRevocationRequests, { + value: requestedValue, + ...overrides + }); + } return new Transaction(tx, async () => {}); } @@ -475,4 +585,8 @@ export class EAS extends Base { return this.offchain; } + + private async isLegacyContract() { + return semver.lte(await this.getVersion(), LEGACY_VERSION); + } } diff --git a/src/offchain/versions.ts b/src/offchain/versions.ts index 955c813..10fa50d 100644 --- a/src/offchain/versions.ts +++ b/src/offchain/versions.ts @@ -1,2 +1,2 @@ export const EIP712_NAME = 'EAS'; -export const EIP712_VERSIONS = ['0.26', '1.0.1', '1.0.2', '1.1.0', '1.2.0', '1.3.0', '1.4.0']; +export const EIP712_VERSIONS = ['0.26', '1.0.0', '1.0.1', '1.0.2', '1.1.0', '1.2.0', '1.3.0', '1.4.0']; diff --git a/src/transaction.ts b/src/transaction.ts index bbb64e9..2fdaba7 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -37,12 +37,14 @@ export class Transaction { export class Base { public contract: C; + protected signer?: TransactionSigner; constructor(factory: ContractFactory, address: string, signer?: TransactionSigner) { this.contract = factory.attach(address) as C; - if (signer) { this.connect(signer); + + this.signer = signer; } } @@ -50,7 +52,7 @@ export class Base { public connect(signer: TransactionSigner) { this.contract = this.contract.connect(signer as unknown as ContractRunner) as C; - this.connect(signer); + this.signer = signer; return this; } diff --git a/test/components/Contracts.ts b/test/components/Contracts.ts index 8290f24..35ec27c 100644 --- a/test/components/Contracts.ts +++ b/test/components/Contracts.ts @@ -1,12 +1,13 @@ import { - EAS__factory, - EIP712Proxy__factory, - Indexer__factory, - SchemaRegistry__factory + EAS__factory as EASFactory, + EIP712Proxy__factory as EIP712ProxyFactory, + Indexer__factory as IndexerFactory, + SchemaRegistry__factory as SchemaRegistryFactory } from '@ethereum-attestation-service/eas-contracts'; +import { EAS__factory as EASLegacyFactory } from '@ethereum-attestation-service/eas-contracts-legacy'; import { ContractFactory, Signer } from 'ethers'; import { ethers } from 'hardhat'; -import { ETHResolver__factory } from '../typechain-types'; +import { ETHResolver__factory as ETHResolverFactory } from '../typechain-types'; export * from '../typechain-types'; @@ -14,8 +15,8 @@ export * from '../typechain-types'; type AsyncReturnType any> = T extends (...args: any) => Promise ? U : T extends (...args: any) => infer U - ? U - : any; + ? U + : any; /* eslint-enable @typescript-eslint/no-explicit-any */ type Contract = AsyncReturnType; @@ -70,12 +71,13 @@ export const attachOnly = ( const getContracts = (signer?: Signer) => ({ connect: (signer: Signer) => getContracts(signer), - EAS: deployOrAttach('EAS', EAS__factory, signer), - SchemaRegistry: deployOrAttach('SchemaRegistry', SchemaRegistry__factory, signer), - EIP712Proxy: deployOrAttach('EIP712Proxy', EIP712Proxy__factory, signer), - Indexer: deployOrAttach('Indexer', Indexer__factory, signer), + EAS: deployOrAttach('EAS', EASFactory, signer), + SchemaRegistry: deployOrAttach('SchemaRegistry', SchemaRegistryFactory, signer), + EIP712Proxy: deployOrAttach('EIP712Proxy', EIP712ProxyFactory, signer), + Indexer: deployOrAttach('Indexer', IndexerFactory, signer), - ETHResolver: deployOrAttach('ETHResolver', ETHResolver__factory, signer) + EASLegacy: deployOrAttach('EAS', EASLegacyFactory, signer), + ETHResolver: deployOrAttach('ETHResolver', ETHResolverFactory, signer) }); /* eslint-enable camelcase */ diff --git a/test/test/eas.ts b/test/test/eas.ts index 6724afe..03048ad 100644 --- a/test/test/eas.ts +++ b/test/test/eas.ts @@ -1,8 +1,3 @@ -import { - EAS as EASContract, - EIP712Proxy as EIP712ProxyContract, - SchemaRegistry as SchemaRegistryContract -} from '@ethereum-attestation-service/eas-contracts'; import { encodeBytes32String, Signer } from 'ethers'; import { ethers } from 'hardhat'; import { EAS, NO_EXPIRATION } from '../../src/eas'; @@ -35,19 +30,19 @@ const { expect } = chai; const EIP712_PROXY_NAME = 'EAS-Proxy'; +export enum EASVersion { + Legacy = 'legacy', + Version1 = 'version 1' +} + describe('EAS API', () => { let accounts: Signer[]; let sender: Signer; let recipient: Signer; let recipient2: Signer; - let registry: SchemaRegistryContract; - let easContract: EASContract; - let proxyContract: EIP712ProxyContract; - let eas: EAS; let schemaRegistry: SchemaRegistry; - let proxy: EIP712Proxy; before(async () => { accounts = await ethers.getSigners(); @@ -58,117 +53,335 @@ describe('EAS API', () => { beforeEach(async () => { sender = await createWallet(); - registry = await Contracts.SchemaRegistry.deploy(); - easContract = await Contracts.EAS.deploy(await registry.getAddress()); - proxyContract = await Contracts.EIP712Proxy.deploy(await easContract.getAddress(), EIP712_PROXY_NAME); + const schemaRegistryContract = await Contracts.SchemaRegistry.deploy(); + schemaRegistry = new SchemaRegistry(await schemaRegistryContract.getAddress(), { + signer: sender + }); }); - context('with a signer', () => { - beforeEach(async () => { - proxy = new EIP712Proxy(await proxyContract.getAddress(), { signer: sender }); - eas = new EAS(await easContract.getAddress(), { signer: sender, proxy }); - schemaRegistry = new SchemaRegistry(await registry.getAddress(), { signer: sender }); - }); + for (const { version, signatureTypes } of [ + { + version: EASVersion.Legacy, + signatureTypes: [SignatureType.Direct, SignatureType.Delegated] + }, + { + version: EASVersion.Version1, + signatureTypes: [ + SignatureType.Direct, + SignatureType.Delegated, + SignatureType.DelegatedProxy, + SignatureType.Offchain + ] + } + ]) { + context(`EAS ${version}`, () => { + beforeEach(async () => { + switch (version) { + case EASVersion.Legacy: + { + const easContract = await Contracts.EASLegacy.deploy(await schemaRegistry.contract.getAddress()); + eas = new EAS(await easContract.getAddress(), { signer: sender }); + } - describe('construction', () => { - it('should properly create an EAS API', async () => { - expect(eas.contract.runner?.provider).not.to.be.null; + break; - expect(await eas.getVersion()).to.equal(await easContract.version()); + case EASVersion.Version1: + { + const easContract = await Contracts.EAS.deploy(await schemaRegistry.contract.getAddress()); + const proxyContract = await Contracts.EIP712Proxy.deploy( + await easContract.getAddress(), + EIP712_PROXY_NAME + ); + + const proxy = new EIP712Proxy(await proxyContract.getAddress(), { signer: sender }); + + eas = new EAS(await easContract.getAddress(), { signer: sender, proxy }); + } + + break; + + default: + throw new Error(`Unsupported EAS version: ${version}`); + } }); - }); - describe('attesting', () => { - let expirationTime: bigint; - const data = '0x1234'; + describe('construction', () => { + it('should properly create an EAS API', async () => { + expect(eas.contract.runner?.provider).not.to.be.null; - beforeEach(async () => { - expirationTime = (await latest()) + duration.days(30n); + expect(await eas.getVersion()).to.equal(await eas.contract.version()); + }); }); - for (const signatureType of [ - SignatureType.Direct, - SignatureType.Delegated, - SignatureType.DelegatedProxy, - SignatureType.Offchain - ]) { - context(`via ${signatureType} attestation`, () => { - for (const revocable of [true, false]) { - for (const [maxPriorityFeePerGas, maxFeePerGas] of [ - [undefined, undefined], - [1000000000n, 200000000000n] - ]) { - context( - maxPriorityFeePerGas && maxFeePerGas - ? `with maxPriorityFeePerGas=${maxPriorityFeePerGas.toString()}, maxFeePerGas=${maxFeePerGas.toString()} overrides` - : 'with default fees', - () => { - context(`with ${revocable ? 'a revocable' : 'an irrevocable'} registered schema`, () => { - const schema1 = 'bool like'; - const schema2 = 'bytes32 proposalId, bool vote'; - let schema1Id: string; - let schema2Id: string; - - beforeEach(async () => { - const tx1 = await schemaRegistry.register({ schema: schema1, revocable }); - const tx2 = await schemaRegistry.register({ schema: schema2, revocable }); - - schema1Id = await tx1.wait(); - schema2Id = await tx2.wait(); - }); + describe('attesting', () => { + let expirationTime: bigint; + const data = '0x1234'; - it('should be able to query the schema registry', async () => { - const schemaData = await registry.getSchema(schema1Id); - expect(schemaData.uid).to.equal(schema1Id); - expect(schemaData.resolver).to.equal(ZERO_ADDRESS); - expect(schemaData.revocable).to.equal(revocable); - expect(schemaData.schema).to.equal(schema1); - }); + beforeEach(async () => { + expirationTime = (await latest()) + duration.days(30n); + }); - it('should allow attestation to an empty recipient', async () => { - await expectAttestation( - eas, - schema1Id, - { - recipient: ZERO_ADDRESS, - expirationTime, - revocable, - data - }, - { - signatureType, - from: sender, - maxFeePerGas, - maxPriorityFeePerGas, - deadline: (await latest()) + duration.days(1n) - } - ); - }); + for (const signatureType of signatureTypes) { + context(`via ${signatureType} attestation`, () => { + for (const revocable of [true, false]) { + for (const [maxPriorityFeePerGas, maxFeePerGas] of [ + [undefined, undefined], + [1000000000n, 200000000000n] + ]) { + context( + maxPriorityFeePerGas && maxFeePerGas + ? `with maxPriorityFeePerGas=${maxPriorityFeePerGas.toString()}, maxFeePerGas=${maxFeePerGas.toString()} overrides` + : 'with default fees', + () => { + context(`with ${revocable ? 'a revocable' : 'an irrevocable'} registered schema`, () => { + const schema1 = 'bool like'; + const schema2 = 'bytes32 proposalId, bool vote'; + let schema1Id: string; + let schema2Id: string; + + beforeEach(async () => { + const tx1 = await schemaRegistry.register({ schema: schema1, revocable }); + const tx2 = await schemaRegistry.register({ schema: schema2, revocable }); + + schema1Id = await tx1.wait(); + schema2Id = await tx2.wait(); + }); - it('should allow self attestations', async () => { - await expectAttestation( - eas, - schema1Id, - { recipient: await sender.getAddress(), expirationTime, revocable, data }, - { - signatureType, - from: sender, - maxFeePerGas, - maxPriorityFeePerGas, - deadline: (await latest()) + duration.days(1n) - } - ); + it('should be able to query the schema registry', async () => { + const schemaData = await schemaRegistry.getSchema({ uid: schema1Id }); + expect(schemaData.uid).to.equal(schema1Id); + expect(schemaData.resolver).to.equal(ZERO_ADDRESS); + expect(schemaData.revocable).to.equal(revocable); + expect(schemaData.schema).to.equal(schema1); + }); + + it('should allow attestation to an empty recipient', async () => { + await expectAttestation( + eas, + schema1Id, + { + recipient: ZERO_ADDRESS, + expirationTime, + revocable, + data + }, + { + signatureType, + from: sender, + maxFeePerGas, + maxPriorityFeePerGas, + deadline: (await latest()) + duration.days(1n) + } + ); + }); + + it('should allow self attestations', async () => { + await expectAttestation( + eas, + schema1Id, + { recipient: await sender.getAddress(), expirationTime, revocable, data }, + { + signatureType, + from: sender, + maxFeePerGas, + maxPriorityFeePerGas, + deadline: (await latest()) + duration.days(1n) + } + ); + }); + + it('should allow multiple attestations', async () => { + await expectAttestation( + eas, + schema1Id, + { + recipient: await recipient.getAddress(), + expirationTime, + revocable, + data: encodeBytes32String('0') + }, + { + signatureType, + from: sender, + maxFeePerGas, + maxPriorityFeePerGas, + deadline: (await latest()) + duration.days(1n) + } + ); + + await expectAttestation( + eas, + schema1Id, + { + recipient: await recipient2.getAddress(), + expirationTime, + revocable, + data: encodeBytes32String('1') + }, + { + signatureType, + from: sender, + maxFeePerGas, + maxPriorityFeePerGas, + deadline: (await latest()) + duration.days(1n) + } + ); + }); + + if (signatureType !== SignatureType.Offchain) { + it('should allow multi attestations', async () => { + await expectMultiAttestations( + eas, + [ + { + schema: schema1Id, + data: [ + { + recipient: await recipient.getAddress(), + expirationTime, + revocable, + data: encodeBytes32String('0') + }, + { + recipient: await recipient2.getAddress(), + expirationTime, + revocable, + data: encodeBytes32String('1') + } + ] + }, + { + schema: schema2Id, + data: [ + { + recipient: await recipient.getAddress(), + expirationTime, + revocable, + data: encodeBytes32String('2') + }, + { + recipient: await recipient2.getAddress(), + expirationTime, + revocable, + data: encodeBytes32String('3') + } + ] + } + ], + { + signatureType, + from: sender, + maxFeePerGas, + maxPriorityFeePerGas, + deadline: (await latest()) + duration.days(1n) + } + ); + }); + } + + it('should allow attestation without expiration time', async () => { + await expectAttestation( + eas, + schema1Id, + { recipient: await recipient.getAddress(), expirationTime: NO_EXPIRATION, revocable, data }, + { + signatureType, + from: sender, + maxFeePerGas, + maxPriorityFeePerGas, + deadline: (await latest()) + duration.days(1n) + } + ); + }); + + it('should allow attestation without any data', async () => { + await expectAttestation( + eas, + schema1Id, + { recipient: await recipient.getAddress(), expirationTime, revocable, data: ZERO_BYTES }, + { + signatureType, + from: sender, + maxFeePerGas, + maxPriorityFeePerGas, + deadline: (await latest()) + duration.days(1n) + } + ); + }); + + it('should store referenced attestation', async () => { + const uid = await ( + await eas.attest({ + schema: schema1Id, + data: { recipient: await recipient.getAddress(), expirationTime, revocable, data } + }) + ).wait(); + + await expectAttestation( + eas, + schema1Id, + { recipient: await recipient.getAddress(), expirationTime, revocable, refUID: uid, data }, + { + signatureType, + from: sender, + maxFeePerGas, + maxPriorityFeePerGas, + deadline: (await latest()) + duration.days(1n) + } + ); + }); }); + } + ); + } + } + }); + } + }); - it('should allow multiple attestations', async () => { - await expectAttestation( + describe('revocation', () => { + const schema1 = 'bool like'; + const schema2 = 'bytes32 proposalId, bool vote'; + let schema1Id: string; + let schema2Id: string; + + let uids1: string[]; + let uids2: string[]; + + beforeEach(async () => { + const tx1 = await schemaRegistry.register({ schema: schema1 }); + const tx2 = await schemaRegistry.register({ schema: schema2 }); + + schema1Id = await tx1.wait(); + schema2Id = await tx2.wait(); + }); + + for (const signatureType of signatureTypes) { + if (signatureType === SignatureType.Offchain) { + continue; + } + + for (const [maxPriorityFeePerGas, maxFeePerGas] of [ + [undefined, undefined], + [1000000000n, 200000000000n] + ]) { + context( + maxPriorityFeePerGas && maxFeePerGas + ? `with maxPriorityFeePerGas=${maxPriorityFeePerGas.toString()}, maxFeePerGas=${maxFeePerGas.toString()} overrides` + : 'with default fees', + () => { + context(`via ${signatureType} revocation`, () => { + beforeEach(async () => { + uids1 = []; + + for (let i = 0; i < 2; i++) { + const uid = await expectAttestation( eas, schema1Id, { recipient: await recipient.getAddress(), - expirationTime, - revocable, - data: encodeBytes32String('0') + expirationTime: NO_EXPIRATION, + data: encodeBytes32String((i + 1).toString()) }, { signatureType, @@ -179,14 +392,19 @@ describe('EAS API', () => { } ); - await expectAttestation( + uids1.push(uid); + } + + uids2 = []; + + for (let i = 0; i < 2; i++) { + const uid = await expectAttestation( eas, - schema1Id, + schema2Id, { - recipient: await recipient2.getAddress(), - expirationTime, - revocable, - data: encodeBytes32String('1') + recipient: await recipient.getAddress(), + expirationTime: NO_EXPIRATION, + data: encodeBytes32String((i + 1).toString()) }, { signatureType, @@ -196,64 +414,17 @@ describe('EAS API', () => { deadline: (await latest()) + duration.days(1n) } ); - }); - if (signatureType !== SignatureType.Offchain) { - it('should allow multi attestations', async () => { - await expectMultiAttestations( - eas, - [ - { - schema: schema1Id, - data: [ - { - recipient: await recipient.getAddress(), - expirationTime, - revocable, - data: encodeBytes32String('0') - }, - { - recipient: await recipient2.getAddress(), - expirationTime, - revocable, - data: encodeBytes32String('1') - } - ] - }, - { - schema: schema2Id, - data: [ - { - recipient: await recipient.getAddress(), - expirationTime, - revocable, - data: encodeBytes32String('2') - }, - { - recipient: await recipient2.getAddress(), - expirationTime, - revocable, - data: encodeBytes32String('3') - } - ] - } - ], - { - signatureType, - from: sender, - maxFeePerGas, - maxPriorityFeePerGas, - deadline: (await latest()) + duration.days(1n) - } - ); - }); + uids2.push(uid); } + }); - it('should allow attestation without expiration time', async () => { - await expectAttestation( + it('should allow revoking existing attestations', async () => { + for (const uid of uids1) { + await expectRevocation( eas, schema1Id, - { recipient: await recipient.getAddress(), expirationTime: NO_EXPIRATION, revocable, data }, + { uid }, { signatureType, from: sender, @@ -262,13 +433,13 @@ describe('EAS API', () => { deadline: (await latest()) + duration.days(1n) } ); - }); + } - it('should allow attestation without any data', async () => { - await expectAttestation( + for (const uid of uids2) { + await expectRevocation( eas, - schema1Id, - { recipient: await recipient.getAddress(), expirationTime, revocable, data: ZERO_BYTES }, + schema2Id, + { uid }, { signatureType, from: sender, @@ -277,78 +448,22 @@ describe('EAS API', () => { deadline: (await latest()) + duration.days(1n) } ); - }); + } + }); - it('should store referenced attestation', async () => { - const uid = await ( - await eas.attest({ + it('should allow to multi-revoke existing attestations', async () => { + await expectMultiRevocations( + eas, + [ + { schema: schema1Id, - data: { recipient: await recipient.getAddress(), expirationTime, revocable, data } - }) - ).wait(); - - await expectAttestation( - eas, - schema1Id, - { recipient: await recipient.getAddress(), expirationTime, revocable, refUID: uid, data }, + data: [{ uid: uids1[0] }, { uid: uids1[1] }] + }, { - signatureType, - from: sender, - maxFeePerGas, - maxPriorityFeePerGas, - deadline: (await latest()) + duration.days(1n) + schema: schema2Id, + data: [{ uid: uids2[0] }, { uid: uids2[1] }] } - ); - }); - }); - } - ); - } - } - }); - } - }); - - describe('revocation', () => { - const schema1 = 'bool like'; - const schema2 = 'bytes32 proposalId, bool vote'; - let schema1Id: string; - let schema2Id: string; - - let uids1: string[]; - let uids2: string[]; - - beforeEach(async () => { - const tx1 = await schemaRegistry.register({ schema: schema1 }); - const tx2 = await schemaRegistry.register({ schema: schema2 }); - - schema1Id = await tx1.wait(); - schema2Id = await tx2.wait(); - }); - - for (const signatureType of [SignatureType.Direct, SignatureType.Delegated, SignatureType.DelegatedProxy]) { - for (const [maxPriorityFeePerGas, maxFeePerGas] of [ - [undefined, undefined], - [1000000000n, 200000000000n] - ]) { - context( - maxPriorityFeePerGas && maxFeePerGas - ? `with maxPriorityFeePerGas=${maxPriorityFeePerGas.toString()}, maxFeePerGas=${maxFeePerGas.toString()} overrides` - : 'with default fees', - () => { - context(`via ${signatureType} revocation`, () => { - beforeEach(async () => { - uids1 = []; - - for (let i = 0; i < 2; i++) { - const uid = await expectAttestation( - eas, - schema1Id, - { - recipient: await recipient.getAddress(), - expirationTime: NO_EXPIRATION, - data: encodeBytes32String((i + 1).toString()) - }, + ], { signatureType, from: sender, @@ -357,444 +472,15 @@ describe('EAS API', () => { deadline: (await latest()) + duration.days(1n) } ); - - uids1.push(uid); - } - - uids2 = []; - - for (let i = 0; i < 2; i++) { - const uid = await expectAttestation( - eas, - schema2Id, - { - recipient: await recipient.getAddress(), - expirationTime: NO_EXPIRATION, - data: encodeBytes32String((i + 1).toString()) - }, - { - signatureType, - from: sender, - maxFeePerGas, - maxPriorityFeePerGas, - deadline: (await latest()) + duration.days(1n) - } - ); - - uids2.push(uid); - } - }); - - it('should allow to revoke existing attestations', async () => { - for (const uid of uids1) { - await expectRevocation( - eas, - schema1Id, - { uid }, - { - signatureType, - from: sender, - maxFeePerGas, - maxPriorityFeePerGas, - deadline: (await latest()) + duration.days(1n) - } - ); - } - - for (const uid of uids2) { - await expectRevocation( - eas, - schema2Id, - { uid }, - { - signatureType, - from: sender, - maxFeePerGas, - maxPriorityFeePerGas, - deadline: (await latest()) + duration.days(1n) - } - ); - } - }); - - it('should allow to multi-revoke existing attestations', async () => { - await expectMultiRevocations( - eas, - [ - { - schema: schema1Id, - data: [{ uid: uids1[0] }, { uid: uids1[1] }] - }, - { - schema: schema2Id, - data: [{ uid: uids2[0] }, { uid: uids2[1] }] - } - ], - { - signatureType, - from: sender, - maxFeePerGas, - maxPriorityFeePerGas, - deadline: (await latest()) + duration.days(1n) - } - ); + }); }); - }); - } - ); - } - } - }); - - describe('timestamping', () => { - const data1 = encodeBytes32String('0x1234'); - const data2 = encodeBytes32String('0x4567'); - const data3 = encodeBytes32String('0x6666'); - - for (const [maxPriorityFeePerGas, maxFeePerGas] of [ - [undefined, undefined], - [1000000000, 200000000000] - ]) { - context( - maxPriorityFeePerGas && maxFeePerGas - ? `with maxPriorityFeePerGas=${maxPriorityFeePerGas.toString()}, maxFeePerGas=${maxFeePerGas.toString()} overrides` - : 'with default fees', - () => { - const overrides = maxPriorityFeePerGas && maxFeePerGas ? { maxFeePerGas, maxPriorityFeePerGas } : undefined; - - it('should timestamp a single data', async () => { - const tx = await eas.timestamp(data1, overrides); - const timestamp = await tx.wait(); - expect(timestamp).to.equal(await latest()); - - expect(await eas.getTimestamp(data1)).to.equal(timestamp); - - if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx.tx.maxFeePerGas).to.equal(maxFeePerGas); } - - const tx2 = await eas.timestamp(data2, overrides); - const timestamp2 = await tx2.wait(); - expect(timestamp2).to.equal(await latest()); - - expect(await eas.getTimestamp(data2)).to.equal(timestamp2); - - if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx2.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx2.tx.maxFeePerGas).to.equal(maxFeePerGas); - } - }); - - it('should timestamp multiple data', async () => { - const data = [data1, data2]; - const tx = await eas.multiTimestamp([data1, data2], overrides); - const timestamps = await tx.wait(); - - const currentTime = await latest(); - - for (const [i, d] of data.entries()) { - const timestamp = timestamps[i]; - expect(timestamp).to.equal(currentTime); - - expect(await eas.getTimestamp(d)).to.equal(timestamp); - } - - if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx.tx.maxFeePerGas).to.equal(maxFeePerGas); - } - }); - - it("should return 0 for any data that wasn't timestamped multiple data", async () => { - expect(await eas.getTimestamp(data3)).to.equal(0); - }); - } - ); - } - }); - - describe('offchain attestation handling/verification', () => { - let offchain: Offchain; - - const schema = 'bool like'; - const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); - - beforeEach(async () => { - await registry.register(schema, ZERO_ADDRESS, false); - }); - - beforeEach(async () => { - offchain = await eas.getOffchain(); - }); - - describe('salting', () => { - beforeEach(async () => { - await registry.register(schema, ZERO_ADDRESS, true); - }); - - it('should support customizable salts', async () => { - const params = { - version: OffchainAttestationVersion.Version2, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }; - - const attestation = await offchain.signOffchainAttestation( - { ...params, salt: encodeBytes32String('SALT1') }, - sender, - { verifyOnchain: true } - ); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be.true; - - const attestation2 = await offchain.signOffchainAttestation( - { ...params, salt: encodeBytes32String('SALT2') }, - sender, - { verifyOnchain: true } - ); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation2)).to.be.true; - - expect(attestation.uid).not.to.be.equal(attestation2.uid); - }); - - it('should generate a random salt by default', async () => { - const params = { - version: OffchainAttestationVersion.Version2, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }; - - const attestation = await offchain.signOffchainAttestation(params, sender, { verifyOnchain: true }); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be.true; - - const attestation2 = await offchain.signOffchainAttestation(params, sender, { verifyOnchain: true }); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation2)).to.be.true; - - expect(attestation.message.salt).not.to.be.equal(attestation2.message.salt); - expect(attestation.uid).not.to.be.equal(attestation2.uid); - }); - }); - - describe('verification', () => { - const salt = encodeBytes32String('SALT'); - - beforeEach(async () => { - await registry.register(schema, ZERO_ADDRESS, true); - }); - - it('should verify the attestation onchain', async () => { - const attestation = await offchain.signOffchainAttestation( - { - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES, - salt - }, - sender, - { verifyOnchain: true } - ); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be.true; - }); - - it('should throw on onchain verification of invalid attestations', async () => { - const params = { - version: OffchainAttestationVersion.Version2, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES, - salt - }; - - // Invalid schema - await expect( - offchain.signOffchainAttestation({ ...params, schema: ZERO_BYTES32 }, sender, { verifyOnchain: true }) - ).to.be.rejectedWith( - "Error: VM Exception while processing transaction: reverted with custom error 'InvalidSchema()'" - ); - - // Invalid expiration time - await expect( - offchain.signOffchainAttestation( - { ...params, expirationTime: (await latest()) - duration.days(1n) }, - sender, - { verifyOnchain: true } - ) - ).to.be.rejectedWith( - "Error: VM Exception while processing transaction: reverted with custom error 'InvalidExpirationTime()" - ); - }); - - it('should throw on offchain verification of invalid attestations', async () => { - const params = { - version: OffchainAttestationVersion.Version2, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }; - const senderAddress = await sender.getAddress(); - - const attestation = await offchain.signOffchainAttestation(params, sender); - - // Invalid attester - expect(() => offchain.verifyOffchainAttestationSignature(ZERO_ADDRESS, attestation)).to.throw(InvalidAddress); - - // Invalid domains - const { domain } = attestation; - - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ domain: { ...domain, chainId: domain.chainId + 100n } } - }) - ).to.throw(InvalidDomain); - - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } - }) - ).to.throw(InvalidDomain); - - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } - }) - ).to.throw(InvalidDomain); - - // Invalid version verification won't throw, due to the check not being strict, but will fail on signature - await expect( - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ domain: { ...domain, version: '9999.9999.9999' } } - }) - ).to.be.false; - - // Invalid primary type - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ primaryType: `BAD${attestation.primaryType}BAD` } - }) - ).to.throw(InvalidPrimaryType); - - // Invalid types - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ - types: { [attestation.primaryType]: [{ name: 'schema', type: 'bytes32' }] } - } - }) - ).to.throw(InvalidTypes); - - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ - types: { BAD: attestation.types.values } - } - }) - ).to.throw(InvalidTypes); - }); - - it('should verify offchain attestations with legacy/obsoleted domains', async () => { - const { config } = offchain; - const params = { - version: OffchainAttestationVersion.Legacy, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }; - const senderAddress = await sender.getAddress(); - - // Legacy version - const legacyOffchain = new Offchain(config, OffchainAttestationVersion.Legacy, new EAS(ZERO_ADDRESS)); - - let customOffchain = new CustomOffchain( - config, - OffchainAttestationVersion.Legacy, - { contractVersion: '0.0.1' }, - new EAS(ZERO_ADDRESS) - ); - - let attestation = await customOffchain.signOffchainAttestation(params, sender); - await expect(legacyOffchain.verifyOffchainAttestationSignature(senderAddress, attestation)).to.be.true; - - // Legacy types - for (const type of OFFCHAIN_ATTESTATION_TYPES[OffchainAttestationVersion.Legacy].slice(1)) { - customOffchain = new CustomOffchain( - config, - OffchainAttestationVersion.Legacy, - { - contractVersion: '0.26', - type - }, - new EAS(ZERO_ADDRESS) ); - - attestation = await customOffchain.signOffchainAttestation(params, sender); - await expect(legacyOffchain.verifyOffchainAttestationSignature(senderAddress, attestation)).to.be.true; } - }); - - context('with an irrevocable schema', () => { - const schema2 = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum'; - const schema2Id = getSchemaUID(schema2, ZERO_ADDRESS, false); - - beforeEach(async () => { - await registry.register(schema2, ZERO_ADDRESS, false); - }); - - it('should throw on verification of invalid offchain attestations', async () => { - await expect( - offchain.signOffchainAttestation( - { - schema: schema2Id, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: true, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }, - sender, - { verifyOnchain: true } - ) - ).to.be.rejectedWith( - "Error: VM Exception while processing transaction: reverted with custom error 'Irrevocable()'" - ); - }); - }); + } }); - describe('revocation', () => { + describe('timestamping', () => { const data1 = encodeBytes32String('0x1234'); const data2 = encodeBytes32String('0x4567'); const data3 = encodeBytes32String('0x6666'); @@ -811,23 +497,23 @@ describe('EAS API', () => { const overrides = maxPriorityFeePerGas && maxFeePerGas ? { maxFeePerGas, maxPriorityFeePerGas } : undefined; - it('should revoke a single data', async () => { - const tx = await eas.revokeOffchain(data1, overrides); + it('should timestamp a single data', async () => { + const tx = await eas.timestamp(data1, overrides); const timestamp = await tx.wait(); expect(timestamp).to.equal(await latest()); - expect(await eas.getRevocationOffchain(await sender.getAddress(), data1)).to.equal(timestamp); + expect(await eas.getTimestamp(data1)).to.equal(timestamp); if (maxPriorityFeePerGas && maxFeePerGas) { expect(tx.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); expect(tx.tx.maxFeePerGas).to.equal(maxFeePerGas); } - const tx2 = await eas.revokeOffchain(data2, overrides); + const tx2 = await eas.timestamp(data2, overrides); const timestamp2 = await tx2.wait(); expect(timestamp2).to.equal(await latest()); - expect(await eas.getRevocationOffchain(await sender.getAddress(), data2)).to.equal(timestamp2); + expect(await eas.getTimestamp(data2)).to.equal(timestamp2); if (maxPriorityFeePerGas && maxFeePerGas) { expect(tx2.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); @@ -835,9 +521,9 @@ describe('EAS API', () => { } }); - it('should revoke multiple data', async () => { + it('should timestamp multiple data', async () => { const data = [data1, data2]; - const tx = await eas.multiRevokeOffchain([data1, data2], overrides); + const tx = await eas.multiTimestamp([data1, data2], overrides); const timestamps = await tx.wait(); const currentTime = await latest(); @@ -846,7 +532,7 @@ describe('EAS API', () => { const timestamp = timestamps[i]; expect(timestamp).to.equal(currentTime); - expect(await eas.getRevocationOffchain(await sender.getAddress(), d)).to.equal(timestamp); + expect(await eas.getTimestamp(d)).to.equal(timestamp); } if (maxPriorityFeePerGas && maxFeePerGas) { @@ -854,339 +540,702 @@ describe('EAS API', () => { expect(tx.tx.maxFeePerGas).to.equal(maxFeePerGas); } }); + + it("should return 0 for any data that wasn't timestamped multiple data", async () => { + expect(await eas.getTimestamp(data3)).to.equal(0); + }); } ); } - - it("should return 0 for any data that wasn't revoked multiple data", async () => { - expect(await eas.getRevocationOffchain(await sender.getAddress(), data3)).to.equal(0); - }); }); - }); - describe('delegated attestation handling/verification', () => { - let delegated: Delegated; + describe('offchain attestation handling/verification', () => { + let offchain: Offchain; - const schema = 'bool like'; - const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); + const schema = 'bool like'; + const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); - beforeEach(async () => { - await registry.register(schema, ZERO_ADDRESS, false); - }); + beforeEach(async () => { + await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + }); - beforeEach(async () => { - delegated = await eas.getDelegated(); - }); + beforeEach(async () => { + offchain = await eas.getOffchain(); + }); - describe('verification', () => { - describe('attestation', () => { - it('should throw on offchain verification of invalid attestations', async () => { - const senderAddress = await sender.getAddress(); + describe('salting', () => { + beforeEach(async () => { + await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: true }); + }); + + it('should support customizable salts', async () => { const params = { + version: OffchainAttestationVersion.Version2, schema: schemaId, recipient: await recipient.getAddress(), + time: await latest(), expirationTime: NO_EXPIRATION, revocable: false, refUID: ZERO_BYTES32, - data: ZERO_BYTES, - value: 0n, - nonce: await eas.getNonce(senderAddress), - deadline: NO_EXPIRATION + data: ZERO_BYTES }; - const response = await delegated.signDelegatedAttestation(params, sender); + const attestation = await offchain.signOffchainAttestation( + { ...params, salt: encodeBytes32String('SALT1') }, + sender, + { verifyOnchain: true } + ); + expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be + .true; - // Invalid attester - expect(() => delegated.verifyDelegatedAttestationSignature(ZERO_ADDRESS, response)).to.throw( - InvalidAddress + const attestation2 = await offchain.signOffchainAttestation( + { ...params, salt: encodeBytes32String('SALT2') }, + sender, + { verifyOnchain: true } ); + expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation2)).to.be + .true; - // Invalid domains - const { domain } = response; + expect(attestation.uid).not.to.be.equal(attestation2.uid); + }); - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, chainId: domain.chainId + 100n } } - }) - ).to.throw(InvalidDomain); + it('should generate a random salt by default', async () => { + const params = { + version: OffchainAttestationVersion.Version2, + schema: schemaId, + recipient: await recipient.getAddress(), + time: await latest(), + expirationTime: NO_EXPIRATION, + revocable: false, + refUID: ZERO_BYTES32, + data: ZERO_BYTES + }; - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } - }) - ).to.throw(InvalidDomain); + const attestation = await offchain.signOffchainAttestation(params, sender, { verifyOnchain: true }); + expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be + .true; - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } - }) - ).to.throw(InvalidDomain); + const attestation2 = await offchain.signOffchainAttestation(params, sender, { verifyOnchain: true }); + expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation2)).to.be + .true; - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, version: '9999.9999.9999' } } - }) - ).to.throw(InvalidDomain); + expect(attestation.message.salt).not.to.be.equal(attestation2.message.salt); + expect(attestation.uid).not.to.be.equal(attestation2.uid); + }); + }); - // Invalid types - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ - types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } - } - }) - ).to.throw(InvalidTypes); + describe('verification', () => { + const salt = encodeBytes32String('SALT'); - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ - types: { BAD: response.types.values } - } - }) - ).to.throw(InvalidTypes); + beforeEach(async () => { + await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: true }); }); - }); - describe('revocation', () => { - it('should throw on offchain verification of invalid revocations', async () => { - const senderAddress = await sender.getAddress(); + it('should verify the attestation onchain', async () => { + const attestation = await offchain.signOffchainAttestation( + { + schema: schemaId, + recipient: await recipient.getAddress(), + time: await latest(), + expirationTime: NO_EXPIRATION, + revocable: false, + refUID: ZERO_BYTES32, + data: ZERO_BYTES, + salt + }, + sender, + { verifyOnchain: true } + ); + expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be + .true; + }); + + it('should throw on onchain verification of invalid attestations', async () => { + const params = { + version: OffchainAttestationVersion.Version2, + schema: schemaId, + recipient: await recipient.getAddress(), + time: await latest(), + expirationTime: NO_EXPIRATION, + revocable: false, + refUID: ZERO_BYTES32, + data: ZERO_BYTES, + salt + }; + + // Invalid schema + await expect( + offchain.signOffchainAttestation({ ...params, schema: ZERO_BYTES32 }, sender, { verifyOnchain: true }) + ).to.be.rejectedWith( + "Error: VM Exception while processing transaction: reverted with custom error 'InvalidSchema()'" + ); + + // Invalid expiration time + await expect( + offchain.signOffchainAttestation( + { ...params, expirationTime: (await latest()) - duration.days(1n) }, + sender, + { verifyOnchain: true } + ) + ).to.be.rejectedWith( + "Error: VM Exception while processing transaction: reverted with custom error 'InvalidExpirationTime()" + ); + }); + + it('should throw on offchain verification of invalid attestations', async () => { const params = { + version: OffchainAttestationVersion.Version2, schema: schemaId, - uid: encodeBytes32String('123'), - value: 0n, - nonce: await eas.getNonce(senderAddress), - deadline: NO_EXPIRATION + recipient: await recipient.getAddress(), + time: await latest(), + expirationTime: NO_EXPIRATION, + revocable: false, + refUID: ZERO_BYTES32, + data: ZERO_BYTES }; + const senderAddress = await sender.getAddress(); - const response = await delegated.signDelegatedRevocation(params, sender); + const attestation = await offchain.signOffchainAttestation(params, sender); // Invalid attester - expect(() => delegated.verifyDelegatedRevocationSignature(ZERO_ADDRESS, response)).to.throw(InvalidAddress); + expect(() => offchain.verifyOffchainAttestationSignature(ZERO_ADDRESS, attestation)).to.throw( + InvalidAddress + ); // Invalid domains - const { domain } = response; + const { domain } = attestation; await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, + offchain.verifyOffchainAttestationSignature(senderAddress, { + ...attestation, ...{ domain: { ...domain, chainId: domain.chainId + 100n } } }) ).to.throw(InvalidDomain); await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } + offchain.verifyOffchainAttestationSignature(senderAddress, { + ...attestation, + ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } }) ).to.throw(InvalidDomain); await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } + offchain.verifyOffchainAttestationSignature(senderAddress, { + ...attestation, + ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } }) ).to.throw(InvalidDomain); - await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, + // Invalid version verification won't throw, due to the check not being strict, but will fail on signature + await expect( + offchain.verifyOffchainAttestationSignature(senderAddress, { + ...attestation, ...{ domain: { ...domain, version: '9999.9999.9999' } } }) - ).to.throw(InvalidDomain); + ).to.be.false; + + // Invalid primary type + await expect(() => + offchain.verifyOffchainAttestationSignature(senderAddress, { + ...attestation, + ...{ primaryType: `BAD${attestation.primaryType}BAD` } + }) + ).to.throw(InvalidPrimaryType); // Invalid types await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, + offchain.verifyOffchainAttestationSignature(senderAddress, { + ...attestation, ...{ - types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } + types: { [attestation.primaryType]: [{ name: 'schema', type: 'bytes32' }] } } }) ).to.throw(InvalidTypes); await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, + offchain.verifyOffchainAttestationSignature(senderAddress, { + ...attestation, ...{ - types: { BAD: response.types.values } + types: { BAD: attestation.types.values } } }) ).to.throw(InvalidTypes); }); - }); - }); - }); - - describe('delegated proxy attestation handling/verification', () => { - let delegatedProxy: DelegatedProxy; - - const schema = 'bool like'; - const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); - - beforeEach(async () => { - await registry.register(schema, ZERO_ADDRESS, false); - }); - beforeEach(async () => { - const proxy = await eas.getEIP712Proxy(); - if (!proxy) { - throw new Error('Invalid proxy'); - } - - delegatedProxy = await proxy.getDelegated(); - }); - - describe('verification', () => { - describe('attestation', () => { - it('should throw on offchain verification of invalid attestations', async () => { - const senderAddress = await sender.getAddress(); + it('should verify offchain attestations with legacy/obsoleted domains', async () => { + const { config } = offchain; const params = { + version: OffchainAttestationVersion.Legacy, schema: schemaId, recipient: await recipient.getAddress(), + time: await latest(), expirationTime: NO_EXPIRATION, revocable: false, refUID: ZERO_BYTES32, - data: ZERO_BYTES, - value: 0n, - nonce: await eas.getNonce(senderAddress), - deadline: NO_EXPIRATION + data: ZERO_BYTES }; + const senderAddress = await sender.getAddress(); - const response = await delegatedProxy.signDelegatedProxyAttestation(params, sender); + // Legacy version + const legacyOffchain = new Offchain(config, OffchainAttestationVersion.Legacy, new EAS(ZERO_ADDRESS)); - // Invalid attester - expect(() => delegatedProxy.verifyDelegatedProxyAttestationSignature(ZERO_ADDRESS, response)).to.throw( - InvalidAddress + let customOffchain = new CustomOffchain( + config, + OffchainAttestationVersion.Legacy, + { contractVersion: '0.0.1' }, + new EAS(ZERO_ADDRESS) ); - // Invalid domains - const { domain } = response; - - await expect(() => - delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, chainId: domain.chainId + 100n } } - }) - ).to.throw(InvalidDomain); + let attestation = await customOffchain.signOffchainAttestation(params, sender); + await expect(legacyOffchain.verifyOffchainAttestationSignature(senderAddress, attestation)).to.be.true; - await expect(() => - delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } - }) - ).to.throw(InvalidDomain); + // Legacy types + for (const type of OFFCHAIN_ATTESTATION_TYPES[OffchainAttestationVersion.Legacy].slice(1)) { + customOffchain = new CustomOffchain( + config, + OffchainAttestationVersion.Legacy, + { + contractVersion: '0.26', + type + }, + new EAS(ZERO_ADDRESS) + ); - await expect(() => - delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } - }) - ).to.throw(InvalidDomain); + attestation = await customOffchain.signOffchainAttestation(params, sender); + await expect(legacyOffchain.verifyOffchainAttestationSignature(senderAddress, attestation)).to.be.true; + } + }); - await expect(() => - delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, version: '9999.9999.9999' } } - }) - ).to.throw(InvalidDomain); + context('with an irrevocable schema', () => { + const schema2 = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum'; + const schema2Id = getSchemaUID(schema2, ZERO_ADDRESS, false); - // Invalid types - await expect(() => - delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { - ...response, - ...{ - types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } - } - }) - ).to.throw(InvalidTypes); + beforeEach(async () => { + await schemaRegistry.register({ schema: schema2, resolverAddress: ZERO_ADDRESS, revocable: false }); + }); - await expect(() => - delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { - ...response, - ...{ - types: { BAD: response.types.values } - } - }) - ).to.throw(InvalidTypes); + it('should throw on verification of invalid offchain attestations', async () => { + await expect( + offchain.signOffchainAttestation( + { + schema: schema2Id, + recipient: await recipient.getAddress(), + time: await latest(), + expirationTime: NO_EXPIRATION, + revocable: true, + refUID: ZERO_BYTES32, + data: ZERO_BYTES + }, + sender, + { verifyOnchain: true } + ) + ).to.be.rejectedWith( + "Error: VM Exception while processing transaction: reverted with custom error 'Irrevocable()'" + ); + }); }); }); - }); - describe('revocation', () => { - it('should throw on offchain verification of invalid revocations', async () => { - const senderAddress = await sender.getAddress(); - const params = { - schema: schemaId, - uid: encodeBytes32String('123'), - value: 0n, - nonce: await eas.getNonce(senderAddress), - deadline: NO_EXPIRATION - }; - - const response = await delegatedProxy.signDelegatedProxyRevocation(params, sender); - - // Invalid attester - expect(() => delegatedProxy.verifyDelegatedProxyRevocationSignature(ZERO_ADDRESS, response)).to.throw( - InvalidAddress - ); + describe('revocation', () => { + const data1 = encodeBytes32String('0x1234'); + const data2 = encodeBytes32String('0x4567'); + const data3 = encodeBytes32String('0x6666'); + + for (const [maxPriorityFeePerGas, maxFeePerGas] of [ + [undefined, undefined], + [1000000000, 200000000000] + ]) { + context( + maxPriorityFeePerGas && maxFeePerGas + ? `with maxPriorityFeePerGas=${maxPriorityFeePerGas.toString()}, maxFeePerGas=${maxFeePerGas.toString()} overrides` + : 'with default fees', + () => { + const overrides = + maxPriorityFeePerGas && maxFeePerGas ? { maxFeePerGas, maxPriorityFeePerGas } : undefined; + + it('should revoke a single data', async () => { + const tx = await eas.revokeOffchain(data1, overrides); + const timestamp = await tx.wait(); + expect(timestamp).to.equal(await latest()); + + expect(await eas.getRevocationOffchain(await sender.getAddress(), data1)).to.equal(timestamp); + + if (maxPriorityFeePerGas && maxFeePerGas) { + expect(tx.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); + expect(tx.tx.maxFeePerGas).to.equal(maxFeePerGas); + } - // Invalid domains - const { domain } = response; - - await expect(() => - delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, chainId: domain.chainId + 100n } } - }) - ).to.throw(InvalidDomain); - - await expect(() => - delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } - }) - ).to.throw(InvalidDomain); - - await expect(() => - delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } - }) - ).to.throw(InvalidDomain); - - await expect(() => - delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, version: '9999.9999.9999' } } - }) - ).to.throw(InvalidDomain); - - // Invalid types - await expect(() => - delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { - ...response, - ...{ - types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } - } - }) - ).to.throw(InvalidTypes); - - await expect(() => - delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { - ...response, - ...{ - types: { BAD: response.types.values } + const tx2 = await eas.revokeOffchain(data2, overrides); + const timestamp2 = await tx2.wait(); + expect(timestamp2).to.equal(await latest()); + + expect(await eas.getRevocationOffchain(await sender.getAddress(), data2)).to.equal(timestamp2); + + if (maxPriorityFeePerGas && maxFeePerGas) { + expect(tx2.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); + expect(tx2.tx.maxFeePerGas).to.equal(maxFeePerGas); + } + }); + + it('should revoke multiple data', async () => { + const data = [data1, data2]; + const tx = await eas.multiRevokeOffchain([data1, data2], overrides); + const timestamps = await tx.wait(); + + const currentTime = await latest(); + + for (const [i, d] of data.entries()) { + const timestamp = timestamps[i]; + expect(timestamp).to.equal(currentTime); + + expect(await eas.getRevocationOffchain(await sender.getAddress(), d)).to.equal(timestamp); + } + + if (maxPriorityFeePerGas && maxFeePerGas) { + expect(tx.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); + expect(tx.tx.maxFeePerGas).to.equal(maxFeePerGas); + } + }); } - }) - ).to.throw(InvalidTypes); + ); + } + + it("should return 0 for any data that wasn't revoked multiple data", async () => { + expect(await eas.getRevocationOffchain(await sender.getAddress(), data3)).to.equal(0); + }); }); }); + + if (signatureTypes.includes(SignatureType.Delegated)) { + describe('delegated attestation handling/verification', () => { + let delegated: Delegated; + + const schema = 'bool like'; + const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); + + beforeEach(async () => { + await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + }); + + beforeEach(async () => { + delegated = await eas.getDelegated(); + }); + + describe('verification', () => { + describe('attestation', () => { + it('should throw on offchain verification of invalid attestations', async () => { + const senderAddress = await sender.getAddress(); + const params = { + schema: schemaId, + recipient: await recipient.getAddress(), + expirationTime: NO_EXPIRATION, + revocable: false, + refUID: ZERO_BYTES32, + data: ZERO_BYTES, + value: 0n, + nonce: await eas.getNonce(senderAddress), + deadline: NO_EXPIRATION + }; + + const response = await delegated.signDelegatedAttestation(params, sender); + + // Invalid attester + expect(() => delegated.verifyDelegatedAttestationSignature(ZERO_ADDRESS, response)).to.throw( + InvalidAddress + ); + + // Invalid domains + const { domain } = response; + + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, chainId: domain.chainId + 100n } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, version: '9999.9999.9999' } } + }) + ).to.throw(InvalidDomain); + + // Invalid types + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ + types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } + } + }) + ).to.throw(InvalidTypes); + + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ + types: { BAD: response.types.values } + } + }) + ).to.throw(InvalidTypes); + }); + }); + + describe('revocation', () => { + it('should throw on offchain verification of invalid revocations', async () => { + const senderAddress = await sender.getAddress(); + const params = { + schema: schemaId, + uid: encodeBytes32String('123'), + value: 0n, + nonce: await eas.getNonce(senderAddress), + deadline: NO_EXPIRATION + }; + + const response = await delegated.signDelegatedRevocation(params, sender); + + // Invalid attester + expect(() => delegated.verifyDelegatedRevocationSignature(ZERO_ADDRESS, response)).to.throw( + InvalidAddress + ); + + // Invalid domains + const { domain } = response; + + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, chainId: domain.chainId + 100n } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, version: '9999.9999.9999' } } + }) + ).to.throw(InvalidDomain); + + // Invalid types + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ + types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } + } + }) + ).to.throw(InvalidTypes); + + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ + types: { BAD: response.types.values } + } + }) + ).to.throw(InvalidTypes); + }); + }); + }); + }); + } + + if (signatureTypes.includes(SignatureType.DelegatedProxy)) { + describe('delegated proxy attestation handling/verification', () => { + let delegatedProxy: DelegatedProxy; + + const schema = 'bool like'; + const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); + + beforeEach(async () => { + await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + }); + + beforeEach(async () => { + const proxy = await eas.getEIP712Proxy(); + if (!proxy) { + throw new Error('Invalid proxy'); + } + + delegatedProxy = await proxy.getDelegated(); + }); + + describe('verification', () => { + describe('attestation', () => { + it('should throw on offchain verification of invalid attestations', async () => { + const senderAddress = await sender.getAddress(); + const params = { + schema: schemaId, + recipient: await recipient.getAddress(), + expirationTime: NO_EXPIRATION, + revocable: false, + refUID: ZERO_BYTES32, + data: ZERO_BYTES, + value: 0n, + nonce: await eas.getNonce(senderAddress), + deadline: NO_EXPIRATION + }; + + const response = await delegatedProxy.signDelegatedProxyAttestation(params, sender); + + // Invalid attester + expect(() => delegatedProxy.verifyDelegatedProxyAttestationSignature(ZERO_ADDRESS, response)).to.throw( + InvalidAddress + ); + + // Invalid domains + const { domain } = response; + + await expect(() => + delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, chainId: domain.chainId + 100n } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, version: '9999.9999.9999' } } + }) + ).to.throw(InvalidDomain); + + // Invalid types + await expect(() => + delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { + ...response, + ...{ + types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } + } + }) + ).to.throw(InvalidTypes); + + await expect(() => + delegatedProxy.verifyDelegatedProxyAttestationSignature(senderAddress, { + ...response, + ...{ + types: { BAD: response.types.values } + } + }) + ).to.throw(InvalidTypes); + }); + }); + }); + + describe('revocation', () => { + it('should throw on offchain verification of invalid revocations', async () => { + const senderAddress = await sender.getAddress(); + const params = { + schema: schemaId, + uid: encodeBytes32String('123'), + value: 0n, + nonce: await eas.getNonce(senderAddress), + deadline: NO_EXPIRATION + }; + + const response = await delegatedProxy.signDelegatedProxyRevocation(params, sender); + + // Invalid attester + expect(() => delegatedProxy.verifyDelegatedProxyRevocationSignature(ZERO_ADDRESS, response)).to.throw( + InvalidAddress + ); + + // Invalid domains + const { domain } = response; + + await expect(() => + delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, chainId: domain.chainId + 100n } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } + }) + ).to.throw(InvalidDomain); + + await expect(() => + delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, version: '9999.9999.9999' } } + }) + ).to.throw(InvalidDomain); + + // Invalid types + await expect(() => + delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { + ...response, + ...{ + types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } + } + }) + ).to.throw(InvalidTypes); + + await expect(() => + delegatedProxy.verifyDelegatedProxyRevocationSignature(senderAddress, { + ...response, + ...{ + types: { BAD: response.types.values } + } + }) + ).to.throw(InvalidTypes); + }); + }); + }); + } }); - }); + } }); From 761c58166c2b85b22fb593b636e71424ad57d4f4 Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 16:47:22 +0100 Subject: [PATCH 04/12] Refactor tests --- test/test/eas.ts | 270 +++++++++++++++++++++++------------------------ 1 file changed, 134 insertions(+), 136 deletions(-) diff --git a/test/test/eas.ts b/test/test/eas.ts index 03048ad..fd65937 100644 --- a/test/test/eas.ts +++ b/test/test/eas.ts @@ -906,170 +906,168 @@ describe('EAS API', () => { }); }); - if (signatureTypes.includes(SignatureType.Delegated)) { - describe('delegated attestation handling/verification', () => { - let delegated: Delegated; + describe('delegated attestation handling/verification', () => { + let delegated: Delegated; - const schema = 'bool like'; - const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); + const schema = 'bool like'; + const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); - beforeEach(async () => { - await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); - }); + beforeEach(async () => { + await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + }); - beforeEach(async () => { - delegated = await eas.getDelegated(); - }); + beforeEach(async () => { + delegated = await eas.getDelegated(); + }); - describe('verification', () => { - describe('attestation', () => { - it('should throw on offchain verification of invalid attestations', async () => { - const senderAddress = await sender.getAddress(); - const params = { - schema: schemaId, - recipient: await recipient.getAddress(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES, - value: 0n, - nonce: await eas.getNonce(senderAddress), - deadline: NO_EXPIRATION - }; + describe('verification', () => { + describe('attestation', () => { + it('should throw on offchain verification of invalid attestations', async () => { + const senderAddress = await sender.getAddress(); + const params = { + schema: schemaId, + recipient: await recipient.getAddress(), + expirationTime: NO_EXPIRATION, + revocable: false, + refUID: ZERO_BYTES32, + data: ZERO_BYTES, + value: 0n, + nonce: await eas.getNonce(senderAddress), + deadline: NO_EXPIRATION + }; - const response = await delegated.signDelegatedAttestation(params, sender); + const response = await delegated.signDelegatedAttestation(params, sender); - // Invalid attester - expect(() => delegated.verifyDelegatedAttestationSignature(ZERO_ADDRESS, response)).to.throw( - InvalidAddress - ); + // Invalid attester + expect(() => delegated.verifyDelegatedAttestationSignature(ZERO_ADDRESS, response)).to.throw( + InvalidAddress + ); - // Invalid domains - const { domain } = response; + // Invalid domains + const { domain } = response; - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, chainId: domain.chainId + 100n } } - }) - ).to.throw(InvalidDomain); + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, chainId: domain.chainId + 100n } } + }) + ).to.throw(InvalidDomain); - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } - }) - ).to.throw(InvalidDomain); + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } + }) + ).to.throw(InvalidDomain); - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } - }) - ).to.throw(InvalidDomain); + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } + }) + ).to.throw(InvalidDomain); - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, version: '9999.9999.9999' } } - }) - ).to.throw(InvalidDomain); + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, version: '9999.9999.9999' } } + }) + ).to.throw(InvalidDomain); - // Invalid types - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ - types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } - } - }) - ).to.throw(InvalidTypes); + // Invalid types + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ + types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } + } + }) + ).to.throw(InvalidTypes); - await expect(() => - delegated.verifyDelegatedAttestationSignature(senderAddress, { - ...response, - ...{ - types: { BAD: response.types.values } - } - }) - ).to.throw(InvalidTypes); - }); + await expect(() => + delegated.verifyDelegatedAttestationSignature(senderAddress, { + ...response, + ...{ + types: { BAD: response.types.values } + } + }) + ).to.throw(InvalidTypes); }); + }); - describe('revocation', () => { - it('should throw on offchain verification of invalid revocations', async () => { - const senderAddress = await sender.getAddress(); - const params = { - schema: schemaId, - uid: encodeBytes32String('123'), - value: 0n, - nonce: await eas.getNonce(senderAddress), - deadline: NO_EXPIRATION - }; + describe('revocation', () => { + it('should throw on offchain verification of invalid revocations', async () => { + const senderAddress = await sender.getAddress(); + const params = { + schema: schemaId, + uid: encodeBytes32String('123'), + value: 0n, + nonce: await eas.getNonce(senderAddress), + deadline: NO_EXPIRATION + }; - const response = await delegated.signDelegatedRevocation(params, sender); + const response = await delegated.signDelegatedRevocation(params, sender); - // Invalid attester - expect(() => delegated.verifyDelegatedRevocationSignature(ZERO_ADDRESS, response)).to.throw( - InvalidAddress - ); + // Invalid attester + expect(() => delegated.verifyDelegatedRevocationSignature(ZERO_ADDRESS, response)).to.throw( + InvalidAddress + ); - // Invalid domains - const { domain } = response; + // Invalid domains + const { domain } = response; - await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, chainId: domain.chainId + 100n } } - }) - ).to.throw(InvalidDomain); + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, chainId: domain.chainId + 100n } } + }) + ).to.throw(InvalidDomain); - await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } - }) - ).to.throw(InvalidDomain); + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } + }) + ).to.throw(InvalidDomain); - await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } - }) - ).to.throw(InvalidDomain); + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } + }) + ).to.throw(InvalidDomain); - await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, - ...{ domain: { ...domain, version: '9999.9999.9999' } } - }) - ).to.throw(InvalidDomain); + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ domain: { ...domain, version: '9999.9999.9999' } } + }) + ).to.throw(InvalidDomain); - // Invalid types - await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, - ...{ - types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } - } - }) - ).to.throw(InvalidTypes); + // Invalid types + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ + types: { [response.primaryType]: [{ name: 'schema', type: 'bytes32' }] } + } + }) + ).to.throw(InvalidTypes); - await expect(() => - delegated.verifyDelegatedRevocationSignature(senderAddress, { - ...response, - ...{ - types: { BAD: response.types.values } - } - }) - ).to.throw(InvalidTypes); - }); + await expect(() => + delegated.verifyDelegatedRevocationSignature(senderAddress, { + ...response, + ...{ + types: { BAD: response.types.values } + } + }) + ).to.throw(InvalidTypes); }); }); }); - } + }); - if (signatureTypes.includes(SignatureType.DelegatedProxy)) { + if (version !== EASVersion.Legacy) { describe('delegated proxy attestation handling/verification', () => { let delegatedProxy: DelegatedProxy; From 6648c48dcba9c344bd6448ad6b3c6b06a42daefc Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 16:47:51 +0100 Subject: [PATCH 05/12] Update the build --- dist/eas.d.ts | 3 + dist/eas.js | 227 +++++++++++++++++------- dist/eas.js.map | 2 +- dist/offchain/delegated.d.ts | 15 +- dist/offchain/delegated.js | 49 +++-- dist/offchain/delegated.js.map | 2 +- dist/offchain/offchain.d.ts | 11 +- dist/offchain/offchain.js | 4 +- dist/offchain/offchain.js.map | 2 +- dist/offchain/typed-data-handler.d.ts | 15 +- dist/offchain/typed-data-handler.js | 11 +- dist/offchain/typed-data-handler.js.map | 2 +- dist/offchain/versions.d.ts | 2 + dist/offchain/versions.js | 6 + dist/offchain/versions.js.map | 1 + dist/transaction.d.ts | 1 + dist/transaction.js | 3 + dist/transaction.js.map | 2 +- src/test.ts | 104 +++++++++++ 19 files changed, 357 insertions(+), 105 deletions(-) create mode 100644 dist/offchain/versions.d.ts create mode 100644 dist/offchain/versions.js create mode 100644 dist/offchain/versions.js.map create mode 100644 src/test.ts diff --git a/dist/eas.d.ts b/dist/eas.d.ts index 15e5fa3..7bc42af 100644 --- a/dist/eas.d.ts +++ b/dist/eas.d.ts @@ -26,6 +26,8 @@ export declare class EAS extends Base { private proxy?; private delegated?; private offchain?; + private version?; + private legacyEAS; constructor(address: string, options?: EASOptions); connect(signer: TransactionSigner): this; getVersion(): Promise; @@ -59,4 +61,5 @@ export declare class EAS extends Base { getRevokeTypeHash(): Promise; private setDelegated; private setOffchain; + private isLegacyContract; } diff --git a/dist/eas.js b/dist/eas.js index e675332..6140f00 100644 --- a/dist/eas.js +++ b/dist/eas.js @@ -3,16 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.EAS = void 0; const tslib_1 = require("tslib"); const eas_contracts_1 = require("@ethereum-attestation-service/eas-contracts"); +const eas_contracts_legacy_1 = require("@ethereum-attestation-service/eas-contracts-legacy"); +const semver_1 = tslib_1.__importDefault(require("semver")); const version_1 = require("./legacy/version"); const offchain_1 = require("./offchain"); const request_1 = require("./request"); const transaction_1 = require("./transaction"); const utils_1 = require("./utils"); +const LEGACY_VERSION = '1.1.0'; tslib_1.__exportStar(require("./request"), exports); class EAS extends transaction_1.Base { proxy; delegated; offchain; + version; + legacyEAS; constructor(address, options) { const { signer, proxy } = options || {}; super(new eas_contracts_1.EAS__factory(), address, signer); @@ -23,17 +28,24 @@ class EAS extends transaction_1.Base { if (proxy) { this.proxy = proxy; } + this.legacyEAS = new transaction_1.Base(new eas_contracts_legacy_1.EAS__factory(), address, signer); } // Connects the API to a specific signer connect(signer) { delete this.delegated; delete this.offchain; super.connect(signer); + if (this.legacyEAS) { + this.legacyEAS.connect(signer); + } return this; } // Returns the version of the contract async getVersion() { - return (await (0, version_1.legacyVersion)(this.contract)) ?? this.contract.version(); + if (this.version) { + return this.version; + } + return (this.version = (await (0, version_1.legacyVersion)(this.contract)) ?? (await this.contract.version())); } // Returns an existing schema by attestation UID getAttestation(uid) { @@ -85,20 +97,38 @@ class EAS extends transaction_1.Base { } // Attests to a specific schema via an EIP712 delegation request async attestByDelegation({ schema, data: { recipient = utils_1.ZERO_ADDRESS, data, expirationTime = request_1.NO_EXPIRATION, revocable = true, refUID = utils_1.ZERO_BYTES32, value = 0n }, signature, attester, deadline = request_1.NO_EXPIRATION }, overrides) { - const tx = await this.contract.attestByDelegation({ - schema, - data: { - recipient, - expirationTime, - revocable, - refUID, - data, - value - }, - signature, - attester, - deadline - }, { value, ...overrides }); + let tx; + if (await this.isLegacyContract()) { + tx = await this.legacyEAS.contract.attestByDelegation({ + schema, + data: { + recipient, + expirationTime, + revocable, + refUID, + data, + value + }, + signature, + attester + }, { value, ...overrides }); + } + else { + tx = await this.contract.attestByDelegation({ + schema, + data: { + recipient, + expirationTime, + revocable, + refUID, + data, + value + }, + signature, + attester, + deadline + }, { value, ...overrides }); + } // eslint-disable-next-line require-await return new transaction_1.Transaction(tx, async (receipt) => (0, utils_1.getUIDsFromAttestReceipt)(receipt)[0]); } @@ -128,28 +158,54 @@ class EAS extends transaction_1.Base { } // Multi-attests to multiple schemas via an EIP712 delegation requests async multiAttestByDelegation(requests, overrides) { - const multiAttestationRequests = requests.map((r) => ({ - schema: r.schema, - data: r.data.map((d) => ({ - recipient: d.recipient ?? utils_1.ZERO_ADDRESS, - expirationTime: d.expirationTime ?? request_1.NO_EXPIRATION, - revocable: d.revocable ?? true, - refUID: d.refUID ?? utils_1.ZERO_BYTES32, - data: d.data ?? utils_1.ZERO_BYTES32, - value: d.value ?? 0n - })), - signatures: r.signatures, - attester: r.attester, - deadline: r.deadline ?? request_1.NO_EXPIRATION - })); - const requestedValue = multiAttestationRequests.reduce((res, { data }) => { - const total = data.reduce((res, r) => res + r.value, 0n); - return res + total; - }, 0n); - const tx = await this.contract.multiAttestByDelegation(multiAttestationRequests, { - value: requestedValue, - ...overrides - }); + let tx; + if (await this.isLegacyContract()) { + const multiAttestationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + recipient: d.recipient ?? utils_1.ZERO_ADDRESS, + expirationTime: d.expirationTime ?? request_1.NO_EXPIRATION, + revocable: d.revocable ?? true, + refUID: d.refUID ?? utils_1.ZERO_BYTES32, + data: d.data ?? utils_1.ZERO_BYTES32, + value: d.value ?? 0n + })), + signatures: r.signatures, + attester: r.attester + })); + const requestedValue = multiAttestationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + tx = await this.legacyEAS.contract.multiAttestByDelegation(multiAttestationRequests, { + value: requestedValue, + ...overrides + }); + } + else { + const multiAttestationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + recipient: d.recipient ?? utils_1.ZERO_ADDRESS, + expirationTime: d.expirationTime ?? request_1.NO_EXPIRATION, + revocable: d.revocable ?? true, + refUID: d.refUID ?? utils_1.ZERO_BYTES32, + data: d.data ?? utils_1.ZERO_BYTES32, + value: d.value ?? 0n + })), + signatures: r.signatures, + attester: r.attester, + deadline: r.deadline ?? request_1.NO_EXPIRATION + })); + const requestedValue = multiAttestationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + tx = await this.contract.multiAttestByDelegation(multiAttestationRequests, { + value: requestedValue, + ...overrides + }); + } // eslint-disable-next-line require-await return new transaction_1.Transaction(tx, async (receipt) => (0, utils_1.getUIDsFromAttestReceipt)(receipt)); } @@ -160,16 +216,30 @@ class EAS extends transaction_1.Base { } // Revokes an existing attestation an EIP712 delegation request async revokeByDelegation({ schema, data: { uid, value = 0n }, signature, revoker, deadline = request_1.NO_EXPIRATION }, overrides) { - const tx = await this.contract.revokeByDelegation({ - schema, - data: { - uid, - value - }, - signature, - revoker, - deadline - }, { value, ...overrides }); + let tx; + if (await this.isLegacyContract()) { + tx = await this.legacyEAS.contract.revokeByDelegation({ + schema, + data: { + uid, + value + }, + signature, + revoker + }, { value, ...overrides }); + } + else { + tx = await this.contract.revokeByDelegation({ + schema, + data: { + uid, + value + }, + signature, + revoker, + deadline + }, { value, ...overrides }); + } return new transaction_1.Transaction(tx, async () => { }); } // Multi-revokes multiple attestations @@ -193,24 +263,46 @@ class EAS extends transaction_1.Base { } // Multi-revokes multiple attestations via an EIP712 delegation requests async multiRevokeByDelegation(requests, overrides) { - const multiRevocationRequests = requests.map((r) => ({ - schema: r.schema, - data: r.data.map((d) => ({ - uid: d.uid, - value: d.value ?? 0n - })), - signatures: r.signatures, - revoker: r.revoker, - deadline: r.deadline ?? request_1.NO_EXPIRATION - })); - const requestedValue = multiRevocationRequests.reduce((res, { data }) => { - const total = data.reduce((res, r) => res + r.value, 0n); - return res + total; - }, 0n); - const tx = await this.contract.multiRevokeByDelegation(multiRevocationRequests, { - value: requestedValue, - ...overrides - }); + let tx; + if (await this.isLegacyContract()) { + const multiRevocationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + uid: d.uid, + value: d.value ?? 0n + })), + signatures: r.signatures, + revoker: r.revoker + })); + const requestedValue = multiRevocationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + tx = await this.legacyEAS.contract.multiRevokeByDelegation(multiRevocationRequests, { + value: requestedValue, + ...overrides + }); + } + else { + const multiRevocationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + uid: d.uid, + value: d.value ?? 0n + })), + signatures: r.signatures, + revoker: r.revoker, + deadline: r.deadline ?? request_1.NO_EXPIRATION + })); + const requestedValue = multiRevocationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + tx = await this.contract.multiRevokeByDelegation(multiRevocationRequests, { + value: requestedValue, + ...overrides + }); + } return new transaction_1.Transaction(tx, async () => { }); } // Attests to a specific schema via an EIP712 delegation request using an external EIP712 proxy @@ -286,7 +378,7 @@ class EAS extends transaction_1.Base { async setDelegated() { this.delegated = new offchain_1.Delegated({ address: await this.contract.getAddress(), - version: await this.getVersion(), + domainSeparator: await this.getDomainSeparator(), chainId: await this.getChainId() }); return this.delegated; @@ -300,6 +392,9 @@ class EAS extends transaction_1.Base { }, offchain_1.OffchainAttestationVersion.Version2, this); return this.offchain; } + async isLegacyContract() { + return semver_1.default.lte(await this.getVersion(), LEGACY_VERSION); + } } exports.EAS = EAS; //# sourceMappingURL=eas.js.map \ No newline at end of file diff --git a/dist/eas.js.map b/dist/eas.js.map index 98e02f2..6f1053c 100644 --- a/dist/eas.js.map +++ b/dist/eas.js.map @@ -1 +1 @@ -{"version":3,"file":"eas.js","sourceRoot":"","sources":["../src/eas.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"eas.js","sourceRoot":"","sources":["../src/eas.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/offchain/delegated.d.ts b/dist/offchain/delegated.d.ts index 61087d8..0724452 100644 --- a/dist/offchain/delegated.d.ts +++ b/dist/offchain/delegated.d.ts @@ -1,7 +1,6 @@ -import { EIP712MessageTypes, EIP712Params, EIP712Response, PartialTypedDataConfig, TypeDataSigner, TypedDataHandler } from './typed-data-handler'; -export { EIP712MessageTypes, EIP712TypedData, EIP712Request, EIP712Response, PartialTypedDataConfig, Signature } from './typed-data-handler'; -export declare const EIP712_NAME = "EAS"; -export declare enum DelegatedAttestationVersion { +import { EIP712MessageTypes, EIP712Params, EIP712Response, TypeDataSigner, TypedDataHandler } from './typed-data-handler'; +export { EIP712MessageTypes, EIP712TypedData, EIP712Request, EIP712Response, Signature } from './typed-data-handler'; +declare enum DelegatedAttestationVersion { Legacy = 0, Version1 = 1, Version2 = 2 @@ -22,11 +21,17 @@ export type EIP712RevocationParams = EIP712Params & { value: bigint; deadline: bigint; }; +interface DelegatedConfig { + address: string; + chainId: bigint; + version?: string; + domainSeparator?: string; +} export declare class Delegated extends TypedDataHandler { readonly version: DelegatedAttestationVersion; private readonly attestType; private readonly revokeType; - constructor(config: PartialTypedDataConfig); + constructor(config: DelegatedConfig); signDelegatedAttestation(params: EIP712AttestationParams, signer: TypeDataSigner): Promise>; verifyDelegatedAttestationSignature(attester: string, response: EIP712Response): boolean; signDelegatedRevocation(params: EIP712RevocationParams, signer: TypeDataSigner): Promise>; diff --git a/dist/offchain/delegated.js b/dist/offchain/delegated.js index 0647c46..8f7389a 100644 --- a/dist/offchain/delegated.js +++ b/dist/offchain/delegated.js @@ -1,17 +1,17 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.Delegated = exports.DelegatedAttestationVersion = exports.EIP712_NAME = void 0; +exports.Delegated = void 0; const tslib_1 = require("tslib"); const omit_1 = tslib_1.__importDefault(require("lodash/omit")); const semver_1 = tslib_1.__importDefault(require("semver")); const typed_data_handler_1 = require("./typed-data-handler"); -exports.EIP712_NAME = 'EAS'; +const versions_1 = require("./versions"); var DelegatedAttestationVersion; (function (DelegatedAttestationVersion) { DelegatedAttestationVersion[DelegatedAttestationVersion["Legacy"] = 0] = "Legacy"; DelegatedAttestationVersion[DelegatedAttestationVersion["Version1"] = 1] = "Version1"; DelegatedAttestationVersion[DelegatedAttestationVersion["Version2"] = 2] = "Version2"; -})(DelegatedAttestationVersion || (exports.DelegatedAttestationVersion = DelegatedAttestationVersion = {})); +})(DelegatedAttestationVersion || (DelegatedAttestationVersion = {})); const DELEGATED_ATTESTATION_TYPES = { [DelegatedAttestationVersion.Legacy]: { typedSignature: 'Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 nonce)', @@ -109,11 +109,34 @@ class Delegated extends typed_data_handler_1.TypedDataHandler { attestType; revokeType; constructor(config) { - super({ ...config, name: exports.EIP712_NAME }); - if (semver_1.default.lt(config.version, '1.2.0')) { + let { version } = config; + if (!version) { + const { domainSeparator } = config; + if (!domainSeparator) { + throw new Error('Neither EIP712 version or domain separator were provided'); + } + // If only the domain separator was provided, let's try to deduce the version accordingly. + for (const eip712Version of versions_1.EIP712_VERSIONS) { + if (domainSeparator === + typed_data_handler_1.TypedDataHandler.getDomainSeparator({ + address: config.address, + name: versions_1.EIP712_NAME, + version: eip712Version, + chainId: config.chainId + })) { + version = eip712Version; + break; + } + } + if (!version) { + throw new Error(`Unable to find version for domain separator: ${domainSeparator}`); + } + } + super({ ...config, version, name: versions_1.EIP712_NAME }); + if (semver_1.default.lt(version, '1.2.0')) { this.version = DelegatedAttestationVersion.Legacy; } - else if (semver_1.default.lt(config.version, '1.3.0')) { + else if (semver_1.default.lt(version, '1.3.0')) { this.version = DelegatedAttestationVersion.Version1; } else { @@ -127,9 +150,10 @@ class Delegated extends typed_data_handler_1.TypedDataHandler { attester: await signer.getAddress(), ...params }; - if (this.version === DelegatedAttestationVersion.Legacy) { - // Committing to a value or to a deadline isn't supported for legacy attestations, therefore they will be ignored - effectiveParams = (0, omit_1.default)(params, ['value', 'deadline']); + switch (this.version) { + case DelegatedAttestationVersion.Legacy: + effectiveParams = (0, omit_1.default)(params, ['value', 'deadline']); + break; } return this.signTypedDataRequest(effectiveParams, { domain: this.getDomainTypedData(), @@ -149,9 +173,10 @@ class Delegated extends typed_data_handler_1.TypedDataHandler { revoker: await signer.getAddress(), ...params }; - if (this.version === DelegatedAttestationVersion.Legacy) { - // Committing to a value or to a deadline isn't supported for legacy revocations, therefore they will be ignored - effectiveParams = (0, omit_1.default)(params, ['value', 'deadline']); + switch (this.version) { + case DelegatedAttestationVersion.Legacy: + effectiveParams = (0, omit_1.default)(params, ['value', 'deadline']); + break; } return this.signTypedDataRequest(effectiveParams, { domain: this.getDomainTypedData(), diff --git a/dist/offchain/delegated.js.map b/dist/offchain/delegated.js.map index d967edf..9334481 100644 --- a/dist/offchain/delegated.js.map +++ b/dist/offchain/delegated.js.map @@ -1 +1 @@ -{"version":3,"file":"delegated.js","sourceRoot":"","sources":["../../src/offchain/delegated.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"delegated.js","sourceRoot":"","sources":["../../src/offchain/delegated.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/offchain/offchain.d.ts b/dist/offchain/offchain.d.ts index fbadbf3..f9ea917 100644 --- a/dist/offchain/offchain.d.ts +++ b/dist/offchain/offchain.d.ts @@ -1,6 +1,6 @@ import { EAS } from '../eas'; -import { DomainTypedData, EIP712MessageTypes, EIP712Params, EIP712Response, EIP712Types, PartialTypedDataConfig, TypeDataSigner, TypedDataHandler } from './typed-data-handler'; -export { EIP712Request, PartialTypedDataConfig, EIP712MessageTypes } from './typed-data-handler'; +import { DomainTypedData, EIP712MessageTypes, EIP712Params, EIP712Response, EIP712Types, TypeDataSigner, TypedDataHandler } from './typed-data-handler'; +export { EIP712Request, EIP712MessageTypes } from './typed-data-handler'; export interface OffchainAttestationType extends EIP712Types { domain: string; } @@ -32,12 +32,17 @@ export interface SignedOffchainAttestation extends EIP712Response; diff --git a/dist/offchain/offchain.js b/dist/offchain/offchain.js index 1f44658..6354739 100644 --- a/dist/offchain/offchain.js +++ b/dist/offchain/offchain.js @@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Offchain = exports.SALT_SIZE = exports.OFFCHAIN_ATTESTATION_TYPES = exports.OffchainAttestationVersion = void 0; const ethers_1 = require("ethers"); const utils_1 = require("../utils"); -const delegated_1 = require("./delegated"); const typed_data_handler_1 = require("./typed-data-handler"); +const versions_1 = require("./versions"); var OffchainAttestationVersion; (function (OffchainAttestationVersion) { OffchainAttestationVersion[OffchainAttestationVersion["Legacy"] = 0] = "Legacy"; @@ -110,7 +110,7 @@ class Offchain extends typed_data_handler_1.TypedDataHandler { if (version > OffchainAttestationVersion.Version2) { throw new Error('Unsupported version'); } - super({ ...config, name: delegated_1.EIP712_NAME }); + super({ ...config, name: versions_1.EIP712_NAME }); this.version = version; this.verificationTypes = exports.OFFCHAIN_ATTESTATION_TYPES[this.version]; this.signingType = this.verificationTypes[0]; diff --git a/dist/offchain/offchain.js.map b/dist/offchain/offchain.js.map index 7c0d3dc..3376c0c 100644 --- a/dist/offchain/offchain.js.map +++ b/dist/offchain/offchain.js.map @@ -1 +1 @@ -{"version":3,"file":"offchain.js","sourceRoot":"","sources":["../../src/offchain/offchain.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"offchain.js","sourceRoot":"","sources":["../../src/offchain/offchain.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/offchain/typed-data-handler.d.ts b/dist/offchain/typed-data-handler.d.ts index 421f41f..fb754df 100644 --- a/dist/offchain/typed-data-handler.d.ts +++ b/dist/offchain/typed-data-handler.d.ts @@ -2,14 +2,6 @@ import { Addressable, TypedDataDomain, TypedDataField } from 'ethers'; export interface TypeDataSigner extends Addressable { signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise; } -export interface PartialTypedDataConfig { - address: string; - version: string; - chainId: bigint; -} -export interface TypedDataConfig extends PartialTypedDataConfig { - name: string; -} export interface DomainTypedData { chainId: bigint; name: string; @@ -62,10 +54,17 @@ export declare class InvalidTypes extends Error { } export declare class InvalidAddress extends Error { } +export interface TypedDataConfig { + address: string; + version: string; + chainId: bigint; + name: string; +} export declare abstract class TypedDataHandler { config: TypedDataConfig; constructor(config: TypedDataConfig); getDomainSeparator(): string; + static getDomainSeparator(config: TypedDataConfig): string; getDomainTypedData(): DomainTypedData; signTypedDataRequest(params: P, types: EIP712TypedData, signer: TypeDataSigner): Promise>; verifyTypedDataRequestSignature(attester: string, response: EIP712Response, types: EIP712Types, strict?: boolean): boolean; diff --git a/dist/offchain/typed-data-handler.js b/dist/offchain/typed-data-handler.js index 3ed096a..cf82d5c 100644 --- a/dist/offchain/typed-data-handler.js +++ b/dist/offchain/typed-data-handler.js @@ -24,12 +24,15 @@ class TypedDataHandler { this.config = config; } getDomainSeparator() { + return TypedDataHandler.getDomainSeparator(this.config); + } + static getDomainSeparator(config) { return (0, ethers_1.keccak256)(ethers_1.AbiCoder.defaultAbiCoder().encode(['bytes32', 'bytes32', 'bytes32', 'uint256', 'address'], [ (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(exports.EIP712_DOMAIN)), - (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(this.config.name)), - (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(this.config.version)), - this.config.chainId, - this.config.address + (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(config.name)), + (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(config.version)), + config.chainId, + config.address ])); } getDomainTypedData() { diff --git a/dist/offchain/typed-data-handler.js.map b/dist/offchain/typed-data-handler.js.map index cfa0d9c..94cde81 100644 --- a/dist/offchain/typed-data-handler.js.map +++ b/dist/offchain/typed-data-handler.js.map @@ -1 +1 @@ -{"version":3,"file":"typed-data-handler.js","sourceRoot":"","sources":["../../src/offchain/typed-data-handler.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"typed-data-handler.js","sourceRoot":"","sources":["../../src/offchain/typed-data-handler.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/offchain/versions.d.ts b/dist/offchain/versions.d.ts new file mode 100644 index 0000000..93e26ba --- /dev/null +++ b/dist/offchain/versions.d.ts @@ -0,0 +1,2 @@ +export declare const EIP712_NAME = "EAS"; +export declare const EIP712_VERSIONS: string[]; diff --git a/dist/offchain/versions.js b/dist/offchain/versions.js new file mode 100644 index 0000000..365a212 --- /dev/null +++ b/dist/offchain/versions.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EIP712_VERSIONS = exports.EIP712_NAME = void 0; +exports.EIP712_NAME = 'EAS'; +exports.EIP712_VERSIONS = ['0.26', '1.0.0', '1.0.1', '1.0.2', '1.1.0', '1.2.0', '1.3.0', '1.4.0']; +//# sourceMappingURL=versions.js.map \ No newline at end of file diff --git a/dist/offchain/versions.js.map b/dist/offchain/versions.js.map new file mode 100644 index 0000000..d2229ef --- /dev/null +++ b/dist/offchain/versions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/offchain/versions.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,KAAK,CAAC;AACpB,QAAA,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/transaction.d.ts b/dist/transaction.d.ts index 2cbe4d3..6ddb439 100644 --- a/dist/transaction.d.ts +++ b/dist/transaction.d.ts @@ -13,6 +13,7 @@ export declare class Transaction { } export declare class Base { contract: C; + protected signer?: TransactionSigner; constructor(factory: ContractFactory, address: string, signer?: TransactionSigner); connect(signer: TransactionSigner): this; getChainId(): Promise; diff --git a/dist/transaction.js b/dist/transaction.js index 87fbd7b..c9fdbfc 100644 --- a/dist/transaction.js +++ b/dist/transaction.js @@ -19,15 +19,18 @@ class Transaction { exports.Transaction = Transaction; class Base { contract; + signer; constructor(factory, address, signer) { this.contract = factory.attach(address); if (signer) { this.connect(signer); + this.signer = signer; } } // Connects the API to a specific signer connect(signer) { this.contract = this.contract.connect(signer); + this.signer = signer; return this; } // Gets the chain ID diff --git a/dist/transaction.js.map b/dist/transaction.js.map index e103fa4..cbeecb9 100644 --- a/dist/transaction.js.map +++ b/dist/transaction.js.map @@ -1 +1 @@ -{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":";;;AAkBA,MAAa,WAAW;IACN,EAAE,CAAsB;IACvB,YAAY,CAA8C;IAE3E,YAAY,EAAuB,EAAE,YAAyD;QAC5F,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,aAAsB;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAjBD,kCAiBC;AAED,MAAa,IAAI;IACR,QAAQ,CAAI;IAEnB,YAAY,OAAwB,EAAE,OAAe,EAAE,MAA0B;QAC/E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAM,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,wCAAwC;IACjC,OAAO,CAAC,MAAyB;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAmC,CAAM,CAAC;QAEhF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IACb,KAAK,CAAC,UAAU;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;IAC/C,CAAC;CACF;AA1BD,oBA0BC"} \ No newline at end of file +{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":";;;AAkBA,MAAa,WAAW;IACN,EAAE,CAAsB;IACvB,YAAY,CAA8C;IAE3E,YAAY,EAAuB,EAAE,YAAyD;QAC5F,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,aAAsB;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAjBD,kCAiBC;AAED,MAAa,IAAI;IACR,QAAQ,CAAI;IACT,MAAM,CAAqB;IAErC,YAAY,OAAwB,EAAE,OAAe,EAAE,MAA0B;QAC/E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAM,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAErB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,wCAAwC;IACjC,OAAO,CAAC,MAAyB;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAmC,CAAM,CAAC;QAEhF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IACb,KAAK,CAAC,UAAU;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;IAC/C,CAAC;CACF;AA/BD,oBA+BC"} \ No newline at end of file diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..9013021 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,104 @@ +import { encodeBytes32String, ethers } from 'ethers'; +import { EAS, NO_EXPIRATION, SchemaEncoder, ZERO_BYTES32 } from './'; + +const url = 'https://sepolia.optimism.io'; + +// Set up your ethers provider and signer +const provider = new ethers.JsonRpcProvider(url, undefined, { + staticNetwork: true +}); +const attesterPrivateKey = '0x78980761ee12352fd1d989f71832039240018a054ea003f94674f78ade6f57a1'; +const payerPrivateKey = '0x5baf32bcc74557018b6c3d960925994103cdd99da17583ee04e20da88e473f3b'; +const EASContractAddress = '0x4200000000000000000000000000000000000021'; + +const attesterEAS = new EAS(EASContractAddress); +const attesterWallet = new ethers.Wallet(attesterPrivateKey, provider); +attesterEAS.connect(attesterWallet); + +const payerEas = new EAS(EASContractAddress); +const payerWallet = new ethers.Wallet(payerPrivateKey, provider); +payerEas.connect(payerWallet); + +async function go() { + console.log('version', await payerEas.getVersion()); + console.log('domainSeparator', await payerEas.getDomainSeparator()); + + const { recipient, meetingId, meetingType, startTime, endTime } = { + recipient: ethers.Wallet.createRandom().address, + meetingId: 'meetingId', + meetingType: 1, + startTime: 1630000000, + endTime: 1630000000 + }; + + try { + const schemaEncoder = new SchemaEncoder('bytes32 MeetingId,uint8 MeetingType,uint32 StartTime,uint32 EndTime'); + + const encodedData = schemaEncoder.encodeData([ + { + name: 'MeetingId', + value: encodeBytes32String(meetingId), + type: 'bytes32' + }, + { name: 'MeetingType', value: meetingType, type: 'uint8' }, + { name: 'StartTime', value: startTime, type: 'uint32' }, + { name: 'EndTime', value: endTime, type: 'uint32' } + ]); + const schemaUID = '0x05c93054d8326438fe4f859f9382540f37677a5c87020037b9ec9554b3daff0f'; + + try { + const delegated = await attesterEAS.getDelegated(); + + console.log('delegated obj', delegated); + console.log('delegated domain separator', delegated.getDomainSeparator()); + console.log('delegated domain data', delegated.getDomainTypedData()); + + const delegatedAttestation = await delegated.signDelegatedAttestation( + { + schema: schemaUID, + recipient: recipient, + expirationTime: NO_EXPIRATION, + revocable: false, + refUID: ZERO_BYTES32, + data: encodedData, + value: BigInt(0), + deadline: BigInt(Math.round(Date.now() / 1000) + 60 * 60 * 24), + nonce: await attesterEAS.getNonce(attesterWallet.address) + }, + attesterWallet + ); + + console.log('delegatedAttestation', delegatedAttestation); + console.log('verifying...'); + const verify = await delegated.verifyDelegatedAttestationSignature( + await attesterWallet.getAddress(), + delegatedAttestation + ); + console.log('verify obj', verify); + console.log('attesterWallet.address', attesterWallet.address); + + const tx = await payerEas.attestByDelegation({ + schema: schemaUID, + data: { + recipient: delegatedAttestation.message.recipient, + expirationTime: delegatedAttestation.message.expirationTime, + revocable: delegatedAttestation.message.revocable, + refUID: delegatedAttestation.message.refUID, + data: encodedData, + value: delegatedAttestation.message.value + }, + signature: delegatedAttestation.signature, + attester: attesterWallet.address, + deadline: delegatedAttestation.message.deadline + }); + const newAttestationUID = await tx.wait(); + console.log('New attestation UID:', newAttestationUID); + } catch (error) { + console.error('Error:', error); + } + } catch (error) { + console.error('Error:', error); + } +} + +go(); From b0476545acd498b0d54c90e258946893aa5ea684 Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 17:56:44 +0100 Subject: [PATCH 06/12] Update build --- dist/eas.d.ts | 1 + dist/eas.js | 440 ++++ dist/eas.js.map | 1 + dist/transaction.js.map | 1 + pnpm-lock.yaml | 4778 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 5221 insertions(+) create mode 100644 dist/eas.js create mode 100644 dist/eas.js.map create mode 100644 dist/transaction.js.map create mode 100644 pnpm-lock.yaml diff --git a/dist/eas.d.ts b/dist/eas.d.ts index bfc6ee8..7bc42af 100644 --- a/dist/eas.d.ts +++ b/dist/eas.d.ts @@ -4,6 +4,7 @@ import { EIP712Proxy } from './eip712-proxy'; import { Delegated, Offchain } from './offchain'; import { AttestationRequest, DelegatedAttestationRequest, DelegatedProxyAttestationRequest, DelegatedProxyRevocationRequest, DelegatedRevocationRequest, MultiAttestationRequest, MultiDelegatedAttestationRequest, MultiDelegatedProxyAttestationRequest, MultiDelegatedProxyRevocationRequest, MultiDelegatedRevocationRequest, MultiRevocationRequest, RevocationRequest } from './request'; import { Base, Transaction, TransactionSigner } from './transaction'; +export { Overrides } from 'ethers'; export * from './request'; export interface Attestation { uid: string; diff --git a/dist/eas.js b/dist/eas.js new file mode 100644 index 0000000..cdb8037 --- /dev/null +++ b/dist/eas.js @@ -0,0 +1,440 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EAS = void 0; +const tslib_1 = require("tslib"); +const eas_contracts_1 = require("@ethereum-attestation-service/eas-contracts"); +const eas_contracts_legacy_1 = require("@ethereum-attestation-service/eas-contracts-legacy"); +const semver_1 = tslib_1.__importDefault(require("semver")); +const version_1 = require("./legacy/version"); +const offchain_1 = require("./offchain"); +const request_1 = require("./request"); +const transaction_1 = require("./transaction"); +const utils_1 = require("./utils"); +const LEGACY_VERSION = '1.1.0'; +tslib_1.__exportStar(require("./request"), exports); +class EAS extends transaction_1.Base { + proxy; + delegated; + offchain; + version; + legacyEAS; + constructor(address, options) { + const { signer, proxy } = options || {}; + super(new eas_contracts_1.EAS__factory(), address, signer); + // Check for ethers v6 compatibility + if (!this.contract.getAddress) { + throw new Error('Incompatible ethers version detect. Make sure to use the SDK with ethers v6 or later'); + } + this.signer = signer; + if (proxy) { + this.proxy = proxy; + } + this.legacyEAS = new transaction_1.Base(new eas_contracts_legacy_1.EAS__factory(), address, signer); + } + // Connects the API to a specific signer + connect(signer) { + delete this.delegated; + delete this.offchain; + super.connect(signer); + if (this.legacyEAS) { + this.legacyEAS.connect(signer); + } + return this; + } + // Returns the version of the contract + async getVersion() { + if (this.version) { + return this.version; + } + return (this.version = (await (0, version_1.legacyVersion)(this.contract)) ?? (await this.contract.version())); + } + // Returns an existing schema by attestation UID + getAttestation(uid) { + return this.contract.getAttestation(uid); + } + // Returns whether an attestation is valid + isAttestationValid(uid) { + return this.contract.isAttestationValid(uid); + } + // Returns whether an attestation has been revoked + async isAttestationRevoked(uid) { + const attestation = await this.contract.getAttestation(uid); + if (attestation.uid === utils_1.ZERO_BYTES32) { + throw new Error('Invalid attestation'); + } + return attestation.revocationTime != request_1.NO_EXPIRATION; + } + // Returns the timestamp that the specified data was timestamped with + getTimestamp(data) { + return this.contract.getTimestamp(data); + } + // Returns the timestamp that the specified data was timestamped with + getRevocationOffchain(user, uid) { + return this.contract.getRevokeOffchain(user, uid); + } + // Returns the EIP712 proxy + getEIP712Proxy() { + return this.proxy; + } + // Returns the delegated attestations helper + getDelegated() { + if (this.delegated) { + return this.delegated; + } + return this.setDelegated(); + } + // Returns the offchain attestations helper + getOffchain() { + if (this.offchain) { + return this.offchain; + } + return this.setOffchain(); + } + // Attests to a specific schema + async attest({ schema, data: { recipient = utils_1.ZERO_ADDRESS, data, expirationTime = request_1.NO_EXPIRATION, revocable = true, refUID = utils_1.ZERO_BYTES32, value = 0n } }, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + return new transaction_1.Transaction(await this.contract.attest.populateTransaction({ schema, data: { recipient, expirationTime, revocable, refUID, data, value } }, { value, ...overrides }), this.signer, + // eslint-disable-next-line require-await + async (receipt) => (0, utils_1.getUIDsFromAttestReceipt)(receipt)[0]); + } + // Attests to a specific schema via an EIP712 delegation request + async attestByDelegation({ schema, data: { recipient = utils_1.ZERO_ADDRESS, data, expirationTime = request_1.NO_EXPIRATION, revocable = true, refUID = utils_1.ZERO_BYTES32, value = 0n }, signature, attester, deadline = request_1.NO_EXPIRATION }, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + let tx; + if (await this.isLegacyContract()) { + tx = await this.legacyEAS.contract.attestByDelegation.populateTransaction({ + schema, + data: { + recipient, + expirationTime, + revocable, + refUID, + data, + value + }, + signature, + attester + }, { value, ...overrides }); + } + else { + tx = await this.contract.attestByDelegation.populateTransaction({ + schema, + data: { + recipient, + expirationTime, + revocable, + refUID, + data, + value + }, + signature, + attester, + deadline + }, { value, ...overrides }); + } + return new transaction_1.Transaction(tx, this.signer, + // eslint-disable-next-line require-await + async (receipt) => (0, utils_1.getUIDsFromAttestReceipt)(receipt)[0]); + } + // Multi-attests to multiple schemas + async multiAttest(requests, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + const multiAttestationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + recipient: d.recipient ?? utils_1.ZERO_ADDRESS, + expirationTime: d.expirationTime ?? request_1.NO_EXPIRATION, + revocable: d.revocable ?? true, + refUID: d.refUID ?? utils_1.ZERO_BYTES32, + data: d.data ?? utils_1.ZERO_BYTES32, + value: d.value ?? 0n + })) + })); + const requestedValue = multiAttestationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + return new transaction_1.Transaction(await this.contract.multiAttest.populateTransaction(multiAttestationRequests, { + value: requestedValue, + ...overrides + }), this.signer, + // eslint-disable-next-line require-await + async (receipt) => (0, utils_1.getUIDsFromAttestReceipt)(receipt)); + } + // Multi-attests to multiple schemas via an EIP712 delegation requests + async multiAttestByDelegation(requests, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + let tx; + if (await this.isLegacyContract()) { + const multiAttestationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + recipient: d.recipient ?? utils_1.ZERO_ADDRESS, + expirationTime: d.expirationTime ?? request_1.NO_EXPIRATION, + revocable: d.revocable ?? true, + refUID: d.refUID ?? utils_1.ZERO_BYTES32, + data: d.data ?? utils_1.ZERO_BYTES32, + value: d.value ?? 0n + })), + signatures: r.signatures, + attester: r.attester, + deadline: r.deadline ?? request_1.NO_EXPIRATION + })); + const requestedValue = multiAttestationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + tx = await this.legacyEAS.contract.multiAttestByDelegation.populateTransaction(multiAttestationRequests, { + value: requestedValue, + ...overrides + }); + } + else { + const multiAttestationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + recipient: d.recipient ?? utils_1.ZERO_ADDRESS, + expirationTime: d.expirationTime ?? request_1.NO_EXPIRATION, + revocable: d.revocable ?? true, + refUID: d.refUID ?? utils_1.ZERO_BYTES32, + data: d.data ?? utils_1.ZERO_BYTES32, + value: d.value ?? 0n + })), + signatures: r.signatures, + attester: r.attester, + deadline: r.deadline ?? request_1.NO_EXPIRATION + })); + const requestedValue = multiAttestationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + tx = await this.contract.multiAttestByDelegation.populateTransaction(multiAttestationRequests, { + value: requestedValue, + ...overrides + }); + } + return new transaction_1.Transaction(tx, this.signer, + // eslint-disable-next-line require-await + async (receipt) => (0, utils_1.getUIDsFromAttestReceipt)(receipt)); + } + // Revokes an existing attestation + async revoke({ schema, data: { uid, value = 0n } }, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + return new transaction_1.Transaction(await this.contract.revoke.populateTransaction({ schema, data: { uid, value } }, { value, ...overrides }), this.signer, async () => { }); + } + // Revokes an existing attestation an EIP712 delegation request + async revokeByDelegation({ schema, data: { uid, value = 0n }, signature, revoker, deadline = request_1.NO_EXPIRATION }, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + let tx; + if (await this.isLegacyContract()) { + tx = await this.legacyEAS.contract.revokeByDelegation.populateTransaction({ + schema, + data: { + uid, + value + }, + signature, + revoker + }, { value, ...overrides }); + } + else { + tx = await this.contract.revokeByDelegation.populateTransaction({ + schema, + data: { + uid, + value + }, + signature, + revoker, + deadline + }, { value, ...overrides }); + } + return new transaction_1.Transaction(tx, this.signer, async () => { }); + } + // Multi-revokes multiple attestations + async multiRevoke(requests, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + const multiRevocationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + uid: d.uid, + value: d.value ?? 0n + })) + })); + const requestedValue = multiRevocationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + return new transaction_1.Transaction(await this.contract.multiRevoke.populateTransaction(multiRevocationRequests, { + value: requestedValue, + ...overrides + }), this.signer, async () => { }); + } + // Multi-revokes multiple attestations via an EIP712 delegation requests + async multiRevokeByDelegation(requests, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + if (!this.signer) { + throw new Error('Invalid signer'); + } + let tx; + if (await this.isLegacyContract()) { + const multiRevocationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + uid: d.uid, + value: d.value ?? 0n + })), + signatures: r.signatures, + revoker: r.revoker + })); + const requestedValue = multiRevocationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + tx = await this.legacyEAS.contract.multiRevokeByDelegation.populateTransaction(multiRevocationRequests, { + value: requestedValue, + ...overrides + }); + } + else { + const multiRevocationRequests = requests.map((r) => ({ + schema: r.schema, + data: r.data.map((d) => ({ + uid: d.uid, + value: d.value ?? 0n + })), + signatures: r.signatures, + revoker: r.revoker, + deadline: r.deadline ?? request_1.NO_EXPIRATION + })); + const requestedValue = multiRevocationRequests.reduce((res, { data }) => { + const total = data.reduce((res, r) => res + r.value, 0n); + return res + total; + }, 0n); + tx = await this.contract.multiRevokeByDelegation.populateTransaction(multiRevocationRequests, { + value: requestedValue, + ...overrides + }); + } + return new transaction_1.Transaction(tx, this.signer, async () => { }); + } + // Attests to a specific schema via an EIP712 delegation request using an external EIP712 proxy + attestByDelegationProxy(request, overrides) { + if (!this.proxy) { + throw new Error("Proxy wasn't set"); + } + return this.proxy.attestByDelegationProxy(request, overrides); + } + // Multi-attests to multiple schemas via an EIP712 delegation requests using an external EIP712 proxy + multiAttestByDelegationProxy(requests, overrides) { + if (!this.proxy) { + throw new Error("Proxy wasn't set"); + } + return this.proxy.multiAttestByDelegationProxy(requests, overrides); + } + // Revokes an existing attestation an EIP712 delegation request using an external EIP712 proxy + revokeByDelegationProxy(request, overrides) { + if (!this.proxy) { + throw new Error("Proxy wasn't set"); + } + return this.proxy.revokeByDelegationProxy(request, overrides); + } + // Multi-revokes multiple attestations via an EIP712 delegation requests using an external EIP712 proxy + multiRevokeByDelegationProxy(requests, overrides) { + if (!this.proxy) { + throw new Error("Proxy wasn't set"); + } + return this.proxy.multiRevokeByDelegationProxy(requests, overrides); + } + // Timestamps the specified bytes32 data + async timestamp(data, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + return new transaction_1.Transaction(await this.contract.timestamp.populateTransaction(data, overrides ?? {}), this.signer, + // eslint-disable-next-line require-await + async (receipt) => (0, utils_1.getTimestampFromTimestampReceipt)(receipt)[0]); + } + // Timestamps the specified multiple bytes32 data + async multiTimestamp(data, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + return new transaction_1.Transaction(await this.contract.multiTimestamp.populateTransaction(data, overrides ?? {}), this.signer, + // eslint-disable-next-line require-await + async (receipt) => (0, utils_1.getTimestampFromTimestampReceipt)(receipt)); + } + // Revokes the specified offchain attestation UID + async revokeOffchain(uid, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + return new transaction_1.Transaction(await this.contract.revokeOffchain.populateTransaction(uid, overrides ?? {}), this.signer, + // eslint-disable-next-line require-await + async (receipt) => (0, utils_1.getTimestampFromOffchainRevocationReceipt)(receipt)[0]); + } + // Revokes the specified multiple offchain attestation UIDs + async multiRevokeOffchain(uids, overrides) { + if (!this.signer) { + throw new Error('Invalid signer'); + } + return new transaction_1.Transaction(await this.contract.multiRevokeOffchain.populateTransaction(uids, overrides ?? {}), this.signer, + // eslint-disable-next-line require-await + async (receipt) => (0, utils_1.getTimestampFromOffchainRevocationReceipt)(receipt)); + } + // Returns the domain separator used in the encoding of the signatures for attest, and revoke + getDomainSeparator() { + return this.contract.getDomainSeparator(); + } + // Returns the current nonce per-account. + getNonce(address) { + return this.contract.getNonce(address); + } + // Returns the EIP712 type hash for the attest function + getAttestTypeHash() { + return this.contract.getAttestTypeHash(); + } + // Returns the EIP712 type hash for the revoke function + getRevokeTypeHash() { + return this.contract.getRevokeTypeHash(); + } + // Sets the delegated attestations helper + async setDelegated() { + this.delegated = new offchain_1.Delegated({ + address: await this.contract.getAddress(), + domainSeparator: await this.getDomainSeparator(), + chainId: await this.getChainId() + }); + return this.delegated; + } + // Sets the offchain attestations helper + async setOffchain() { + this.offchain = new offchain_1.Offchain({ + address: await this.contract.getAddress(), + version: await this.getVersion(), + chainId: await this.getChainId() + }, offchain_1.OffchainAttestationVersion.Version2, this); + return this.offchain; + } + async isLegacyContract() { + return semver_1.default.lte(await this.getVersion(), LEGACY_VERSION); + } +} +exports.EAS = EAS; +//# sourceMappingURL=eas.js.map \ No newline at end of file diff --git a/dist/eas.js.map b/dist/eas.js.map new file mode 100644 index 0000000..122cfc2 --- /dev/null +++ b/dist/eas.js.map @@ -0,0 +1 @@ +{"version":3,"file":"eas.js","sourceRoot":"","sources":["../src/eas.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/transaction.js.map b/dist/transaction.js.map new file mode 100644 index 0000000..226ee3d --- /dev/null +++ b/dist/transaction.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":";;;AAkBA,MAAa,WAAW;IACN,IAAI,CAAsB;IACzB,MAAM,CAAoB;IAC1B,YAAY,CAA8C;IAE3E,YACE,IAAyB,EACzB,MAAyB,EACzB,YAAyD;QAEzD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,aAAsB;QACtC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAxBD,kCAwBC;AAED,MAAa,IAAI;IACR,QAAQ,CAAI;IACT,MAAM,CAAqB;IAErC,YAAY,OAAwB,EAAE,OAAe,EAAE,MAA0B;QAC/E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAM,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAErB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,wCAAwC;IACjC,OAAO,CAAC,MAAyB;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAmC,CAAM,CAAC;QAEhF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IACb,KAAK,CAAC,UAAU;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;IAC/C,CAAC;CACF;AA/BD,oBA+BC"} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..c20d374 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4778 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@ethereum-attestation-service/eas-contracts': + specifier: 1.3.7 + version: 1.3.7(ts-node@10.9.2)(typescript@5.4.2) + '@ethereum-attestation-service/eas-contracts-legacy': + specifier: npm:@ethereum-attestation-service/eas-contracts@1.0.0-beta.0 + version: /@ethereum-attestation-service/eas-contracts@1.0.0-beta.0(ts-node@10.9.2)(typescript@5.4.2) + ethers: + specifier: ^6.11.1 + version: 6.11.1 + js-base64: + specifier: ^3.7.7 + version: 3.7.7 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + multiformats: + specifier: 9.9.0 + version: 9.9.0 + pako: + specifier: ^2.1.0 + version: 2.1.0 + semver: + specifier: ^7.6.0 + version: 7.6.0 + +devDependencies: + '@ianvs/prettier-plugin-sort-imports': + specifier: ^4.2.1 + version: 4.2.1(prettier@3.2.5) + '@metamask/eth-sig-util': + specifier: ^7.0.1 + version: 7.0.1 + '@types/lodash': + specifier: ^4.17.0 + version: 4.17.0 + '@types/node': + specifier: ^20.11.30 + version: 20.11.30 + '@types/pako': + specifier: ^2.0.3 + version: 2.0.3 + '@types/semver': + specifier: ^7.5.8 + version: 7.5.8 + '@typescript-eslint/eslint-plugin': + specifier: ^7.3.1 + version: 7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/parser': + specifier: ^7.3.1 + version: 7.3.1(eslint@8.57.0)(typescript@5.4.2) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-plugin-import: + specifier: ^2.29.1 + version: 2.29.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0) + eslint-plugin-prefer-arrow: + specifier: ^1.2.3 + version: 1.2.3(eslint@8.57.0) + prettier: + specifier: ^3.2.5 + version: 3.2.5 + prettier-package-json: + specifier: ^2.8.0 + version: 2.8.0 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.11.30)(typescript@5.4.2) + tslib: + specifier: ^2.6.2 + version: 2.6.2 + typescript: + specifier: ^5.4.2 + version: 5.4.2 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@adraffy/ens-normalize@1.10.1: + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + dev: false + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 + dev: true + + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + jsesc: 2.5.2 + dev: true + + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.3 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.23.9 + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + dev: true + + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/template@7.23.9: + resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + dev: true + + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + dev: true + + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@chainsafe/as-sha256@0.3.1: + resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} + dev: false + + /@chainsafe/persistent-merkle-tree@0.4.2: + resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + dev: false + + /@chainsafe/persistent-merkle-tree@0.5.0: + resolution: {integrity: sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + dev: false + + /@chainsafe/ssz@0.10.2: + resolution: {integrity: sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.5.0 + dev: false + + /@chainsafe/ssz@0.9.4: + resolution: {integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.4.2 + case: 1.6.3 + dev: false + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@8.1.1) + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@ethereum-attestation-service/eas-contracts@1.0.0-beta.0(ts-node@10.9.2)(typescript@5.4.2): + resolution: {integrity: sha512-kMe8XVl5QXI1L8ANqlVJqLv3WDs2uzz9+dzY9LUXvBKWF00tBhNji9lxEg4LKN0vz4YVL9bAUDuDeeSv8BOWdw==} + dependencies: + hardhat: 2.17.0(ts-node@10.9.2)(typescript@5.4.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - ts-node + - typescript + - utf-8-validate + dev: false + + /@ethereum-attestation-service/eas-contracts@1.3.7(ts-node@10.9.2)(typescript@5.4.2): + resolution: {integrity: sha512-msCKGDhqSjfkx0lbs0PPkf/Z6bWxaYT9ze/uLoRh1tM7W8N27mobX4g6AsjATqGC+eWHRfliK9eCwJQj7TU8WA==} + dependencies: + hardhat: 2.19.1(ts-node@10.9.2)(typescript@5.4.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - ts-node + - typescript + - utf-8-validate + dev: false + + /@ethereumjs/common@3.2.0: + resolution: {integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==} + dependencies: + '@ethereumjs/util': 8.1.0 + crc-32: 1.2.2 + dev: true + + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /@ethereumjs/tx@4.2.0: + resolution: {integrity: sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/common': 3.2.0 + '@ethereumjs/rlp': 4.0.1 + '@ethereumjs/util': 8.1.0 + ethereum-cryptography: 2.1.3 + dev: true + + /@ethereumjs/util@8.1.0: + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + dependencies: + '@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==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/abstract-provider@5.7.0: + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + dev: false + + /@ethersproject/abstract-signer@5.7.0: + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: false + + /@ethersproject/address@5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + dev: false + + /@ethersproject/base64@5.7.0: + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + dev: false + + /@ethersproject/basex@5.7.0: + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: false + + /@ethersproject/bignumber@5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + dev: false + + /@ethersproject/bytes@5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/constants@5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + dev: false + + /@ethersproject/contracts@5.7.0: + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + dev: false + + /@ethersproject/hash@5.7.0: + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/hdnode@5.7.0: + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: false + + /@ethersproject/json-wallets@5.7.0: + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + dev: false + + /@ethersproject/keccak256@5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + dev: false + + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + dev: false + + /@ethersproject/networks@5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/pbkdf2@5.7.0: + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + dev: false + + /@ethersproject/properties@5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/providers@5.7.2: + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@ethersproject/random@5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/rlp@5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/sha2@5.7.0: + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + dev: false + + /@ethersproject/signing-key@5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + dev: false + + /@ethersproject/solidity@5.7.0: + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/strings@5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/transactions@5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + dev: false + + /@ethersproject/units@5.7.0: + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/wallet@5.7.0: + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: false + + /@ethersproject/web@5.7.1: + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/wordlists@5.7.0: + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@fastify/busboy@2.1.0: + resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} + engines: {node: '>=14'} + dev: false + + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + dev: true + + /@ianvs/prettier-plugin-sort-imports@4.2.1(prettier@3.2.5): + resolution: {integrity: sha512-NKN1LVFWUDGDGr3vt+6Ey3qPeN/163uR1pOPAlkWpgvAqgxQ6kSdUf1F0it8aHUtKRUzEGcK38Wxd07O61d7+Q==} + peerDependencies: + '@vue/compiler-sfc': 2.7.x || 3.x + prettier: 2 || 3 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + dependencies: + '@babel/core': 7.24.4 + '@babel/generator': 7.23.6 + '@babel/parser': 7.24.4 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + prettier: 3.2.5 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@metamask/abi-utils@2.0.2: + resolution: {integrity: sha512-B/A1dY/w4F/t6cDHUscklO6ovb/ztFsrsTXFd8QlqSByk/vyy+QbPE3VVpmmyI/7RX+PA1AJcvBdzCIz+r9dVQ==} + engines: {node: '>=16.0.0'} + dependencies: + '@metamask/utils': 8.3.0 + superstruct: 1.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@metamask/eth-sig-util@4.0.1: + resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} + engines: {node: '>=12.0.0'} + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 6.2.1 + ethjs-util: 0.1.6 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + dev: false + + /@metamask/eth-sig-util@7.0.1: + resolution: {integrity: sha512-59GSrMyFH2fPfu7nKeIQdZ150zxXNNhAQIUaFRUW+MGtVA4w/ONbiQobcRBLi+jQProfIyss51G8pfLPcQ0ylg==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@ethereumjs/util': 8.1.0 + '@metamask/abi-utils': 2.0.2 + '@metamask/utils': 8.3.0 + ethereum-cryptography: 2.1.3 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@metamask/utils@8.3.0: + resolution: {integrity: sha512-WFVcMPEkKKRCJ8DDkZUTVbLlpwgRn98F4VM/WzN89HM8PmHMnCyk/oG0AmK/seOxtik7uC7Bbi2YBC5Z5XB2zw==} + engines: {node: '>=16.0.0'} + dependencies: + '@ethereumjs/tx': 4.2.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 + '@types/debug': 4.1.12 + debug: 4.3.4(supports-color@8.1.1) + pony-cause: 2.1.10 + semver: 7.6.0 + superstruct: 1.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + + /@noble/curves@1.3.0: + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + dependencies: + '@noble/hashes': 1.3.3 + dev: true + + /@noble/hashes@1.2.0: + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + dev: false + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: false + + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: true + + /@noble/secp256k1@1.7.1: + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + dev: false + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.0 + dev: true + + /@nomicfoundation/ethereumjs-block@5.0.1: + resolution: {integrity: sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-block@5.0.2: + resolution: {integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-blockchain@7.0.1: + resolution: {integrity: sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-ethash': 3.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + abstract-level: 1.0.4 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + level: 8.0.1 + lru-cache: 5.1.1 + memory-level: 1.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-blockchain@7.0.2: + resolution: {integrity: sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-ethash': 3.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + abstract-level: 1.0.4 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + level: 8.0.1 + lru-cache: 5.1.1 + memory-level: 1.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-common@4.0.1: + resolution: {integrity: sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==} + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.1 + crc-32: 1.2.2 + dev: false + + /@nomicfoundation/ethereumjs-common@4.0.2: + resolution: {integrity: sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==} + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.2 + crc-32: 1.2.2 + dev: false + + /@nomicfoundation/ethereumjs-ethash@3.0.1: + resolution: {integrity: sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + abstract-level: 1.0.4 + bigint-crypto-utils: 3.3.0 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-ethash@3.0.2: + resolution: {integrity: sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + abstract-level: 1.0.4 + bigint-crypto-utils: 3.3.0 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-evm@2.0.1: + resolution: {integrity: sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==} + engines: {node: '>=14'} + dependencies: + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-evm@2.0.2: + resolution: {integrity: sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==} + engines: {node: '>=14'} + dependencies: + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-rlp@5.0.1: + resolution: {integrity: sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==} + engines: {node: '>=14'} + hasBin: true + dev: false + + /@nomicfoundation/ethereumjs-rlp@5.0.2: + resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} + engines: {node: '>=14'} + hasBin: true + dev: false + + /@nomicfoundation/ethereumjs-statemanager@2.0.1: + resolution: {integrity: sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + js-sdsl: 4.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-statemanager@2.0.2: + resolution: {integrity: sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + js-sdsl: 4.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-trie@6.0.1: + resolution: {integrity: sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + '@types/readable-stream': 2.3.15 + ethereum-cryptography: 0.1.3 + readable-stream: 3.6.2 + dev: false + + /@nomicfoundation/ethereumjs-trie@6.0.2: + resolution: {integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + '@types/readable-stream': 2.3.15 + ethereum-cryptography: 0.1.3 + readable-stream: 3.6.2 + dev: false + + /@nomicfoundation/ethereumjs-tx@5.0.1: + resolution: {integrity: sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.9.4 + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-tx@5.0.2: + resolution: {integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.9.4 + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-util@9.0.1: + resolution: {integrity: sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.10.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + ethereum-cryptography: 0.1.3 + dev: false + + /@nomicfoundation/ethereumjs-util@9.0.2: + resolution: {integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.10.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + ethereum-cryptography: 0.1.3 + dev: false + + /@nomicfoundation/ethereumjs-vm@7.0.1: + resolution: {integrity: sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-blockchain': 7.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-evm': 2.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-statemanager': 2.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-vm@7.0.2: + resolution: {integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-blockchain': 7.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-evm': 2.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-statemanager': 2.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1: + resolution: {integrity: sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1: + resolution: {integrity: sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1: + resolution: {integrity: sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1: + resolution: {integrity: sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1: + resolution: {integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1: + resolution: {integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1: + resolution: {integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1: + resolution: {integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1: + resolution: {integrity: sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1: + resolution: {integrity: sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer@0.1.1: + resolution: {integrity: sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==} + engines: {node: '>= 12'} + optionalDependencies: + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.1 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.1 + '@nomicfoundation/solidity-analyzer-freebsd-x64': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-arm64-msvc': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-ia32-msvc': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 + dev: false + + /@scure/base@1.1.5: + resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + + /@scure/bip32@1.1.5: + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.5 + dev: false + + /@scure/bip32@1.3.3: + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + dependencies: + '@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==} + dependencies: + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.5 + dev: false + + /@scure/bip39@1.2.2: + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + 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==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sentry/hub@5.30.0: + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sentry/minimal@5.30.0: + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sentry/node@5.30.0: + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + dependencies: + '@sentry/core': 5.30.0 + '@sentry/hub': 5.30.0 + '@sentry/tracing': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@sentry/tracing@5.30.0: + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sentry/types@5.30.0: + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} + dev: false + + /@sentry/utils@5.30.0: + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 5.30.0 + tslib: 1.14.1 + dev: false + + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + /@types/bn.js@4.11.6: + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + dependencies: + '@types/node': 20.11.30 + dev: false + + /@types/bn.js@5.1.5: + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + dependencies: + '@types/node': 20.11.30 + dev: false + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/lodash@4.17.0: + resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} + dev: true + + /@types/lru-cache@5.1.1: + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + dev: false + + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: true + + /@types/node@18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + dev: false + + /@types/node@20.11.30: + resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} + dependencies: + undici-types: 5.26.5 + + /@types/pako@2.0.3: + resolution: {integrity: sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q==} + dev: true + + /@types/parse-author@2.0.3: + resolution: {integrity: sha512-pgRW2K/GVQoogylrGJXDl7PBLW9A6T4OOc9Hy9MLT5f7vgufK2GQ8FcfAbjFHR5HjcN9ByzuCczAORk49REqoA==} + dev: true + + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: true + + /@types/pbkdf2@3.1.2: + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + dependencies: + '@types/node': 20.11.30 + dev: false + + /@types/readable-stream@2.3.15: + resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==} + dependencies: + '@types/node': 20.11.30 + safe-buffer: 5.1.2 + dev: false + + /@types/secp256k1@4.0.6: + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + dependencies: + '@types/node': 20.11.30 + dev: false + + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true + + /@typescript-eslint/eslint-plugin@7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/scope-manager': 7.3.1 + '@typescript-eslint/type-utils': 7.3.1(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 7.3.1 + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.2.1(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.3.1(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.3.1 + '@typescript-eslint/types': 7.3.1 + '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 7.3.1 + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.57.0 + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@7.3.1: + resolution: {integrity: sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.3.1 + '@typescript-eslint/visitor-keys': 7.3.1 + dev: true + + /@typescript-eslint/type-utils@7.3.1(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.2) + '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.57.0 + ts-api-utils: 1.2.1(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@7.3.1: + resolution: {integrity: sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + + /@typescript-eslint/typescript-estree@7.3.1(typescript@5.4.2): + resolution: {integrity: sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.3.1 + '@typescript-eslint/visitor-keys': 7.3.1 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.2.1(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@7.3.1(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.3.1 + '@typescript-eslint/types': 7.3.1 + '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.2) + eslint: 8.57.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@7.3.1: + resolution: {integrity: sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.3.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + + /abstract-level@1.0.4: + resolution: {integrity: sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==} + engines: {node: '>=12'} + dependencies: + buffer: 6.0.3 + catering: 2.1.1 + is-buffer: 2.0.5 + level-supports: 4.0.1 + level-transcoder: 1.0.1 + module-error: 1.0.2 + queue-microtask: 1.2.3 + dev: false + + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + /adm-zip@0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + dev: false + + /aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + dev: false + + /aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + dev: false + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: false + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: false + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: false + + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: false + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: false + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /author-regex@1.0.0: + resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} + engines: {node: '>=0.8'} + dev: true + + /available-typed-arrays@1.0.6: + resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} + engines: {node: '>= 0.4'} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + dev: false + + /bigint-crypto-utils@3.3.0: + resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} + engines: {node: '>=14.0.0'} + dev: false + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + dev: false + + /bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: false + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: false + + /browser-level@1.0.1: + resolution: {integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==} + dependencies: + abstract-level: 1.0.4 + catering: 2.1.1 + module-error: 1.0.2 + run-parallel-limit: 1.1.0 + dev: false + + /browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: false + + /browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /browserslist@4.22.3: + resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001583 + electron-to-chromium: 1.4.656 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.3) + dev: true + + /bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + dependencies: + base-x: 3.0.9 + dev: false + + /bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + dev: false + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: false + + /buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: false + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + 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==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + + /caniuse-lite@1.0.30001583: + resolution: {integrity: sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==} + dev: true + + /case@1.6.3: + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} + dev: false + + /catering@2.1.1: + resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} + engines: {node: '>=6'} + dev: false + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: false + + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /classic-level@1.4.1: + resolution: {integrity: sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==} + engines: {node: '>=12'} + requiresBuild: true + dependencies: + abstract-level: 1.0.4 + catering: 2.1.1 + module-error: 1.0.2 + napi-macros: 2.2.2 + node-gyp-build: 4.8.0 + dev: false + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: false + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + dev: false + + /commander@3.0.2: + resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + /create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: false + + /create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: false + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4(supports-color@8.1.1): + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + + /decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: false + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + 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==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + /diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: false + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /electron-to-chromium@1.4.656: + resolution: {integrity: sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q==} + dev: true + + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: false + + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: false + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.6 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.2 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.14 + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.2 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.3.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.2) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.2) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.3.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-prefer-arrow@1.2.3(eslint@8.57.0): + resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} + peerDependencies: + eslint: '>=2.0.0' + dependencies: + eslint: 8.57.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + dependencies: + '@types/pbkdf2': 3.1.2 + '@types/secp256k1': 4.0.6 + blakejs: 1.2.1 + browserify-aes: 1.2.0 + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + hash.js: 1.1.7 + keccak: 3.0.4 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + scrypt-js: 3.0.1 + secp256k1: 4.0.3 + setimmediate: 1.0.5 + dev: false + + /ethereum-cryptography@1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 + dev: false + + /ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + dependencies: + '@noble/curves': 1.3.0 + '@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==} + dependencies: + bn.js: 4.12.0 + ethereumjs-util: 6.2.1 + dev: false + + /ethereumjs-util@6.2.1: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 4.12.0 + create-hash: 1.2.0 + elliptic: 6.5.4 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + dev: false + + /ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /ethers@6.11.1: + resolution: {integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /ethjs-util@0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + dev: false + + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + + /evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.17.0: + resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + dependencies: + locate-path: 2.0.0 + dev: false + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: false + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /follow-redirects@1.15.5(debug@4.3.4): + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /fp-ts@1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + dev: false + + /fs-extra@0.30.0: + resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 2.4.0 + klaw: 1.3.1 + path-is-absolute: 1.0.1 + rimraf: 2.7.1 + dev: false + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: false + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /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==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: false + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /hardhat@2.17.0(ts-node@10.9.2)(typescript@5.4.2): + resolution: {integrity: sha512-CaEGa13tkJNe2/rdaBiive4pmdNShwxvdWVhr1zfb6aVpRhQt9VNO0l/UIBt/zzajz38ZFjvhfM2bj8LDXo9gw==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-blockchain': 7.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-evm': 2.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-statemanager': 2.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + '@nomicfoundation/ethereumjs-vm': 7.0.1 + '@nomicfoundation/solidity-analyzer': 0.1.1 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 + abort-controller: 3.0.0 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + chalk: 2.4.2 + chokidar: 3.5.3 + ci-info: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.5 + io-ts: 1.10.4 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.2.0 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.7.3(debug@4.3.4) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + ts-node: 10.9.2(@types/node@20.11.30)(typescript@5.4.2) + tsort: 0.0.1 + typescript: 5.4.2 + undici: 5.28.2 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /hardhat@2.19.1(ts-node@10.9.2)(typescript@5.4.2): + resolution: {integrity: sha512-bsWa63g1GB78ZyMN08WLhFElLPA+J+pShuKD1BFO2+88g3l+BL3R07vj9deIi9dMbssxgE714Gof1dBEDGqnCw==} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-blockchain': 7.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-evm': 2.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-statemanager': 2.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + '@nomicfoundation/ethereumjs-vm': 7.0.2 + '@nomicfoundation/solidity-analyzer': 0.1.1 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + chalk: 2.4.2 + chokidar: 3.5.3 + ci-info: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.5 + io-ts: 1.10.4 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.2.0 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.7.3(debug@4.3.4) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + ts-node: 10.9.2(@types/node@20.11.30)(typescript@5.4.2) + tsort: 0.0.1 + typescript: 5.4.2 + undici: 5.28.2 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.1: + 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.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: false + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: false + + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: false + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /immutable@4.3.5: + resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: false + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /io-ts@1.10.4: + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + dependencies: + fp-ts: 1.19.3 + dev: false + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.13 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.2 + dev: true + + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: false + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-hex-prefixed@1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + dev: false + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: false + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.2 + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.14 + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: false + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + dev: false + + /js-sdsl@4.4.2: + resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} + dev: false + + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonfile@2.4.0: + resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + readable-stream: 3.6.2 + dev: false + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /klaw@1.3.1: + resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /level-supports@4.0.1: + resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} + engines: {node: '>=12'} + dev: false + + /level-transcoder@1.0.1: + resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==} + engines: {node: '>=12'} + dependencies: + buffer: 6.0.3 + module-error: 1.0.2 + dev: false + + /level@8.0.1: + resolution: {integrity: sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ==} + engines: {node: '>=12'} + dependencies: + abstract-level: 1.0.4 + browser-level: 1.0.1 + classic-level: 1.4.1 + dev: false + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: false + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: false + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + dev: false + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + /mcl-wasm@0.7.9: + resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} + engines: {node: '>=8.9.0'} + dev: false + + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /memory-level@1.0.0: + resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==} + engines: {node: '>=12'} + dependencies: + abstract-level: 1.0.4 + functional-red-black-tree: 1.0.1 + module-error: 1.0.2 + dev: false + + /memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: false + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: false + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.0.1: + resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /mnemonist@0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + dependencies: + obliterator: 2.0.4 + dev: false + + /mocha@10.2.0: + resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: false + + /module-error@1.0.2: + resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} + engines: {node: '>=10'} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + dev: false + + /nanoid@3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false + + /napi-macros@2.2.2: + resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} + dev: false + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: false + + /node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} + hasBin: true + dev: false + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: false + + /p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + dependencies: + p-try: 1.0.0 + dev: false + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + + /p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + dev: false + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: false + + /p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + dev: false + + /pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-author@2.0.0: + resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} + engines: {node: '>=0.10.0'} + dependencies: + author-regex: 1.0.0 + dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: false + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pony-cause@2.1.10: + resolution: {integrity: sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw==} + engines: {node: '>=12.0.0'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-package-json@2.8.0: + resolution: {integrity: sha512-WxtodH/wWavfw3MR7yK/GrS4pASEQ+iSTkdtSxPJWvqzG55ir5nvbLt9rw5AOiEcqqPCRM92WCtR1rk3TG3JSQ==} + hasBin: true + dependencies: + '@types/parse-author': 2.0.3 + commander: 4.1.1 + cosmiconfig: 7.1.0 + fs-extra: 10.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + parse-author: 2.0.0 + sort-object-keys: 1.1.3 + sort-order: 1.1.2 + dev: true + + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve@1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + dependencies: + path-parse: 1.0.7 + dev: false + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.0 + dev: false + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: false + + /rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + dependencies: + bn.js: 5.2.1 + dev: false + + /run-parallel-limit@1.1.0: + resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} + dependencies: + queue-microtask: 1.2.3 + dev: false + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rustbn.js@0.2.0: + resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} + dev: false + + /safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-regex-test@1.0.2: + resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + dev: false + + /secp256k1@4.0.3: + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + elliptic: 6.5.4 + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + dev: false + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: false + + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + function-bind: 1.1.2 + 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==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /solc@0.7.3(debug@4.3.4): + resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + command-exists: 1.2.9 + commander: 3.0.2 + follow-redirects: 1.15.5(debug@4.3.4) + fs-extra: 0.30.0 + js-sha3: 0.8.0 + memorystream: 0.3.1 + require-from-string: 2.0.2 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + dev: false + + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true + + /sort-order@1.1.2: + resolution: {integrity: sha512-Q8tOrwB1TSv9fNUXym9st3TZJODtmcOIi2JWCkVNQPrRg17KPwlpwweTEb7pMwUIFMTAgx2/JsQQXEPFzYQj3A==} + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + dependencies: + type-fest: 0.7.1 + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-hex-prefix@1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + is-hex-prefixed: 1.0.0 + dev: false + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + /superstruct@1.0.3: + resolution: {integrity: sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==} + engines: {node: '>=14.0.0'} + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: false + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /ts-api-utils@1.2.1(typescript@5.4.2): + resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.4.2 + dev: true + + /ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.11.30 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: false + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /tsort@0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + dev: false + + /tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + + /tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: false + + /type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + dev: false + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.6 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.13 + dev: true + + /typescript@5.4.2: + resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + engines: {node: '>=14.17'} + hasBin: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /undici@5.28.2: + resolution: {integrity: sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.0 + dev: false + + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: false + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /update-browserslist-db@1.0.13(browserslist@4.22.3): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.3 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array@1.1.14: + resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.6 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /workerpool@6.2.1: + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + dev: false + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: false + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: false + + /yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: false + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + dev: false + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} From 2e5a008937c76e6992b09fde739aabd6cb346ad7 Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 17:57:25 +0100 Subject: [PATCH 07/12] Fix merge conflicts --- test/test/eas.ts | 364 +---------------------------------------------- 1 file changed, 6 insertions(+), 358 deletions(-) diff --git a/test/test/eas.ts b/test/test/eas.ts index 897d267..5be1e31 100644 --- a/test/test/eas.ts +++ b/test/test/eas.ts @@ -337,358 +337,6 @@ describe('EAS API', () => { } }); } -<<<<<<< HEAD - } - }); - - describe('timestamping', () => { - const data1 = encodeBytes32String('0x1234'); - const data2 = encodeBytes32String('0x4567'); - const data3 = encodeBytes32String('0x6666'); - - for (const [maxPriorityFeePerGas, maxFeePerGas] of [ - [undefined, undefined], - [1000000000, 200000000000] - ]) { - context( - maxPriorityFeePerGas && maxFeePerGas - ? `with maxPriorityFeePerGas=${maxPriorityFeePerGas.toString()}, maxFeePerGas=${maxFeePerGas.toString()} overrides` - : 'with default fees', - () => { - const overrides = maxPriorityFeePerGas && maxFeePerGas ? { maxFeePerGas, maxPriorityFeePerGas } : undefined; - - it('should timestamp a single data', async () => { - const tx = await eas.timestamp(data1, overrides); - const timestamp = await tx.wait(); - expect(timestamp).to.equal(await latest()); - - expect(await eas.getTimestamp(data1)).to.equal(timestamp); - - if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx.data.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx.data.maxFeePerGas).to.equal(maxFeePerGas); - } - - const tx2 = await eas.timestamp(data2, overrides); - const timestamp2 = await tx2.wait(); - expect(timestamp2).to.equal(await latest()); - - expect(await eas.getTimestamp(data2)).to.equal(timestamp2); - - if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx2.data.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx2.data.maxFeePerGas).to.equal(maxFeePerGas); - } - }); - - it('should timestamp multiple data', async () => { - const data = [data1, data2]; - const tx = await eas.multiTimestamp([data1, data2], overrides); - const timestamps = await tx.wait(); - - const currentTime = await latest(); - - for (const [i, d] of data.entries()) { - const timestamp = timestamps[i]; - expect(timestamp).to.equal(currentTime); - - expect(await eas.getTimestamp(d)).to.equal(timestamp); - } - - if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx.data.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx.data.maxFeePerGas).to.equal(maxFeePerGas); - } - }); - - it("should return 0 for any data that wasn't timestamped multiple data", async () => { - expect(await eas.getTimestamp(data3)).to.equal(0); - }); - } - ); - } - }); - - describe('offchain attestation handling/verification', () => { - let offchain: Offchain; - - const schema = 'bool like'; - const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); - - beforeEach(async () => { - await registry.register(schema, ZERO_ADDRESS, false); - }); - - beforeEach(async () => { - offchain = await eas.getOffchain(); - }); - - describe('salting', () => { - beforeEach(async () => { - await registry.register(schema, ZERO_ADDRESS, true); - }); - - it('should support customizable salts', async () => { - const params = { - version: OffchainAttestationVersion.Version2, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }; - - const attestation = await offchain.signOffchainAttestation( - { ...params, salt: encodeBytes32String('SALT1') }, - sender, - { verifyOnchain: true } - ); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be.true; - - const attestation2 = await offchain.signOffchainAttestation( - { ...params, salt: encodeBytes32String('SALT2') }, - sender, - { verifyOnchain: true } - ); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation2)).to.be.true; - - expect(attestation.uid).not.to.be.equal(attestation2.uid); - }); - - it('should generate a random salt by default', async () => { - const params = { - version: OffchainAttestationVersion.Version2, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }; - - const attestation = await offchain.signOffchainAttestation(params, sender, { verifyOnchain: true }); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be.true; - - const attestation2 = await offchain.signOffchainAttestation(params, sender, { verifyOnchain: true }); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation2)).to.be.true; - - expect(attestation.message.salt).not.to.be.equal(attestation2.message.salt); - expect(attestation.uid).not.to.be.equal(attestation2.uid); - }); - }); - - describe('verification', () => { - const salt = encodeBytes32String('SALT'); - - beforeEach(async () => { - await registry.register(schema, ZERO_ADDRESS, true); - }); - - it('should verify the attestation onchain', async () => { - const attestation = await offchain.signOffchainAttestation( - { - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES, - salt - }, - sender, - { verifyOnchain: true } - ); - expect(await offchain.verifyOffchainAttestationSignature(await sender.getAddress(), attestation)).to.be.true; - }); - - it('should throw on onchain verification of invalid attestations', async () => { - const params = { - version: OffchainAttestationVersion.Version2, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES, - salt - }; - - // Invalid schema - await expect( - offchain.signOffchainAttestation({ ...params, schema: ZERO_BYTES32 }, sender, { verifyOnchain: true }) - ).to.be.rejectedWith( - "Error: VM Exception while processing transaction: reverted with custom error 'InvalidSchema()'" - ); - - // Invalid expiration time - await expect( - offchain.signOffchainAttestation( - { ...params, expirationTime: (await latest()) - duration.days(1n) }, - sender, - { verifyOnchain: true } - ) - ).to.be.rejectedWith( - "Error: VM Exception while processing transaction: reverted with custom error 'InvalidExpirationTime()" - ); - }); - - it('should throw on offchain verification of invalid attestations', async () => { - const params = { - version: OffchainAttestationVersion.Version2, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }; - const senderAddress = await sender.getAddress(); - - const attestation = await offchain.signOffchainAttestation(params, sender); - - // Invalid attester - expect(() => offchain.verifyOffchainAttestationSignature(ZERO_ADDRESS, attestation)).to.throw(InvalidAddress); - - // Invalid domains - const { domain } = attestation; - - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ domain: { ...domain, chainId: domain.chainId + 100n } } - }) - ).to.throw(InvalidDomain); - - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ domain: { ...domain, verifyingContract: ZERO_ADDRESS } } - }) - ).to.throw(InvalidDomain); - - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ domain: { ...domain, name: `BAD${domain.name}BAD` } } - }) - ).to.throw(InvalidDomain); - - // Invalid version verification won't throw, due to the check not being strict, but will fail on signature - await expect( - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ domain: { ...domain, version: '9999.9999.9999' } } - }) - ).to.be.false; - - // Invalid primary type - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ primaryType: `BAD${attestation.primaryType}BAD` } - }) - ).to.throw(InvalidPrimaryType); - - // Invalid types - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ - types: { [attestation.primaryType]: [{ name: 'schema', type: 'bytes32' }] } - } - }) - ).to.throw(InvalidTypes); - - await expect(() => - offchain.verifyOffchainAttestationSignature(senderAddress, { - ...attestation, - ...{ - types: { BAD: attestation.types.values } - } - }) - ).to.throw(InvalidTypes); - }); - - it('should verify offchain attestations with legacy/obsoleted domains', async () => { - const { config } = offchain; - const params = { - version: OffchainAttestationVersion.Legacy, - schema: schemaId, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: false, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }; - const senderAddress = await sender.getAddress(); - - // Legacy version - const legacyOffchain = new Offchain(config, OffchainAttestationVersion.Legacy, new EAS(ZERO_ADDRESS)); - - let customOffchain = new CustomOffchain( - config, - OffchainAttestationVersion.Legacy, - { contractVersion: '0.0.1' }, - new EAS(ZERO_ADDRESS) - ); - - let attestation = await customOffchain.signOffchainAttestation(params, sender); - await expect(legacyOffchain.verifyOffchainAttestationSignature(senderAddress, attestation)).to.be.true; - - // Legacy types - for (const type of OFFCHAIN_ATTESTATION_TYPES[OffchainAttestationVersion.Legacy].slice(1)) { - customOffchain = new CustomOffchain( - config, - OffchainAttestationVersion.Legacy, - { - contractVersion: '0.26', - type - }, - new EAS(ZERO_ADDRESS) - ); - - attestation = await customOffchain.signOffchainAttestation(params, sender); - await expect(legacyOffchain.verifyOffchainAttestationSignature(senderAddress, attestation)).to.be.true; - } - }); - - context('with an irrevocable schema', () => { - const schema2 = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum'; - const schema2Id = getSchemaUID(schema2, ZERO_ADDRESS, false); - - beforeEach(async () => { - await registry.register(schema2, ZERO_ADDRESS, false); - }); - - it('should throw on verification of invalid offchain attestations', async () => { - await expect( - offchain.signOffchainAttestation( - { - schema: schema2Id, - recipient: await recipient.getAddress(), - time: await latest(), - expirationTime: NO_EXPIRATION, - revocable: true, - refUID: ZERO_BYTES32, - data: ZERO_BYTES - }, - sender, - { verifyOnchain: true } - ) - ).to.be.rejectedWith( - "Error: VM Exception while processing transaction: reverted with custom error 'Irrevocable()'" - ); - }); - }); -======= ->>>>>>> eip712-fixes }); describe('revocation', () => { @@ -1213,8 +861,8 @@ describe('EAS API', () => { expect(await eas.getRevocationOffchain(await sender.getAddress(), data1)).to.equal(timestamp); if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx.tx.maxFeePerGas).to.equal(maxFeePerGas); + expect(tx.data.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); + expect(tx.data.maxFeePerGas).to.equal(maxFeePerGas); } const tx2 = await eas.revokeOffchain(data2, overrides); @@ -1224,8 +872,8 @@ describe('EAS API', () => { expect(await eas.getRevocationOffchain(await sender.getAddress(), data2)).to.equal(timestamp2); if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx2.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx2.tx.maxFeePerGas).to.equal(maxFeePerGas); + expect(tx2.data.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); + expect(tx2.data.maxFeePerGas).to.equal(maxFeePerGas); } }); @@ -1244,8 +892,8 @@ describe('EAS API', () => { } if (maxPriorityFeePerGas && maxFeePerGas) { - expect(tx.tx.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); - expect(tx.tx.maxFeePerGas).to.equal(maxFeePerGas); + expect(tx.data.maxPriorityFeePerGas).to.equal(maxPriorityFeePerGas); + expect(tx.data.maxFeePerGas).to.equal(maxFeePerGas); } }); } From 72e0d85f311e827051f59c655eb738ac34b0ee0b Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 18:03:54 +0100 Subject: [PATCH 08/12] Fix tests --- test/test/eas.ts | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/test/test/eas.ts b/test/test/eas.ts index 5be1e31..e2c6435 100644 --- a/test/test/eas.ts +++ b/test/test/eas.ts @@ -553,21 +553,16 @@ describe('EAS API', () => { let offchain: Offchain; const schema = 'bool like'; - const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); + let schemaId: string; beforeEach(async () => { - await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); - }); + const tx = await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + schemaId = await tx.wait(); - beforeEach(async () => { offchain = await eas.getOffchain(); }); describe('salting', () => { - beforeEach(async () => { - await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: true }); - }); - it('should support customizable salts', async () => { const params = { version: OffchainAttestationVersion.Version2, @@ -627,10 +622,6 @@ describe('EAS API', () => { describe('verification', () => { const salt = encodeBytes32String('SALT'); - beforeEach(async () => { - await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: true }); - }); - it('should verify the attestation onchain', async () => { const attestation = await offchain.signOffchainAttestation( { @@ -808,10 +799,15 @@ describe('EAS API', () => { context('with an irrevocable schema', () => { const schema2 = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum'; - const schema2Id = getSchemaUID(schema2, ZERO_ADDRESS, false); + let schema2Id: string; beforeEach(async () => { - await schemaRegistry.register({ schema: schema2, resolverAddress: ZERO_ADDRESS, revocable: false }); + const tx = await schemaRegistry.register({ + schema: schema2, + resolverAddress: ZERO_ADDRESS, + revocable: false + }); + schema2Id = await tx.wait(); }); it('should throw on verification of invalid offchain attestations', async () => { @@ -910,10 +906,11 @@ describe('EAS API', () => { let delegated: Delegated; const schema = 'bool like'; - const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); + let schemaId: string; beforeEach(async () => { - await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + const tx = await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + schemaId = await tx.wait(); }); beforeEach(async () => { @@ -1072,10 +1069,11 @@ describe('EAS API', () => { let delegatedProxy: DelegatedProxy; const schema = 'bool like'; - const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true); + let schemaId: string; beforeEach(async () => { - await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + const tx = await schemaRegistry.register({ schema, resolverAddress: ZERO_ADDRESS, revocable: false }); + schemaId = await tx.wait(); }); beforeEach(async () => { From ab4c82b6e65aaa6d5cbe3a54e583553e5555dea9 Mon Sep 17 00:00:00 2001 From: lbeder Date: Sun, 7 Apr 2024 18:11:00 +0100 Subject: [PATCH 09/12] Style --- test/test/eas.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test/eas.ts b/test/test/eas.ts index e2c6435..f57a11a 100644 --- a/test/test/eas.ts +++ b/test/test/eas.ts @@ -11,7 +11,6 @@ import { } from '../../src/offchain'; import { InvalidAddress, InvalidDomain, InvalidPrimaryType, InvalidTypes } from '../../src/offchain/typed-data-handler'; import { SchemaRegistry } from '../../src/schema-registry'; -import { getSchemaUID } from '../../src/utils'; import Contracts from '../components/Contracts'; import { ZERO_ADDRESS, ZERO_BYTES, ZERO_BYTES32 } from '../utils/Constants'; import chai from './helpers/chai'; From 56b8f4e4cc13cb9a2d1c781c441e0de703d37e49 Mon Sep 17 00:00:00 2001 From: lbeder Date: Thu, 11 Apr 2024 18:44:43 +0100 Subject: [PATCH 10/12] Update packages --- test/package.json | 1 + test/pnpm-lock.yaml | 255 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+) diff --git a/test/package.json b/test/package.json index 37943fe..ed33ea0 100755 --- a/test/package.json +++ b/test/package.json @@ -9,6 +9,7 @@ }, "devDependencies": { "@ethereum-attestation-service/eas-contracts": "1.3.7", + "@ethereum-attestation-service/eas-contracts-legacy": "npm:@ethereum-attestation-service/eas-contracts@1.0.0-beta.0", "@ianvs/prettier-plugin-sort-imports": "^4.2.1", "@nomicfoundation/edr-linux-x64-gnu": "^0.3.2", "@nomicfoundation/hardhat-ethers": "^3.0.5", diff --git a/test/pnpm-lock.yaml b/test/pnpm-lock.yaml index 78afe68..a20e680 100644 --- a/test/pnpm-lock.yaml +++ b/test/pnpm-lock.yaml @@ -8,6 +8,9 @@ devDependencies: '@ethereum-attestation-service/eas-contracts': specifier: 1.3.7 version: 1.3.7(ts-node@10.9.2)(typescript@5.4.2) + '@ethereum-attestation-service/eas-contracts-legacy': + specifier: npm:@ethereum-attestation-service/eas-contracts@1.0.0-beta.0 + version: /@ethereum-attestation-service/eas-contracts@1.0.0-beta.0(ts-node@10.9.2)(typescript@5.4.2) '@ianvs/prettier-plugin-sort-imports': specifier: ^4.2.1 version: 4.2.1(prettier@3.2.5) @@ -394,6 +397,18 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@ethereum-attestation-service/eas-contracts@1.0.0-beta.0(ts-node@10.9.2)(typescript@5.4.2): + resolution: {integrity: sha512-kMe8XVl5QXI1L8ANqlVJqLv3WDs2uzz9+dzY9LUXvBKWF00tBhNji9lxEg4LKN0vz4YVL9bAUDuDeeSv8BOWdw==} + dependencies: + hardhat: 2.17.0(ts-node@10.9.2)(typescript@5.4.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - ts-node + - typescript + - utf-8-validate + dev: true + /@ethereum-attestation-service/eas-contracts@1.3.7(ts-node@10.9.2)(typescript@5.4.2): resolution: {integrity: sha512-msCKGDhqSjfkx0lbs0PPkf/Z6bWxaYT9ze/uLoRh1tM7W8N27mobX4g6AsjATqGC+eWHRfliK9eCwJQj7TU8WA==} dependencies: @@ -997,6 +1012,22 @@ packages: '@nomicfoundation/edr-win32-x64-msvc': 0.3.2 dev: true + /@nomicfoundation/ethereumjs-block@5.0.1: + resolution: {integrity: sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@nomicfoundation/ethereumjs-block@5.0.2: resolution: {integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==} engines: {node: '>=14'} @@ -1013,6 +1044,29 @@ packages: - utf-8-validate dev: true + /@nomicfoundation/ethereumjs-blockchain@7.0.1: + resolution: {integrity: sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-ethash': 3.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + abstract-level: 1.0.4 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + level: 8.0.1 + lru-cache: 5.1.1 + memory-level: 1.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /@nomicfoundation/ethereumjs-blockchain@7.0.2: resolution: {integrity: sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==} engines: {node: '>=14'} @@ -1036,6 +1090,13 @@ packages: - utf-8-validate dev: true + /@nomicfoundation/ethereumjs-common@4.0.1: + resolution: {integrity: sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==} + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.1 + crc-32: 1.2.2 + dev: true + /@nomicfoundation/ethereumjs-common@4.0.2: resolution: {integrity: sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==} dependencies: @@ -1051,6 +1112,21 @@ packages: - c-kzg dev: true + /@nomicfoundation/ethereumjs-ethash@3.0.1: + resolution: {integrity: sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + abstract-level: 1.0.4 + bigint-crypto-utils: 3.3.0 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@nomicfoundation/ethereumjs-ethash@3.0.2: resolution: {integrity: sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==} engines: {node: '>=14'} @@ -1066,6 +1142,24 @@ packages: - utf-8-validate dev: true + /@nomicfoundation/ethereumjs-evm@2.0.1: + resolution: {integrity: sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==} + engines: {node: '>=14'} + dependencies: + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /@nomicfoundation/ethereumjs-evm@2.0.2: resolution: {integrity: sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==} engines: {node: '>=14'} @@ -1084,6 +1178,12 @@ packages: - utf-8-validate dev: true + /@nomicfoundation/ethereumjs-rlp@5.0.1: + resolution: {integrity: sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==} + engines: {node: '>=14'} + hasBin: true + dev: true + /@nomicfoundation/ethereumjs-rlp@5.0.2: resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} engines: {node: '>=14'} @@ -1096,6 +1196,21 @@ packages: hasBin: true dev: true + /@nomicfoundation/ethereumjs-statemanager@2.0.1: + resolution: {integrity: sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + js-sdsl: 4.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /@nomicfoundation/ethereumjs-statemanager@2.0.2: resolution: {integrity: sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==} dependencies: @@ -1111,6 +1226,17 @@ packages: - utf-8-validate dev: true + /@nomicfoundation/ethereumjs-trie@6.0.1: + resolution: {integrity: sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + '@types/readable-stream': 2.3.15 + ethereum-cryptography: 0.1.3 + readable-stream: 3.6.2 + dev: true + /@nomicfoundation/ethereumjs-trie@6.0.2: resolution: {integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==} engines: {node: '>=14'} @@ -1122,6 +1248,21 @@ packages: readable-stream: 3.6.2 dev: true + /@nomicfoundation/ethereumjs-tx@5.0.1: + resolution: {integrity: sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.9.4 + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@nomicfoundation/ethereumjs-tx@5.0.2: resolution: {integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==} engines: {node: '>=14'} @@ -1152,6 +1293,15 @@ packages: ethereum-cryptography: 0.1.3 dev: true + /@nomicfoundation/ethereumjs-util@9.0.1: + resolution: {integrity: sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.10.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + ethereum-cryptography: 0.1.3 + dev: true + /@nomicfoundation/ethereumjs-util@9.0.2: resolution: {integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==} engines: {node: '>=14'} @@ -1174,6 +1324,29 @@ packages: ethereum-cryptography: 0.1.3 dev: true + /@nomicfoundation/ethereumjs-vm@7.0.1: + resolution: {integrity: sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-blockchain': 7.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-evm': 2.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-statemanager': 2.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /@nomicfoundation/ethereumjs-vm@7.0.2: resolution: {integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==} engines: {node: '>=14'} @@ -1754,6 +1927,13 @@ packages: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: true + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: true + /abstract-level@1.0.4: resolution: {integrity: sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==} engines: {node: '>=12'} @@ -3404,6 +3584,11 @@ packages: strip-hex-prefix: 1.0.0 dev: true + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: true + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: @@ -3861,6 +4046,76 @@ packages: - utf-8-validate dev: true + /hardhat@2.17.0(ts-node@10.9.2)(typescript@5.4.2): + resolution: {integrity: sha512-CaEGa13tkJNe2/rdaBiive4pmdNShwxvdWVhr1zfb6aVpRhQt9VNO0l/UIBt/zzajz38ZFjvhfM2bj8LDXo9gw==} + engines: {node: '>=16.0.0'} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/ethereumjs-block': 5.0.1 + '@nomicfoundation/ethereumjs-blockchain': 7.0.1 + '@nomicfoundation/ethereumjs-common': 4.0.1 + '@nomicfoundation/ethereumjs-evm': 2.0.1 + '@nomicfoundation/ethereumjs-rlp': 5.0.1 + '@nomicfoundation/ethereumjs-statemanager': 2.0.1 + '@nomicfoundation/ethereumjs-trie': 6.0.1 + '@nomicfoundation/ethereumjs-tx': 5.0.1 + '@nomicfoundation/ethereumjs-util': 9.0.1 + '@nomicfoundation/ethereumjs-vm': 7.0.1 + '@nomicfoundation/solidity-analyzer': 0.1.1 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 + abort-controller: 3.0.0 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + chalk: 2.4.2 + chokidar: 3.6.0 + ci-info: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.5 + io-ts: 1.10.4 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.3.0 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.7.3(debug@4.3.4) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + ts-node: 10.9.2(@types/node@20.11.30)(typescript@5.4.2) + tsort: 0.0.1 + typescript: 5.4.2 + undici: 5.28.3 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /hardhat@2.19.1(ts-node@10.9.2)(typescript@5.4.2): resolution: {integrity: sha512-bsWa63g1GB78ZyMN08WLhFElLPA+J+pShuKD1BFO2+88g3l+BL3R07vj9deIi9dMbssxgE714Gof1dBEDGqnCw==} hasBin: true From 7b89650260afd7a2e660d524958d5cd889b9bcd8 Mon Sep 17 00:00:00 2001 From: lbeder Date: Thu, 11 Apr 2024 18:45:52 +0100 Subject: [PATCH 11/12] Update node version for CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9b6aa9b..6895484 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 20 cache: 'pnpm' - name: Install SDK dependencies From 574f75df381fe6fee9251587db38f7f41acf74ec Mon Sep 17 00:00:00 2001 From: lbeder Date: Thu, 11 Apr 2024 18:52:13 +0100 Subject: [PATCH 12/12] Compile legacy contracts prior to tests --- test/hardhat.config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/hardhat.config.ts b/test/hardhat.config.ts index c2abe10..c74fbe3 100644 --- a/test/hardhat.config.ts +++ b/test/hardhat.config.ts @@ -36,7 +36,9 @@ const config: HardhatUserConfig = { dependencyCompiler: { paths: [ '@ethereum-attestation-service/eas-contracts/contracts/EAS.sol', - '@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol' + '@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol', + '@ethereum-attestation-service/eas-contracts-legacy/contracts/EAS.sol', + '@ethereum-attestation-service/eas-contracts-legacy/contracts/SchemaRegistry.sol' ] },