From c7d81e20aaf6308c7d4e1efc09c497729f6a8f10 Mon Sep 17 00:00:00 2001 From: ctrlc03 <93448202+ctrlc03@users.noreply.github.com> Date: Mon, 15 Jan 2024 10:14:17 +0000 Subject: [PATCH] refactor(optimisedmt): remove dependency and implement locally --- .eslintrc.js | 2 +- .github/workflows/benchmarks.yml | 37 + .gitignore | 4 +- .../ts/__tests__/IncrementalQuinTree.test.ts | 4 +- cli/package.json | 1 - core/package.json | 8 +- core/ts/Poll.ts | 39 +- core/ts/__benchmarks__/index.ts | 110 ++ core/ts/__benchmarks__/utils/constants.ts | 19 + crypto/package.json | 12 +- crypto/ts/@types/index.ts | 1 - crypto/ts/@types/main.d.ts | 1 - crypto/ts/@types/optimisedmt.d.ts | 183 --- crypto/ts/AccQueue.ts | 3 +- crypto/ts/__benchmarks__/index.ts | 3 + crypto/ts/__benchmarks__/suites/trees.ts | 40 + crypto/ts/__tests__/IMT.test.ts | 167 +++ crypto/ts/index.ts | 7 +- crypto/ts/quinTree.ts | 377 +++++ crypto/ts/types.ts | 14 + crypto/ts/utils.ts | 9 +- package.json | 1 + pnpm-lock.yaml | 1309 ++--------------- 23 files changed, 931 insertions(+), 1420 deletions(-) create mode 100644 .github/workflows/benchmarks.yml create mode 100644 core/ts/__benchmarks__/index.ts create mode 100644 core/ts/__benchmarks__/utils/constants.ts delete mode 100644 crypto/ts/@types/index.ts delete mode 100644 crypto/ts/@types/main.d.ts delete mode 100644 crypto/ts/@types/optimisedmt.d.ts create mode 100644 crypto/ts/__benchmarks__/index.ts create mode 100644 crypto/ts/__benchmarks__/suites/trees.ts create mode 100644 crypto/ts/__tests__/IMT.test.ts create mode 100644 crypto/ts/quinTree.ts diff --git a/.eslintrc.js b/.eslintrc.js index 1a6eeeb2c..7b3816bdf 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -59,7 +59,7 @@ module.exports = { "import/no-extraneous-dependencies": [ "error", { - devDependencies: ["**/*.test.ts"], + devDependencies: ["**/*.test.ts", "**/__benchmarks__/**"], }, ], "no-debugger": isProduction ? "error" : "off", diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml new file mode 100644 index 000000000..46df463d8 --- /dev/null +++ b/.github/workflows/benchmarks.yml @@ -0,0 +1,37 @@ +name: Benchmarks + +on: + push: + branches: [dev] + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v2 + with: + version: latest + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "pnpm" + + - name: Install + run: | + pnpm install --frozen-lockfile --prefer-offline + + - name: Build + run: | + pnpm build + + - name: Benchmarks + run: pnpm benchmarks diff --git a/.gitignore b/.gitignore index c796621e6..8c8e03f72 100644 --- a/.gitignore +++ b/.gitignore @@ -155,4 +155,6 @@ circuits/circom/test publish # typedoc -docs/typedoc/* \ No newline at end of file +docs/typedoc/* + +**/ts/__benchmarks__/results/** diff --git a/circuits/ts/__tests__/IncrementalQuinTree.test.ts b/circuits/ts/__tests__/IncrementalQuinTree.test.ts index 73b25bcb6..aa5e76b84 100644 --- a/circuits/ts/__tests__/IncrementalQuinTree.test.ts +++ b/circuits/ts/__tests__/IncrementalQuinTree.test.ts @@ -121,13 +121,13 @@ describe("IncrementalQuinTree circuit", function test() { tree.insert(leaf); }); - const proof = tree.genMerklePath(2); + const proof = tree.genProof(2); const circuitInputs = { root: tree.root, leaf: 3n, path_elements: proof.pathElements, - path_index: proof.indices, + path_index: proof.pathIndices, }; const witness = await circuitLeafExists.calculateWitness(circuitInputs); diff --git a/cli/package.json b/cli/package.json index 3661c86e4..8f4a011ca 100644 --- a/cli/package.json +++ b/cli/package.json @@ -29,7 +29,6 @@ "dependencies": { "@commander-js/extra-typings": "^11.1.0", "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "big-integer": "^1.6.52", "commander": "^11.1.0", "dotenv": "^16.3.1", "ethers": "^6.10.0", diff --git a/core/package.json b/core/package.json index 817f4fde7..f88038f0e 100644 --- a/core/package.json +++ b/core/package.json @@ -7,8 +7,8 @@ "scripts": { "watch": "tsc --watch", "build": "tsc -p tsconfig.build.json", + "benchmarks": "ts-node ts/__benchmarks__/index.ts", "types": "tsc -p tsconfig.json --noEmit", - "test:processMessage": "ts-mocha --exit ts/__tests__/ProcessMessage.test.ts", "test:maciState": "ts-mocha --exit ts/__tests__/MaciState.test.ts", "test:e2e": "ts-mocha --exit ts/__tests__/e2e.test.ts", "test:utils": "ts-mocha --exit ts/__tests__/utils.test.ts", @@ -23,10 +23,12 @@ "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", "@types/node": "^20.11.2", + "benny": "^3.7.1", "chai": "^4.3.10", "mocha": "^10.2.0", "nyc": "^15.1.0", - "ts-mocha": "^10.0.0" + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1" }, "nyc": { "reporter": [ @@ -38,6 +40,8 @@ ], "all": true, "exclude": [ + "ts/__benchmarks__/**", + "**/__tests__/**", "**/__tests__/*.ts", "**/*.js", "**/*.d.ts" diff --git a/core/ts/Poll.ts b/core/ts/Poll.ts index 12e1a6677..c45b19aae 100644 --- a/core/ts/Poll.ts +++ b/core/ts/Poll.ts @@ -177,8 +177,6 @@ export class Poll implements IPoll { */ copyStateFromMaci = (): void => { // Copy the state tree, ballot tree, state leaves, and ballot leaves - assert(this.maciStateRef.stateLeaves.length === this.maciStateRef.stateTree.nextIndex); - this.stateLeaves = this.maciStateRef.stateLeaves.map((x) => x.copy()); this.stateTree = this.maciStateRef.stateTree.copy(); @@ -277,10 +275,10 @@ export class Poll implements IPoll { // calculate the path elements for the state tree given the original state tree (before any changes) // changes could effectively be made by this new vote - either a key change or vote change // would result in a different state leaf - const originalStateLeafPathElements = this.stateTree?.genMerklePath(Number(stateLeafIndex)).pathElements; + const originalStateLeafPathElements = this.stateTree?.genProof(Number(stateLeafIndex)).pathElements; // calculate the path elements for the ballot tree given the original ballot tree (before any changes) // changes could effectively be made by this new ballot - const originalBallotPathElements = this.ballotTree?.genMerklePath(Number(stateLeafIndex)).pathElements; + const originalBallotPathElements = this.ballotTree?.genProof(Number(stateLeafIndex)).pathElements; // create a new quinary tree where we insert the votes of the origin (up until this message is processed) ballot const vt = new IncrementalQuinTree(this.treeDepths.voteOptionTreeDepth, 0n, STATE_TREE_ARITY, hash5); @@ -288,7 +286,7 @@ export class Poll implements IPoll { vt.insert(ballot.votes[i]); } // calculate the path elements for the vote option tree given the original vote option tree (before any changes) - const originalVoteWeightsPathElements = vt.genMerklePath(voteOptionIndex).pathElements; + const originalVoteWeightsPathElements = vt.genProof(voteOptionIndex).pathElements; // we return the data which is then to be used in the processMessage circuit // to generate a proof of processing return { @@ -524,10 +522,10 @@ export class Poll implements IPoll { if (e instanceof ProcessMessageError) { // Since the command is invalid, use a blank state leaf currentStateLeaves.unshift(this.stateLeaves[0].copy()); - currentStateLeavesPathElements.unshift(this.stateTree!.genMerklePath(0).pathElements); + currentStateLeavesPathElements.unshift(this.stateTree!.genProof(0).pathElements); // since the command is invliad we use the blank ballot currentBallots.unshift(this.ballots[0].copy()); - currentBallotsPathElements.unshift(this.ballotTree!.genMerklePath(0).pathElements); + currentBallotsPathElements.unshift(this.ballotTree!.genProof(0).pathElements); // Since the command is invalid, we use a zero vote weight currentVoteWeights.unshift(this.ballots[0].votes[0]); @@ -536,7 +534,7 @@ export class Poll implements IPoll { const vt = new IncrementalQuinTree(this.treeDepths.voteOptionTreeDepth, 0n, STATE_TREE_ARITY, hash5); vt.insert(this.ballots[0].votes[0]); // get the path elements for this empty vote weight leaf - currentVoteWeightsPathElements.unshift(vt.genMerklePath(0).pathElements); + currentVoteWeightsPathElements.unshift(vt.genProof(0).pathElements); } else { throw e; } @@ -550,7 +548,7 @@ export class Poll implements IPoll { const amount = message.data[0] >= BigInt(this.ballots.length) ? 0n : message.data[1]; currentStateLeaves.unshift(this.stateLeaves[stateIndex].copy()); - currentStateLeavesPathElements.unshift(this.stateTree!.genMerklePath(stateIndex).pathElements); + currentStateLeavesPathElements.unshift(this.stateTree!.genProof(stateIndex).pathElements); // create a copy of the state leaf const newStateLeaf = this.stateLeaves[stateIndex].copy(); @@ -564,7 +562,7 @@ export class Poll implements IPoll { // we still need them as placeholder for vote command const currentBallot = this.ballots[stateIndex].copy(); currentBallots.unshift(currentBallot); - currentBallotsPathElements.unshift(this.ballotTree!.genMerklePath(Number(stateIndex)).pathElements); + currentBallotsPathElements.unshift(this.ballotTree!.genProof(Number(stateIndex)).pathElements); currentVoteWeights.unshift(currentBallot.votes[0]); // create a quinary tree to fill with the votes of the current ballot @@ -575,7 +573,7 @@ export class Poll implements IPoll { } // add to the first position the path elements of the vote weight tree - currentVoteWeightsPathElements.unshift(vt.genMerklePath(0).pathElements); + currentVoteWeightsPathElements.unshift(vt.genProof(0).pathElements); } catch (e) { // eslint-disable-next-line no-console console.log("Error processing topup message: ", (e as Error).message); @@ -588,10 +586,10 @@ export class Poll implements IPoll { } else { // Since we don't have a command at that position, use a blank state leaf currentStateLeaves.unshift(this.stateLeaves[0].copy()); - currentStateLeavesPathElements.unshift(this.stateTree!.genMerklePath(0).pathElements); + currentStateLeavesPathElements.unshift(this.stateTree!.genProof(0).pathElements); // since the command is invliad we use the blank ballot currentBallots.unshift(this.ballots[0].copy()); - currentBallotsPathElements.unshift(this.ballotTree!.genMerklePath(0).pathElements); + currentBallotsPathElements.unshift(this.ballotTree!.genProof(0).pathElements); // Since the command is invalid, we use a zero vote weight currentVoteWeights.unshift(this.ballots[0].votes[0]); @@ -601,7 +599,7 @@ export class Poll implements IPoll { vt.insert(this.ballots[0].votes[0]); // get the path elements for this empty vote weight leaf - currentVoteWeightsPathElements.unshift(vt.genMerklePath(0).pathElements); + currentVoteWeightsPathElements.unshift(vt.genProof(0).pathElements); } } @@ -690,12 +688,9 @@ export class Poll implements IPoll { } // generate the path to the subroot of the message tree for this batch - const messageSubrootPath = this.messageTree.genMerkleSubrootPath(index, index + messageBatchSize); + const messageSubrootPath = this.messageTree.genSubrootProof(index, index + messageBatchSize); - assert( - IncrementalQuinTree.verifyMerklePath(messageSubrootPath, this.messageTree.hashFunc), - "The message subroot path is invalid", - ); + assert(this.messageTree.verifyProof(messageSubrootPath), "The message subroot path is invalid"); // validate that the batch index is correct, if not fix it // this means that the end will be the last message @@ -815,8 +810,8 @@ export class Poll implements IPoll { const colStartIndex = this.cbi * batchSize; const [ballots1, ballots2] = this.subsidyCalculation(rowStartIndex, colStartIndex); - const ballotSubrootProof1 = this.ballotTree?.genMerkleSubrootPath(rowStartIndex, rowStartIndex + batchSize); - const ballotSubrootProof2 = this.ballotTree?.genMerkleSubrootPath(colStartIndex, colStartIndex + batchSize); + const ballotSubrootProof1 = this.ballotTree?.genSubrootProof(rowStartIndex, rowStartIndex + batchSize); + const ballotSubrootProof2 = this.ballotTree?.genSubrootProof(colStartIndex, colStartIndex + batchSize); const newSubsidySalt = genRandomSalt(); saltIndex = `${this.rbi.toString()}-${this.cbi.toString()}`; @@ -1087,7 +1082,7 @@ export class Poll implements IPoll { const packedVals = packTallyVotesSmallVals(batchStartIndex, batchSize, this.maciStateRef.numSignUps); const inputHash = sha256Hash([packedVals, sbCommitment, currentTallyCommitment, newTallyCommitment]); - const ballotSubrootProof = this.ballotTree?.genMerkleSubrootPath(batchStartIndex, batchStartIndex + batchSize); + const ballotSubrootProof = this.ballotTree?.genSubrootProof(batchStartIndex, batchStartIndex + batchSize); const votes = ballots.map((x) => x.votes); diff --git a/core/ts/__benchmarks__/index.ts b/core/ts/__benchmarks__/index.ts new file mode 100644 index 000000000..2067b1b5b --- /dev/null +++ b/core/ts/__benchmarks__/index.ts @@ -0,0 +1,110 @@ +import benny from "benny"; +import { Keypair, PCommand } from "maci-domainobjs"; + +import { MaciState } from ".."; + +import { + COORDINATOR_KEYPAIR, + DURATION, + MAX_VALUES, + MESSAGE_BATCH_SIZE, + STATE_TREE_DEPTH, + TREE_DEPTHS, + VOICE_CREDIT_BALANCE, +} from "./utils/constants"; + +const NAME = "maci-core"; + +export default function runCore(): void { + benny.suite( + NAME, + + benny.add(`maci-core - Generate circuit inputs for 10 signups and 50 messages`, () => { + const voteWeight = 9n; + + const users: Keypair[] = []; + + const maciState = new MaciState(STATE_TREE_DEPTH); + // Sign up and vote + for (let i = 0; i < MESSAGE_BATCH_SIZE - 1; i += 1) { + const userKeypair = new Keypair(); + users.push(userKeypair); + + maciState.signUp(userKeypair.pubKey, VOICE_CREDIT_BALANCE, BigInt(Math.floor(Date.now() / 1000))); + } + + const pollId = maciState.deployPoll( + BigInt(Math.floor(Date.now() / 1000) + DURATION), + MAX_VALUES, + TREE_DEPTHS, + MESSAGE_BATCH_SIZE, + COORDINATOR_KEYPAIR, + ); + const poll = maciState.polls[pollId]; + + // 24 valid votes + for (let i = 0; i < MESSAGE_BATCH_SIZE - 1; i += 1) { + const userKeypair = users[i]; + + const command = new PCommand( + BigInt(i + 1), + userKeypair.pubKey, + BigInt(i), // vote option index + voteWeight, + 1n, + BigInt(pollId), + ); + + const signature = command.sign(userKeypair.privKey); + + const ecdhKeypair = new Keypair(); + const sharedKey = Keypair.genEcdhSharedKey(ecdhKeypair.privKey, COORDINATOR_KEYPAIR.pubKey); + const message = command.encrypt(signature, sharedKey); + poll.publishMessage(message, ecdhKeypair.pubKey); + } + + // 24 invalid votes + for (let i = 0; i < MESSAGE_BATCH_SIZE - 1; i += 1) { + const userKeypair = users[i]; + const command = new PCommand( + BigInt(i + 1), + userKeypair.pubKey, + BigInt(i), // vote option index + VOICE_CREDIT_BALANCE * 2n, // invalid vote weight + 1n, + BigInt(pollId), + ); + + const signature = command.sign(userKeypair.privKey); + + const ecdhKeypair = new Keypair(); + const sharedKey = Keypair.genEcdhSharedKey(ecdhKeypair.privKey, COORDINATOR_KEYPAIR.pubKey); + const message = command.encrypt(signature, sharedKey); + poll.publishMessage(message, ecdhKeypair.pubKey); + } + + // Process messages + poll.processMessages(pollId); + + // Process messages + poll.processMessages(pollId); + + // Test processAllMessages + poll.processAllMessages(); + }), + + benny.cycle(), + benny.complete((results) => { + results.results.forEach((result) => { + // eslint-disable-next-line no-console + console.log(`${result.name}: mean time: ${result.details.mean.toFixed(2)}`); + }); + }), + + benny.save({ folder: "ts/__benchmarks__/results", file: NAME, version: "1.0.0", details: true }), + benny.save({ folder: "ts/__benchmarks__/results", file: NAME, format: "chart.html", details: true }), + benny.save({ folder: "ts/__benchmarks__/results", file: NAME, format: "table.html", details: true }), + ); +} + +runCore(); diff --git a/core/ts/__benchmarks__/utils/constants.ts b/core/ts/__benchmarks__/utils/constants.ts new file mode 100644 index 000000000..04861ae48 --- /dev/null +++ b/core/ts/__benchmarks__/utils/constants.ts @@ -0,0 +1,19 @@ +import { Keypair } from "maci-domainobjs"; + +export const VOICE_CREDIT_BALANCE = 100n; +export const DURATION = 30; +export const MESSAGE_BATCH_SIZE = 25; +export const COORDINATOR_KEYPAIR = new Keypair(); +export const STATE_TREE_DEPTH = 10; +export const MAX_VALUES = { + maxUsers: 25, + maxMessages: 25, + maxVoteOptions: 25, +}; + +export const TREE_DEPTHS = { + intStateTreeDepth: 2, + messageTreeDepth: 3, + messageTreeSubDepth: 2, + voteOptionTreeDepth: 4, +}; diff --git a/crypto/package.json b/crypto/package.json index a0589113f..bbcb8ee03 100644 --- a/crypto/package.json +++ b/crypto/package.json @@ -5,29 +5,31 @@ "main": "build/ts/index.js", "scripts": { "watch": "tsc --watch", + "benchmarks": "ts-node ts/__benchmarks__/index.ts", "build": "tsc -p tsconfig.build.json", "types": "tsc -p tsconfig.json --noEmit", "test": "nyc ts-mocha --exit ts/__tests__/*.test.ts", "test:crypto": "ts-mocha --exit ts/__tests__/Crypto.test.ts", "test:accQueue": "ts-mocha --exit ts/__tests__/AccQueue.test.ts", - "test:utils": "ts-mocha --exit ts/__tests__/Utils.test.ts" + "test:utils": "ts-mocha --exit ts/__tests__/Utils.test.ts", + "test:imt": "ts-mocha --exit ts/__tests__/IMT.test.ts" }, "dependencies": { "@zk-kit/baby-jubjub": "^0.1.1", "@zk-kit/eddsa-poseidon": "^0.5.1", "@zk-kit/poseidon-cipher": "^0.1.1", - "big-integer": "^1.6.52", - "ethers": "^6.10.0", - "optimisedmt": "^0.0.9" + "ethers": "^6.9.2" }, "devDependencies": { "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", "@types/node": "^20.11.2", + "benny": "^3.7.1", "chai": "^4.3.10", "mocha": "^10.2.0", "nyc": "^15.1.0", "ts-mocha": "^10.0.0", + "ts-node": "^10.9.1", "typescript": "^5.3.3" }, "nyc": { @@ -40,6 +42,8 @@ ], "all": true, "exclude": [ + "ts/__benchmarks__/**", + "**/__tests__/@types/*", "**/__tests__/*.ts", "**/*.js", "**/*.d.ts", diff --git a/crypto/ts/@types/index.ts b/crypto/ts/@types/index.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/crypto/ts/@types/index.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/crypto/ts/@types/main.d.ts b/crypto/ts/@types/main.d.ts deleted file mode 100644 index 3c4dd82c2..000000000 --- a/crypto/ts/@types/main.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./optimisedmt"; diff --git a/crypto/ts/@types/optimisedmt.d.ts b/crypto/ts/@types/optimisedmt.d.ts deleted file mode 100644 index 38e3b1cd6..000000000 --- a/crypto/ts/@types/optimisedmt.d.ts +++ /dev/null @@ -1,183 +0,0 @@ -declare module "optimisedmt" { - export type Leaf = bigint; - export type PathElements = bigint[][]; - export type Indices = number[]; - export type FilledPath = Record; - - interface MerkleProof { - pathElements: PathElements; - indices: Indices; - depth: number; - root: bigint; - leaf: Leaf; - } - - export class IncrementalTree { - leavesPerNode: number; - - depth: number; - - zeroValue: bigint; - - root: bigint; - - nextIndex: number; - - leaves: Leaf[]; - - zeros: bigint[]; - - filledSubtrees: bigint[][]; - - filledPaths: FilledPath; - - hashFunc: (leaves: bigint[]) => bigint; - - constructor( - depth: number, - zeroValue: bigint | number, - leavesPerNode: number, - hashFunc: (leaves: bigint[]) => bigint, - ); - - insert(value: Leaf): void; - - update(index: number, value: Leaf): void; - - getLeaf(index: number): Leaf; - - genMerkleSubrootPath( - startIndex: number, // inclusive - endIndex: number, - ): MerkleProof; - - genMerklePath(index: number): MerkleProof; - - static verifyMerklePath(proof: MerkleProof, hashFunc: (leaves: bigint[]) => bigint): boolean; - - copy(): IncrementalTree; - - equals(t: IncrementalTree): boolean; - } - - export class MultiIncrementalTree { - leavesPerNode: number; - - depth: number; - - zeroValue: bigint; - - currentTreeNum: number; - - roots: bigint[]; - - nextIndex: number; - - leaves: Leaf[]; - - zeros: bigint[]; - - filledSubtrees: bigint[][][]; - - filledPaths: FilledPath[]; - - hashFunc: (leaves: bigint[]) => bigint; - - constructor( - depth: number, - zeroValue: bigint | number, - leavesPerNode: number, - hashFunc: (leaves: bigint[]) => bigint, - ); - - insert(value: Leaf): void; - - update(absoluteIndex: number, value: Leaf): void; - - getLeaf(index: number): Leaf; - - genMerkleSubrootPath( - absoluteStartIndex: number, // inclusive - absoluteEndIndex: number, - ): MerkleProof; - - genMerklePath(absoluteIndex: number): MerkleProof; - - static verifyMerklePath(proof: MerkleProof, hashFunc: (leaves: bigint[]) => bigint): boolean; - - copy(): MultiIncrementalTree; - - equals(t: MultiIncrementalTree): boolean; - } - - export class OptimisedMT { - depth: number; - - zeroValue: bigint; - - leavesPerNode: number; - - hashFunc: (leaves: bigint[]) => bigint; - - nextIndex: number; - - zeros: bigint[]; - - root: bigint; - - nodes: MTNode; - - numNodes: number; - - capacity: number; - - constructor(depth: number, zeroValue: bigint, leavesPerNode: number, _hashFunc: (leaves: bigint[]) => bigint); - - insert(value: Leaf): void; - - update(index: number, value: Leaf): void; - - genMerklePath(index: number): MerkleProof; - - genMerkleSubrootPath( - startIndex: number, // inclusive - endIndex: number, - ): MerkleProof; - - static verifyMerklePath: (proof: MerkleProof, hashFunc: (leaves: bigint[]) => bigint) => boolean; - - getLeaf(index: number): bigint; - - getNode(index: number): bigint; - - setNode(index: number, value: bigint): void; - - private getChildIndices; - - static calcChildIndices(index: number, leavesPerNode: number, depth: number): number[]; - - private getParentIndices; - - static calcParentIndices(index: number, leavesPerNode: number, depth: number): number[]; - - copy(): OptimisedMT; - - serialize: () => string; - - equals: (o: OptimisedMT) => boolean; - - static unserialize: (s: string) => OptimisedMT; - } - export const calcInitialVals: ( - leavesPerNode: number, - depth: number, - zeroValue: bigint, - hashFunc: (leaves: bigint[]) => bigint, - ) => { - zeros: bigint[]; - root: bigint; - }; - - export type MTNode = Record; - export const calculateRoot: (leaves: bigint[], arity: number, hashFunc: (leaves: bigint[]) => bigint) => bigint; -} diff --git a/crypto/ts/AccQueue.ts b/crypto/ts/AccQueue.ts index a32cc83ca..96ab77738 100644 --- a/crypto/ts/AccQueue.ts +++ b/crypto/ts/AccQueue.ts @@ -1,11 +1,10 @@ -import { OptimisedMT as IncrementalQuinTree } from "optimisedmt"; - import assert from "assert"; import type { Leaf, Queue, StringifiedBigInts } from "./types"; import { deepCopyBigIntArray, stringifyBigInts, unstringifyBigInts } from "./bigIntUtils"; import { sha256Hash, hashLeftRight, hash5 } from "./hashing"; +import { IncrementalQuinTree } from "./quinTree"; import { calcDepthFromNumLeaves } from "./utils"; /** diff --git a/crypto/ts/__benchmarks__/index.ts b/crypto/ts/__benchmarks__/index.ts new file mode 100644 index 000000000..a93b5652b --- /dev/null +++ b/crypto/ts/__benchmarks__/index.ts @@ -0,0 +1,3 @@ +import runTrees from "./suites/trees"; + +runTrees(); diff --git a/crypto/ts/__benchmarks__/suites/trees.ts b/crypto/ts/__benchmarks__/suites/trees.ts new file mode 100644 index 000000000..fe8d7aadd --- /dev/null +++ b/crypto/ts/__benchmarks__/suites/trees.ts @@ -0,0 +1,40 @@ +import benny from "benny"; + +import { IncrementalQuinTree, hash5 } from "../../index"; + +const NAME = "merkle-trees"; + +export default function runTrees(): void { + const treeDepth = 2; + const numberOfLeaves = 5 ** treeDepth; + + benny.suite( + NAME, + + benny.add(`MACI - insert, update, generate and verify proof for ${numberOfLeaves} leaves`, () => { + const tree5 = new IncrementalQuinTree(treeDepth, BigInt(0), 5, hash5); + + for (let i = 0; i < numberOfLeaves; i += 1) { + tree5.insert(BigInt(i)); + } + + for (let i = 0; i < numberOfLeaves; i += 1) { + tree5.update(i, BigInt(0)); + } + + tree5.verifyProof(tree5.genProof(5)); + }), + + benny.cycle(), + benny.complete((results) => { + results.results.forEach((result) => { + // eslint-disable-next-line no-console + console.log(`${result.name}: mean time: ${result.details.mean.toFixed(2)}`); + }); + }), + + benny.save({ folder: "ts/__benchmarks__/results", file: NAME, version: "1.0.0", details: true }), + benny.save({ folder: "ts/__benchmarks__/results", file: NAME, format: "chart.html", details: true }), + benny.save({ folder: "ts/__benchmarks__/results", file: NAME, format: "table.html", details: true }), + ); +} diff --git a/crypto/ts/__tests__/IMT.test.ts b/crypto/ts/__tests__/IMT.test.ts new file mode 100644 index 000000000..89428f6ff --- /dev/null +++ b/crypto/ts/__tests__/IMT.test.ts @@ -0,0 +1,167 @@ +import { expect } from "chai"; + +import { hash5 } from "../hashing"; +import { IncrementalQuinTree } from "../quinTree"; + +describe("IMT comparison", () => { + describe("constructor", () => { + it("should calculate initial root and zero values", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + expect(mt1.root).to.not.eq(null); + expect(mt1.zeros.length).to.be.gt(0); + }); + }); + + describe("insert", () => { + it("should update the root after one insertion", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + const rootBefore = mt1.root; + mt1.insert(1n); + + expect(mt1.root).to.not.eq(rootBefore); + }); + }); + + describe("genProof", () => { + it("should generate a proof", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + mt1.insert(1n); + + const proof1 = mt1.genProof(0); + + expect(proof1.leaf).to.eq(mt1.getNode(0)); + expect(proof1.pathElements.length).to.be.gt(0); + expect(proof1.pathIndices.length).to.be.gt(0); + expect(proof1.root).to.eq(mt1.root); + }); + + it("should throw when trying to generate a proof for an index < 0", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + expect(() => mt1.genProof(-1)).to.throw("The leaf index must be greater or equal to 0"); + }); + + it("should throw when trying to generate a proof for an index > tree size", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + const capacity = 5 ** 5; + expect(() => mt1.genProof(capacity + 1)).to.throw("The leaf index must be less than the tree capacity"); + }); + }); + + describe("genSubrootProof", () => { + it("should geneate a valid proof for a subtree", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + for (let i = 0; i < 100; i += 1) { + mt1.insert(BigInt(i)); + } + + const proof1 = mt1.genSubrootProof(5, 10); + + expect(mt1.verifyProof(proof1)).to.eq(true); + }); + + it("should throw when trying to generate a subroot proof and providing an end index > start index", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + expect(() => mt1.genSubrootProof(5, 4)).to.throw("The start index must be less than the end index"); + }); + + it("should throw when providing a start index < 0", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + expect(() => mt1.genSubrootProof(-1, 5)).to.throw("The start index must be greater or equal to 0"); + }); + + it("should throw when providing a leaves range not multiple of arity", () => { + const arity = 5; + const mt1 = new IncrementalQuinTree(arity, 0n, 5, hash5); + + expect(() => mt1.genSubrootProof(0, arity + 1)).to.throw( + "The number of leaves must be a multiple of the tree arity", + ); + }); + + it("should throw when the number of leaves is larger than the capacity", () => { + const arity = 5; + const mt1 = new IncrementalQuinTree(arity, 0n, 5, hash5); + + expect(() => mt1.genSubrootProof(0, arity ** 5)).to.throw( + "The number of leaves must be less than the tree capacity", + ); + }); + }); + + describe("verifyProof", () => { + it("should validate a proof", () => { + const mt1 = new IncrementalQuinTree(5, 0n, 5, hash5); + + mt1.insert(1n); + + const proof1 = mt1.genProof(0); + + expect(mt1.verifyProof(proof1)).to.eq(true); + }); + }); + + describe("calcParentIndices", () => { + it("should throw when the index is out of bounds", () => { + const arity = 5; + const mt1 = new IncrementalQuinTree(arity, 0n, 5, hash5); + + expect(() => mt1.calcParentIndices(arity ** 5)).to.throw( + `Index ${arity ** 5} is out of bounds. Can only get parents of leaves`, + ); + }); + }); + + describe("calcChildIndices", () => { + it("should throw when the index is out of bounds", () => { + const arity = 5; + const mt1 = new IncrementalQuinTree(arity, 0n, 5, hash5); + + const index = 2; + expect(() => mt1.calcChildIndices(index)).to.throw( + `Index ${index} is out of bounds. Can only get children of subroots`, + ); + }); + }); + + describe("setNode", () => { + it("should throw when trying to set the root directly", () => { + const arity = 5; + const mt1 = new IncrementalQuinTree(arity, 0n, 5, hash5); + + expect(() => { + mt1.setNode(mt1.numNodes, 1n); + }).to.throw("Index out of bounds"); + }); + + it("should throw when the index is out of bounds", () => { + const arity = 5; + const mt1 = new IncrementalQuinTree(arity, 0n, 5, hash5); + + expect(() => { + mt1.setNode(mt1.numNodes + 5, 1n); + }).to.throw("Index out of bounds"); + }); + }); + + describe("copy", () => { + it("should produce a copy of the tree", () => { + const arity = 5; + const mt1 = new IncrementalQuinTree(arity, 0n, 5, hash5); + + const mt2 = mt1.copy(); + + expect(mt2.root).to.eq(mt1.root); + expect(mt2.zeros).to.deep.eq(mt1.zeros); + expect(mt2.numNodes).to.eq(mt1.numNodes); + expect(mt2.arity).to.eq(mt1.arity); + }); + }); +}); diff --git a/crypto/ts/index.ts b/crypto/ts/index.ts index 5d28ddf19..060b5f44e 100644 --- a/crypto/ts/index.ts +++ b/crypto/ts/index.ts @@ -1,9 +1,9 @@ -import "./@types"; - export { AccQueue } from "./AccQueue"; export { calcDepthFromNumLeaves, genTreeCommitment, genTreeProof } from "./utils"; +export { IncrementalQuinTree } from "./quinTree"; + export { bigInt2Buffer, stringifyBigInts, unstringifyBigInts, deepCopyBigIntArray } from "./bigIntUtils"; export { NOTHING_UP_MY_SLEEVE, SNARK_FIELD_SIZE } from "./constants"; @@ -23,8 +23,6 @@ export { G1Point, G2Point, genRandomBabyJubValue } from "./babyjub"; export { sha256Hash, hashLeftRight, hashN, hash2, hash3, hash4, hash5, hash13, hashOne } from "./hashing"; -export { OptimisedMT as IncrementalQuinTree, type PathElements } from "optimisedmt"; - export { poseidonDecrypt, poseidonEncrypt } from "@zk-kit/poseidon-cipher"; export { verifySignature, signMessage as sign } from "@zk-kit/eddsa-poseidon"; @@ -41,4 +39,5 @@ export type { Signature, PoseidonFuncs, Leaf, + PathElements, } from "./types"; diff --git a/crypto/ts/quinTree.ts b/crypto/ts/quinTree.ts new file mode 100644 index 000000000..9004138e9 --- /dev/null +++ b/crypto/ts/quinTree.ts @@ -0,0 +1,377 @@ +import type { Leaf, Node, IMerkleProof } from "./types"; + +/** + * An implementation of an incremental Merkle tree + * @dev adapted from https://github.com/weijiekoh/optimisedmt + */ +export class IncrementalQuinTree { + // how many levels + depth: number; + + // the zero value + zeroValue: bigint; + + // the number of leaves per node + arity: number; + + // the hash function used in the tree + hashFunc: (leaves: Leaf[]) => bigint; + + // The the smallest empty leaf index + nextIndex = 0; + + // Contains the zero value per level. i.e. zeros[0] is zeroValue, + // zeros[1] is the hash of leavesPerNode zeros, and so on. + zeros: bigint[] = []; + + root: bigint; + + nodes: Node; + + numNodes: number; + + capacity: number; + + /** + * Create a new instance of the MaciQuinTree + * @param depth The depth of the tree + * @param zeroValue The zero value of the tree + * @param arity The arity of the tree + * @param hashFunc The hash function of the tree + */ + constructor(depth: number, zeroValue: bigint, arity: number, hashFunc: (leaves: bigint[]) => bigint) { + this.depth = depth; + this.zeroValue = zeroValue; + this.arity = arity; + this.hashFunc = hashFunc; + + // calculate the initial values + const { zeros, root } = this.calcInitialVals(this.arity, this.depth, this.zeroValue, this.hashFunc); + this.zeros = zeros; + this.root = root; + + // calculate the number of nodes + this.numNodes = (this.arity ** (this.depth + 1) - 1) / (this.arity - 1); + + // initialize the nodes + this.nodes = {}; + // set the root node + this.nodes[this.numNodes - 1] = root; + // calculate the capacity + this.capacity = this.arity ** this.depth; + } + + /** + * Insert a leaf at the next available index + * @param value The value to insert + */ + insert(value: Leaf): void { + // update the node with this leaf + this.update(this.nextIndex, value); + this.nextIndex += 1; + } + + /** + * Update a leaf at a given index + * @param index The index of the leaf to update + * @param value The value to update the leaf with + */ + update(index: number, value: Leaf): void { + // Set the leaf value + this.setNode(index, value); + + // Set the parent leaf value + // Get the parent indices + const parentIndices = this.calcParentIndices(index); + + parentIndices.forEach((parentIndex) => { + const childIndices = this.calcChildIndices(parentIndex); + + const elements: Leaf[] = []; + childIndices.forEach((childIndex) => { + elements.push(this.getNode(childIndex)); + }); + this.nodes[parentIndex] = this.hashFunc(elements); + }); + + this.root = this.nodes[this.numNodes - 1]; + } + + /** + * Calculate the indices of the leaves in the path to the root + * @param index The index of the leaf + * @returns The indices of the leaves in the path to the root + */ + calcLeafIndices(index: number): number[] { + const indices = new Array(this.depth); + + let r = index; + for (let i = 0; i < this.depth; i += 1) { + indices[i] = r % this.arity; + r = Math.floor(r / this.arity); + } + + return indices; + } + + /** + * Generate a proof for a given leaf index + * @param index The index of the leaf to generate a proof for + * @returns The proof + */ + genProof(index: number): IMerkleProof { + if (index < 0) { + throw new Error("The leaf index must be greater or equal to 0"); + } + + if (index >= this.capacity) { + throw new Error("+The leaf index must be less than the tree capacity"); + } + + const pathElements: bigint[][] = []; + const indices = this.calcLeafIndices(index); + + // Calculate path elements + let leafIndex = index; + let offset = 0; + + for (let i = 0; i < this.depth; i += 1) { + const elements: bigint[] = []; + const start = leafIndex - (leafIndex % this.arity) + offset; + + for (let j = 0; j < this.arity; j += 1) { + if (j !== indices[i]) { + const node = this.getNode(start + j); + elements.push(node); + } + } + + pathElements.push(elements); + leafIndex = Math.floor(leafIndex / this.arity); + offset += this.arity ** (this.depth - i); + } + + return { + pathElements, + pathIndices: indices, + root: this.root, + leaf: this.getNode(index), + }; + } + + /** + * Generates a Merkle proof from a subroot to the root. + * @param startIndex The index of the first leaf + * @param endIndex The index of the last leaf + * @returns The Merkle proof + */ + genSubrootProof( + // inclusive + startIndex: number, + // exclusive + endIndex: number, + ): IMerkleProof { + // The end index must be greater than the start index + if (startIndex >= endIndex) { + throw new Error("The start index must be less than the end index"); + } + + if (startIndex < 0) { + throw new Error("The start index must be greater or equal to 0"); + } + + // count the number of leaves + const numLeaves = endIndex - startIndex; + + // The number of leaves must be a multiple of the tree arity + if (numLeaves % this.arity !== 0) { + throw new Error("The number of leaves must be a multiple of the tree arity"); + } + + // The number of leaves must be lower than the maximum tree capacity + if (numLeaves >= this.capacity) { + throw new Error("The number of leaves must be less than the tree capacity"); + } + + // Calculate the subdepth + let subDepth = 0; + while (numLeaves !== this.arity ** subDepth && subDepth < this.depth) { + subDepth += 1; + } + + const subTree = new IncrementalQuinTree(subDepth, this.zeroValue, this.arity, this.hashFunc); + + for (let i = startIndex; i < endIndex; i += 1) { + subTree.insert(this.getNode(i)); + } + + const fullPath = this.genProof(startIndex); + fullPath.pathIndices = fullPath.pathIndices.slice(subDepth, this.depth); + fullPath.pathElements = fullPath.pathElements.slice(subDepth, this.depth); + fullPath.leaf = subTree.root; + + return fullPath; + } + + /** + * Verify a proof + * @param proof The proof to verify + * @returns Wether the proof is valid + */ + verifyProof = (proof: IMerkleProof): boolean => { + const { pathElements, leaf, root, pathIndices } = proof; + + // Hash the first level + const firstLevel: bigint[] = pathElements[0].map(BigInt); + + firstLevel.splice(Number(pathIndices[0]), 0, leaf); + + let currentLevelHash: bigint = this.hashFunc(firstLevel); + + // Verify the proof + for (let i = 1; i < pathElements.length; i += 1) { + const level: bigint[] = pathElements[i].map(BigInt); + level.splice(Number(pathIndices[i]), 0, currentLevelHash); + + currentLevelHash = this.hashFunc(level); + } + + // the path is valid if the root matches the calculated root + return currentLevelHash === root; + }; + + /** + * Calculate the indices of the parent + * @param index The index of the leaf + * @returns The indices of the parent + */ + calcParentIndices(index: number): number[] { + // can only calculate the parent for leaves not subroots + if (index >= this.capacity || index < 0) { + throw new Error(`Index ${index} is out of bounds. Can only get parents of leaves`); + } + + const indices = new Array(this.depth); + let r = index; + let levelCapacity = 0; + + for (let i = 0; i < this.depth; i += 1) { + levelCapacity += this.arity ** (this.depth - i); + r = Math.floor(r / this.arity); + indices.push(levelCapacity + r); + } + + return indices; + } + + /** + * Calculate the indices of the children of a node + * @param index The index of the node + * @returns The indices of the children + */ + calcChildIndices(index: number): number[] { + // cannot get the children of a leaf + if (index < this.capacity || index < 0) { + throw new Error(`Index ${index} is out of bounds. Can only get children of subroots`); + } + + // find the level + let level = 0; + let r = this.arity ** level; + do { + level += 1; + r += this.arity ** level; + } while (index >= r); + + const start = (index - this.arity ** level) * this.arity; + const indices = Array(this.arity) + .fill(0) + .map((_, i) => start + i); + + return indices; + } + + /** + * Get a node at a given index + * @param index The index of the node + * @returns The node + */ + getNode(index: number): Leaf { + // if we have it, just return it + if (this.nodes[index]) { + return this.nodes[index]; + } + + // find the zero value at that level + // first need to find the level + let runningTotal = 0; + let level = this.depth; + + while (level >= 0) { + runningTotal += this.arity ** level; + if (index < runningTotal) { + break; + } + + level -= 1; + } + + return this.zeros[this.depth - level]; + } + + /** + * Set a node (not the root) + * @param index the index of the node + * @param value the value of the node + */ + setNode(index: number, value: Leaf): void { + if (index > this.numNodes - 1 || index < 0) { + throw new Error("Index out of bounds"); + } + this.nodes[index] = value; + } + + /** + * Copy the tree to a new instance + * @returns The new instance + */ + copy(): IncrementalQuinTree { + const newTree = new IncrementalQuinTree(this.depth, this.zeroValue, this.arity, this.hashFunc); + + newTree.nodes = this.nodes; + newTree.numNodes = this.numNodes; + newTree.zeros = this.zeros; + newTree.root = this.root; + newTree.nextIndex = this.nextIndex; + + return newTree; + } + + /** + * Calculate the zeroes and the root of a tree + * @param arity The arity of the tree + * @param depth The depth of the tree + * @param zeroValue The zero value of the tree + * @param hashFunc The hash function of the tree + * @returns The zeros and the root + */ + private calcInitialVals = ( + arity: number, + depth: number, + zeroValue: bigint, + hashFunc: (leaves: bigint[]) => bigint, + ): { zeros: bigint[]; root: bigint } => { + const zeros: bigint[] = []; + let currentLevelHash = zeroValue; + + for (let i = 0; i < depth; i += 1) { + zeros.push(currentLevelHash); + + const z = Array(arity).fill(currentLevelHash); + + currentLevelHash = hashFunc(z); + } + + return { zeros, root: currentLevelHash }; + }; +} diff --git a/crypto/ts/types.ts b/crypto/ts/types.ts index 772c3559e..52e337175 100644 --- a/crypto/ts/types.ts +++ b/crypto/ts/types.ts @@ -20,6 +20,9 @@ export type Plaintext = N[]; // a ciphertext is an array of BigNumbers export type Ciphertext = N[]; +// a merkle tree path elements +export type PathElements = bigint[][]; + /** * A acc queue */ @@ -60,6 +63,17 @@ export interface PoseidonFuncs { // a leaf is a single BigNumber export type Leaf = bigint; +// a node is a leaf or subroot in a quinary merkle tree +export type Node = Record; + +// a merkle proof is a set of path elements, path indices, and a root +export interface IMerkleProof { + pathElements: Leaf[][]; + pathIndices: number[]; + root: Leaf; + leaf: Leaf; +} + export type StringifiedBigInts = | StringifiedBigInts[] | string diff --git a/crypto/ts/utils.ts b/crypto/ts/utils.ts index 5a01f7566..86667c4d3 100644 --- a/crypto/ts/utils.ts +++ b/crypto/ts/utils.ts @@ -1,6 +1,5 @@ -import { OptimisedMT as IncrementalQuinTree } from "optimisedmt"; - import { hash5, hashLeftRight } from "./hashing"; +import { IncrementalQuinTree } from "./quinTree"; /** * Calculate the depth of a tree given the number of leaves @@ -29,7 +28,7 @@ export const calcDepthFromNumLeaves = (hashLength: number, numLeaves: number): n * @returns The hash of the leaves and the salt, with the salt last */ export const genTreeCommitment = (leaves: bigint[], salt: bigint, depth: number): bigint => { - const tree = new IncrementalQuinTree(depth, BigInt(0), 5, hash5); + const tree = new IncrementalQuinTree(depth, 0n, 5, hash5); leaves.forEach((leaf) => { tree.insert(leaf); @@ -46,11 +45,11 @@ export const genTreeCommitment = (leaves: bigint[], salt: bigint, depth: number) * @returns The proof */ export const genTreeProof = (index: number, leaves: bigint[], depth: number): bigint[][] => { - const tree = new IncrementalQuinTree(depth, BigInt(0), 5, hash5); + const tree = new IncrementalQuinTree(depth, 0n, 5, hash5); leaves.forEach((leaf) => { tree.insert(leaf); }); - const proof = tree.genMerklePath(index); + const proof = tree.genProof(index); return proof.pathElements; }; diff --git a/package.json b/package.json index 4d1866d02..8ef8e09ba 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/privacy-scaling-explorations/maci", "license": "MIT", "scripts": { + "benchmarks": "lerna run benchmarks", "build": "lerna run build --ignore=website", "build:circuits-c": "lerna run build-test-circuits-c -- --outPath ../cli/zkeys --scope \"maci-circuits\"", "build:circuits-wasm": "lerna run build-test-circuits-wasm -- --outPath ../cli/zkeys --scope \"maci-circuits\"", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df6ebb456..f80fdb169 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -153,9 +153,6 @@ importers: '@nomicfoundation/hardhat-toolbox': specifier: ^4.0.0 version: 4.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.3)(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-network-helpers@1.0.10)(@nomicfoundation/hardhat-verify@2.0.3)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.11)(@types/mocha@10.0.6)(@types/node@20.11.2)(chai@4.4.0)(ethers@6.10.0)(hardhat-gas-reporter@1.0.9)(hardhat@2.19.4)(solidity-coverage@0.8.5)(ts-node@10.9.2)(typechain@8.3.2)(typescript@5.3.3) - big-integer: - specifier: ^1.6.52 - version: 1.6.52 commander: specifier: ^11.1.0 version: 11.1.0 @@ -309,6 +306,9 @@ importers: '@types/node': specifier: ^20.11.2 version: 20.11.2 + benny: + specifier: ^3.7.1 + version: 3.7.1 chai: specifier: ^4.3.10 version: 4.4.0 @@ -321,6 +321,9 @@ importers: ts-mocha: specifier: ^10.0.0 version: 10.0.0(mocha@10.2.0) + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@20.11.2)(typescript@5.3.3) crypto: dependencies: @@ -333,15 +336,9 @@ importers: '@zk-kit/poseidon-cipher': specifier: ^0.1.1 version: 0.1.1 - big-integer: - specifier: ^1.6.52 - version: 1.6.52 ethers: - specifier: ^6.10.0 + specifier: ^6.9.2 version: 6.10.0 - optimisedmt: - specifier: ^0.0.9 - version: 0.0.9 devDependencies: '@types/chai': specifier: ^4.3.11 @@ -352,6 +349,9 @@ importers: '@types/node': specifier: ^20.11.2 version: 20.11.2 + benny: + specifier: ^3.7.1 + version: 3.7.1 chai: specifier: ^4.3.10 version: 4.4.0 @@ -364,6 +364,9 @@ importers: ts-mocha: specifier: ^10.0.0 version: 10.0.0(mocha@10.2.0) + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@20.11.2)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -667,6 +670,35 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 + /@arrows/array@1.4.1: + resolution: {integrity: sha512-MGYS8xi3c4tTy1ivhrVntFvufoNzje0PchjEz6G/SsWRgUKxL4tKwS6iPdO8vsaJYldagAeWMd5KRD0aX3Q39g==} + dependencies: + '@arrows/composition': 1.2.2 + dev: true + + /@arrows/composition@1.2.2: + resolution: {integrity: sha512-9fh1yHwrx32lundiB3SlZ/VwuStPB4QakPsSLrGJFH6rCXvdrd060ivAZ7/2vlqPnEjBkPRRXOcG1YOu19p2GQ==} + dev: true + + /@arrows/dispatch@1.0.3: + resolution: {integrity: sha512-v/HwvrFonitYZM2PmBlAlCqVqxrkIIoiEuy5bQgn0BdfvlL0ooSBzcPzTMrtzY8eYktPyYcHg8fLbSgyybXEqw==} + dependencies: + '@arrows/composition': 1.2.2 + dev: true + + /@arrows/error@1.0.2: + resolution: {integrity: sha512-yvkiv1ay4Z3+Z6oQsUkedsQm5aFdyPpkBUQs8vejazU/RmANABx6bMMcBPPHI4aW43VPQmXFfBzr/4FExwWTEA==} + dev: true + + /@arrows/multimethod@1.4.1: + resolution: {integrity: sha512-AZnAay0dgPnCJxn3We5uKiB88VL+1ZIF2SjZohLj6vqY2UyvB/sKdDnFP+LZNVsTC5lcnGPmLlRRkAh4sXkXsQ==} + dependencies: + '@arrows/array': 1.4.1 + '@arrows/composition': 1.2.2 + '@arrows/error': 1.0.2 + fast-deep-equal: 3.1.3 + dev: true + /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -3083,26 +3115,12 @@ packages: resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@ethereumjs/common@2.6.5: - resolution: {integrity: sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==} - dependencies: - crc-32: 1.2.2 - ethereumjs-util: 7.1.5 - dev: false - /@ethereumjs/rlp@4.0.1: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} hasBin: true dev: false - /@ethereumjs/tx@3.5.2: - resolution: {integrity: sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==} - dependencies: - '@ethereumjs/common': 2.6.5 - ethereumjs-util: 7.1.5 - dev: false - /@ethereumjs/util@8.1.0: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} @@ -4925,13 +4943,6 @@ packages: - supports-color dev: false - /@szmarczak/http-timer@4.0.6: - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - dependencies: - defer-to-connect: 2.0.1 - dev: false - /@szmarczak/http-timer@5.0.1: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -5051,15 +5062,6 @@ packages: '@types/node': 20.11.2 dev: false - /@types/cacheable-request@6.0.3: - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 20.11.2 - '@types/responselike': 1.0.3 - dev: false - /@types/chai-as-promised@7.1.8: resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} dependencies: @@ -5204,12 +5206,6 @@ packages: resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} dev: false - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 20.11.2 - dev: false - /@types/lru-cache@5.1.1: resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} @@ -5257,10 +5253,6 @@ packages: resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: false - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: false - /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: false @@ -5350,12 +5342,6 @@ packages: '@types/node': 20.11.2 safe-buffer: 5.1.2 - /@types/responselike@1.0.3: - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - dependencies: - '@types/node': 20.11.2 - dev: false - /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} dev: false @@ -5738,10 +5724,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /abortcontroller-polyfill@1.7.5: - resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} - dev: false - /abstract-level@1.0.3: resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} engines: {node: '>=12'} @@ -6171,27 +6153,6 @@ packages: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: false - /asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - dev: false - - /assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - dependencies: - call-bind: 1.0.5 - is-nan: 1.3.2 - object-is: 1.1.5 - object.assign: 4.1.5 - util: 0.12.5 - dev: false - /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -6211,10 +6172,6 @@ packages: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true - /async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - dev: false - /async@1.5.2: resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} dev: false @@ -6265,14 +6222,6 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - /aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - dev: false - - /aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} - dev: false - /axe-core@4.7.0: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} engines: {node: '>=4'} @@ -6369,12 +6318,6 @@ packages: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: false - /bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - dependencies: - tweetnacl: 0.14.5 - dev: false - /bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} @@ -6382,6 +6325,28 @@ packages: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: true + /benchmark@2.1.4: + resolution: {integrity: sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==} + dependencies: + lodash: 4.17.21 + platform: 1.3.6 + dev: true + + /benny@3.7.1: + resolution: {integrity: sha512-USzYxODdVfOS7JuQq/L0naxB788dWCiUgUTxvN+WLPt/JfcDURNNj8kN/N+uK6PDvuR67/9/55cVKGPleFQINA==} + engines: {node: '>=12'} + dependencies: + '@arrows/composition': 1.2.2 + '@arrows/dispatch': 1.0.3 + '@arrows/multimethod': 1.4.1 + benchmark: 2.1.4 + common-tags: 1.8.2 + fs-extra: 10.1.0 + json2csv: 5.0.7 + kleur: 4.1.5 + log-update: 4.0.0 + dev: true + /bfj@7.1.0: resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} engines: {node: '>= 8.0.0'} @@ -6392,11 +6357,6 @@ packages: jsonpath: 1.1.1 tryer: 1.0.1 - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: false - /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: false @@ -6405,10 +6365,6 @@ packages: resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} engines: {node: '>=14.0.0'} - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false - /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -6480,26 +6436,6 @@ packages: - supports-color dev: false - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - /bonjour-service@1.2.1: resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} dependencies: @@ -6605,10 +6541,6 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - /buffer-to-arraybuffer@0.0.5: - resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} - dev: false - /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} @@ -6617,6 +6549,7 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -6624,14 +6557,6 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 - /bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.0 - dev: false - /builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} dev: true @@ -6692,16 +6617,6 @@ packages: unique-filename: 3.0.0 dev: true - /cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - dev: false - - /cacheable-lookup@6.1.0: - resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} - engines: {node: '>=10.6.0'} - dev: false - /cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -6718,19 +6633,6 @@ packages: normalize-url: 8.0.0 responselike: 3.0.0 - /cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - dev: false - /cachedir@2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} @@ -6943,10 +6845,6 @@ packages: optionalDependencies: fsevents: 2.3.3 - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: false - /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -6963,18 +6861,6 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - /cids@0.7.5: - resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} - engines: {node: '>=4.0.0', npm: '>=3.0.0'} - deprecated: This module has been superseded by the multiformats module - dependencies: - buffer: 5.7.1 - class-is: 1.1.0 - multibase: 0.6.1 - multicodec: 1.0.4 - multihashes: 0.4.21 - dev: false - /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: @@ -7022,21 +6908,6 @@ packages: resolution: {integrity: sha512-O7NQ8OS+J4eshBuoy36z/TwQU0YHw8W3zxZcs4hVwpEll3e4hDm3mgkIPqItN8FDeLEKZFK3YeT/+k8TiLF3/A==} dev: false - /circomlibjs@0.0.8: - resolution: {integrity: sha512-oZFYapLO0mfiA+i2GU/V7bRNEEPjVcwV4M444nU5lNsdSJpqLwD57m9zxTD5m/KeY7WQ3lEAC9NNKEPQHu7s1w==} - dependencies: - blake-hash: 2.0.0 - blake2b: 2.1.4 - ffjavascript: 0.2.63 - web3: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: false - /circomlibjs@0.1.7: resolution: {integrity: sha512-GRAUoAlKAsiiTa+PA725G9RmEmJJRc8tRFxw/zKktUxlQISGznT4hH4ESvW8FNTsrGg/nNd06sGP/Wlx0LUHVg==} dependencies: @@ -7049,10 +6920,6 @@ packages: - utf-8-validate dev: false - /class-is@1.1.0: - resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} - dev: false - /classic-level@1.3.0: resolution: {integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==} engines: {node: '>=12'} @@ -7167,12 +7034,6 @@ packages: kind-of: 6.0.3 shallow-clone: 3.0.1 - /clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - dependencies: - mimic-response: 1.0.1 - dev: false - /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -7298,6 +7159,11 @@ packages: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} + /commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: true + /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -7336,6 +7202,11 @@ packages: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} dev: false + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true @@ -7438,14 +7309,6 @@ packages: safe-buffer: 5.2.1 dev: false - /content-hash@2.5.2: - resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} - dependencies: - cids: 0.7.5 - multicodec: 0.5.7 - multihashes: 0.4.21 - dev: false - /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -7605,21 +7468,9 @@ packages: requiresBuild: true dev: false - /core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - dev: false - /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - dev: false - /cosmiconfig-typescript-loader@5.0.0(@types/node@20.11.2)(cosmiconfig@8.3.6)(typescript@5.3.3): resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} engines: {node: '>=v16'} @@ -7699,14 +7550,6 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - /cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -7932,13 +7775,6 @@ packages: - typescript dev: true - /d@1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} - dependencies: - es5-ext: 0.10.62 - type: 1.2.0 - dev: false - /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true @@ -7948,13 +7784,6 @@ packages: engines: {node: '>=8'} dev: true - /dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} - dependencies: - assert-plus: 1.0.0 - dev: false - /dateformat@3.0.3: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} dev: true @@ -8023,18 +7852,6 @@ packages: dependencies: character-entities: 2.0.2 - /decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - dev: false - - /decompress-response@3.3.0: - resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} - engines: {node: '>=4'} - dependencies: - mimic-response: 1.0.1 - dev: false - /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -8268,10 +8085,6 @@ packages: entities: 4.5.0 dev: false - /dom-walk@0.1.2: - resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} - dev: false - /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} dev: false @@ -8342,13 +8155,6 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - dev: false - /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false @@ -8414,6 +8220,7 @@ packages: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 + dev: true /enhanced-resolve@5.15.0: resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} @@ -8551,39 +8358,10 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 - /es5-ext@0.10.62: - resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} - engines: {node: '>=0.10'} - requiresBuild: true - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.3 - next-tick: 1.1.0 - dev: false - /es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true - /es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-symbol: 3.1.3 - dev: false - - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: false - - /es6-symbol@3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} - dependencies: - d: 1.0.1 - ext: 1.7.0 - dev: false - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -9054,13 +8832,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /eth-ens-namehash@2.0.8: - resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==} - dependencies: - idna-uts46-hx: 2.3.1 - js-sha3: 0.5.7 - dev: false - /eth-gas-reporter@0.2.27: resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} peerDependencies: @@ -9088,29 +8859,6 @@ packages: - utf-8-validate dev: false - /eth-lib@0.1.29: - resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.4 - nano-json-stream-parser: 0.1.2 - servify: 0.1.12 - ws: 3.3.3 - xhr-request-promise: 0.1.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - - /eth-lib@0.2.8: - resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.4 - xhr-request-promise: 0.1.3 - dev: false - /ethereum-bloom-filters@1.0.10: resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} dependencies: @@ -9248,6 +8996,7 @@ packages: dependencies: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 + bundledDependencies: false /eval@0.1.8: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} @@ -9257,10 +9006,6 @@ packages: require-like: 0.1.2 dev: false - /eventemitter3@4.0.4: - resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} - dev: false - /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -9372,12 +9117,6 @@ packages: - supports-color dev: false - /ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - dependencies: - type: 2.7.2 - dev: false - /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -9397,11 +9136,6 @@ packages: tmp: 0.0.33 dev: true - /extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - dev: false - /eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} @@ -9680,10 +9414,6 @@ packages: signal-exit: 4.1.0 dev: true - /forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - dev: false - /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.56.0)(typescript@5.3.3)(webpack@5.89.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} @@ -9716,23 +9446,10 @@ packages: webpack: 5.89.0 dev: false - /form-data-encoder@1.7.1: - resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} - dev: false - /form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - /form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - /form-data@2.5.1: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} engines: {node: '>= 0.12'} @@ -9796,7 +9513,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: false /fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} @@ -9806,14 +9522,6 @@ packages: jsonfile: 6.1.0 universalify: 2.0.1 - /fs-extra@4.0.3: - resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: false - /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -9840,12 +9548,6 @@ packages: jsonfile: 6.1.0 universalify: 2.0.1 - /fs-minipass@1.2.7: - resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} - dependencies: - minipass: 2.9.0 - dev: false - /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -9964,13 +9666,6 @@ packages: engines: {node: '>=8'} dev: true - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: false - /get-stream@6.0.0: resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==} engines: {node: '>=10'} @@ -9998,12 +9693,6 @@ packages: resolve-pkg-maps: 1.0.0 dev: true - /getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - dependencies: - assert-plus: 1.0.0 - dev: false - /ghost-testrpc@0.0.2: resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} hasBin: true @@ -10224,13 +9913,6 @@ packages: which: 1.3.1 dev: false - /global@4.4.0: - resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} - dependencies: - min-document: 2.19.0 - process: 0.11.10 - dev: false - /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -10288,42 +9970,6 @@ packages: dependencies: get-intrinsic: 1.2.2 - /got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - dev: false - - /got@12.1.0: - resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} - engines: {node: '>=14.16'} - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 5.0.1 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 6.1.0 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - form-data-encoder: 1.7.1 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 2.0.1 - dev: false - /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -10382,20 +10028,6 @@ packages: optionalDependencies: uglify-js: 3.17.4 - /har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - dev: false - - /har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - dependencies: - ajv: 6.12.6 - har-schema: 2.0.0 - dev: false - /hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} @@ -10928,10 +10560,6 @@ packages: statuses: 2.0.1 toidentifier: 1.0.1 - /http-https@1.0.0: - resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} - dev: false - /http-parser-js@0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: false @@ -10993,23 +10621,6 @@ packages: '@types/node': 10.17.60 dev: false - /http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} - dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.2 - sshpk: 1.18.0 - dev: false - - /http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - dev: false - /http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -11088,13 +10699,6 @@ packages: postcss: 8.4.33 dev: false - /idna-uts46-hx@2.3.1: - resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} - engines: {node: '>=4.0.0'} - dependencies: - punycode: 2.1.0 - dev: false - /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -11409,10 +11013,6 @@ packages: get-east-asian-width: 1.2.0 dev: true - /is-function@1.0.2: - resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} - dev: false - /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -11453,14 +11053,6 @@ packages: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - dev: false - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -11832,10 +11424,6 @@ packages: /js-sdsl@4.4.2: resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} - /js-sha3@0.5.7: - resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} - dev: false - /js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} @@ -11855,10 +11443,6 @@ packages: dependencies: argparse: 2.0.1 - /jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - dev: false - /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -11908,15 +11492,23 @@ packages: /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: false - /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true + + /json2csv@5.0.7: + resolution: {integrity: sha512-YRZbUnyaJZLZUJSRi2G/MqahCyRv9n/ds+4oIetjDF3jWQA7AG7iSeKTiZiCNqtMZM7HDyt0e/W6lEnoGEmMGA==} + engines: {node: '>= 10', npm: '>= 6.13.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + hasBin: true + dependencies: + commander: 6.2.1 + jsonparse: 1.3.1 + lodash.get: 4.4.2 + dev: true /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -11968,16 +11560,6 @@ packages: resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} dev: false - /jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - dev: false - /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -12029,6 +11611,11 @@ packages: engines: {node: '>=6'} dev: false + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true @@ -12341,6 +11928,10 @@ packages: resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} dev: true + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: false @@ -12406,6 +11997,16 @@ packages: chalk: 4.1.2 is-unicode-supported: 0.1.0 + /log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} @@ -12450,11 +12051,6 @@ packages: tslib: 2.6.2 dev: false - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: false - /lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -13335,11 +12931,6 @@ packages: engines: {node: '>=12'} dev: true - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: false - /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -13348,12 +12939,6 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} - dependencies: - dom-walk: 0.1.2 - dev: false - /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -13481,13 +13066,6 @@ packages: minipass: 3.3.6 dev: true - /minipass@2.9.0: - resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} - dependencies: - safe-buffer: 5.2.1 - yallist: 3.1.1 - dev: false - /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -13510,12 +13088,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dev: true - /minizlib@1.3.3: - resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} - dependencies: - minipass: 2.9.0 - dev: false - /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -13524,14 +13096,6 @@ packages: yallist: 4.0.0 dev: true - /mkdirp-promise@5.0.1: - resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} - engines: {node: '>=4'} - deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. - dependencies: - mkdirp: 3.0.1 - dev: false - /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -13543,12 +13107,6 @@ packages: engines: {node: '>=10'} hasBin: true - /mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - dev: false - /mnemonist@0.38.5: resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} dependencies: @@ -13581,10 +13139,6 @@ packages: yargs-parser: 20.2.4 yargs-unparser: 2.0.0 - /mock-fs@4.14.0: - resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} - dev: false - /modify-values@1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} engines: {node: '>=0.10.0'} @@ -13609,22 +13163,6 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /multibase@0.6.1: - resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} - deprecated: This module has been superseded by the multiformats module - dependencies: - base-x: 3.0.9 - buffer: 5.7.1 - dev: false - - /multibase@0.7.0: - resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} - deprecated: This module has been superseded by the multiformats module - dependencies: - base-x: 3.0.9 - buffer: 5.7.1 - dev: false - /multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true @@ -13633,29 +13171,6 @@ packages: thunky: 1.1.0 dev: false - /multicodec@0.5.7: - resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} - deprecated: This module has been superseded by the multiformats module - dependencies: - varint: 5.0.2 - dev: false - - /multicodec@1.0.4: - resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} - deprecated: This module has been superseded by the multiformats module - dependencies: - buffer: 5.7.1 - varint: 5.0.2 - dev: false - - /multihashes@0.4.21: - resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} - dependencies: - buffer: 5.7.1 - multibase: 0.7.0 - varint: 5.0.2 - dev: false - /multimatch@5.0.0: resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} engines: {node: '>=10'} @@ -13675,10 +13190,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /nano-json-stream-parser@0.1.2: - resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} - dev: false - /nanoassert@2.0.0: resolution: {integrity: sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==} @@ -13706,10 +13217,6 @@ packages: /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - /next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - dev: false - /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: @@ -13752,18 +13259,6 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -14138,10 +13633,6 @@ packages: - supports-color dev: true - /oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - dev: false - /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -14149,14 +13640,6 @@ packages: /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - dev: false - /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -14216,12 +13699,6 @@ packages: /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} - /oboe@2.1.5: - resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} - dependencies: - http-https: 1.0.0 - dev: false - /obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: false @@ -14269,19 +13746,6 @@ packages: hasBin: true dev: false - /optimisedmt@0.0.9: - resolution: {integrity: sha512-NgpgliUnd8hY8HG3i+mUJ8n+g4zuv/GrcMQDciOZC8OEOYSiBr2gUlM/trnh28YFKKm0VInMECEOA6nr1swoEg==} - dependencies: - assert: 2.1.0 - circomlibjs: 0.0.8 - ffjavascript: 0.2.62 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: false - /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -14327,11 +13791,6 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - /p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - dev: false - /p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -14541,10 +14000,6 @@ packages: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - /parse-headers@2.0.5: - resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} - dev: false - /parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -14687,10 +14142,6 @@ packages: safe-buffer: 5.2.1 sha.js: 2.4.11 - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: false - /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -14751,6 +14202,10 @@ packages: find-up: 3.0.0 dev: false + /platform@1.3.6: + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + dev: true + /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -15197,6 +14652,7 @@ packages: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true + requiresBuild: true /prettier@3.2.2: resolution: {integrity: sha512-HTByuKZzw7utPiDO523Tt2pLtEyK7OibUD9suEJQrPUCYQqrHr74GGX6VidMrovbf/I50mPqr8j/II6oBAuc5A==} @@ -15255,11 +14711,6 @@ packages: fromentries: 1.3.2 dev: true - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: false - /promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -15337,26 +14788,10 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: false - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: false - /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: false - /punycode@2.1.0: - resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} - engines: {node: '>=6'} - dev: false - /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -15382,20 +14817,6 @@ packages: side-channel: 1.0.4 dev: false - /qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} - engines: {node: '>=0.6'} - dev: false - - /query-string@5.1.1: - resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} - engines: {node: '>=0.10.0'} - dependencies: - decode-uri-component: 0.2.2 - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - dev: false - /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -16003,33 +15424,6 @@ packages: resolve-from: 3.0.0 dev: false - /request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - dependencies: - aws-sign2: 0.7.0 - aws4: 1.12.0 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.3 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 - dev: false - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -16123,12 +15517,6 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - dependencies: - lowercase-keys: 2.0.0 - dev: false - /responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} @@ -16463,19 +15851,6 @@ packages: - supports-color dev: false - /servify@0.1.12: - resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} - engines: {node: '>=6'} - dependencies: - body-parser: 1.20.2 - cors: 2.8.5 - express: 4.18.2 - request: 2.88.2 - xhr: 2.6.0 - transitivePeerDependencies: - - supports-color - dev: false - /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true @@ -16604,18 +15979,6 @@ packages: - supports-color dev: true - /simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - dev: false - - /simple-get@2.8.2: - resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} - dependencies: - decompress-response: 3.3.0 - once: 1.4.0 - simple-concat: 1.0.1 - dev: false - /sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -16978,22 +16341,6 @@ packages: engines: {node: '>=12'} dev: false - /sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - dev: false - /ssri@10.0.5: resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -17041,11 +16388,6 @@ packages: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} dev: false - /strict-uri-encode@1.1.0: - resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} - engines: {node: '>=0.10.0'} - dev: false - /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -17292,26 +16634,6 @@ packages: stable: 0.1.8 dev: false - /swarm-js@0.1.42: - resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} - dependencies: - bluebird: 3.7.2 - buffer: 5.7.1 - eth-lib: 0.1.29 - fs-extra: 4.0.3 - got: 11.8.6 - mime-types: 2.1.35 - mkdirp-promise: 5.0.1 - mock-fs: 4.14.0 - setimmediate: 1.0.5 - tar: 4.4.19 - xhr-request: 1.1.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - /sync-request@6.1.0: resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} engines: {node: '>=8.0.0'} @@ -17375,19 +16697,6 @@ packages: readable-stream: 3.6.2 dev: true - /tar@4.4.19: - resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} - engines: {node: '>=4.5'} - dependencies: - chownr: 1.1.4 - fs-minipass: 1.2.7 - minipass: 2.9.0 - minizlib: 1.3.3 - mkdirp: 0.5.6 - safe-buffer: 5.2.1 - yallist: 3.1.1 - dev: false - /tar@6.1.11: resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} engines: {node: '>= 10'} @@ -17509,11 +16818,6 @@ packages: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: false - /timed-out@4.0.1: - resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} - engines: {node: '>=0.10.0'} - dev: false - /tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} dev: false @@ -17559,16 +16863,9 @@ packages: engines: {node: '>=6'} dev: false - /tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - dev: false - /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -17723,19 +17020,9 @@ packages: - supports-color dev: true - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - dependencies: - safe-buffer: 5.2.1 - dev: false - /tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} - /tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - dev: false - /tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} @@ -17810,14 +17097,6 @@ packages: mime-types: 2.1.35 dev: false - /type@1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - dev: false - - /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - dev: false - /typechain@8.3.2(typescript@5.3.3): resolution: {integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==} hasBin: true @@ -17926,10 +17205,6 @@ packages: requiresBuild: true optional: true - /ultron@1.1.1: - resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} - dev: false - /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -18129,18 +17404,6 @@ packages: webpack: 5.89.0 dev: false - /url-set-query@1.0.0: - resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} - dev: false - - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.0 - dev: false - /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} dev: false @@ -18171,12 +17434,6 @@ packages: engines: {node: '>= 0.4.0'} dev: false - /uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - dev: false - /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -18184,6 +17441,7 @@ packages: /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + dev: true /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -18212,24 +17470,11 @@ packages: resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} dev: false - /varint@5.0.2: - resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} - dev: false - /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: false - /verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - dev: false - /vfile-location@5.0.2: resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} dependencies: @@ -18327,246 +17572,6 @@ packages: /web-worker@1.3.0: resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==} - /web3-bzz@1.10.3: - resolution: {integrity: sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ==} - engines: {node: '>=8.0.0'} - requiresBuild: true - dependencies: - '@types/node': 12.20.55 - got: 12.1.0 - swarm-js: 0.1.42 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - - /web3-core-helpers@1.10.3: - resolution: {integrity: sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==} - engines: {node: '>=8.0.0'} - dependencies: - web3-eth-iban: 1.10.3 - web3-utils: 1.10.3 - dev: false - - /web3-core-method@1.10.3: - resolution: {integrity: sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==} - engines: {node: '>=8.0.0'} - dependencies: - '@ethersproject/transactions': 5.7.0 - web3-core-helpers: 1.10.3 - web3-core-promievent: 1.10.3 - web3-core-subscriptions: 1.10.3 - web3-utils: 1.10.3 - dev: false - - /web3-core-promievent@1.10.3: - resolution: {integrity: sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.4 - dev: false - - /web3-core-requestmanager@1.10.3: - resolution: {integrity: sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==} - engines: {node: '>=8.0.0'} - dependencies: - util: 0.12.5 - web3-core-helpers: 1.10.3 - web3-providers-http: 1.10.3 - web3-providers-ipc: 1.10.3 - web3-providers-ws: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /web3-core-subscriptions@1.10.3: - resolution: {integrity: sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.4 - web3-core-helpers: 1.10.3 - dev: false - - /web3-core@1.10.3: - resolution: {integrity: sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==} - engines: {node: '>=8.0.0'} - dependencies: - '@types/bn.js': 5.1.5 - '@types/node': 12.20.55 - bignumber.js: 9.1.2 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-core-requestmanager: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /web3-eth-abi@1.10.3: - resolution: {integrity: sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==} - engines: {node: '>=8.0.0'} - dependencies: - '@ethersproject/abi': 5.7.0 - web3-utils: 1.10.3 - dev: false - - /web3-eth-accounts@1.10.3: - resolution: {integrity: sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ==} - engines: {node: '>=8.0.0'} - dependencies: - '@ethereumjs/common': 2.6.5 - '@ethereumjs/tx': 3.5.2 - '@ethereumjs/util': 8.1.0 - eth-lib: 0.2.8 - scrypt-js: 3.0.1 - uuid: 9.0.1 - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /web3-eth-contract@1.10.3: - resolution: {integrity: sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==} - engines: {node: '>=8.0.0'} - dependencies: - '@types/bn.js': 5.1.5 - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-core-promievent: 1.10.3 - web3-core-subscriptions: 1.10.3 - web3-eth-abi: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /web3-eth-ens@1.10.3: - resolution: {integrity: sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ==} - engines: {node: '>=8.0.0'} - dependencies: - content-hash: 2.5.2 - eth-ens-namehash: 2.0.8 - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-promievent: 1.10.3 - web3-eth-abi: 1.10.3 - web3-eth-contract: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /web3-eth-iban@1.10.3: - resolution: {integrity: sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==} - engines: {node: '>=8.0.0'} - dependencies: - bn.js: 5.2.1 - web3-utils: 1.10.3 - dev: false - - /web3-eth-personal@1.10.3: - resolution: {integrity: sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw==} - engines: {node: '>=8.0.0'} - dependencies: - '@types/node': 12.20.55 - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-net: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /web3-eth@1.10.3: - resolution: {integrity: sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA==} - engines: {node: '>=8.0.0'} - dependencies: - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-core-subscriptions: 1.10.3 - web3-eth-abi: 1.10.3 - web3-eth-accounts: 1.10.3 - web3-eth-contract: 1.10.3 - web3-eth-ens: 1.10.3 - web3-eth-iban: 1.10.3 - web3-eth-personal: 1.10.3 - web3-net: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /web3-net@1.10.3: - resolution: {integrity: sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg==} - engines: {node: '>=8.0.0'} - dependencies: - web3-core: 1.10.3 - web3-core-method: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /web3-providers-http@1.10.3: - resolution: {integrity: sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==} - engines: {node: '>=8.0.0'} - dependencies: - abortcontroller-polyfill: 1.7.5 - cross-fetch: 4.0.0 - es6-promise: 4.2.8 - web3-core-helpers: 1.10.3 - transitivePeerDependencies: - - encoding - dev: false - - /web3-providers-ipc@1.10.3: - resolution: {integrity: sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==} - engines: {node: '>=8.0.0'} - dependencies: - oboe: 2.1.5 - web3-core-helpers: 1.10.3 - dev: false - - /web3-providers-ws@1.10.3: - resolution: {integrity: sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.4 - web3-core-helpers: 1.10.3 - websocket: 1.0.34 - transitivePeerDependencies: - - supports-color - dev: false - - /web3-shh@1.10.3: - resolution: {integrity: sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng==} - engines: {node: '>=8.0.0'} - requiresBuild: true - dependencies: - web3-core: 1.10.3 - web3-core-method: 1.10.3 - web3-core-subscriptions: 1.10.3 - web3-net: 1.10.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - /web3-utils@1.10.3: resolution: {integrity: sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==} engines: {node: '>=8.0.0'} @@ -18581,27 +17586,9 @@ packages: utf8: 3.0.0 dev: false - /web3@1.10.3: - resolution: {integrity: sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw==} - engines: {node: '>=8.0.0'} - requiresBuild: true - dependencies: - web3-bzz: 1.10.3 - web3-core: 1.10.3 - web3-eth: 1.10.3 - web3-eth-personal: 1.10.3 - web3-net: 1.10.3 - web3-shh: 1.10.3 - web3-utils: 1.10.3 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: false - /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true /webpack-bundle-analyzer@4.10.1: resolution: {integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==} @@ -18769,25 +17756,12 @@ packages: engines: {node: '>=0.8.0'} dev: false - /websocket@1.0.34: - resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} - engines: {node: '>=4.0.0'} - dependencies: - bufferutil: 4.0.8 - debug: 2.6.9 - es5-ext: 0.10.62 - typedarray-to-buffer: 3.1.5 - utf-8-validate: 5.0.10 - yaeti: 0.0.6 - transitivePeerDependencies: - - supports-color - dev: false - /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -18988,22 +17962,6 @@ packages: write-json-file: 3.2.0 dev: true - /ws@3.3.3: - resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - async-limiter: 1.0.1 - safe-buffer: 5.1.2 - ultron: 1.1.1 - dev: false - /ws@7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} @@ -19059,33 +18017,6 @@ packages: engines: {node: '>=12'} dev: false - /xhr-request-promise@0.1.3: - resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} - dependencies: - xhr-request: 1.1.0 - dev: false - - /xhr-request@1.1.0: - resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} - dependencies: - buffer-to-arraybuffer: 0.0.5 - object-assign: 4.1.1 - query-string: 5.1.1 - simple-get: 2.8.2 - timed-out: 4.0.1 - url-set-query: 1.0.0 - xhr: 2.6.0 - dev: false - - /xhr@2.6.0: - resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} - dependencies: - global: 4.4.0 - is-function: 1.0.2 - parse-headers: 2.0.5 - xtend: 4.0.2 - dev: false - /xml-js@1.6.11: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true @@ -19096,6 +18027,7 @@ packages: /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + dev: true /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -19105,11 +18037,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - /yaeti@0.0.6: - resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} - engines: {node: '>=0.10.32'} - dev: false - /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}