diff --git a/package.json b/package.json index 73aa35dc6..9857f5ca3 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,6 @@ "jest": "^29.5.0", "ts-jest": "^29.1.0", "ts-node": "^10.9.1", - "typescript": "^5.1.6" + "typescript": "^5.2.2" } } diff --git a/packages/circuits/email-verifier.circom b/packages/circuits/email-verifier.circom index 826feb147..0cd75a457 100644 --- a/packages/circuits/email-verifier.circom +++ b/packages/circuits/email-verifier.circom @@ -1,6 +1,7 @@ pragma circom 2.1.5; include "circomlib/circuits/bitify.circom"; +include "circomlib/circuits/mimcsponge.circom"; include "./helpers/sha.circom"; include "./helpers/rsa.circom"; include "./helpers/base64.circom"; @@ -20,7 +21,7 @@ template EmailVerifier(max_header_bytes, max_body_bytes, n, k, ignore_body_hash_ assert(n < (255 \ 2)); // we want a multiplication to fit into a circom signal signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length - signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each. + signal input pubkey[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each. signal input signature[k]; // rsa signature. split up into k parts of n bits each. signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length @@ -34,6 +35,8 @@ template EmailVerifier(max_header_bytes, max_body_bytes, n, k, ignore_body_hash_ // section of the "DKIM-Signature:"" line, along with the body hash. // Note that nothing above the "DKIM-Signature:" line is signed. signal output sha[256] <== Sha256Bytes(max_header_bytes)(in_padded, in_len_padded_bytes); + signal output pubkey_hash; + var msg_len = (256 + n) \ n; component base_msg[msg_len]; @@ -56,7 +59,7 @@ template EmailVerifier(max_header_bytes, max_body_bytes, n, k, ignore_body_hash_ for (var i = msg_len; i < k; i++) { rsa.base_message[i] <== 0; } - rsa.modulus <== modulus; + rsa.modulus <== pubkey; rsa.signature <== signature; @@ -101,4 +104,11 @@ template EmailVerifier(max_header_bytes, max_body_bytes, n, k, ignore_body_hash_ sha_body_bytes[i].out === sha_b64_out[i]; } } + + // Calculate the hash (MIMC) of public key and produce as an output + // This can be used to verify the public key is correct in contract without requiring the actual key + component hasher = MiMCSponge(k, 220, 1); + hasher.ins <== pubkey; + hasher.k <== 123; + pubkey_hash <== hasher.outs[0]; } \ No newline at end of file diff --git a/packages/circuits/package.json b/packages/circuits/package.json index 80b16bc1d..821b9fc68 100644 --- a/packages/circuits/package.json +++ b/packages/circuits/package.json @@ -1,9 +1,9 @@ { "name": "@zk-email/circuits", - "version": "1.1.2", + "version": "2.0.0", "scripts": { "publish": "yarn npm publish --access=public", - "test": "NODE_OPTIONS=--max_old_space_size=4096 jest tests/*.ts" + "test": "NODE_OPTIONS=--max_old_space_size=8192 jest tests/*.ts" }, "devDependencies": { "circom_tester": "^0.0.19", diff --git a/packages/circuits/tests/email-verifier-test.circom b/packages/circuits/tests/email-verifier-test.circom index 2f7ef952a..4789da423 100644 --- a/packages/circuits/tests/email-verifier-test.circom +++ b/packages/circuits/tests/email-verifier-test.circom @@ -2,4 +2,4 @@ pragma circom 2.1.5; include "../email-verifier.circom"; -component main { public [ modulus ] } = EmailVerifier(640, 768, 121, 17, 0); +component main { public [ pubkey ] } = EmailVerifier(640, 768, 121, 17, 0); diff --git a/packages/circuits/tests/email-verifier.test.ts b/packages/circuits/tests/email-verifier.test.ts index 95b21e733..86d97cb91 100644 --- a/packages/circuits/tests/email-verifier.test.ts +++ b/packages/circuits/tests/email-verifier.test.ts @@ -1,12 +1,11 @@ +import fs from "fs"; +import { buildMimcSponge } from "circomlibjs"; +import { wasm as wasm_tester } from "circom_tester"; +import { Scalar } from "ffjavascript"; +import path from "path"; import { DKIMVerificationResult } from "@zk-email/helpers/src/dkim"; import { generateCircuitInputs } from "@zk-email/helpers/src/input-helpers"; - -const { verifyDKIMSignature } = require("@zk-email/helpers/src/dkim"); -const fs = require("fs"); -const path = require("path"); -const wasm_tester = require("circom_tester").wasm; -const F1Field = require("ffjavascript").F1Field; -const Scalar = require("ffjavascript").Scalar; +import { verifyDKIMSignature } from "@zk-email/helpers/src/dkim"; exports.p = Scalar.fromString( "21888242871839275222246405745257275088548364400416034343698204186575808495617" @@ -19,18 +18,15 @@ describe("EmailVerifier", () => { let circuit: any; beforeAll(async () => { - const rawEmail = fs.readFileSync( - path.join(__dirname, "./test.eml"), - "utf8" - ); + const rawEmail = fs.readFileSync(path.join(__dirname, "./test.eml")); dkimResult = await verifyDKIMSignature(rawEmail); circuit = await wasm_tester( path.join(__dirname, "./email-verifier-test.circom"), { - // NOTE: We are running tests against pre-compiled circuit in the below path - // You need to manually compile when changes are made to circuit if `recompile` is set to `false`. - // circom "./tests/email-verifier-test.circom" --r1cs --wasm --sym --c --wat --output "./tests/compiled-test-circuit" + // @dev During development recompile can be set to false if you are only making changes in the tests. + // This will save time by not recompiling the circuit every time. + // Compile: circom "./tests/email-verifier-test.circom" --r1cs --wasm --sym --c --wat --output "./tests/compiled-test-circuit" recompile: true, output: path.join(__dirname, "./compiled-test-circuit"), include: path.join(__dirname, "../../../node_modules"), @@ -41,7 +37,7 @@ describe("EmailVerifier", () => { it("should verify email without any SHA precompute selector", async function () { const emailVerifierInputs = generateCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: dkimResult.bodyHash, message: dkimResult.message, @@ -56,7 +52,7 @@ describe("EmailVerifier", () => { it("should verify email with a SHA precompute selector", async function () { const emailVerifierInputs = generateCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: dkimResult.bodyHash, message: dkimResult.message, @@ -74,7 +70,7 @@ describe("EmailVerifier", () => { const emailVerifierInputs = generateCircuitInputs({ rsaSignature: invalidRSASignature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: dkimResult.bodyHash, message: dkimResult.message, @@ -95,7 +91,7 @@ describe("EmailVerifier", () => { it("should fail if precompute string is not found in body", async function () { const emailVerifierInputs = generateCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: dkimResult.bodyHash, message: dkimResult.message, @@ -119,7 +115,7 @@ describe("EmailVerifier", () => { const emailVerifierInputs = generateCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: dkimResult.bodyHash, message: invalidMessage, @@ -143,7 +139,7 @@ describe("EmailVerifier", () => { const emailVerifierInputs = generateCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: invalidBody, bodyHash: dkimResult.bodyHash, message: dkimResult.message, @@ -162,11 +158,11 @@ describe("EmailVerifier", () => { }); it("should fail if body hash is tampered", async function () { - const invalidBodyHash = dkimResult.bodyHash + 'a'; + const invalidBodyHash = dkimResult.bodyHash + "a"; const emailVerifierInputs = generateCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: invalidBodyHash, message: dkimResult.message, @@ -183,4 +179,28 @@ describe("EmailVerifier", () => { expect((error as Error).message).toMatch("Assert Failed"); } }); + + it("should produce dkim pubkey hash correctly", async function () { + const emailVerifierInputs = generateCircuitInputs({ + rsaSignature: dkimResult.signature, + rsaPublicKey: dkimResult.publicKey, + body: dkimResult.body, + bodyHash: dkimResult.bodyHash, + message: dkimResult.message, + shaPrecomputeSelector: "How are", + maxMessageLength: 640, + maxBodyLength: 768, + }); + + // Calculate the MIMC hash + const mimc = await buildMimcSponge(); + const hash = mimc.multiHash(emailVerifierInputs.pubkey, 123, 1); + + // Calculate the hash using the circuit + const witness = await circuit.calculateWitness(emailVerifierInputs); + + await circuit.assertOut(witness, { + pubkey_hash: mimc.F.toObject(hash), + }); + }); }); diff --git a/packages/circuits/tests/no-body-hash.test.circom b/packages/circuits/tests/no-body-hash.test.circom index f4dff7582..5c2de4fb2 100644 --- a/packages/circuits/tests/no-body-hash.test.circom +++ b/packages/circuits/tests/no-body-hash.test.circom @@ -2,4 +2,4 @@ pragma circom 2.1.5; include "../email-verifier.circom"; -component main { public [ modulus ] } = EmailVerifier(640, 768, 121, 17, 1); +component main { public [ pubkey ] } = EmailVerifier(640, 768, 121, 17, 1); diff --git a/packages/circuits/tests/no-body-hash.test.ts b/packages/circuits/tests/no-body-hash.test.ts index eacbc8bfd..eeaf6fead 100644 --- a/packages/circuits/tests/no-body-hash.test.ts +++ b/packages/circuits/tests/no-body-hash.test.ts @@ -28,9 +28,6 @@ describe("EmailVerifier : Without body check", () => { circuit = await wasm_tester( path.join(__dirname, "./no-body-hash.test.circom"), { - // NOTE: We are running tests against pre-compiled circuit in the below path - // You need to manually compile when changes are made to circuit if `recompile` is set to `false`. - // circom "./tests/email-verifier-test.circom" --r1cs --wasm --sym --c --wat --output "./tests/compiled-test-circuit" recompile: true, output: path.join(__dirname, "./compiled-test-circuit"), include: path.join(__dirname, "../../../node_modules"), @@ -42,7 +39,7 @@ describe("EmailVerifier : Without body check", () => { // The result wont have shaPrecomputeSelector, maxMessageLength, maxBodyLength, ignoreBodyHashCheck const emailVerifierInputs = generateCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: dkimResult.bodyHash, message: dkimResult.message, diff --git a/packages/circuits/tests/test.eml b/packages/circuits/tests/test.eml index eb39b3d84..d71ddad10 100644 --- a/packages/circuits/tests/test.eml +++ b/packages/circuits/tests/test.eml @@ -1,70 +1,18 @@ -Return-path: -Original-recipient: rfc822;saleel@saleel.xyz -Received: from ci74p00im-qukt09071102.me.com by p59-mailgateway-smtp-6776dc6585-266mm (mailgateway 2318B155) - with SMTP id 4bbe59e4-9423-43ff-9c6e-d47053303967 - for ; Thu, 22 Jun 2023 20:02:52 GMT -X-Apple-MoveToFolder: INBOX -X-Apple-Action: MOVE_TO_FOLDER/INBOX -X-Apple-UUID: 4bbe59e4-9423-43ff-9c6e-d47053303967 -Received: from pv50p00im-ztdg10012001.me.com (pv50p00im-ztdg10012001.me.com [17.58.6.51]) - by ci74p00im-qukt09071102.me.com (Postfix) with ESMTPS id 491294B00172 - for ; Thu, 22 Jun 2023 20:02:47 +0000 (UTC) -X-ICL-SCORE: 3.233003230041 -X-ICL-INFO: GAtbVUseBFFGSVZESgMGUkFIRFcUWUIPAApbVRYSFhEAREQZF15TQFUcAkpaQ1cOEBwKNxVVGAEa - FERXHlQLQBgcSBQXXRRCBhAWSloBAUxAQUhBVgUHQFURAxsXDRQSA0xWB0gAXw9YAxITHwEGUkRL - VkdJHlsHWxoJGloQRhYHREQHDgUGEkVJDxpVSkIGEkhWR0kCBlJEVwsSVlNZD1dZAhNFElsHWxoJ - GloQWwsRRERLPnEOUENMVUBVAAYgM1RSQ0x1GyBNSyJaTQZzIEBPIEE+AwFTNRQDWRtfW1xXWRQU - RRJFAxkcAxs4Q1cOEBwKWQBJTEA= -Authentication-Results: bimi.icloud.com; bimi=declined -X-ARC-Info: policy=fail; arc=none -Authentication-Results: arc.icloud.com; arc=none -Authentication-Results: dmarc.icloud.com; dmarc=pass header.from=me.com -X-DMARC-Info: pass=pass; dmarc-policy=quarantine; s=r0; d=r1; pdomain=me.com -X-DMARC-Policy: v=DMARC1; p=quarantine; rua=mailto:d@rua.agari.com; ruf=mailto:d@ruf.agari.com; -Authentication-Results: dkim-verifier.icloud.com; - dkim=pass (2048-bit key) header.d=me.com header.i=@me.com header.b=FpmCwgC9 -Authentication-Results: spf.icloud.com; spf=none (spf.icloud.com: saleel@me.com does not designate permitted sender hosts) smtp.mailfrom=saleel@me.com -Received-SPF: none (spf.icloud.com: saleel@me.com does not designate permitted sender hosts) receiver=spf.icloud.com; client-ip=17.58.6.51; helo=pv50p00im-ztdg10012001.me.com; envelope-from=saleel@me.com -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=me.com; s=1a1hai; - t=1687464166; bh=FxfpVjf51msd35Z/BVrd7Uv2GcGRjxaW9dGr90Y2M88=; - h=From:Content-Type:Mime-Version:Subject:Message-Id:Date:To; - b=FpmCwgC9dKuHA2BXHuO6Ujfls+b5psK4yurk9TkR9Q2rpH8ahp6XDuDRQW/8mucud - kIoudejHdNfXqUpWzmtcVCff+cWyzBJarYt8YKgPKQZ3f+UZqXMPJ7t1sZbIJkSU7n - zTiXh+F7KX/kIsJ1vUHnf40EsULPMU2CUSdBxvHpH4C2+MiVcx/mazLdh9BlpKavwY - QMl3uEDcH/blpvK7YRFn3eYpFL8TkS819/aBUcQg6aGZMJrGsr+cQFCsPmXTPHbxBD - LUnk7BUdzdvIwPDnOOrFJIf6JCbJd1rWIiGy3ZOP67+h79eHkQPcZxl/fq0BFQypPq - TOvKhhMsQAmHw== -Received: from smtpclient.apple (pv50p00im-dlb-asmtp-mailmevip.me.com [17.56.9.10]) - by pv50p00im-ztdg10012001.me.com (Postfix) with ESMTPSA id A9258A01A4 - for ; Thu, 22 Jun 2023 20:02:44 +0000 (UTC) -From: Saleel -Content-Type: text/plain; - charset=us-ascii +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1693038337; bh=7xQMDuoVVU4m0W0WRVSrVXMeGSIASsnucK9dJsrc+vU=; h=from:Content-Type:Mime-Version:Subject:Message-Id:Date:to; b=EhLyVPpKD7d2/+h1nrnu+iEEBDfh6UWiAf9Y5UK+aPNLt3fAyEKw6Ic46v32NOcZD + M/zhXWucN0FXNiS0pz/QVIEy8Bcdy7eBZA0QA1fp8x5x5SugDELSRobQNbkOjBg7Mx + VXy7h4pKZMm/hKyhvMZXK4AX9fSoXZt4VGlAFymFNavfdAeKgg/SHXLds4lOPJV1wR + 2E21g853iz5m/INq3uK6SQKzTnz/wDkdyiq90gC0tHQe8HpDRhPIqgL5KSEpuvUYmJ + wjEOwwHqP6L3JfEeROOt6wyuB1ah7wgRvoABOJ81+qLYRn3bxF+y1BC+PwFd5yFWH5 + Ry43lwp1/3+sA== +from: runnier.leagues.0j@icloud.com +Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.500.231\)) -Subject: Test email subject -Message-Id: -Date: Fri, 23 Jun 2023 01:32:20 +0530 -To: Saleel -X-Mailer: Apple Mail (2.3731.500.231) -X-Proofpoint-GUID: MU47Y4dCOAohatJZW3Su6CexM6uUt94W -X-Proofpoint-ORIG-GUID: MU47Y4dCOAohatJZW3Su6CexM6uUt94W -X-MANTSH: 1TEIXSUMdHVoaGkNHB1tfQV4aEhoTGxsaGBEKTEMXGxoEGxwSBBscGgQfGhAbHho - fGhEKTFkXGx8ZEQpZRBdsUm5CHktdTXIFbxEKWU0XZEVETxEKWUkXGRxxGwYdG3cGEh0GGgYaB - hoGGRpxGxAadwYaBhoGGgYaBhoGGnEaEBp3BhoRClleF2xseREKQ04XZ38eHXMeTmlla0VCS15 - gcH0ZeV8caU9SZxxff14THn0RClhcFxkEGgQfGgUbGhoEEhgEHhgEGBIQGx4aHxoRCl5ZF0hTQ - RhsEQpNXBcaEQpMWhdoaU1raxEKTEYXTWsRCkNaFxsdBB8SBBwEHxsRCkJeFxsRCkJcFxsRCl5 - OFxsRCkJLF2xwYHlAHWJSaRpiEQpCSRdscGB5QB1iUmkaYhEKQkUXbllZcnNAGl1aGF4RCkJOF - 2xwYHlAHWJSaRpiEQpCTBdgTVt4G1BffxhwZxEKQm4XbWVwG0JrYh5eZlwRCkJsF2h7YBNtbBh - JfU4dEQpCQBdufWFrHURjemEFHxEKQlgXemEZYklYHBwYWk8RCk1eFxsRClpYFxgRCnBoF2RMR - 20YaAEeBXJpEBkaEQpwbBdpRhJHa2Bzb1NHZhAZGhEKbX4XGxEKWE0XSxE= -X-CLX-Shades: None -X-Proofpoint-Virus-Version: =?UTF-8?Q?vendor=3Dfsecure_engine=3D1.1.170-22c6f66c430a71ce266a39bfe25bc?= - =?UTF-8?Q?2903e8d5c8f:6.0.425,18.0.790,17.0.605.474.0000000_definitions?= - =?UTF-8?Q?=3D2022-01-13=5F02:2022-01-11=5F01,2022-01-13=5F02,2020-01-23?= - =?UTF-8?Q?=5F02_signatures=3D0?= -X-Proofpoint-Spam-Reason: safe +Subject: Hello +Message-Id: <8F819D32-B6AC-489D-977F-438BBC4CAB27@me.com> +Date: Sat, 26 Aug 2023 12:25:22 +0400 +to: zkewtest@gmail.com -Hello +Hello, -How are you doing? +How are you? \ No newline at end of file diff --git a/packages/contracts/DKIMRegistry.sol b/packages/contracts/DKIMRegistry.sol new file mode 100644 index 000000000..7074e8ae6 --- /dev/null +++ b/packages/contracts/DKIMRegistry.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +/** + A Registry that store the hash(dkim_public_key) for each domain + The hash is calculated by taking Poseidon of DKIM key split into 9 chunks of 242 bits each + */ +contract DKIMRegistry is Ownable { + // Mapping from domain name to DKIM public key hash + mapping(string => uint256) public dkimPublicKeyHashes; + + constructor() { + // Set values for popular domains + dkimPublicKeyHashes["gmail.com"] = uint256(20579775636546222313859320423592165398188168817714003219389601176739340973605); + dkimPublicKeyHashes["hotmail.com"] = uint256(2750248559912404074361997670683337416910370052869160728223409986079552486582); + dkimPublicKeyHashes["twitter.com"] = uint256(12431732230788297063498039481224031586256793440953465069048041914965586355958); + dkimPublicKeyHashes["ethereum.org"] = uint256(13749471426528386843484698195116860745506750565298853141220185289842769029726); + dkimPublicKeyHashes["skiff.com"] = uint256(11874169184886542147081299005924838984240934585001783050565158265014763417816); + } + + function _stringEq(string memory a, string memory b) internal pure returns (bool) { + return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)); + } + + function getDKIMPublicKeyHash( + string memory domainName + ) public view returns (uint256) { + return dkimPublicKeyHashes[domainName]; + } + + function setDKIMPublicKeyHash( + string memory domainName, + uint256 publicKeyHash + ) public onlyOwner { + dkimPublicKeyHashes[domainName] = publicKeyHash; + } +} diff --git a/packages/contracts/EmailVerifier.sol b/packages/contracts/EmailVerifier.sol deleted file mode 100644 index ab6fe0029..000000000 --- a/packages/contracts/EmailVerifier.sol +++ /dev/null @@ -1,61 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "./utils/MailServer.sol"; - -interface Groth16Verifier { - function verifyProof( - uint256[2] memory a, - uint256[2][2] memory b, - uint256[2] memory c, - uint256[] memory input - ) external returns (bool); -} - -contract EmailVerifier { - MailServer mailServer; - Groth16Verifier public immutable _verifier; - - constructor(Groth16Verifier v, MailServer m) { - _verifier = v; - mailServer = m; - } - - function verifyEmail( - string memory domain, - uint256[8] memory proof, - uint256[] memory signals, - uint32 rsaKeyStartIndex, - uint8 rsaKeyChuckLength - ) public { - require( - signals.length >= rsaKeyStartIndex + rsaKeyChuckLength, - "Invalid signals length" - ); - - // Extract RSA Key from signals - uint256[] memory rsaKey = new uint256[](rsaKeyChuckLength); - - for (uint32 i = 0; i < rsaKeyChuckLength; i++) { - uint32 index = i + rsaKeyStartIndex; - rsaKey[i] = signals[index]; - } - - // Verify RSA Key - require( - mailServer.verifyKeyForDomain(domain, rsaKey), - "Invalid RSA Key" - ); - - // Verify Proof - require( - _verifier.verifyProof( - [proof[0], proof[1]], - [[proof[2], proof[3]], [proof[4], proof[5]]], - [proof[6], proof[7]], - signals - ), - "Invalid Proof" - ); - } -} diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 340223e9c..7fe64b9b3 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,13 +1,10 @@ { "name": "@zk-email/contracts", - "version": "1.0.0", + "version": "2.0.0", "scripts": { "publish": "yarn npm publish --access=public" }, "dependencies": { - "@openzeppelin/contracts": "^4.9.3", - "@openzeppelin/contracts-upgradeable": "^4.9.2", - "ds-test": "https://github.com/dapphub/ds-test", - "forge-std": "https://github.com/foundry-rs/forge-std" + "@openzeppelin/contracts": "^4.9.3" } } diff --git a/packages/contracts/remappings.txt b/packages/contracts/remappings.txt deleted file mode 100644 index 4e488775d..000000000 --- a/packages/contracts/remappings.txt +++ /dev/null @@ -1 +0,0 @@ -@openzeppelin=../../node_modules/@openzeppelin/contracts diff --git a/packages/helpers/package.json b/packages/helpers/package.json index 0e6e34aa1..a9c343564 100644 --- a/packages/helpers/package.json +++ b/packages/helpers/package.json @@ -1,6 +1,6 @@ { "name": "@zk-email/helpers", - "version": "1.0.3", + "version": "2.0.0", "main": "dist", "scripts": { "build": "yarn g:tsc", diff --git a/packages/helpers/src/binaryFormat.ts b/packages/helpers/src/binaryFormat.ts index 7ad9e0658..2bc8f51ec 100644 --- a/packages/helpers/src/binaryFormat.ts +++ b/packages/helpers/src/binaryFormat.ts @@ -68,16 +68,20 @@ export function bytesToBigInt(bytes: Uint8Array) { return res; } -export function toCircomBigIntBytes(num: BigInt | bigint) { +export function bigIntToChunkedBytes(num: BigInt | bigint, bytesPerChunk: number, numChunks: number) { const res = []; const bigintNum: bigint = typeof num == "bigint" ? num : num.valueOf(); - const msk = (1n << BigInt(CIRCOM_BIGINT_N)) - 1n; - for (let i = 0; i < CIRCOM_BIGINT_K; ++i) { - res.push(((bigintNum >> BigInt(i * CIRCOM_BIGINT_N)) & msk).toString()); + const msk = (1n << BigInt(bytesPerChunk)) - 1n; + for (let i = 0; i < numChunks; ++i) { + res.push(((bigintNum >> BigInt(i * bytesPerChunk)) & msk).toString()); } return res; } +export function toCircomBigIntBytes(num: BigInt | bigint) { + return bigIntToChunkedBytes(num, CIRCOM_BIGINT_N, CIRCOM_BIGINT_K); +} + // https://stackoverflow.com/a/69585881 const HEX_STRINGS = "0123456789abcdef"; const MAP_HEX = { diff --git a/packages/helpers/src/dkim/index.ts b/packages/helpers/src/dkim/index.ts index bba0ee804..60f1a0c7e 100644 --- a/packages/helpers/src/dkim/index.ts +++ b/packages/helpers/src/dkim/index.ts @@ -30,7 +30,7 @@ export type DKIMVerificationResult = { message: Buffer; body: Buffer; bodyHash: string; - modulus: bigint; + publicKey: bigint; } export async function verifyDKIMSignature(email: Buffer) : Promise { @@ -51,13 +51,12 @@ export async function verifyDKIMSignature(email: Buffer) : PromiseYou need to enable JavaScript to run this app.
- + diff --git a/packages/twitter-verifier-app/index.jsx b/packages/twitter-verifier-app/index.jsx deleted file mode 100644 index bc513d56e..000000000 --- a/packages/twitter-verifier-app/index.jsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom"; -import App from "./App"; -import { WagmiConfig, createClient, configureChains, chain } from "wagmi"; -import { publicProvider } from "wagmi/providers/public"; -import { infuraProvider } from "wagmi/providers/infura"; -import { - getDefaultWallets, - RainbowKitProvider, - darkTheme, -} from "@rainbow-me/rainbowkit"; - -import "./index.css"; -import "@rainbow-me/rainbowkit/styles.css"; - -const { chains, provider, webSocketProvider } = configureChains( - [chain.goerli], - [publicProvider()] -); - -const { connectors } = getDefaultWallets({ - appName: "ZK Email", - chains, -}); - -const client = createClient({ - autoConnect: true, - connectors, - provider, - webSocketProvider, -}); - -ReactDOM.render( - - - - - - - , - document.getElementById("root") -); diff --git a/packages/twitter-verifier-app/index.tsx b/packages/twitter-verifier-app/index.tsx new file mode 100644 index 000000000..a9ada9f7e --- /dev/null +++ b/packages/twitter-verifier-app/index.tsx @@ -0,0 +1,42 @@ +import React from "react"; +import ReactDOM from "react-dom"; +import App from "./App"; +import { WagmiConfig, createConfig } from "wagmi"; +import { createPublicClient, http } from 'viem' +import { goerli } from "wagmi/chains"; +import { + getDefaultWallets, + RainbowKitProvider, + darkTheme, +} from "@rainbow-me/rainbowkit"; + +import "./index.css"; +import "@rainbow-me/rainbowkit/styles.css"; + + +const { connectors } = getDefaultWallets({ + appName: "ZK Email - Twitter Verifier", + chains: [goerli], + projectId: "b68298f4e6597f970ac06be1aea7998d", +}); + +const config = createConfig({ + autoConnect: true, + publicClient: createPublicClient({ + chain: goerli, + transport: http() + }), + connectors: connectors, +}) + + +ReactDOM.render( + + + + + + + , + document.getElementById("root") +); diff --git a/packages/twitter-verifier-app/package.json b/packages/twitter-verifier-app/package.json index f4d1ab2f8..515348b4c 100644 --- a/packages/twitter-verifier-app/package.json +++ b/packages/twitter-verifier-app/package.json @@ -1,17 +1,15 @@ { "name": "@zk-email/twitter-verifier", - "version": "1.0.0", + "version": "1.1.0", "dependencies": { - "@rainbow-me/rainbowkit": "^0.8.0", + "@rainbow-me/rainbowkit": "^1.0.9", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@twitter-verifier/circuits": "workspace:^", - "@types/lodash": "^4.14.181", - "@types/styled-components": "^5.1.24", "@zk-email/helpers": "workspace:^", "atob": "^2.1.2", "circomlibjs": "^0.1.2", - "ethers": "^5.7.1", + "ethers": "^6.7.1", "jsdom-worker": "^0.3.0", "lodash": "^4.17.21", "node-forge": "^1.3.1", @@ -22,13 +20,12 @@ "serve": "^14.0.1", "snarkjs": "https://github.com/sampritipanda/snarkjs.git#fef81fc51d17a734637555c6edbd585ecda02d9e", "styled-components": "^5.3.5", - "typescript": "^4.8.3", - "vite": "^4.3.3", - "wagmi": "^0.6.8" + "vite": "^4.4.9", + "wagmi": "^1.3.10" }, "scripts": { "start": "vite", - "build": "tsc && vite build", + "build": "yarn g:tsc && vite build", "serve": "vite preview", "test": "jest --runInBand --testPathIgnorePatterns='e2e' --reporters=default --reporters=jest-junit", "start-e2e-test-server": "serve -s dist -p 3000", @@ -58,9 +55,11 @@ "devDependencies": { "@types/atob": "^2.1.2", "@types/jest": "^29.5.1", + "@types/lodash": "^4.14.181", "@types/mocha": "^10.0.1", "@types/node": "^18.0.6", "@types/node-forge": "^1.3.2", + "@types/styled-components": "^5.1.24", "@vitejs/plugin-react": "^4.0.0", "browserify-fs": "^1.0.0", "browserstack-local": "^1.5.1", @@ -69,6 +68,7 @@ "jest-environment-jsdom": "^29.5.0", "jest-fetch-mock": "^3.0.3", "jest-junit": "^15.0.0", + "jsdom-worker": "^0.3.0", "madge": "^6.0.0", "puppeteer": "18.1", "rollup-plugin-node-polyfills": "^0.2.1", diff --git a/packages/twitter-verifier-app/pages/MainPage.tsx b/packages/twitter-verifier-app/pages/MainPage.tsx index b0dedaa80..6535994bd 100644 --- a/packages/twitter-verifier-app/pages/MainPage.tsx +++ b/packages/twitter-verifier-app/pages/MainPage.tsx @@ -1,18 +1,16 @@ import React, { useEffect, useState } from "react"; +// @ts-ignore import { useAsync, useMount, useUpdateEffect } from "react-use"; import styled from "styled-components"; import _, { add } from "lodash"; import { ICircuitInputs, generate_inputs, - insert13Before10, CircuitType, } from "../scripts/generate_input"; import { rawEmailToBuffer } from "@zk-email/helpers/src/input-helpers"; import { DKIMVerificationResult, verifyDKIMSignature } from "@zk-email/helpers/src/dkim"; import { generateTwitterVerifierCircuitInputs } from "@twitter-verifier/circuits/helpers"; -import { sshSignatureToPubKey } from "@zk-email/helpers/src/sshFormat"; -import { Link, useSearchParams } from "react-router-dom"; import atob from "atob"; import { downloadProofFiles, @@ -34,7 +32,7 @@ import { isSetIterator } from "util/types"; export const MainPage: React.FC<{}> = (props) => { // raw user inputs - const filename = "email"; + const filename = "twitter"; const [emailSignals, setEmailSignals] = useState(""); const [emailFull, setEmailFull] = useState( @@ -126,26 +124,27 @@ export const MainPage: React.FC<{}> = (props) => { })); }; - const reformatProofForChain = (proof: string) => { + const reformatProofForChain = (proofStr: string) => { + if (!proofStr) return []; + + const proof = JSON.parse(proofStr); + return [ - proof ? JSON.parse(proof)["pi_a"].slice(0, 2) : null, - proof - ? JSON.parse(proof) - ["pi_b"].slice(0, 2) - .map((g2point: any[]) => g2point.reverse()) - : null, - proof ? JSON.parse(proof)["pi_c"].slice(0, 2) : null, - ]; + proof.pi_a.slice(0, 2), + proof.pi_b.slice(0, 2).map((s: string[]) => s.reverse()).flat(), + proof.pi_c.slice(0, 2), + ].flat(); }; const { config } = usePrepareContractWrite({ - addressOrName: import.meta.env.VITE_CONTRACT_ADDRESS, // TODO: get address - contractInterface: abi, // TODO: get abi + address: import.meta.env.VITE_CONTRACT_ADDRESS, + abi: abi, functionName: "mint", args: [ - ...reformatProofForChain(proof), - publicSignals ? JSON.parse(publicSignals) : null, + reformatProofForChain(proof), + publicSignals ? JSON.parse(publicSignals) : [], ], + enabled: !!(proof && publicSignals), onError: (error: { message: any }) => { console.error(error.message); // TODO: handle errors @@ -154,17 +153,6 @@ export const MainPage: React.FC<{}> = (props) => { const { data, isLoading, isSuccess, write } = useContractWrite(config); - console.log( - "Other values:", - proof, - publicSignals, - write, - data, - isLoading, - isSuccess, - config - ); - useMount(() => { function handleKeyDown() { setLastAction(""); @@ -334,16 +322,13 @@ export const MainPage: React.FC<{}> = (props) => { input = await generateTwitterVerifierCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: dkimResult.bodyHash, message: dkimResult.message, ethereumAddress, }) - // Set address_plus_one to make old circuits pass - input.address_plus_one = input.address as string; - console.log("Generated input:", JSON.stringify(input)); } catch (e) { console.log("Error generating input", e); diff --git a/packages/twitter-verifier-app/scripts/generate_input.ts b/packages/twitter-verifier-app/scripts/generate_input.ts index 977bb114b..711d3a3e4 100644 --- a/packages/twitter-verifier-app/scripts/generate_input.ts +++ b/packages/twitter-verifier-app/scripts/generate_input.ts @@ -33,7 +33,7 @@ async function getArgs() { } export interface ICircuitInputs { - modulus?: string[]; + pubkey?: string[]; signature?: string[]; base_message?: string[]; in_padded?: string[]; @@ -164,7 +164,7 @@ export async function getCircuitInputs( // Compute identity revealer let circuitInputs; - const modulus = toCircomBigIntBytes(modulusBigInt); + const pubkey = toCircomBigIntBytes(modulusBigInt); const signature = toCircomBigIntBytes(signatureBigInt); const in_len_padded_bytes = messagePaddedLen.toString(); @@ -189,7 +189,7 @@ export async function getCircuitInputs( if (circuit === CircuitType.RSA) { circuitInputs = { - modulus, + pubkey, signature, base_message, }; @@ -199,7 +199,7 @@ export async function getCircuitInputs( circuitInputs = { in_padded, - modulus, + pubkey, signature, in_len_padded_bytes, precomputed_sha, @@ -230,7 +230,7 @@ export async function getCircuitInputs( circuitInputs = { in_padded, - modulus, + pubkey, signature, in_len_padded_bytes, address: address, diff --git a/packages/twitter-verifier-app/tsconfig.json b/packages/twitter-verifier-app/tsconfig.json index 9783a645f..7f940d549 100644 --- a/packages/twitter-verifier-app/tsconfig.json +++ b/packages/twitter-verifier-app/tsconfig.json @@ -3,8 +3,8 @@ "include": ["."], "exclude": ["tests", "dist"], "compilerOptions": { + "skipLibCheck": true, "module": "esnext", - "baseUrl": "./", "noEmit": true } } diff --git a/packages/twitter-verifier-app/types/snarkjs.d.ts b/packages/twitter-verifier-app/types/snarkjs.d.ts deleted file mode 100644 index 48d4b0ce8..000000000 --- a/packages/twitter-verifier-app/types/snarkjs.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'snarkjs'; diff --git a/packages/twitter-verifier-circuits/contracts/verifier.sol b/packages/twitter-verifier-circuits/contracts/verifier.sol index 0e93ac4c4..179eb8f3f 100644 --- a/packages/twitter-verifier-circuits/contracts/verifier.sol +++ b/packages/twitter-verifier-circuits/contracts/verifier.sol @@ -12,33 +12,31 @@ // // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.11; - library Pairing { - struct G1Point { - uint X; - uint Y; - } - // Encoding of field elements is: X[0] * z + X[1] - struct G2Point { - uint[2] X; - uint[2] Y; - } - - /// @return the generator of G1 - function P1() internal pure returns (G1Point memory) { - return G1Point(1, 2); - } - - /// @return the generator of G2 - function P2() internal pure returns (G2Point memory) { - // Original code point - return - G2Point( - [11559732032986387107991004021392285783925812861821192530917403151452391805634, 10857046999023057135944570762232829481370756359578518086990519993285655852781], - [4082367875863433681332203403145435568316851327593401208105741076214120093531, 8495653923123431417604973247489272438418190587263600148770280649306958101930] - ); + struct G1Point { + uint X; + uint Y; + } + // Encoding of field elements is: X[0] * z + X[1] + struct G2Point { + uint[2] X; + uint[2] Y; + } + /// @return the generator of G1 + function P1() internal pure returns (G1Point memory) { + return G1Point(1, 2); + } + /// @return the generator of G2 + function P2() internal pure returns (G2Point memory) { + // Original code point + return G2Point( + [11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781], + [4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930] + ); - /* +/* // Changed by Jordi point return G2Point( [10857046999023057135944570762232829481370756359578518086990519993285655852781, @@ -47,312 +45,231 @@ library Pairing { 4082367875863433681332203403145435568316851327593401208105741076214120093531] ); */ - } - - /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero. - function negate(G1Point memory p) internal pure returns (G1Point memory r) { - // The prime q in the base field F_q for G1 - uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; - if (p.X == 0 && p.Y == 0) return G1Point(0, 0); - return G1Point(p.X, q - (p.Y % q)); - } - - /// @return r the sum of two points of G1 - function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { - uint[4] memory input; - input[0] = p1.X; - input[1] = p1.Y; - input[2] = p2.X; - input[3] = p2.Y; - bool success; - // solium-disable-next-line security/no-inline-assembly - assembly { - success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60) - // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } } - require(success, "pairing-add-failed"); - } - - /// @return r the product of a point on G1 and a scalar, i.e. - /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. - function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) { - uint[3] memory input; - input[0] = p.X; - input[1] = p.Y; - input[2] = s; - bool success; - // solium-disable-next-line security/no-inline-assembly - assembly { - success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60) - // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } + /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero. + function negate(G1Point memory p) internal pure returns (G1Point memory r) { + // The prime q in the base field F_q for G1 + uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + if (p.X == 0 && p.Y == 0) + return G1Point(0, 0); + return G1Point(p.X, q - (p.Y % q)); } - require(success, "pairing-mul-failed"); - } - - /// @return the result of computing the pairing check - /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 - /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should - /// return true. - function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) { - require(p1.length == p2.length, "pairing-lengths-failed"); - uint elements = p1.length; - uint inputSize = elements * 6; - uint[] memory input = new uint[](inputSize); - for (uint i = 0; i < elements; i++) { - input[i * 6 + 0] = p1[i].X; - input[i * 6 + 1] = p1[i].Y; - input[i * 6 + 2] = p2[i].X[0]; - input[i * 6 + 3] = p2[i].X[1]; - input[i * 6 + 4] = p2[i].Y[0]; - input[i * 6 + 5] = p2[i].Y[1]; + /// @return r the sum of two points of G1 + function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { + uint[4] memory input; + input[0] = p1.X; + input[1] = p1.Y; + input[2] = p2.X; + input[3] = p2.Y; + bool success; + // solium-disable-next-line security/no-inline-assembly + assembly { + success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60) + // Use "invalid" to make gas estimation work + switch success case 0 { invalid() } + } + require(success,"pairing-add-failed"); } - uint[1] memory out; - bool success; - // solium-disable-next-line security/no-inline-assembly - assembly { - success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) - // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } + /// @return r the product of a point on G1 and a scalar, i.e. + /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. + function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) { + uint[3] memory input; + input[0] = p.X; + input[1] = p.Y; + input[2] = s; + bool success; + // solium-disable-next-line security/no-inline-assembly + assembly { + success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60) + // Use "invalid" to make gas estimation work + switch success case 0 { invalid() } + } + require (success,"pairing-mul-failed"); + } + /// @return the result of computing the pairing check + /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 + /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should + /// return true. + function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) { + require(p1.length == p2.length,"pairing-lengths-failed"); + uint elements = p1.length; + uint inputSize = elements * 6; + uint[] memory input = new uint[](inputSize); + for (uint i = 0; i < elements; i++) + { + input[i * 6 + 0] = p1[i].X; + input[i * 6 + 1] = p1[i].Y; + input[i * 6 + 2] = p2[i].X[0]; + input[i * 6 + 3] = p2[i].X[1]; + input[i * 6 + 4] = p2[i].Y[0]; + input[i * 6 + 5] = p2[i].Y[1]; + } + uint[1] memory out; + bool success; + // solium-disable-next-line security/no-inline-assembly + assembly { + success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) + // Use "invalid" to make gas estimation work + switch success case 0 { invalid() } + } + require(success,"pairing-opcode-failed"); + return out[0] != 0; + } + /// Convenience method for a pairing check for two pairs. + function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) { + G1Point[] memory p1 = new G1Point[](2); + G2Point[] memory p2 = new G2Point[](2); + p1[0] = a1; + p1[1] = b1; + p2[0] = a2; + p2[1] = b2; + return pairing(p1, p2); + } + /// Convenience method for a pairing check for three pairs. + function pairingProd3( + G1Point memory a1, G2Point memory a2, + G1Point memory b1, G2Point memory b2, + G1Point memory c1, G2Point memory c2 + ) internal view returns (bool) { + G1Point[] memory p1 = new G1Point[](3); + G2Point[] memory p2 = new G2Point[](3); + p1[0] = a1; + p1[1] = b1; + p1[2] = c1; + p2[0] = a2; + p2[1] = b2; + p2[2] = c2; + return pairing(p1, p2); + } + /// Convenience method for a pairing check for four pairs. + function pairingProd4( + G1Point memory a1, G2Point memory a2, + G1Point memory b1, G2Point memory b2, + G1Point memory c1, G2Point memory c2, + G1Point memory d1, G2Point memory d2 + ) internal view returns (bool) { + G1Point[] memory p1 = new G1Point[](4); + G2Point[] memory p2 = new G2Point[](4); + p1[0] = a1; + p1[1] = b1; + p1[2] = c1; + p1[3] = d1; + p2[0] = a2; + p2[1] = b2; + p2[2] = c2; + p2[3] = d2; + return pairing(p1, p2); } - require(success, "pairing-opcode-failed"); - return out[0] != 0; - } - - /// Convenience method for a pairing check for two pairs. - function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) { - G1Point[] memory p1 = new G1Point[](2); - G2Point[] memory p2 = new G2Point[](2); - p1[0] = a1; - p1[1] = b1; - p2[0] = a2; - p2[1] = b2; - return pairing(p1, p2); - } - - /// Convenience method for a pairing check for three pairs. - function pairingProd3(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2, G1Point memory c1, G2Point memory c2) internal view returns (bool) { - G1Point[] memory p1 = new G1Point[](3); - G2Point[] memory p2 = new G2Point[](3); - p1[0] = a1; - p1[1] = b1; - p1[2] = c1; - p2[0] = a2; - p2[1] = b2; - p2[2] = c2; - return pairing(p1, p2); - } - - /// Convenience method for a pairing check for four pairs. - function pairingProd4( - G1Point memory a1, - G2Point memory a2, - G1Point memory b1, - G2Point memory b2, - G1Point memory c1, - G2Point memory c2, - G1Point memory d1, - G2Point memory d2 - ) internal view returns (bool) { - G1Point[] memory p1 = new G1Point[](4); - G2Point[] memory p2 = new G2Point[](4); - p1[0] = a1; - p1[1] = b1; - p1[2] = c1; - p1[3] = d1; - p2[0] = a2; - p2[1] = b2; - p2[2] = c2; - p2[3] = d2; - return pairing(p1, p2); - } } - contract Verifier { - using Pairing for *; - struct VerifyingKey { - Pairing.G1Point alfa1; - Pairing.G2Point beta2; - Pairing.G2Point gamma2; - Pairing.G2Point delta2; - Pairing.G1Point[] IC; - } - struct Proof { - Pairing.G1Point A; - Pairing.G2Point B; - Pairing.G1Point C; - } - - function verifyingKey() internal pure returns (VerifyingKey memory vk) { - vk.alfa1 = Pairing.G1Point( - 20491192805390485299153009773594534940189261866228447918068658471970481763042, - 9383485363053290200918347156157836566562967994039712273449902621266178545958 - ); - - vk.beta2 = Pairing.G2Point( - [4252822878758300859123897981450591353533073413197771768651442665752259397132, 6375614351688725206403948262868962793625744043794305715222011528459656738731], - [21847035105528745403288232691147584728191162732299865338377159692350059136679, 10505242626370262277552901082094356697409835680220590971873171140371331206856] - ); - vk.gamma2 = Pairing.G2Point( - [11559732032986387107991004021392285783925812861821192530917403151452391805634, 10857046999023057135944570762232829481370756359578518086990519993285655852781], - [4082367875863433681332203403145435568316851327593401208105741076214120093531, 8495653923123431417604973247489272438418190587263600148770280649306958101930] - ); - vk.delta2 = Pairing.G2Point( - [11559732032986387107991004021392285783925812861821192530917403151452391805634, 10857046999023057135944570762232829481370756359578518086990519993285655852781], - [4082367875863433681332203403145435568316851327593401208105741076214120093531, 8495653923123431417604973247489272438418190587263600148770280649306958101930] - ); - vk.IC = new Pairing.G1Point[](22); - - vk.IC[0] = Pairing.G1Point( - 12994226918873589184973686928509303296560829040421679966554788871610722975666, - 19546003293245789033051514407489605917742869051853168678675952551588673264059 - ); - - vk.IC[1] = Pairing.G1Point( - 12803481875393106746548008498445134277525885425145232429904868659552497497795, - 14694537564331845125620823836332201159223992527131190273671921404972056438350 - ); - - vk.IC[2] = Pairing.G1Point( - 12896526600976836570191398155392714054965141616837004359997046349335306162721, - 19989434935534803930041038636337516057507187085720073704180685028185491943059 - ); - - vk.IC[3] = Pairing.G1Point( - 1316318882292921074427417498918167024758763552548146498412670277806150908690, - 4496675464734154714119497950957313125247358066733690814270807794291803734246 - ); - - vk.IC[4] = Pairing.G1Point( - 6095412520421880843686410733562452820125095067123376214642702693632219147919, - 18805124981571223044033930919909367820198635605339887372165893879595885917681 - ); - - vk.IC[5] = Pairing.G1Point( - 2491592648113503772389081945290063076975598019801589629533440501442845841156, - 13391234389463383825331371383043116227852107840306198632599020502591729622484 - ); - - vk.IC[6] = Pairing.G1Point( - 6195983279938368142523765739331129953873741365958978404100950251126336420619, - 15255523481575331608052032202923784309897551868856977174561927351542766503103 - ); - - vk.IC[7] = Pairing.G1Point( - 11364908849898553727983936508468303936453241846181145049706378426559053436737, - 12272143028059829557388953943471298784072389097212881142482116493849228345944 - ); - - vk.IC[8] = Pairing.G1Point( - 7999645601849353569331229788079982131126962928370124718709121582700741706743, - 2344057992213881398120960053462701488822252700578864159913460281949725551948 - ); - - vk.IC[9] = Pairing.G1Point( - 16032444542449207733074464012443666729463280555253921300321226108727384337838, - 15550284302068130534143630938965558367339743479932980144836777854141162045599 - ); - - vk.IC[10] = Pairing.G1Point( - 14746811931688438261460396174433278363575571145186986664727520211845005639214, - 12430585284621277256717932006846197725061776365493376477691372628343500830841 - ); - - vk.IC[11] = Pairing.G1Point( - 9665472323900251212386389887072355571286254407686859980386007760322469415859, - 14996755965687753932946931756264151392152419779360225521200890974252292420412 - ); - - vk.IC[12] = Pairing.G1Point( - 108004501448464767377877268616442057348817885652988877682944326307051832181, - 14352072319589824562053349181969574390668378410837840879062264124706247340441 - ); - - vk.IC[13] = Pairing.G1Point( - 8241644122136047663973273182299008352335433437918941847881738731207527978408, - 13326634974373964259912482627512460794400032234388182531625125624431239351434 - ); - - vk.IC[14] = Pairing.G1Point( - 19079198509719557568724303856873450227277338931054655042976782137976461081455, - 20099741154760778542873760951130722650539994221026926650223788312866275905057 - ); - - vk.IC[15] = Pairing.G1Point( - 12776213961119493875955017544545281842733223900358858158966892223397818263003, - 13049175944477161115063479837952228706325305696565228051297866932929773226361 - ); - - vk.IC[16] = Pairing.G1Point( - 3677175527878880765823827286256329959476800348470829607774669755005589328592, - 5960302772589853676080934160184945132281885414289323557538680756680173217763 - ); - - vk.IC[17] = Pairing.G1Point( - 3845518388361833739355416292477732378976881884807825706781410508823338000844, - 14643485171032551307429410040201611507475314617619869031588843852404758800222 - ); - - vk.IC[18] = Pairing.G1Point( - 12781800159969915448548725085816037348380685059680464559080293032138144200069, - 8293835978235721621083584748448494414574099111793175131815478014921624321923 - ); - - vk.IC[19] = Pairing.G1Point( - 2679784852932993701185917737851208220646508350009220493871893673616712782876, - 2455480317203964036392487392172013165313334147345673527798783221956163967174 - ); - - vk.IC[20] = Pairing.G1Point( - 4240406231108001399618612059193031408047888754255460798137984403589376061488, - 9804154717486719329041740755091695338827486645577286903421673068934216499944 - ); - - vk.IC[21] = Pairing.G1Point( - 12028012375636649231431542422094056328652150783328682821491835725444465403330, - 330627474571770559729829431278328850519463731324979004581250682428211832702 - ); - } - - function verify(uint[] memory input, Proof memory proof) internal view returns (uint) { - uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617; - VerifyingKey memory vk = verifyingKey(); - require(input.length + 1 == vk.IC.length, "verifier-bad-input"); - // Compute the linear combination vk_x - Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); - for (uint i = 0; i < input.length; i++) { - require(input[i] < snark_scalar_field, "verifier-gte-snark-scalar-field"); - vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i])); + using Pairing for *; + struct VerifyingKey { + Pairing.G1Point alfa1; + Pairing.G2Point beta2; + Pairing.G2Point gamma2; + Pairing.G2Point delta2; + Pairing.G1Point[] IC; } - vk_x = Pairing.addition(vk_x, vk.IC[0]); - if (!Pairing.pairingProd4(Pairing.negate(proof.A), proof.B, vk.alfa1, vk.beta2, vk_x, vk.gamma2, proof.C, vk.delta2)) return 1; - return 0; - } + struct Proof { + Pairing.G1Point A; + Pairing.G2Point B; + Pairing.G1Point C; + } + function verifyingKey() internal pure returns (VerifyingKey memory vk) { + vk.alfa1 = Pairing.G1Point( + 20491192805390485299153009773594534940189261866228447918068658471970481763042, + 9383485363053290200918347156157836566562967994039712273449902621266178545958 + ); - /// @return r bool true if proof is valid - function verifyProof(uint[2] memory a, uint[2][2] memory b, uint[2] memory c, uint[21] memory input) public view returns (bool r) { - Proof memory proof; - proof.A = Pairing.G1Point(a[0], a[1]); - proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]); - proof.C = Pairing.G1Point(c[0], c[1]); - uint[] memory inputValues = new uint[](input.length); - for (uint i = 0; i < input.length; i++) { - inputValues[i] = input[i]; + vk.beta2 = Pairing.G2Point( + [4252822878758300859123897981450591353533073413197771768651442665752259397132, + 6375614351688725206403948262868962793625744043794305715222011528459656738731], + [21847035105528745403288232691147584728191162732299865338377159692350059136679, + 10505242626370262277552901082094356697409835680220590971873171140371331206856] + ); + vk.gamma2 = Pairing.G2Point( + [11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781], + [4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930] + ); + vk.delta2 = Pairing.G2Point( + [21400950006334596809620414650984060271547781320587041586582241856432545596853, + 4434838244183004125948903882711011936661127441470818546923288877306819452636], + [2796000431616140674414670261816421578310202962839150163240415205010741728231, + 4843880600431220200001244530635986852747165932761867552149072840428855560814] + ); + vk.IC = new Pairing.G1Point[](6); + + vk.IC[0] = Pairing.G1Point( + 15009312284435800563299436124586789567729172121551113323940564442355600334716, + 13834125886112252626334226096366752789195726969302818602939636959745746610033 + ); + + vk.IC[1] = Pairing.G1Point( + 1966909470468083181657959373294006381498129895392491054251420340751239666125, + 5146107147413146625591365640174714041856752401824448304807896036266041649611 + ); + + vk.IC[2] = Pairing.G1Point( + 17276971595668486868222383168237593236978334134767176117581355512463795238763, + 21246005671361920893771333255761799469037678264522607178744808281913314225224 + ); + + vk.IC[3] = Pairing.G1Point( + 14553605843389351570965449619381960711541626226310620058730634869925134860734, + 8946341781872606532350366026381188086762118291607087803977945091313902549942 + ); + + vk.IC[4] = Pairing.G1Point( + 645454162862861182668887107583939252628620832452708399999567458359265311500, + 16733367852579240784291307389527288701875659060065915552448056142902435317113 + ); + + vk.IC[5] = Pairing.G1Point( + 19058319803149471296829972060878136737499124026425915356745392395996898364008, + 17562391019431954846615693478034025576916072455820597630722165893723195751419 + ); + + } + function verify(uint[] memory input, Proof memory proof) internal view returns (uint) { + uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + VerifyingKey memory vk = verifyingKey(); + require(input.length + 1 == vk.IC.length,"verifier-bad-input"); + // Compute the linear combination vk_x + Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); + for (uint i = 0; i < input.length; i++) { + require(input[i] < snark_scalar_field,"verifier-gte-snark-scalar-field"); + vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i])); + } + vk_x = Pairing.addition(vk_x, vk.IC[0]); + if (!Pairing.pairingProd4( + Pairing.negate(proof.A), proof.B, + vk.alfa1, vk.beta2, + vk_x, vk.gamma2, + proof.C, vk.delta2 + )) return 1; + return 0; } - if (verify(inputValues, proof) == 0) { - return true; - } else { - return false; + /// @return r bool true if proof is valid + function verifyProof( + uint[2] memory a, + uint[2][2] memory b, + uint[2] memory c, + uint[5] memory input + ) public view returns (bool r) { + Proof memory proof; + proof.A = Pairing.G1Point(a[0], a[1]); + proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]); + proof.C = Pairing.G1Point(c[0], c[1]); + uint[] memory inputValues = new uint[](input.length); + for(uint i = 0; i < input.length; i++){ + inputValues[i] = input[i]; + } + if (verify(inputValues, proof) == 0) { + return true; + } else { + return false; + } } - } } diff --git a/packages/twitter-verifier-circuits/helpers/generate-inputs.ts b/packages/twitter-verifier-circuits/helpers/generate-inputs.ts index fa38a7519..87a9d7851 100644 --- a/packages/twitter-verifier-circuits/helpers/generate-inputs.ts +++ b/packages/twitter-verifier-circuits/helpers/generate-inputs.ts @@ -7,7 +7,7 @@ export const MAX_BODY_PADDED_BYTES = 1536; // NOTE: this must be the same as the export function generateTwitterVerifierCircuitInputs({ rsaSignature, - rsaModulus, + rsaPublicKey, body, bodyHash, message, // the message that was signed (header + bodyHash) @@ -17,12 +17,12 @@ export function generateTwitterVerifierCircuitInputs({ message: Buffer; bodyHash: string; rsaSignature: BigInt; - rsaModulus: BigInt; + rsaPublicKey: BigInt; ethereumAddress: string; }) { const emailVerifierInputs = generateCircuitInputs({ rsaSignature, - rsaModulus, + rsaPublicKey, body, bodyHash, message, diff --git a/packages/twitter-verifier-circuits/package.json b/packages/twitter-verifier-circuits/package.json index 9d3006b5a..9269cf4ae 100644 --- a/packages/twitter-verifier-circuits/package.json +++ b/packages/twitter-verifier-circuits/package.json @@ -7,6 +7,7 @@ "dependencies": { "@zk-email/circuits": "workspace:^", "@zk-email/helpers": "workspace:^", + "big-integer": "^1.6.51", "snarkjs": "https://github.com/sampritipanda/snarkjs.git#fef81fc51d17a734637555c6edbd585ecda02d9e" }, "devDependencies": { diff --git a/packages/twitter-verifier-circuits/scripts/1_compile.sh b/packages/twitter-verifier-circuits/scripts/1_compile.sh index 1fa5fae84..de95a299e 100755 --- a/packages/twitter-verifier-circuits/scripts/1_compile.sh +++ b/packages/twitter-verifier-circuits/scripts/1_compile.sh @@ -9,7 +9,7 @@ fi echo '****COMPILING CIRCUIT****' start=$(date +%s) set -x -circom -l ../../../node_modules "../$CIRCUIT_NAME".circom --r1cs --wasm --sym --c --wat --output "$BUILD_DIR" +circom -l ../node_modules "../$CIRCUIT_NAME".circom --r1cs --wasm --sym --c --wat --output "$BUILD_DIR" { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -18,7 +18,7 @@ echo echo '****INSPECTING CIRCUIT FOR UNDERCONSTRAINTS (OPTIONAL, CAN FORCE EXIT)****' start=$(date +%s) set -x -circom -l ../../../node_modules "../$CIRCUIT_NAME".circom --inspect +circom -l ../node_modules "../$CIRCUIT_NAME".circom --inspect { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" diff --git a/packages/twitter-verifier-circuits/scripts/3_gen_both_zkeys.sh b/packages/twitter-verifier-circuits/scripts/3_gen_both_zkeys.sh index 2d170c803..fed0b9dfb 100755 --- a/packages/twitter-verifier-circuits/scripts/3_gen_both_zkeys.sh +++ b/packages/twitter-verifier-circuits/scripts/3_gen_both_zkeys.sh @@ -25,7 +25,7 @@ yarn echo "****GENERATING ZKEY 0****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs groth16 setup "$R1CS_FILE" "$PHASE1" "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey -e=$ENTROPY1 +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs groth16 setup "$R1CS_FILE" "$PHASE1" "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey -e=$ENTROPY1 { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -34,7 +34,7 @@ echo echo "****GENERATING ZKEY 1****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey --name="1st Contributor Name" -e=$ENTROPY2 +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey --name="1st Contributor Name" -e=$ENTROPY2 { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -44,7 +44,7 @@ echo "****GENERATING FINAL ZKEY****" start=$(date +%s) set -x # hashlib.sha256(b"sampritiaayush").hexdigest().upper() -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs zkey beacon "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey $BEACON 10 -n="Final Beacon phase2" +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs zkey beacon "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey $BEACON 10 -n="Final Beacon phase2" { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -60,7 +60,7 @@ yarn add snarkjs@latest echo "****GENERATING ZKEY NONCHUNKED 0****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs groth16 setup "$R1CS_FILE" "$PHASE1" "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey -e=$ENTROPY1 +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs groth16 setup "$R1CS_FILE" "$PHASE1" "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey -e=$ENTROPY1 { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -69,7 +69,7 @@ echo echo "****GENERATING ZKEY NONCHUNKED 1****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey --name="1st Contributor Name" -v -e=$ENTROPY2 +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey --name="1st Contributor Name" -v -e=$ENTROPY2 { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -78,7 +78,7 @@ echo echo "****GENERATING ZKEY NONCHUNKED FINAL****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs zkey beacon "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey "$BUILD_DIR"/"$CIRCUIT_NAME"_nonchunked.zkey $BEACON 10 -n="Final Beacon phase2" +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs zkey beacon "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey "$BUILD_DIR"/"$CIRCUIT_NAME"_nonchunked.zkey $BEACON 10 -n="Final Beacon phase2" { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" diff --git a/packages/twitter-verifier-circuits/scripts/3_gen_chunk_zkey.sh b/packages/twitter-verifier-circuits/scripts/3_gen_chunk_zkey.sh index 135e7c129..987f887b9 100755 --- a/packages/twitter-verifier-circuits/scripts/3_gen_chunk_zkey.sh +++ b/packages/twitter-verifier-circuits/scripts/3_gen_chunk_zkey.sh @@ -15,7 +15,7 @@ fi echo "****GENERATING ZKEY NONCHUNKED 0****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs groth16 setup "$R1CS_FILE" "$PHASE1" "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey -e=$ENTROPY1 +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs groth16 setup "$R1CS_FILE" "$PHASE1" "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey -e=$ENTROPY1 { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -24,7 +24,7 @@ echo echo "****GENERATING ZKEY NONCHUNKED 1****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey --name="1st Contributor Name" -v -e=$ENTROPY2 +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs zkey contribute "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_0.zkey "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey --name="1st Contributor Name" -v -e=$ENTROPY2 { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -33,7 +33,7 @@ echo echo "****GENERATING ZKEY NONCHUNKED FINAL****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=56000' node ../../../node_modules/.bin/snarkjs zkey beacon "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey $BEACON 10 -n="Final Beacon phase2" +NODE_OPTIONS='--max-old-space-size=56000' node ../node_modules/.bin/snarkjs zkey beacon "$PARTIAL_ZKEYS"/"$CIRCUIT_NAME"_1.zkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey $BEACON 10 -n="Final Beacon phase2" { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" diff --git a/packages/twitter-verifier-circuits/scripts/4_gen_vkey.sh b/packages/twitter-verifier-circuits/scripts/4_gen_vkey.sh index 714104173..3ac653c40 100755 --- a/packages/twitter-verifier-circuits/scripts/4_gen_vkey.sh +++ b/packages/twitter-verifier-circuits/scripts/4_gen_vkey.sh @@ -7,7 +7,7 @@ PHASE1=../powersOfTau28_hez_final_22.ptau echo "****EXPORTING VKEY****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=644000' ../../../node_modules/.bin/snarkjs zkey export verificationkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/vkey.json +NODE_OPTIONS='--max-old-space-size=644000' ../node_modules/.bin/snarkjs zkey export verificationkey "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/vkey.json end=$(date +%s) { set +x; } 2>/dev/null echo "DONE ($((end - start))s)" diff --git a/packages/twitter-verifier-circuits/scripts/5_gen_proof.sh b/packages/twitter-verifier-circuits/scripts/5_gen_proof.sh index c6d65f02b..e8ce29704 100755 --- a/packages/twitter-verifier-circuits/scripts/5_gen_proof.sh +++ b/packages/twitter-verifier-circuits/scripts/5_gen_proof.sh @@ -5,7 +5,7 @@ source circuit.env echo "****GENERATING PROOF FOR SAMPLE INPUT****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=644000' ../../../node_modules/.bin/snarkjs groth16 prove "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/witness.wtns "$BUILD_DIR"/proof.json "$BUILD_DIR"/public.json +NODE_OPTIONS='--max-old-space-size=644000' ../node_modules/.bin/snarkjs groth16 prove "$BUILD_DIR"/"$CIRCUIT_NAME".zkey "$BUILD_DIR"/witness.wtns "$BUILD_DIR"/proof.json "$BUILD_DIR"/public.json { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" @@ -14,7 +14,7 @@ echo echo "****VERIFYING PROOF FOR SAMPLE INPUT****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=644000' ../../../node_modules/.bin/snarkjs groth16 verify "$BUILD_DIR"/vkey.json "$BUILD_DIR"/public.json "$BUILD_DIR"/proof.json +NODE_OPTIONS='--max-old-space-size=644000' ../node_modules/.bin/snarkjs groth16 verify "$BUILD_DIR"/vkey.json "$BUILD_DIR"/public.json "$BUILD_DIR"/proof.json end=$(date +%s) { set +x; } 2>/dev/null echo "DONE ($((end - start))s)" diff --git a/packages/twitter-verifier-circuits/scripts/7_gen_solidity_verifier.sh b/packages/twitter-verifier-circuits/scripts/7_gen_solidity_verifier.sh index 27db32dfe..89f9c8ec1 100755 --- a/packages/twitter-verifier-circuits/scripts/7_gen_solidity_verifier.sh +++ b/packages/twitter-verifier-circuits/scripts/7_gen_solidity_verifier.sh @@ -6,11 +6,8 @@ source circuit.env echo "****GENERATING SOLIDITY VERIFIER FOR ZKEY****" start=$(date +%s) set -x -NODE_OPTIONS='--max-old-space-size=644000' ../../../node_modules/.bin/snarkjs zkey export solidityverifier "$BUILD_DIR"/"$CIRCUIT_NAME".zkey ../contracts/verifier.sol +NODE_OPTIONS='--max-old-space-size=644000' ../node_modules/.bin/snarkjs zkey export solidityverifier "$BUILD_DIR"/"$CIRCUIT_NAME".zkey ../contracts/verifier.sol { set +x; } 2>/dev/null end=$(date +%s) echo "DONE ($((end - start))s)" echo - -echo "Solidity calldata" -NODE_OPTIONS='--max-old-space-size=644000' ../../../node_modules/.bin/snarkjs zkey export soliditycalldata "$BUILD_DIR"/public.json "$BUILD_DIR"/proof.json diff --git a/packages/twitter-verifier-circuits/scripts/upload_to_s3.py b/packages/twitter-verifier-circuits/scripts/upload_to_s3.py index b01c1249c..b20dd176c 100644 --- a/packages/twitter-verifier-circuits/scripts/upload_to_s3.py +++ b/packages/twitter-verifier-circuits/scripts/upload_to_s3.py @@ -15,6 +15,7 @@ # parser.add_argument('--circuit_name', type=str, default='email', help='Name of the circuit (i.e. the foldername in build_dir/)') parser.add_argument('--prefix_to_tar', type=str, default='email.zkey', help='Prefix to match for files in order to compress to a .tar.gz and upload') parser.add_argument('--prefix', type=str, default='vkey.json,email.wasm', help='Comma-seperated prefixes to upload without compression') +parser.add_argument('--bucket_dir', type=str, help='Directory name to store the zkeys under in the S3 bucket') args = parser.parse_args() bucket_name = args.bucket_name # build_dir = args.build_dir @@ -32,7 +33,7 @@ def upload_to_s3(filename, dir=""): with open(dir + filename, 'rb') as file: print("Starting upload...") - s3.upload_fileobj(file, bucket_name, filename, ExtraArgs={ + s3.upload_fileobj(file, bucket_name, args.bucket_dir + "/" + filename, ExtraArgs={ 'ACL': 'public-read', 'ContentType': 'binary/octet-stream'}) print("Done uploading ", filename, "!") diff --git a/packages/twitter-verifier-circuits/scripts/vkey.json b/packages/twitter-verifier-circuits/scripts/vkey.json new file mode 100644 index 000000000..21399513a --- /dev/null +++ b/packages/twitter-verifier-circuits/scripts/vkey.json @@ -0,0 +1,114 @@ +{ + "protocol": "groth16", + "curve": "bn128", + "nPublic": 5, + "vk_alpha_1": [ + "20491192805390485299153009773594534940189261866228447918068658471970481763042", + "9383485363053290200918347156157836566562967994039712273449902621266178545958", + "1" + ], + "vk_beta_2": [ + [ + "6375614351688725206403948262868962793625744043794305715222011528459656738731", + "4252822878758300859123897981450591353533073413197771768651442665752259397132" + ], + [ + "10505242626370262277552901082094356697409835680220590971873171140371331206856", + "21847035105528745403288232691147584728191162732299865338377159692350059136679" + ], + [ + "1", + "0" + ] + ], + "vk_gamma_2": [ + [ + "10857046999023057135944570762232829481370756359578518086990519993285655852781", + "11559732032986387107991004021392285783925812861821192530917403151452391805634" + ], + [ + "8495653923123431417604973247489272438418190587263600148770280649306958101930", + "4082367875863433681332203403145435568316851327593401208105741076214120093531" + ], + [ + "1", + "0" + ] + ], + "vk_delta_2": [ + [ + "4434838244183004125948903882711011936661127441470818546923288877306819452636", + "21400950006334596809620414650984060271547781320587041586582241856432545596853" + ], + [ + "4843880600431220200001244530635986852747165932761867552149072840428855560814", + "2796000431616140674414670261816421578310202962839150163240415205010741728231" + ], + [ + "1", + "0" + ] + ], + "vk_alphabeta_12": [ + [ + [ + "2029413683389138792403550203267699914886160938906632433982220835551125967885", + "21072700047562757817161031222997517981543347628379360635925549008442030252106" + ], + [ + "5940354580057074848093997050200682056184807770593307860589430076672439820312", + "12156638873931618554171829126792193045421052652279363021382169897324752428276" + ], + [ + "7898200236362823042373859371574133993780991612861777490112507062703164551277", + "7074218545237549455313236346927434013100842096812539264420499035217050630853" + ] + ], + [ + [ + "7077479683546002997211712695946002074877511277312570035766170199895071832130", + "10093483419865920389913245021038182291233451549023025229112148274109565435465" + ], + [ + "4595479056700221319381530156280926371456704509942304414423590385166031118820", + "19831328484489333784475432780421641293929726139240675179672856274388269393268" + ], + [ + "11934129596455521040620786944827826205713621633706285934057045369193958244500", + "8037395052364110730298837004334506829870972346962140206007064471173334027475" + ] + ] + ], + "IC": [ + [ + "15009312284435800563299436124586789567729172121551113323940564442355600334716", + "13834125886112252626334226096366752789195726969302818602939636959745746610033", + "1" + ], + [ + "1966909470468083181657959373294006381498129895392491054251420340751239666125", + "5146107147413146625591365640174714041856752401824448304807896036266041649611", + "1" + ], + [ + "17276971595668486868222383168237593236978334134767176117581355512463795238763", + "21246005671361920893771333255761799469037678264522607178744808281913314225224", + "1" + ], + [ + "14553605843389351570965449619381960711541626226310620058730634869925134860734", + "8946341781872606532350366026381188086762118291607087803977945091313902549942", + "1" + ], + [ + "645454162862861182668887107583939252628620832452708399999567458359265311500", + "16733367852579240784291307389527288701875659060065915552448056142902435317113", + "1" + ], + [ + "19058319803149471296829972060878136737499124026425915356745392395996898364008", + "17562391019431954846615693478034025576916072455820597630722165893723195751419", + "1" + ] + ] +} \ No newline at end of file diff --git a/packages/twitter-verifier-circuits/tests/twitter.test.ts b/packages/twitter-verifier-circuits/tests/twitter.test.ts index 0bb9964ca..3b5f0f984 100644 --- a/packages/twitter-verifier-circuits/tests/twitter.test.ts +++ b/packages/twitter-verifier-circuits/tests/twitter.test.ts @@ -38,7 +38,7 @@ describe("Twitter email test", function () { it("should verify twitter email", async function () { const twitterVerifierInputs = generateTwitterVerifierCircuitInputs({ rsaSignature: dkimResult.signature, - rsaModulus: dkimResult.modulus, + rsaPublicKey: dkimResult.publicKey, body: dkimResult.body, bodyHash: dkimResult.bodyHash, message: dkimResult.message, diff --git a/packages/twitter-verifier-circuits/twitter.circom b/packages/twitter-verifier-circuits/twitter.circom index 22ef25780..155b66135 100644 --- a/packages/twitter-verifier-circuits/twitter.circom +++ b/packages/twitter-verifier-circuits/twitter.circom @@ -10,15 +10,11 @@ include "./components/twitter_reset_regex.circom"; // but the max mody bytes may need to be changed to be larger if the email has a lot of i.e. HTML formatting // TODO: split into header and body template TwitterVerifier(max_header_bytes, max_body_bytes, n, k, pack_size, expose_from, expose_to) { - assert(max_header_bytes % 64 == 0); - assert(max_body_bytes % 64 == 0); assert(expose_from < 2); // 1 if we should expose the from, 0 if we should not assert(expose_to == 0); // 1 if we should expose the to, 0 if we should not: due to hotmail restrictions, we force-disable this - assert(n * k > 2048); // constraints for 2048 bit RSA - assert(n < (255 \ 2)); // we want a multiplication to fit into a circom signal signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length - signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each. + signal input pubkey[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each. signal input signature[k]; // rsa signature. split up into k parts of n bits each. signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length @@ -30,7 +26,20 @@ template TwitterVerifier(max_header_bytes, max_body_bytes, n, k, pack_size, expo signal input in_body_padded[max_body_bytes]; signal input in_body_len_padded_bytes; - EmailVerifier(max_header_bytes, max_body_bytes, n, k, 0)(in_padded, modulus, signature, in_len_padded_bytes, body_hash_idx, precomputed_sha, in_body_padded, in_body_len_padded_bytes); + signal output pubkey_hash; + + component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, 0); + EV.in_padded <== in_padded; + EV.pubkey <== pubkey; + EV.signature <== signature; + EV.in_len_padded_bytes <== in_len_padded_bytes; + EV.body_hash_idx <== body_hash_idx; + EV.precomputed_sha <== precomputed_sha; + EV.in_body_padded <== in_body_padded; + EV.in_body_len_padded_bytes <== in_body_len_padded_bytes; + + pubkey_hash <== EV.pubkey_hash; + // FROM HEADER REGEX: 736,553 constraints // This extracts the from email, and the precise regex format can be viewed in the README @@ -68,14 +77,14 @@ template TwitterVerifier(max_header_bytes, max_body_bytes, n, k, pack_size, expo } // In circom, all output signals of the main component are public (and cannot be made private), the input signals of the main component are private if not stated otherwise using the keyword public as above. The rest of signals are all private and cannot be made public. -// This makes modulus and reveal_twitter_packed public. hash(signature) can optionally be made public, but is not recommended since it allows the mailserver to trace who the offender is. +// This makes pubkey_hash and reveal_twitter_packed public. hash(signature) can optionally be made public, but is not recommended since it allows the mailserver to trace who the offender is. // Args: // * max_header_bytes = 1024 is the max number of bytes in the header // * max_body_bytes = 1536 is the max number of bytes in the body after precomputed slice -// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter) -// * k = 17 is the number of chunks in the modulus (RSA parameter) +// * n = 121 is the number of bits in each chunk of the pubkey (RSA parameter) +// * k = 17 is the number of chunks in the pubkey (RSA parameter) // * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later) // * expose_from = 0 is whether to expose the from email address // * expose_to = 0 is whether to expose the to email (not recommended) -component main { public [ modulus, address ] } = TwitterVerifier(1024, 1536, 121, 17, 7, 0, 0); +component main { public [ address ] } = TwitterVerifier(1024, 1536, 121, 17, 7, 0, 0); diff --git a/packages/twitter-verifier-contracts/foundry.toml b/packages/twitter-verifier-contracts/foundry.toml index c4c3c7269..b401a2f38 100644 --- a/packages/twitter-verifier-contracts/foundry.toml +++ b/packages/twitter-verifier-contracts/foundry.toml @@ -3,4 +3,4 @@ src = 'src' out = 'out' libs = [ 'lib' ] # See more config options https://github.com/foundry-rs/foundry/tree/master/config viaIR = true -allow_paths = ['../../node_modules', '../../node_modules/@zk-email/contracts/utils'] +allow_paths = ['../../node_modules', '../../node_modules/@zk-email/contracts'] diff --git a/packages/twitter-verifier-contracts/script/DeployTwitter.s.sol b/packages/twitter-verifier-contracts/script/DeployTwitter.s.sol index ee6857c51..1265524b0 100644 --- a/packages/twitter-verifier-contracts/script/DeployTwitter.s.sol +++ b/packages/twitter-verifier-contracts/script/DeployTwitter.s.sol @@ -1,8 +1,9 @@ pragma solidity ^0.8.0; import "forge-std/Test.sol"; -import "forge-std/console.sol"; import "forge-std/Script.sol"; +import "forge-std/console.sol"; +import "@zk-email/contracts/DKIMRegistry.sol"; import "../src/TwitterEmailHandler.sol"; import "../src/Groth16VerifierTwitter.sol"; @@ -19,9 +20,16 @@ contract Deploy is Script, Test { function run() public { uint256 sk = getPrivateKey(); vm.startBroadcast(sk); + Verifier proofVerifier = new Verifier(); - MailServer mailServer = new MailServer(); - VerifiedTwitterEmail testVerifier = new VerifiedTwitterEmail(proofVerifier, mailServer); + console.log("Deployed Verifier at address: %s", address(proofVerifier)); + + DKIMRegistry dkimRegistry = new DKIMRegistry(); + console.log("Deployed DKIMRegistry at address: %s", address(dkimRegistry)); + + VerifiedTwitterEmail testVerifier = new VerifiedTwitterEmail(proofVerifier, dkimRegistry); + console.log("Deployed VerifiedTwitterEmail at address: %s", address(testVerifier)); + vm.stopBroadcast(); } } diff --git a/packages/twitter-verifier-contracts/src/Groth16VerifierTwitter.sol b/packages/twitter-verifier-contracts/src/Groth16VerifierTwitter.sol index ed6e02460..b2e469a18 100644 --- a/packages/twitter-verifier-contracts/src/Groth16VerifierTwitter.sol +++ b/packages/twitter-verifier-contracts/src/Groth16VerifierTwitter.sol @@ -1,5 +1,3 @@ -import "@zk-email/contracts/EmailVerifier.sol"; - // // Copyright 2017 Christian Reitwiessner // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -17,51 +15,49 @@ pragma solidity >=0.6.11; library Pairing { struct G1Point { - uint256 X; - uint256 Y; + uint X; + uint Y; } // Encoding of field elements is: X[0] * z + X[1] - struct G2Point { - uint256[2] X; - uint256[2] Y; + uint[2] X; + uint[2] Y; } - /// @return the generator of G1 function P1() internal pure returns (G1Point memory) { return G1Point(1, 2); } - /// @return the generator of G2 function P2() internal pure returns (G2Point memory) { // Original code point - return - G2Point( - [11559732032986387107991004021392285783925812861821192530917403151452391805634, 10857046999023057135944570762232829481370756359578518086990519993285655852781], - [4082367875863433681332203403145435568316851327593401208105741076214120093531, 8495653923123431417604973247489272438418190587263600148770280649306958101930] - ); + return G2Point( + [11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781], + [4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930] + ); - /* +/* // Changed by Jordi point return G2Point( [10857046999023057135944570762232829481370756359578518086990519993285655852781, 11559732032986387107991004021392285783925812861821192530917403151452391805634], [8495653923123431417604973247489272438418190587263600148770280649306958101930, 4082367875863433681332203403145435568316851327593401208105741076214120093531] - );*/ + ); +*/ } - /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero. function negate(G1Point memory p) internal pure returns (G1Point memory r) { // The prime q in the base field F_q for G1 - uint256 q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; - if (p.X == 0 && p.Y == 0) return G1Point(0, 0); + uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + if (p.X == 0 && p.Y == 0) + return G1Point(0, 0); return G1Point(p.X, q - (p.Y % q)); } - /// @return r the sum of two points of G1 function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { - uint256[4] memory input; + uint[4] memory input; input[0] = p1.X; input[1] = p1.Y; input[2] = p2.X; @@ -71,18 +67,14 @@ library Pairing { assembly { success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60) // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } + switch success case 0 { invalid() } } - require(success, "pairing-add-failed"); + require(success,"pairing-add-failed"); } - /// @return r the product of a point on G1 and a scalar, i.e. /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. - function scalar_mul(G1Point memory p, uint256 s) internal view returns (G1Point memory r) { - uint256[3] memory input; + function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) { + uint[3] memory input; input[0] = p.X; input[1] = p.Y; input[2] = s; @@ -91,24 +83,21 @@ library Pairing { assembly { success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60) // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } + switch success case 0 { invalid() } } - require(success, "pairing-mul-failed"); + require (success,"pairing-mul-failed"); } - /// @return the result of computing the pairing check /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should /// return true. function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) { - require(p1.length == p2.length, "pairing-lengths-failed"); - uint256 elements = p1.length; - uint256 inputSize = elements * 6; - uint256[] memory input = new uint256[](inputSize); - for (uint256 i = 0; i < elements; i++) { + require(p1.length == p2.length,"pairing-lengths-failed"); + uint elements = p1.length; + uint inputSize = elements * 6; + uint[] memory input = new uint[](inputSize); + for (uint i = 0; i < elements; i++) + { input[i * 6 + 0] = p1[i].X; input[i * 6 + 1] = p1[i].Y; input[i * 6 + 2] = p2[i].X[0]; @@ -116,21 +105,17 @@ library Pairing { input[i * 6 + 4] = p2[i].Y[0]; input[i * 6 + 5] = p2[i].Y[1]; } - uint256[1] memory out; + uint[1] memory out; bool success; // solium-disable-next-line security/no-inline-assembly assembly { success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } + switch success case 0 { invalid() } } - require(success, "pairing-opcode-failed"); + require(success,"pairing-opcode-failed"); return out[0] != 0; } - /// Convenience method for a pairing check for two pairs. function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](2); @@ -141,9 +126,12 @@ library Pairing { p2[1] = b2; return pairing(p1, p2); } - /// Convenience method for a pairing check for three pairs. - function pairingProd3(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2, G1Point memory c1, G2Point memory c2) internal view returns (bool) { + function pairingProd3( + G1Point memory a1, G2Point memory a2, + G1Point memory b1, G2Point memory b2, + G1Point memory c1, G2Point memory c2 + ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](3); G2Point[] memory p2 = new G2Point[](3); p1[0] = a1; @@ -154,17 +142,12 @@ library Pairing { p2[2] = c2; return pairing(p1, p2); } - /// Convenience method for a pairing check for four pairs. function pairingProd4( - G1Point memory a1, - G2Point memory a2, - G1Point memory b1, - G2Point memory b2, - G1Point memory c1, - G2Point memory c2, - G1Point memory d1, - G2Point memory d2 + G1Point memory a1, G2Point memory a2, + G1Point memory b1, G2Point memory b2, + G1Point memory c1, G2Point memory c2, + G1Point memory d1, G2Point memory d2 ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](4); G2Point[] memory p2 = new G2Point[](4); @@ -179,10 +162,8 @@ library Pairing { return pairing(p1, p2); } } - -contract Verifier is Groth16Verifier { +contract Verifier { using Pairing for *; - struct VerifyingKey { Pairing.G1Point alfa1; Pairing.G2Point beta2; @@ -190,13 +171,11 @@ contract Verifier is Groth16Verifier { Pairing.G2Point delta2; Pairing.G1Point[] IC; } - struct Proof { Pairing.G1Point A; Pairing.G2Point B; Pairing.G1Point C; } - function verifyingKey() internal pure returns (VerifyingKey memory vk) { vk.alfa1 = Pairing.G1Point( 20491192805390485299153009773594534940189261866228447918068658471970481763042, @@ -204,131 +183,88 @@ contract Verifier is Groth16Verifier { ); vk.beta2 = Pairing.G2Point( - [4252822878758300859123897981450591353533073413197771768651442665752259397132, 6375614351688725206403948262868962793625744043794305715222011528459656738731], - [21847035105528745403288232691147584728191162732299865338377159692350059136679, 10505242626370262277552901082094356697409835680220590971873171140371331206856] + [4252822878758300859123897981450591353533073413197771768651442665752259397132, + 6375614351688725206403948262868962793625744043794305715222011528459656738731], + [21847035105528745403288232691147584728191162732299865338377159692350059136679, + 10505242626370262277552901082094356697409835680220590971873171140371331206856] ); vk.gamma2 = Pairing.G2Point( - [11559732032986387107991004021392285783925812861821192530917403151452391805634, 10857046999023057135944570762232829481370756359578518086990519993285655852781], - [4082367875863433681332203403145435568316851327593401208105741076214120093531, 8495653923123431417604973247489272438418190587263600148770280649306958101930] + [11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781], + [4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930] ); vk.delta2 = Pairing.G2Point( - [6000163699235006893443306275332042954252661854661784159693946044989377098783, 20536448868052571171670766235318232115848913256594482835722646387022981948632], - [19144212726952098782633973455530756687939147201049764436425855017202088293155, 4516015772111037944187264821240366560810172943735882088874881139630185981871] - ); - vk.IC = new Pairing.G1Point[](22); - vk.IC[0] = Pairing.G1Point( - 12994226918873589184973686928509303296560829040421679966554788871610722975666, - 19546003293245789033051514407489605917742869051853168678675952551588673264059 - ); - vk.IC[1] = Pairing.G1Point( - 12803481875393106746548008498445134277525885425145232429904868659552497497795, - 14694537564331845125620823836332201159223992527131190273671921404972056438350 - ); - vk.IC[2] = Pairing.G1Point( - 12896526600976836570191398155392714054965141616837004359997046349335306162721, - 19989434935534803930041038636337516057507187085720073704180685028185491943059 - ); - vk.IC[3] = Pairing.G1Point( - 1316318882292921074427417498918167024758763552548146498412670277806150908690, - 4496675464734154714119497950957313125247358066733690814270807794291803734246 - ); - vk.IC[4] = Pairing.G1Point( - 6095412520421880843686410733562452820125095067123376214642702693632219147919, - 18805124981571223044033930919909367820198635605339887372165893879595885917681 - ); - vk.IC[5] = Pairing.G1Point( - 2491592648113503772389081945290063076975598019801589629533440501442845841156, - 13391234389463383825331371383043116227852107840306198632599020502591729622484 - ); - vk.IC[6] = Pairing.G1Point( - 6195983279938368142523765739331129953873741365958978404100950251126336420619, - 15255523481575331608052032202923784309897551868856977174561927351542766503103 - ); - vk.IC[7] = Pairing.G1Point( - 11364908849898553727983936508468303936453241846181145049706378426559053436737, - 12272143028059829557388953943471298784072389097212881142482116493849228345944 - ); - vk.IC[8] = Pairing.G1Point( - 7999645601849353569331229788079982131126962928370124718709121582700741706743, - 2344057992213881398120960053462701488822252700578864159913460281949725551948 - ); - vk.IC[9] = Pairing.G1Point( - 16032444542449207733074464012443666729463280555253921300321226108727384337838, - 15550284302068130534143630938965558367339743479932980144836777854141162045599 - ); - vk.IC[10] = Pairing.G1Point( - 14746811931688438261460396174433278363575571145186986664727520211845005639214, - 12430585284621277256717932006846197725061776365493376477691372628343500830841 - ); - vk.IC[11] = Pairing.G1Point( - 9665472323900251212386389887072355571286254407686859980386007760322469415859, - 14996755965687753932946931756264151392152419779360225521200890974252292420412 - ); - vk.IC[12] = Pairing.G1Point( - 108004501448464767377877268616442057348817885652988877682944326307051832181, - 14352072319589824562053349181969574390668378410837840879062264124706247340441 - ); - vk.IC[13] = Pairing.G1Point( - 8241644122136047663973273182299008352335433437918941847881738731207527978408, - 13326634974373964259912482627512460794400032234388182531625125624431239351434 - ); - vk.IC[14] = Pairing.G1Point( - 19079198509719557568724303856873450227277338931054655042976782137976461081455, - 20099741154760778542873760951130722650539994221026926650223788312866275905057 - ); - vk.IC[15] = Pairing.G1Point( - 12776213961119493875955017544545281842733223900358858158966892223397818263003, - 13049175944477161115063479837952228706325305696565228051297866932929773226361 - ); - vk.IC[16] = Pairing.G1Point( - 3677175527878880765823827286256329959476800348470829607774669755005589328592, - 5960302772589853676080934160184945132281885414289323557538680756680173217763 - ); - vk.IC[17] = Pairing.G1Point( - 3845518388361833739355416292477732378976881884807825706781410508823338000844, - 14643485171032551307429410040201611507475314617619869031588843852404758800222 - ); - vk.IC[18] = Pairing.G1Point( - 12781800159969915448548725085816037348380685059680464559080293032138144200069, - 8293835978235721621083584748448494414574099111793175131815478014921624321923 - ); - vk.IC[19] = Pairing.G1Point( - 2679784852932993701185917737851208220646508350009220493871893673616712782876, - 2455480317203964036392487392172013165313334147345673527798783221956163967174 - ); - vk.IC[20] = Pairing.G1Point( - 4240406231108001399618612059193031408047888754255460798137984403589376061488, - 9804154717486719329041740755091695338827486645577286903421673068934216499944 - ); - vk.IC[21] = Pairing.G1Point( - 12028012375636649231431542422094056328652150783328682821491835725444465403330, - 330627474571770559729829431278328850519463731324979004581250682428211832702 + [21400950006334596809620414650984060271547781320587041586582241856432545596853, + 4434838244183004125948903882711011936661127441470818546923288877306819452636], + [2796000431616140674414670261816421578310202962839150163240415205010741728231, + 4843880600431220200001244530635986852747165932761867552149072840428855560814] ); + vk.IC = new Pairing.G1Point[](6); + + vk.IC[0] = Pairing.G1Point( + 15009312284435800563299436124586789567729172121551113323940564442355600334716, + 13834125886112252626334226096366752789195726969302818602939636959745746610033 + ); + + vk.IC[1] = Pairing.G1Point( + 1966909470468083181657959373294006381498129895392491054251420340751239666125, + 5146107147413146625591365640174714041856752401824448304807896036266041649611 + ); + + vk.IC[2] = Pairing.G1Point( + 17276971595668486868222383168237593236978334134767176117581355512463795238763, + 21246005671361920893771333255761799469037678264522607178744808281913314225224 + ); + + vk.IC[3] = Pairing.G1Point( + 14553605843389351570965449619381960711541626226310620058730634869925134860734, + 8946341781872606532350366026381188086762118291607087803977945091313902549942 + ); + + vk.IC[4] = Pairing.G1Point( + 645454162862861182668887107583939252628620832452708399999567458359265311500, + 16733367852579240784291307389527288701875659060065915552448056142902435317113 + ); + + vk.IC[5] = Pairing.G1Point( + 19058319803149471296829972060878136737499124026425915356745392395996898364008, + 17562391019431954846615693478034025576916072455820597630722165893723195751419 + ); + } - - function verify(uint256[] memory input, Proof memory proof) public view returns (uint256) { + function verify(uint[] memory input, Proof memory proof) internal view returns (uint) { uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617; VerifyingKey memory vk = verifyingKey(); - require(input.length + 1 == vk.IC.length, "verifier-bad-input"); + require(input.length + 1 == vk.IC.length,"verifier-bad-input"); // Compute the linear combination vk_x Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); - for (uint256 i = 0; i < input.length; i++) { - require(input[i] < snark_scalar_field, "verifier-gte-snark-scalar-field"); + for (uint i = 0; i < input.length; i++) { + require(input[i] < snark_scalar_field,"verifier-gte-snark-scalar-field"); vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i])); } vk_x = Pairing.addition(vk_x, vk.IC[0]); - if (!Pairing.pairingProd4(Pairing.negate(proof.A), proof.B, vk.alfa1, vk.beta2, vk_x, vk.gamma2, proof.C, vk.delta2)) return 1; + if (!Pairing.pairingProd4( + Pairing.negate(proof.A), proof.B, + vk.alfa1, vk.beta2, + vk_x, vk.gamma2, + proof.C, vk.delta2 + )) return 1; return 0; } - /// @return r bool true if proof is valid - function verifyProof(uint256[2] memory a, uint256[2][2] memory b, uint256[2] memory c, uint256[] memory input) public view returns (bool r) { + function verifyProof( + uint[2] memory a, + uint[2][2] memory b, + uint[2] memory c, + uint[5] memory input + ) public view returns (bool r) { Proof memory proof; proof.A = Pairing.G1Point(a[0], a[1]); proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]); proof.C = Pairing.G1Point(c[0], c[1]); - uint256[] memory inputValues = new uint256[](input.length); - for (uint256 i = 0; i < input.length; i++) { + uint[] memory inputValues = new uint[](input.length); + for(uint i = 0; i < input.length; i++){ inputValues[i] = input[i]; } if (verify(inputValues, proof) == 0) { diff --git a/packages/twitter-verifier-contracts/src/TwitterEmailHandler.sol b/packages/twitter-verifier-contracts/src/TwitterEmailHandler.sol index bf3ae317d..c315eaacd 100644 --- a/packages/twitter-verifier-contracts/src/TwitterEmailHandler.sol +++ b/packages/twitter-verifier-contracts/src/TwitterEmailHandler.sol @@ -4,37 +4,35 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; -import "forge-std/console.sol"; -// import "./utils/StringUtils.sol"; +import "@zk-email/contracts/DKIMRegistry.sol"; +import "./utils/StringUtils.sol"; import "./utils/NFTSVG.sol"; -import {Verifier} from "./Groth16VerifierTwitter.sol"; -// import "./utils/MailServer.sol"; -import "@zk-email/contracts/EmailVerifier.sol"; +import { Verifier } from "./Groth16VerifierTwitter.sol"; -contract VerifiedTwitterEmail is ERC721Enumerable, EmailVerifier { + +contract VerifiedTwitterEmail is ERC721Enumerable { using Counters for Counters.Counter; using StringUtils for *; using NFTSVG for *; - Counters.Counter private tokenCounter; - - uint16 public constant msg_len = 21; // header + body uint16 public constant bytesInPackedBytes = 7; // 7 bytes in a packed item returned from circom - uint32 public constant body_len = 3; - uint8 public constant rsa_modulus_chunks_len = 17; - uint256 public constant header_len = msg_len - body_len; - uint256 public constant addressIndexInSignals = msg_len - 1; + string constant domain = "twitter.com"; + + uint16 public constant signalLength = 5; // length of signals array + uint32 public constant pubKeyHashIndexInSignals = 0; // index of DKIM public key hash in signals array + uint32 public constant usernameIndexInSignals = 1; // index of first packed twitter username in signals array + uint32 public constant usernameLengthInSignals = 3; // length of packed twitter username in signals array + uint32 public constant addressIndexInSignals = 4; // index of ethereum address in signals array + + Counters.Counter private tokenCounter; + DKIMRegistry dkimRegistry; + Verifier public immutable verifier; - mapping(string => uint256[rsa_modulus_chunks_len]) public verifiedMailserverKeys; mapping(uint256 => string) public tokenIDToName; - string constant domain = "twitter.com"; - // MailServer mailServer; - // Verifier public immutable verifier; - constructor(Verifier v, MailServer m) EmailVerifier(v, m) ERC721("VerifiedEmail", "VerifiedEmail") { - // verifier = v; - // mailServer = m; - require(rsa_modulus_chunks_len + body_len + 1 == msg_len, "Variable counts are wrong!"); + constructor(Verifier v, DKIMRegistry d) ERC721("VerifiedEmail", "VerifiedEmail") { + verifier = v; + dkimRegistry = d; } function tokenDesc(uint256 tokenId) public view returns (string memory) { @@ -60,15 +58,16 @@ contract VerifiedTwitterEmail is ERC721Enumerable, EmailVerifier { // Usage: require(_domainCheck(senderBytes, domainStrings), "Invalid domain"); } - function mint(uint256[8] memory proof, uint256[] memory signals) - public - { + /// Mint a token proving twitter ownership by verifying proof of email + /// @param proof ZK proof of the circuit - a[2], b[4] and c[2] encoded in series + /// @param signals Public signals of the circuit. First item is pubkey_hash, next 3 are twitter username, the last one is etherum address + function mint(uint256[8] memory proof, uint256[5] memory signals) public { // TODO no invalid signal check yet, which is fine since the zk proof does it // Checks: Verify proof and check signals // require(signals[0] == 1337, "invalid signals"); - // 3 public signals are the masked packed message bytes, 17 are the modulus. - + // public signals are the masked packed message bytes, and hash of public key. + // Check eth address committed to in proof matches msg.sender, to avoid replayability // require(address(uint160(signals[addressIndexInSignals])) == msg.sender, "Invalid address"); @@ -77,24 +76,50 @@ contract VerifiedTwitterEmail is ERC721Enumerable, EmailVerifier { // We will upload the version with these domain checks soon! // require(_domainCheck(headerSignals), "Invalid domain"); + // Verify the DKIM public key hash stored on-chain matches the one used in circuit + uint256 dkimPublicKeyHashInCircuit = signals[pubKeyHashIndexInSignals]; + uint256 dkimPublicKeyHashOnChain = dkimRegistry.getDKIMPublicKeyHash(domain); + + require(dkimPublicKeyHashOnChain != uint256(0), "dkim for domain not found"); + + require(dkimPublicKeyHashInCircuit == dkimPublicKeyHashOnChain, "invalid signature"); + // Veiry RSA and proof - verifyEmail(domain, proof, signals, body_len, rsa_modulus_chunks_len); + require( + verifier.verifyProof( + [proof[0], proof[1]], + [[proof[2], proof[3]], [proof[4], proof[5]]], + [proof[6], proof[7]], + signals + ), + "Invalid Proof" + ); - uint256[] memory bodySignals = new uint256[](body_len); - for (uint256 i = 0; i < body_len; i++) { - bodySignals[i] = signals[i]; + uint256[] memory bodySignals = new uint256[](usernameLengthInSignals); + for (uint256 i = usernameIndexInSignals; i < (usernameIndexInSignals + usernameLengthInSignals); i++) { + bodySignals[i - usernameIndexInSignals] = signals[i]; } // Effects: Mint token uint256 tokenId = tokenCounter.current() + 1; - string memory messageBytes = - StringUtils.convertPackedBytesToString(bodySignals, bytesInPackedBytes * body_len, bytesInPackedBytes); + string memory messageBytes = StringUtils.convertPackedBytesToString( + bodySignals, + bytesInPackedBytes * usernameLengthInSignals, + bytesInPackedBytes + ); tokenIDToName[tokenId] = messageBytes; _mint(msg.sender, tokenId); tokenCounter.increment(); } - function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal { - require(from == address(0), "Cannot transfer - VerifiedEmail is soulbound"); + function _beforeTokenTransfer( + address from, + address to, + uint256 tokenId + ) internal { + require( + from == address(0), + "Cannot transfer - VerifiedEmail is soulbound" + ); } } diff --git a/packages/twitter-verifier-contracts/src/test/TestTwitter.t.sol b/packages/twitter-verifier-contracts/src/test/TestTwitter.t.sol index fcd3eccef..4c0903788 100644 --- a/packages/twitter-verifier-contracts/src/test/TestTwitter.t.sol +++ b/packages/twitter-verifier-contracts/src/test/TestTwitter.t.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.0; import "forge-std/Test.sol"; import "forge-std/console.sol"; +import "@zk-email/contracts/DKIMRegistry.sol"; import "../TwitterEmailHandler.sol"; import "../Groth16VerifierTwitter.sol"; @@ -11,15 +12,15 @@ contract TwitterUtilsTest is Test { address constant VM_ADDR = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; // Hardcoded address of the VM from foundry Verifier proofVerifier; - MailServer mailServer; + DKIMRegistry dkimRegistry; VerifiedTwitterEmail testVerifier; uint16 public constant packSize = 7; function setUp() public { proofVerifier = new Verifier(); - mailServer = new MailServer(); - testVerifier = new VerifiedTwitterEmail(proofVerifier, mailServer); + dkimRegistry = new DKIMRegistry(); + testVerifier = new VerifiedTwitterEmail(proofVerifier, dkimRegistry); } // function testMint() public { @@ -63,47 +64,31 @@ contract TwitterUtilsTest is Test { // Should pass (note that there are extra 0 bytes, which are filtered out but should be noted in audits) function testVerifyTestEmail() public { - uint256[] memory publicSignals = new uint256[](21); - publicSignals[0] = 28557011619965818; - publicSignals[1] = 1818845549; - publicSignals[2] = 0; - publicSignals[3] = 1634582323953821262989958727173988295; - publicSignals[4] = 1938094444722442142315201757874145583; - publicSignals[5] = 375300260153333632727697921604599470; - publicSignals[6] = 1369658125109277828425429339149824874; - publicSignals[7] = 1589384595547333389911397650751436647; - publicSignals[8] = 1428144289938431173655248321840778928; - publicSignals[9] = 1919508490085653366961918211405731923; - publicSignals[10] = 2358009612379481320362782200045159837; - publicSignals[11] = 518833500408858308962881361452944175; - publicSignals[12] = 1163210548821508924802510293967109414; - publicSignals[13] = 1361351910698751746280135795885107181; - publicSignals[14] = 1445969488612593115566934629427756345; - publicSignals[15] = 2457340995040159831545380614838948388; - publicSignals[16] = 2612807374136932899648418365680887439; - publicSignals[17] = 16021263889082005631675788949457422; - publicSignals[18] = 299744519975649772895460843780023483; - publicSignals[19] = 3933359104846508935112096715593287; - publicSignals[20] = 1; + uint256[5] memory publicSignals; + publicSignals[0] = 12431732230788297063498039481224031586256793440953465069048041914965586355958; + publicSignals[1] = 28557011619965818; + publicSignals[2] = 1818845549; + publicSignals[3] = 0; + publicSignals[4] = 706787187238086675321187262313978339498517045894; uint256[2] memory proof_a = [ - 19927878014774420599335762081097643265718718256586894795640382494403322204498, - 14891682495744632566900850738763676245933032364192093662622519454269163038775 + 133962017860624283717213706649367569567629135450196636508881687850871307586, + 21817577147834544582541815668274019263901666173816210586889983408251878002083 ]; // Note: you need to swap the order of the two elements in each subarray uint256[2][2] memory proof_b = [ [ - 14339187615496075499805495539746225674931332745294633353238109947200788411047, - 5073539291744271938197991858884932464126239394557616491779032788471213143054 + 8595689991179881035451367414169539261142341305299599688613778448622346700557, + 4809837661107420670485529034983751551646798248871990229596872017366733419934 ], [ - 14306493036235766258625927887837901586089699893867499630969317589097278736626, - 6852189668501753411744690866678572576357476484128490006857314905430126107219 + 12013354494645343175415057957272667444344542259008932856974115285427580734508, + 6862830458045229879966674995484458163206296920829065118479022071748247878381 ] ]; uint256[2] memory proof_c = [ - 410487323277858030399204852640011945213610339130647561627952237033421360197, - 6281805762334485380296289707165572755690746355667398246912272308643846746573 + 19531968997158860147868436835414725562564553364039986323866587266295465327105, + 11139264701052381809362943228865135490994937830868735017256007639162305733366 ]; uint256[8] memory proof = [ @@ -130,48 +115,32 @@ contract TwitterUtilsTest is Test { // Should pass (note that there are extra 0 bytes, which are filtered out but should be noted in audits) function testVerifyYushEmail() public { - uint256[] memory publicSignals = new uint256[](21); - publicSignals[0] = 113659471951225; - publicSignals[1] = 0; - publicSignals[2] = 0; - publicSignals[3] = 1634582323953821262989958727173988295; - publicSignals[4] = 1938094444722442142315201757874145583; - publicSignals[5] = 375300260153333632727697921604599470; - publicSignals[6] = 1369658125109277828425429339149824874; - publicSignals[7] = 1589384595547333389911397650751436647; - publicSignals[8] = 1428144289938431173655248321840778928; - publicSignals[9] = 1919508490085653366961918211405731923; - publicSignals[10] = 2358009612379481320362782200045159837; - publicSignals[11] = 518833500408858308962881361452944175; - publicSignals[12] = 1163210548821508924802510293967109414; - publicSignals[13] = 1361351910698751746280135795885107181; - publicSignals[14] = 1445969488612593115566934629427756345; - publicSignals[15] = 2457340995040159831545380614838948388; - publicSignals[16] = 2612807374136932899648418365680887439; - publicSignals[17] = 16021263889082005631675788949457422; - publicSignals[18] = 299744519975649772895460843780023483; - publicSignals[19] = 3933359104846508935112096715593287; - publicSignals[20] = 556307310756571904145052207427031380052712977221; + uint256[5] memory publicSignals; + publicSignals[0] = 12431732230788297063498039481224031586256793440953465069048041914965586355958; // DKIM hash + publicSignals[1] = 28557011619965818; + publicSignals[2] = 1818845549; + publicSignals[3] = 0; + publicSignals[4] = 198846140085582528055991518683990937356436890411; // Wallet address // TODO switch order uint256[2] memory proof_a = [ - 9363006867611269678582925935753021647889027030446896413835957187406043727690, - 21630169556253404895678159104497446719574525736987888783761908716313881927992 + 14755635213896066287250909699642562337500934617374415964312105676340054674824, + 12240259245611359916205768975942366477888427380965964935101657957242026796432 ]; // Note: you need to swap the order of the two elements in each subarray uint256[2][2] memory proof_b = [ [ - 16566593201830840943252718762249962483142131594763397873538075518277702645082, - 18567659038303546225106951504886253604470228016916658528973206870511276829533 + 10712418053804242512630542201327020574698926975240940585784400377617178639086, + 1318581449356918247790087682738221652601798427876830046923807410579679526833 ], [ - 2266080565824575322432873090363833504418041632970946239667340737263413898232, - 2242723441612422425510136818011613824051492998493014918147869951941405078798 + 18012779235150540912758072253749256609719995355133331865354019156956679089182, + 21612674804961403016759692589123506409990215693353865786652916154469389845324 ] ]; uint256[2] memory proof_c = [ - 12224501323997049527817799755022184802988108888333268634200461535503052305125, - 3177656185967472916322211236519001250723481802804621893491948147849123768548 + 21299437791145950468680764606255896318457964035113267083615426851535993584819, + 13705393192534838528437240467960671396604527874071000858353782290625463329327 ]; uint256[8] memory proof = [ diff --git a/tsconfig.json b/tsconfig.json index b94c7d3cd..1acdda3d0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,5 +17,10 @@ "types": ["node", "jest"], "incremental": true }, - "exclude": ["node_modules"] + "exclude": [ + "node_modules", + "./node_modules", + "./node_modules/*", + "./node_modules/@types/node/index.d.ts", + ], } diff --git a/yarn.lock b/yarn.lock index 8dfa91bed..4d12c07f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,20 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.9.0": + version: 1.9.0 + resolution: "@adraffy/ens-normalize@npm:1.9.0" + checksum: a8d47f85db7a0bba01227fae8781a3245a4517875503d6848a47ca29e7f7da271742a2f93b55afc1b9201e74eda1fd1f1e6e79e70f967359fd7f6ec3d45bf243 + languageName: node + linkType: hard + +"@adraffy/ens-normalize@npm:1.9.2": + version: 1.9.2 + resolution: "@adraffy/ens-normalize@npm:1.9.2" + checksum: a9fdeb9e080774c19e4b7f9f60aa5b37cf23fe0e8fe80284bf8221f7396e9f78642bfd39a09a94a4dc3fb8e70f2ac81545204bdcaf222d93f4c4c2ae1f0dca0b + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -1434,7 +1448,16 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.22.6": + version: 7.22.11 + resolution: "@babel/runtime@npm:7.22.11" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: a5cd6683a8fcdb8065cb1677f221e22f6c67ec8f15ad1d273b180b93ab3bd86c66da2c48f500d4e72d8d2cfa85ff4872a3f350e5aa3855630036af5da765c001 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.22.5 resolution: "@babel/runtime@npm:7.22.5" dependencies: @@ -1490,7 +1513,7 @@ __metadata: languageName: node linkType: hard -"@coinbase/wallet-sdk@npm:^3.3.0": +"@coinbase/wallet-sdk@npm:^3.6.6": version: 3.7.1 resolution: "@coinbase/wallet-sdk@npm:3.7.1" dependencies: @@ -1610,156 +1633,156 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/android-arm64@npm:0.17.19" +"@esbuild/android-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm64@npm:0.18.20" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/android-arm@npm:0.17.19" +"@esbuild/android-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm@npm:0.18.20" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/android-x64@npm:0.17.19" +"@esbuild/android-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-x64@npm:0.18.20" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/darwin-arm64@npm:0.17.19" +"@esbuild/darwin-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-arm64@npm:0.18.20" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/darwin-x64@npm:0.17.19" +"@esbuild/darwin-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-x64@npm:0.18.20" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/freebsd-arm64@npm:0.17.19" +"@esbuild/freebsd-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-arm64@npm:0.18.20" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/freebsd-x64@npm:0.17.19" +"@esbuild/freebsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-x64@npm:0.18.20" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-arm64@npm:0.17.19" +"@esbuild/linux-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm64@npm:0.18.20" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-arm@npm:0.17.19" +"@esbuild/linux-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm@npm:0.18.20" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-ia32@npm:0.17.19" +"@esbuild/linux-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ia32@npm:0.18.20" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-loong64@npm:0.17.19" +"@esbuild/linux-loong64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-loong64@npm:0.18.20" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-mips64el@npm:0.17.19" +"@esbuild/linux-mips64el@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-mips64el@npm:0.18.20" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-ppc64@npm:0.17.19" +"@esbuild/linux-ppc64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ppc64@npm:0.18.20" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-riscv64@npm:0.17.19" +"@esbuild/linux-riscv64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-riscv64@npm:0.18.20" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-s390x@npm:0.17.19" +"@esbuild/linux-s390x@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-s390x@npm:0.18.20" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-x64@npm:0.17.19" +"@esbuild/linux-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-x64@npm:0.18.20" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/netbsd-x64@npm:0.17.19" +"@esbuild/netbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/netbsd-x64@npm:0.18.20" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/openbsd-x64@npm:0.17.19" +"@esbuild/openbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/openbsd-x64@npm:0.18.20" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/sunos-x64@npm:0.17.19" +"@esbuild/sunos-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/sunos-x64@npm:0.18.20" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/win32-arm64@npm:0.17.19" +"@esbuild/win32-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-arm64@npm:0.18.20" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/win32-ia32@npm:0.17.19" +"@esbuild/win32-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-ia32@npm:0.18.20" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/win32-x64@npm:0.17.19" +"@esbuild/win32-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-x64@npm:0.18.20" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -2522,34 +2545,26 @@ __metadata: languageName: node linkType: hard -"@json-rpc-tools/provider@npm:^1.5.5": - version: 1.7.6 - resolution: "@json-rpc-tools/provider@npm:1.7.6" - dependencies: - "@json-rpc-tools/utils": ^1.7.6 - axios: ^0.21.0 - safe-json-utils: ^1.1.1 - ws: ^7.4.0 - checksum: c60d73511db7f743c3844d499df6a7e243d5f5493127c00fbf9aec74c95d2e80a3033eb22369c428c2deec263a47cd1b334cd76c84859e30355a6dace893a589 +"@ledgerhq/connect-kit-loader@npm:^1.1.0": + version: 1.1.2 + resolution: "@ledgerhq/connect-kit-loader@npm:1.1.2" + checksum: 614fdd9ac2363da60af667adcfe4721f863d8ea06ee45a08192a162c28e806dc07491bee4833d14def74de673eac1f1450eaf67e783c8c28da4e0cd095b4474a languageName: node linkType: hard -"@json-rpc-tools/types@npm:^1.7.6": - version: 1.7.6 - resolution: "@json-rpc-tools/types@npm:1.7.6" - dependencies: - keyvaluestorage-interface: ^1.0.0 - checksum: f23ec7d79a78aa4e896d1dff506108bd3da38015028afd997034e6498c1f3c7bedee70618b0d1a73adf13b4d2a6a91146c2e9505487280b3c376e74f5790e77c +"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": + version: 1.1.1 + resolution: "@lit-labs/ssr-dom-shim@npm:1.1.1" + checksum: 7a7add78e3ee570a7b987b9bf85e700b20d35d31c8b54cf4c8b2e3c8458ed4e2b0ff328706e5be7887f0ca8a02878c186e76609defb78f0d1b3c0e6b47c9f6ef languageName: node linkType: hard -"@json-rpc-tools/utils@npm:^1.7.6": - version: 1.7.6 - resolution: "@json-rpc-tools/utils@npm:1.7.6" +"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": + version: 1.6.3 + resolution: "@lit/reactive-element@npm:1.6.3" dependencies: - "@json-rpc-tools/types": ^1.7.6 - "@pedrouid/environment": ^1.0.1 - checksum: 32cac2e8cbf8a15d95415de8ded483c6206e6df392e129ad51acd90a4842511e931156c59cb26036fb9fae8054e8f20b719a35282304f39cd18683a5293cb67d + "@lit-labs/ssr-dom-shim": ^1.0.0 + checksum: 79b58631c38effeabad090070324431da8a22cf0ff665f5e4de35e4d791f984742b3d340c9c7fce996d1124a8da95febc582471b4c237236c770b1300b56ef6e languageName: node linkType: hard @@ -2572,6 +2587,91 @@ __metadata: languageName: node linkType: hard +"@motionone/animation@npm:^10.15.1": + version: 10.15.1 + resolution: "@motionone/animation@npm:10.15.1" + dependencies: + "@motionone/easing": ^10.15.1 + "@motionone/types": ^10.15.1 + "@motionone/utils": ^10.15.1 + tslib: ^2.3.1 + checksum: 75b7a1e6c47c27073a578eb5559ea0a6e7075862c72e1eb1598403c8c2725f596a95b0369514c9e72f3c7439a9845c468b85a14d4e500df48e09d01b0739d4a7 + languageName: node + linkType: hard + +"@motionone/dom@npm:^10.16.2": + version: 10.16.2 + resolution: "@motionone/dom@npm:10.16.2" + dependencies: + "@motionone/animation": ^10.15.1 + "@motionone/generators": ^10.15.1 + "@motionone/types": ^10.15.1 + "@motionone/utils": ^10.15.1 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: c75a7de62cd8af575634644bbc2c5abe606ff9000550e7b8d5a62ea691a0784bf18f57035bd1fad4b0148dbdc6db033f2565b6c8f80b87b40fbb232db8fe93aa + languageName: node + linkType: hard + +"@motionone/easing@npm:^10.15.1": + version: 10.15.1 + resolution: "@motionone/easing@npm:10.15.1" + dependencies: + "@motionone/utils": ^10.15.1 + tslib: ^2.3.1 + checksum: cf7cfcf9917525d892334c58282425aafc69d9ab9004c190bfa7cf91317a680e8143f227adc79557424e7f26cdf8478dcbb2ae467e744cebc58195d6f0b8153a + languageName: node + linkType: hard + +"@motionone/generators@npm:^10.15.1": + version: 10.15.1 + resolution: "@motionone/generators@npm:10.15.1" + dependencies: + "@motionone/types": ^10.15.1 + "@motionone/utils": ^10.15.1 + tslib: ^2.3.1 + checksum: 0eb6797a64d536bb5c26628343d6594a2ebc45c3c447b8ce442b4ac3a41be847b860ac009bda7968fc7d339d2ee49b18bfe36306c5dd99cf17c7d84c82de93f3 + languageName: node + linkType: hard + +"@motionone/svelte@npm:^10.16.2": + version: 10.16.2 + resolution: "@motionone/svelte@npm:10.16.2" + dependencies: + "@motionone/dom": ^10.16.2 + tslib: ^2.3.1 + checksum: 066570d991444f9b8e70189b488d563260cf7aadc2e4718e60b66e2871ad0d798e4a39282035c7f0d35a6b2118c36ee222446a8ae0919265860f0d808fcd2837 + languageName: node + linkType: hard + +"@motionone/types@npm:^10.15.1": + version: 10.15.1 + resolution: "@motionone/types@npm:10.15.1" + checksum: 98091f7dca257508d94d1080678c433da39a814e8e58aaa742212bf6c2a5b5e2120a6251a06e3ea522219ce6d1b6eb6aa2cab224b803fe52789033d8398ef0aa + languageName: node + linkType: hard + +"@motionone/utils@npm:^10.15.1": + version: 10.15.1 + resolution: "@motionone/utils@npm:10.15.1" + dependencies: + "@motionone/types": ^10.15.1 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: 6ef13cd6637ec87c340e5536f849f8c40d30cc90139a3856d11cd70d78e3740f8815b0e63564fefd23c05a060da7a0ea5395390549606ed8801a7b832b74e04e + languageName: node + linkType: hard + +"@motionone/vue@npm:^10.16.2": + version: 10.16.2 + resolution: "@motionone/vue@npm:10.16.2" + dependencies: + "@motionone/dom": ^10.16.2 + tslib: ^2.3.1 + checksum: 37732f679bdf84debb36493e12fe2604ca3d1812ce8271e39dbe28bb4e59d71841d6821a5f5dd07ded918e260f8567842b835ea597572a38007e8a11106d1f0f + languageName: node + linkType: hard + "@mswjs/cookies@npm:^0.2.2": version: 0.2.2 resolution: "@mswjs/cookies@npm:0.2.2" @@ -2598,7 +2698,7 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:^1.0.0": +"@noble/curves@npm:1.1.0": version: 1.1.0 resolution: "@noble/curves@npm:1.1.0" dependencies: @@ -2607,13 +2707,59 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.1, @noble/hashes@npm:^1.3.0": +"@noble/curves@npm:^1.0.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/curves@npm:~1.0.0": + version: 1.0.0 + resolution: "@noble/curves@npm:1.0.0" + dependencies: + "@noble/hashes": 1.3.0 + checksum: 6bcef44d626c640dc8961819d68dd67dffb907e3b973b7c27efe0ecdd9a5c6ce62c7b9e3dfc930c66605dced7f1ec0514d191c09a2ce98d6d52b66e3315ffa79 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.1.2": + version: 1.1.2 + resolution: "@noble/hashes@npm:1.1.2" + checksum: 3c2a8cb7c2e053811032f242155d870c5eb98844d924d69702244d48804cb03b42d4a666c49c2b71164420d8229cb9a6f242b972d50d5bb2f1d673b98b041de2 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.0": + version: 1.3.0 + resolution: "@noble/hashes@npm:1.3.0" + checksum: d7ddb6d7c60f1ce1f87facbbef5b724cdea536fc9e7f59ae96e0fc9de96c8f1a2ae2bdedbce10f7dcc621338dfef8533daa73c873f2b5c87fa1a4e05a95c2e2e + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.1": version: 1.3.1 resolution: "@noble/hashes@npm:1.3.1" checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1 languageName: node linkType: hard +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + +"@noble/secp256k1@npm:1.7.1": + version: 1.7.1 + resolution: "@noble/secp256k1@npm:1.7.1" + checksum: d2301f1f7690368d8409a3152450458f27e54df47e3f917292de3de82c298770890c2de7c967d237eff9c95b70af485389a9695f73eb05a43e2bd562d18b18cb + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -2675,13 +2821,6 @@ __metadata: languageName: node linkType: hard -"@openzeppelin/contracts-upgradeable@npm:^4.9.2": - version: 4.9.2 - resolution: "@openzeppelin/contracts-upgradeable@npm:4.9.2" - checksum: 88df083e886006b9fac61848edf224a725b99e1b8a302173165a857e3bbc1d00d61cb9c71590b37d955b179fe23652fc157347a086dbaad8f66ce8470603f151 - languageName: node - linkType: hard - "@openzeppelin/contracts@npm:^4.9.3": version: 4.9.3 resolution: "@openzeppelin/contracts@npm:4.9.3" @@ -2689,16 +2828,9 @@ __metadata: languageName: node linkType: hard -"@pedrouid/environment@npm:^1.0.1": - version: 1.0.1 - resolution: "@pedrouid/environment@npm:1.0.1" - checksum: fd88340ad760f26340a2816c3677f0ca913976e315880891c3de3f028fe64abc9704fb904234dce77a1ff15c22d0b6cbf1d4199a76de6695c2aed8353ce20590 - languageName: node - linkType: hard - -"@rainbow-me/rainbowkit@npm:^0.8.0": - version: 0.8.1 - resolution: "@rainbow-me/rainbowkit@npm:0.8.1" +"@rainbow-me/rainbowkit@npm:^1.0.9": + version: 1.0.9 + resolution: "@rainbow-me/rainbowkit@npm:1.0.9" dependencies: "@vanilla-extract/css": 1.9.1 "@vanilla-extract/dynamic": 2.0.2 @@ -2707,18 +2839,18 @@ __metadata: qrcode: 1.5.0 react-remove-scroll: 2.5.4 peerDependencies: - ethers: ">=5.5.1" react: ">=17" react-dom: ">=17" - wagmi: 0.9.x - checksum: dfc0898094815c0f3517076354b7b32a70dd1bb82973bc024c63710bb79cd84b49da1dd5f7623caa09c03944b9cf5792ed3f20941408cd07895a75279ec62d50 + viem: ~0.3.19 || ^1.0.0 + wagmi: ~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 + checksum: 8af37643b646962382e392718152f36c6401da0d20c3b298b3f014f1b2ab4a1d95d97c7c8b72bc85ac2894bc50648fe39f78818cb58f0c378dabb1064d723660 languageName: node linkType: hard -"@remix-run/router@npm:1.6.3": - version: 1.6.3 - resolution: "@remix-run/router@npm:1.6.3" - checksum: f6968b1626af930b42f8cb5a044f05e4fbce05af6c7947beb1704e45c9570944e3be16ee008b185e5e13baac97948299eb55341b2a359c3e2e54b9d6646ae167 +"@remix-run/router@npm:1.8.0": + version: 1.8.0 + resolution: "@remix-run/router@npm:1.8.0" + checksum: f754f02d3b4fc86791b88acf16065000609e2324b9436027844a76831c7107c0994067cb83abdd6093c282bd518a5c89b5e02aead585782978586e3a04534428 languageName: node linkType: hard @@ -2754,6 +2886,73 @@ __metadata: languageName: node linkType: hard +"@safe-global/safe-apps-provider@npm:^0.17.1": + version: 0.17.1 + resolution: "@safe-global/safe-apps-provider@npm:0.17.1" + dependencies: + "@safe-global/safe-apps-sdk": 8.0.0 + events: ^3.3.0 + checksum: 02f0415a4bb77b82e55f0055be045af715d9c0ea0fa7daa4e0604f40cc2189051d111b8ead67ddab0e99b1e423b444753c11d69bb213d51e459f706d2b430e34 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:8.0.0": + version: 8.0.0 + resolution: "@safe-global/safe-apps-sdk@npm:8.0.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 + viem: ^1.0.0 + checksum: 07295c44afa4d85fbc9419b4baac56b4fb493816d4438d6956842261e0689fdcea639ab86b39ee693c456fddace17b6c556c77a637892634a57de96f6b00b0c3 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:^8.0.0": + version: 8.1.0 + resolution: "@safe-global/safe-apps-sdk@npm:8.1.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 + viem: ^1.0.0 + checksum: e9d31ed6d9cd2cd9ed71ef5a0e1f6ecfca9f0c62acb9b86a0ddb1b65a609090f2297c4304591ac0518b266a1bcc88d1dad31b0d05e50c7732accccb65adab754 + languageName: node + linkType: hard + +"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": + version: 3.10.0 + resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.10.0" + dependencies: + cross-fetch: ^3.1.5 + checksum: 27d51db7e081bd616c34ba859a736e17932540aa16f1d5909639026e8d48380f37a33047172fa2dbd2912c92270cda1f550f52ec6bc9cd0a5522dd1172843e59 + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0": + version: 1.1.2 + resolution: "@scure/base@npm:1.1.2" + checksum: f666b09dbd62ecb5fe6d0e7a629c8a86a972a47dc4f4555ebbbd7b09782b10a5f894fed9c3b8c74fd683b1588c064df079a44e9f695c075ccd98c30a8d3e91f7 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.0": + version: 1.3.0 + resolution: "@scure/bip32@npm:1.3.0" + dependencies: + "@noble/curves": ~1.0.0 + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: 6eae997f9bdf41fe848134898960ac48e645fa10e63d579be965ca331afd0b7c1b8ebac170770d237ab4099dafc35e5a82995384510025ccf2abe669f85e8918 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.0": + version: 1.2.0 + resolution: "@scure/bip39@npm:1.2.0" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: 980d761f53e63de04a9e4db840eb13bfb1bd1b664ecb04a71824c12c190f4972fd84146f3ed89b2a8e4c6bd2c17c15f8b592b7ac029e903323b0f9e2dae6916b + languageName: node + linkType: hard + "@sideway/address@npm:^4.1.3": version: 4.1.4 resolution: "@sideway/address@npm:4.1.4" @@ -2819,25 +3018,195 @@ __metadata: linkType: hard "@solana/web3.js@npm:^1.70.1": - version: 1.77.3 - resolution: "@solana/web3.js@npm:1.77.3" + version: 1.78.4 + resolution: "@solana/web3.js@npm:1.78.4" dependencies: - "@babel/runtime": ^7.12.5 + "@babel/runtime": ^7.22.6 "@noble/curves": ^1.0.0 - "@noble/hashes": ^1.3.0 + "@noble/hashes": ^1.3.1 "@solana/buffer-layout": ^4.0.0 - agentkeepalive: ^4.2.1 + agentkeepalive: ^4.3.0 bigint-buffer: ^1.1.5 - bn.js: ^5.0.0 + bn.js: ^5.2.1 borsh: ^0.7.0 bs58: ^4.0.1 buffer: 6.0.3 fast-stable-stringify: ^1.0.0 jayson: ^4.1.0 - node-fetch: ^2.6.7 + node-fetch: ^2.6.12 rpc-websockets: ^7.5.1 superstruct: ^0.14.2 - checksum: b73c903d9525393e436720997b78916b7bfcf007d229be14f86a810a99dba5926b97d48d2ec92931b8064aa3069ca1a07cc647ce406c436c28142099e741e731 + checksum: e1c44c6cbec87cdfd4d6d23b4241b746e14ed3a9ca73d596693758d91ac825cecf579345da3b0b7bb5e54b6794791bc0eac02cadf11f1ec79e859b6536f26f11 + languageName: node + linkType: hard + +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 + languageName: node + linkType: hard + +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" + dependencies: + "@stablelib/int": ^1.0.1 + checksum: dca9b98eb1f56a4002b5b9e7351fbc49f3d8616af87007c01e833bd763ac89214eb5f3b7e18673c91ce59d4a0e4856a2eb661ace33d39f17fb1ad267271fccd8 + languageName: node + linkType: hard + +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 456267e08c3384abcb71d3ad3e97a6f99185ad754bac016f501ebea4e4886f37900589143b57e33bdbbf513a92fc89368c15dd4517e0540d0bdc79ecdf9dd087 + languageName: node + linkType: hard + +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": ^1.0.1 + "@stablelib/binary": ^1.0.1 + "@stablelib/chacha": ^1.0.1 + "@stablelib/constant-time": ^1.0.1 + "@stablelib/poly1305": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 81f1a32330838d31e4dc3144d76eba7244b56d9ea38c1f604f2c34d93ed8e67e9a6167d2cfd72254c13cc46dfc1f5ce5157b37939a575295d69d9144abb4e4fb + languageName: node + linkType: hard + +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f061f36c4ca4bf177dd7cac11e7c65ced164f141b6065885141ae5a55f32e16ba0209aefcdcc966aef013f1da616ce901a3a80653b4b6f833cf7e3397ae2d6bd + languageName: node + linkType: hard + +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 + languageName: node + linkType: hard + +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" + dependencies: + "@stablelib/random": ^1.0.2 + "@stablelib/sha512": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e18279de078edac67396ba07dbb862dce0fe89efa8141c21a5b04108a29914bd51636019522323ca5097ec596a90b3028ed64e88ee009b0ac7de7c1ab6499ccb + languageName: node + linkType: hard + +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf + languageName: node + linkType: hard + +"@stablelib/hkdf@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/hkdf@npm:1.0.1" + dependencies: + "@stablelib/hash": ^1.0.1 + "@stablelib/hmac": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d + languageName: node + linkType: hard + +"@stablelib/hmac@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hmac@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e3b93f7144a5846a6e30213278f7570de6d3f9d09131b95ce76d5c5c8bf37bf5d1830f2ee8d847555707271dbfd6e2461221719fd4d8b27ff06b9dd689c0ec21 + languageName: node + linkType: hard + +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 + languageName: node + linkType: hard + +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" + dependencies: + "@stablelib/bytes": ^1.0.1 + checksum: 3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd + languageName: node + linkType: hard + +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 70b845bb0481c66b7ba3f3865d01e4c67a4dffc9616fc6de1d23efc5e828ec09de25f8e3be4e1f15a23b8e87e3036ee3d949c2fd4785047e6f7028bbec0ead18 + languageName: node + linkType: hard + +"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 + languageName: node + linkType: hard + +"@stablelib/sha256@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 38669871e1bda72eb537629ebceac1c72da8890273a9fbe088f81f6d14c1ec04e78be8c5b455380a06c67f8e62b2508e11e9063fcc257dbaa1b5c27ac756ba77 + languageName: node + linkType: hard + +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: b7c82f7608a35948a2147a534c0c9afc80deab3fd5f72a2e27b2454e7c0c6944d39381be3abcb1b7fac5b824ba030ae3e98209d517a579c143d8ed63930b042f + languageName: node + linkType: hard + +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 + languageName: node + linkType: hard + +"@stablelib/x25519@npm:^1.0.3": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": ^1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/wipe": ^1.0.1 + checksum: f8537066b542b6770c1b5b2ae5ad0688d1b986e4bf818067c152c123a5471531987bbf024224f75f387f481ccc5b628e391e49e92102b8b1a3e2d449d6105402 languageName: node linkType: hard @@ -2850,47 +3219,47 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.29.11": - version: 4.29.11 - resolution: "@tanstack/query-core@npm:4.29.11" - checksum: 2a17223f34e99e17d564a15206668eb79324da72e630a47cf41690f92fb091a8669bdc89e9ab1b0d8f0e3e8f579529cfb0aa6f10b4fc58ea81cc7e5caede9229 +"@tanstack/query-core@npm:4.33.0": + version: 4.33.0 + resolution: "@tanstack/query-core@npm:4.33.0" + checksum: fae325f1d79b936435787797c32367331d5b8e9c5ced84852bf2085115e3aafef57a7ae530a6b0af46da4abafb4b0afaef885926b71715a0e6f166d74da61c7f languageName: node linkType: hard -"@tanstack/query-persist-client-core@npm:4.29.11": - version: 4.29.11 - resolution: "@tanstack/query-persist-client-core@npm:4.29.11" +"@tanstack/query-persist-client-core@npm:4.33.0": + version: 4.33.0 + resolution: "@tanstack/query-persist-client-core@npm:4.33.0" dependencies: - "@tanstack/query-core": 4.29.11 - checksum: b1ea4d56aa211c173f6cee172d09aed573fa16bb15594c120efb6acacc1985c22dddbfbabff87406aa5de2fb5805e872276681e06821f0b1545ea33cf43c4e52 + "@tanstack/query-core": 4.33.0 + checksum: c80e2805061da3c497504a6132d273fc351ef94b4685c0da5658fe25f759f692fad2c752f9f8af17c47edcf9ce9064f3f44d2b99d03f011345d8450b1bb940d5 languageName: node linkType: hard -"@tanstack/query-sync-storage-persister@npm:^4.0.10": - version: 4.29.11 - resolution: "@tanstack/query-sync-storage-persister@npm:4.29.11" +"@tanstack/query-sync-storage-persister@npm:^4.27.1": + version: 4.33.0 + resolution: "@tanstack/query-sync-storage-persister@npm:4.33.0" dependencies: - "@tanstack/query-persist-client-core": 4.29.11 - checksum: 532a001ce19c134bfc11c13b4427b9c86bcfc12609c611a8f8e3d852c031849d96d704f9d541f9c6b9bf4cff808d346801caedf53cc551caa699ab1ef3681850 + "@tanstack/query-persist-client-core": 4.33.0 + checksum: ad949f94e18b5188de363e780cf99e738d8468dafff72345f464e784b493f774dffbaa554122306a8fd81f9965de58588a2cf4f940d52e77b2ca4346a650aed9 languageName: node linkType: hard -"@tanstack/react-query-persist-client@npm:^4.0.10": - version: 4.29.12 - resolution: "@tanstack/react-query-persist-client@npm:4.29.12" +"@tanstack/react-query-persist-client@npm:^4.28.0": + version: 4.33.0 + resolution: "@tanstack/react-query-persist-client@npm:4.33.0" dependencies: - "@tanstack/query-persist-client-core": 4.29.11 + "@tanstack/query-persist-client-core": 4.33.0 peerDependencies: - "@tanstack/react-query": 4.29.12 - checksum: 3d7cf57ce29d6e599dd7a942da0298e8ef9b7c3a363361c6bedc26566556f26c9aa9e644f26b8fec7f3a66bab143f61ffc11170d192a4c2d4c1bedd2fbc5279f + "@tanstack/react-query": ^4.33.0 + checksum: 403de6e6659d87f21ee4412e7e8e15b32cbcf5adcb7d340b93c890321fa8a88f7681690774c6e5253d28227869f01b170a32d23bd0ed8870fbd109890ee5fa9f languageName: node linkType: hard -"@tanstack/react-query@npm:^4.0.10": - version: 4.29.12 - resolution: "@tanstack/react-query@npm:4.29.12" +"@tanstack/react-query@npm:^4.28.0": + version: 4.33.0 + resolution: "@tanstack/react-query@npm:4.33.0" dependencies: - "@tanstack/query-core": 4.29.11 + "@tanstack/query-core": 4.33.0 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2901,7 +3270,7 @@ __metadata: optional: true react-native: optional: true - checksum: aea231af648688c5eafdbbda0667034221cca8b77e00690ab54950b7cc0296d14646931aee44fc5f18d5ce4d683b5d234b053eed5c0a5c340bbbacdab873a70b + checksum: b3cf4afa427435e464e077b3f23c891e38e5f78873518f15c1d061ad55f1464d6241ecd92d796a5dbc9412b4fd7eb30b01f2a9cfc285ee9f30dfdd2ca0ecaf4b languageName: node linkType: hard @@ -2993,6 +3362,7 @@ __metadata: dependencies: "@zk-email/circuits": "workspace:^" "@zk-email/helpers": "workspace:^" + big-integer: ^1.6.51 chai: ^4.3.7 circom_tester: ^0.0.19 circomlib: ^2.0.5 @@ -3223,6 +3593,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:18.15.13": + version: 18.15.13 + resolution: "@types/node@npm:18.15.13" + checksum: 79cc5a2b5f98e8973061a4260a781425efd39161a0e117a69cd089603964816c1a14025e1387b4590c8e82d05133b7b4154fa53a7dffb3877890a66145e76515 + languageName: node + linkType: hard + "@types/node@npm:^12.12.54": version: 12.20.55 resolution: "@types/node@npm:12.20.55" @@ -3348,6 +3725,13 @@ __metadata: languageName: node linkType: hard +"@types/trusted-types@npm:^2.0.2": + version: 2.0.3 + resolution: "@types/trusted-types@npm:2.0.3" + checksum: 4794804bc4a4a173d589841b6d26cf455ff5dc4f3e704e847de7d65d215f2e7043d8757e4741ce3a823af3f08260a8d04a1a6e9c5ec9b20b7b04586956a6b005 + languageName: node + linkType: hard + "@types/ws@npm:^7.4.4": version: 7.4.7 resolution: "@types/ws@npm:7.4.7" @@ -3357,6 +3741,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^8.5.4": + version: 8.5.5 + resolution: "@types/ws@npm:8.5.5" + dependencies: + "@types/node": "*" + checksum: d00bf8070e6938e3ccf933010921c6ce78ac3606696ce37a393b27a9a603f7bd93ea64f3c5fa295a2f743575ba9c9a9fdb904af0f5fe2229bf2adf0630386e4a + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.0 resolution: "@types/yargs-parser@npm:21.0.0" @@ -3510,62 +3903,89 @@ __metadata: languageName: node linkType: hard -"@wagmi/core@npm:^0.5.8": - version: 0.5.8 - resolution: "@wagmi/core@npm:0.5.8" - dependencies: - eventemitter3: ^4.0.7 - zustand: ^4.0.0 +"@wagmi/chains@npm:1.7.0": + version: 1.7.0 + resolution: "@wagmi/chains@npm:1.7.0" peerDependencies: - "@coinbase/wallet-sdk": ">=3.3.0" - "@walletconnect/ethereum-provider": ">=1.7.5" - ethers: ">=5.5.1" + typescript: ">=5.0.4" peerDependenciesMeta: - "@coinbase/wallet-sdk": - optional: true - "@walletconnect/ethereum-provider": + typescript: optional: true - checksum: 013a4571039f555234b2fd5341a77d8908616da1159089cb875265b0d606db4b223ca40f9cf280e2c56d4e19054596b6efe6761a6ce4c26ca8420239c469bafb + checksum: 24e930d2432def5d7cbba1d390622d2cb02f002c45d3806e5a95a814af058eb483a234cc1ad5eef650bc926641b6f31e795fb3941b25de585b58dd31407a4980 languageName: node linkType: hard -"@walletconnect/browser-utils@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/browser-utils@npm:1.8.0" +"@wagmi/connectors@npm:2.7.0": + version: 2.7.0 + resolution: "@wagmi/connectors@npm:2.7.0" dependencies: - "@walletconnect/safe-json": 1.0.0 - "@walletconnect/types": ^1.8.0 - "@walletconnect/window-getters": 1.0.0 - "@walletconnect/window-metadata": 1.0.0 - detect-browser: 5.2.0 - checksum: cf4b55c9e8d53b1ffa99322ebcdfce7ad8df8e3ee90f57252da0b3882d3bfb592414cad09900c20619216c6a42d1184ad03728e6514e95a34467a8821aa5aef8 + "@coinbase/wallet-sdk": ^3.6.6 + "@ledgerhq/connect-kit-loader": ^1.1.0 + "@safe-global/safe-apps-provider": ^0.17.1 + "@safe-global/safe-apps-sdk": ^8.0.0 + "@walletconnect/ethereum-provider": 2.9.2 + "@walletconnect/legacy-provider": ^2.0.0 + "@walletconnect/modal": 2.6.1 + "@walletconnect/utils": 2.9.2 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + peerDependencies: + "@wagmi/chains": ">=1.7.0" + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + "@wagmi/chains": + optional: true + typescript: + optional: true + checksum: be422a00ada744042b5945d725eef60cfa37f79a8cfe81e4a77c8ecf77acddd20a0970c8dabad737d86244e9e3fc5275f99df057d636ab1e1b5443cce6bf1ced languageName: node linkType: hard -"@walletconnect/client@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/client@npm:1.8.0" +"@wagmi/core@npm:1.3.9": + version: 1.3.9 + resolution: "@wagmi/core@npm:1.3.9" dependencies: - "@walletconnect/core": ^1.8.0 - "@walletconnect/iso-crypto": ^1.8.0 - "@walletconnect/types": ^1.8.0 - "@walletconnect/utils": ^1.8.0 - checksum: 48aab7d11eeaaccf6612d335766eb6439f2ce3c446a87b7a974b6fb11076d3bc000f947c0822790fdaa6ba50df073c581750eb5dcda47359bf29c94b76919394 + "@wagmi/chains": 1.7.0 + "@wagmi/connectors": 2.7.0 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + zustand: ^4.3.1 + peerDependencies: + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: 80cb7c3a064174ba275af91b691c8fc1861ec0fcee063b9ce21f2d3ca84e742c57aabab2850dc3af274286e2df07523339bb2c5bdece21664aa722bc9468e71d languageName: node linkType: hard -"@walletconnect/core@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/core@npm:1.8.0" +"@walletconnect/core@npm:2.9.2": + version: 2.9.2 + resolution: "@walletconnect/core@npm:2.9.2" dependencies: - "@walletconnect/socket-transport": ^1.8.0 - "@walletconnect/types": ^1.8.0 - "@walletconnect/utils": ^1.8.0 - checksum: 2d703ac417c1f0df33f35893aef24fd4ce7e1d9b274f6937dcdf0880ff46bf266e773e498f374e5f17a1e249c55e7c7af815c63676c5cea5fda737f326a28c14 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/jsonrpc-ws-connection": 1.0.13 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/relay-auth": ^1.0.4 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.9.2 + "@walletconnect/utils": 2.9.2 + events: ^3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: ^3.1.0 + checksum: f96fe5147ddae5ab08c72e946ebfc40b218ca2a985e243ebcbf2346c79286b33de9c1f6dfb0f9cb81ae52f29725b3437a8af8b856ed55ed3a089e06546b3db06 languageName: node linkType: hard -"@walletconnect/crypto@npm:^1.0.2": +"@walletconnect/crypto@npm:^1.0.3": version: 1.0.3 resolution: "@walletconnect/crypto@npm:1.0.3" dependencies: @@ -3579,7 +3999,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/encoding@npm:^1.0.1, @walletconnect/encoding@npm:^1.0.2": +"@walletconnect/encoding@npm:^1.0.2": version: 1.0.2 resolution: "@walletconnect/encoding@npm:1.0.2" dependencies: @@ -3599,34 +4019,50 @@ __metadata: languageName: node linkType: hard -"@walletconnect/ethereum-provider@npm:^1.7.8": - version: 1.8.0 - resolution: "@walletconnect/ethereum-provider@npm:1.8.0" +"@walletconnect/ethereum-provider@npm:2.9.2": + version: 2.9.2 + resolution: "@walletconnect/ethereum-provider@npm:2.9.2" dependencies: - "@walletconnect/client": ^1.8.0 - "@walletconnect/jsonrpc-http-connection": ^1.0.2 - "@walletconnect/jsonrpc-provider": ^1.0.5 - "@walletconnect/signer-connection": ^1.8.0 - "@walletconnect/types": ^1.8.0 - "@walletconnect/utils": ^1.8.0 - eip1193-provider: 1.0.1 - eventemitter3: 4.0.7 - checksum: eaf8a113498673d023fc96bec1248bc9640d0bd78beea906f4d9dc5388db236c1436c00301e30f7b46abec59b22e0bb6d72e5a08837d3d021f096677a89005d6 + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": ^1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.3 + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/sign-client": 2.9.2 + "@walletconnect/types": 2.9.2 + "@walletconnect/universal-provider": 2.9.2 + "@walletconnect/utils": 2.9.2 + events: ^3.3.0 + peerDependencies: + "@walletconnect/modal": ">=2" + peerDependenciesMeta: + "@walletconnect/modal": + optional: true + checksum: 80cb896c5da6247b68a28ef08e5a8a32beb3e6a2b70a3543aaced09a618e73b5437af36f9884003333021566405e19938726f1f02241aa69f83f5a0df5a4150a languageName: node linkType: hard -"@walletconnect/iso-crypto@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/iso-crypto@npm:1.8.0" +"@walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: d28aa4dcc981bdaf38f0aeed979731ca793cead7e7a4ee730a9146d99d89db09a86c8e3192ed860638283276961c0723ba00cf3b8776f0692b36ec7df6c01be4 + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.1": + version: 1.2.1 + resolution: "@walletconnect/heartbeat@npm:1.2.1" dependencies: - "@walletconnect/crypto": ^1.0.2 - "@walletconnect/types": ^1.8.0 - "@walletconnect/utils": ^1.8.0 - checksum: ec1b361831c60b7d91d7be001d2b62266df64cd62710840ebf54193d008b46c70bde3d42d7e0df6107f020d4b0470435bfbb3defb9e918fdcb1b0f3eaf42e52f + "@walletconnect/events": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + checksum: df4d492a2d336283f834bc205c09b795f85cd507a61b14745dc2124e510a250fefbd83d51216f93df2e0aa0cf8120134db2679de8019eddd63877e9928997952 languageName: node linkType: hard -"@walletconnect/jsonrpc-http-connection@npm:^1.0.2": +"@walletconnect/jsonrpc-http-connection@npm:^1.0.4, @walletconnect/jsonrpc-http-connection@npm:^1.0.7": version: 1.0.7 resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.7" dependencies: @@ -3638,7 +4074,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/jsonrpc-provider@npm:^1.0.5": +"@walletconnect/jsonrpc-provider@npm:1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.6": version: 1.0.13 resolution: "@walletconnect/jsonrpc-provider@npm:1.0.13" dependencies: @@ -3649,7 +4085,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/jsonrpc-types@npm:^1.0.1, @walletconnect/jsonrpc-types@npm:^1.0.3": +"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": version: 1.0.3 resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" dependencies: @@ -3659,7 +4095,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/jsonrpc-utils@npm:^1.0.3, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.8": +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.4, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": version: 1.0.8 resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" dependencies: @@ -3670,24 +4106,145 @@ __metadata: languageName: node linkType: hard -"@walletconnect/mobile-registry@npm:^1.4.0": - version: 1.4.0 - resolution: "@walletconnect/mobile-registry@npm:1.4.0" - checksum: 06f18842e68f88e71e87f36daea143684afc49551974cf359fb55cc731e9b4fc0bce762d87b79b268e529def889e82fc2fbc2bc12d6a28a04ed0d6a060188020 +"@walletconnect/jsonrpc-ws-connection@npm:1.0.13": + version: 1.0.13 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.13" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.2 + events: ^3.3.0 + tslib: 1.14.1 + ws: ^7.5.1 + checksum: f2253b17564f7622e69b1252830f05efdf7f4d58b120adb3a3e950c2087845171c912307c39948d0b869aa8610688b83f54f54de4657091f7431aea95a59f8b9 languageName: node linkType: hard -"@walletconnect/qrcode-modal@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/qrcode-modal@npm:1.8.0" +"@walletconnect/keyvaluestorage@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/keyvaluestorage@npm:1.0.2" dependencies: - "@walletconnect/browser-utils": ^1.8.0 - "@walletconnect/mobile-registry": ^1.4.0 - "@walletconnect/types": ^1.8.0 - copy-to-clipboard: ^3.3.1 - preact: 10.4.1 - qrcode: 1.4.4 - checksum: 0abae2268579f55da87ed766fee32d428f951f18ab0a4addbfe8cbcbad1ce3a5642cc26ceb80654b158e537000ee5006b14eff43515619bc17af8c5da51adc55 + safe-json-utils: ^1.1.1 + tslib: 1.14.1 + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + lokijs: 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + lokijs: + optional: true + checksum: d695c2efcfa013a43cfaa20c85281df7d364a4452d11a4312a695298bd0e50d04b0e21c828f33f46fb020ea9796e60a6b23041a85f29bd10beeba7d0da24539f + languageName: node + linkType: hard + +"@walletconnect/legacy-client@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-client@npm:2.0.0" + dependencies: + "@walletconnect/crypto": ^1.0.3 + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.4 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: ^5.3.0 + query-string: ^6.13.5 + checksum: 57de9e373b24766e937734989080eb6d476e40d5406d4f817c989b278f25a09aa8636dfbe34a33f4de80ef90aea9641fdb7841007ecdba8e5ad47cd11614ee94 + languageName: node + linkType: hard + +"@walletconnect/legacy-modal@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-modal@npm:2.0.0" + dependencies: + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + copy-to-clipboard: ^3.3.3 + preact: ^10.12.0 + qrcode: ^1.5.1 + checksum: 897a02c9f4129a8f0b8e37832bf49a408e7e6f2828e78bea90c3718471cb57558f5522dd69c19456b5cc54a4aa04a4f7942f262ad9b031d318a5498ca0ca4078 + languageName: node + linkType: hard + +"@walletconnect/legacy-provider@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-provider@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.4 + "@walletconnect/jsonrpc-provider": ^1.0.6 + "@walletconnect/legacy-client": ^2.0.0 + "@walletconnect/legacy-modal": ^2.0.0 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + checksum: 48adf2d938d3580be1dbaa4c7005cdf715896a56d3f4ab500c301cd5b442343c7df11bfccbc8e32bf9a7ba4b9a379208846ad848d79b1b6b511c1c4121fc83cf + languageName: node + linkType: hard + +"@walletconnect/legacy-types@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-types@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-types": ^1.0.2 + checksum: 358d789f8a50e689edcfd8eb668fcdf8e1f03ab08757b12fad0e658ce7ef62268f8022502b476bce69e5165aa4454c4ad1ea41f17244ab8d0fcd9026bd94707c + languageName: node + linkType: hard + +"@walletconnect/legacy-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-utils@npm:2.0.0" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.4 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: ^5.3.0 + query-string: ^6.13.5 + checksum: ea90e98c2f2f0a7f1d8801f7284bae909952979413b5d8e339004948199a2777af025195442a3c78a27aa3c16bb546ef54bf9c592e5622e1f003bef6d4b355ca + languageName: node + linkType: hard + +"@walletconnect/logger@npm:^2.0.1": + version: 2.0.1 + resolution: "@walletconnect/logger@npm:2.0.1" + dependencies: + pino: 7.11.0 + tslib: 1.14.1 + checksum: b686679d176d5d22a3441d93e71be2652e6c447682a6d6f014baf7c2d9dcd23b93e2f434d4410e33cc532d068333f6b3c1d899aeb0d6f60cc296ed17f57b0c2c + languageName: node + linkType: hard + +"@walletconnect/modal-core@npm:2.6.1": + version: 2.6.1 + resolution: "@walletconnect/modal-core@npm:2.6.1" + dependencies: + valtio: 1.11.0 + checksum: 3c1dcb865cc0737bb0e77b7103bde7167e64a8790c628427814b825dafa133c7cb3baf5184314de35a2dbd743a3b0978ef4abc86c3bb63d051f8368e3bdba67a + languageName: node + linkType: hard + +"@walletconnect/modal-ui@npm:2.6.1": + version: 2.6.1 + resolution: "@walletconnect/modal-ui@npm:2.6.1" + dependencies: + "@walletconnect/modal-core": 2.6.1 + lit: 2.7.6 + motion: 10.16.2 + qrcode: 1.5.3 + checksum: 34408c784659564ef57fe59227f5f0a307ec34dc9e73c6c7b72e4c03054024ffbbf1d4ed73425a2606c978aaa3518629eba61adf3fc31263d80a4c13cf1c77d2 + languageName: node + linkType: hard + +"@walletconnect/modal@npm:2.6.1": + version: 2.6.1 + resolution: "@walletconnect/modal@npm:2.6.1" + dependencies: + "@walletconnect/modal-core": 2.6.1 + "@walletconnect/modal-ui": 2.6.1 + checksum: f48107abe4594b3a6849a4eae1a3fb9fb37ded25ef390c084e9098ceed58ace1bcb723abfa15027b462d75226a907bbbfc1d48e1414f882b5d7f83903da617bb languageName: node linkType: hard @@ -3703,10 +4260,27 @@ __metadata: languageName: node linkType: hard -"@walletconnect/safe-json@npm:1.0.0": - version: 1.0.0 - resolution: "@walletconnect/safe-json@npm:1.0.0" - checksum: a8ee161cad37242983522d19ace57c2d2725b5b1cf5fd4d61e3e5f4190a2b369acc4cd0fa40774b50cf4aa322f477e31b7841a6b8f0d84a3af12da8c4344e9b7 +"@walletconnect/relay-api@npm:^1.0.9": + version: 1.0.9 + resolution: "@walletconnect/relay-api@npm:1.0.9" + dependencies: + "@walletconnect/jsonrpc-types": ^1.0.2 + tslib: 1.14.1 + checksum: 5870579b6552f1ce7351878f1acb8386b0c11288c64d39133c7cee5040feeb7ccf9114228d97a59749d60366ad107b097d656407d534567c24f5d3878ea6e246 + languageName: node + linkType: hard + +"@walletconnect/relay-auth@npm:^1.0.4": + version: 1.0.4 + resolution: "@walletconnect/relay-auth@npm:1.0.4" + dependencies: + "@stablelib/ed25519": ^1.0.2 + "@stablelib/random": ^1.0.1 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + uint8arrays: ^3.0.0 + checksum: 35b3229d7b57e74fdb8fe6827d8dd8291dc60bacda880a57b2acb47a34d38f12be46c971c9eff361eb4073e896648b550de7a7a3852ef3752f9619c08dfba891 languageName: node linkType: hard @@ -3719,61 +4293,86 @@ __metadata: languageName: node linkType: hard -"@walletconnect/signer-connection@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/signer-connection@npm:1.8.0" +"@walletconnect/sign-client@npm:2.9.2": + version: 2.9.2 + resolution: "@walletconnect/sign-client@npm:2.9.2" dependencies: - "@walletconnect/client": ^1.8.0 - "@walletconnect/jsonrpc-types": ^1.0.1 - "@walletconnect/jsonrpc-utils": ^1.0.3 - "@walletconnect/qrcode-modal": ^1.8.0 - "@walletconnect/types": ^1.8.0 - eventemitter3: 4.0.7 - checksum: 249c5a92e80c59181d2da0dda759a6ed576e347de2cd2b2bf21ac5efe6b7b03e08406c2acc25e066cef52ffb6e6eb4124f6c680905dc54757b6f61f3a725b08f + "@walletconnect/core": 2.9.2 + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.9.2 + "@walletconnect/utils": 2.9.2 + events: ^3.3.0 + checksum: b91b271130ab6404c89a94e31bcf9b987c23bc4c5f86a75344b7f4ea1cd887996ae7876038ae35b430175af17529c4caf9bc332abe6e986d878439c7a3dba31a languageName: node linkType: hard -"@walletconnect/socket-transport@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/socket-transport@npm:1.8.0" +"@walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" dependencies: - "@walletconnect/types": ^1.8.0 - "@walletconnect/utils": ^1.8.0 - ws: 7.5.3 - checksum: 3c494399a3fd8165a8d631a66efd19779278dd6744b1e686a18394afad38a05450b9acb0117373e3376ac4721a2a298695fd550db79c1e456d4446e2b53f8a6d + tslib: 1.14.1 + checksum: e3fc0113ca9e7ecedfc65f9e1517196682d5ffcda60750f51073b8d704719a17fea75da8b242c804bfa5b994707723043892a2db3cc86988b190b7b8711fe3c0 languageName: node linkType: hard -"@walletconnect/types@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/types@npm:1.8.0" - checksum: 194d615888068030183489222641332987846aa5c6bcf0a62fa60ca7a282b9f94932c49fcd2b293a859e98624fe3e7a2d3c5fb66545fe30d3391e7ac91a99e34 +"@walletconnect/types@npm:2.9.2": + version: 2.9.2 + resolution: "@walletconnect/types@npm:2.9.2" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + events: ^3.3.0 + checksum: 81d523cf337f456190b87242ae7843e09f0b1d84127c1138d73420a5cc8e7b05f7f1722dfeaa2ecd12be25331e3896c733e0327221bc51eb6bae192e43b4a99f languageName: node linkType: hard -"@walletconnect/utils@npm:^1.8.0": - version: 1.8.0 - resolution: "@walletconnect/utils@npm:1.8.0" +"@walletconnect/universal-provider@npm:2.9.2": + version: 2.9.2 + resolution: "@walletconnect/universal-provider@npm:2.9.2" dependencies: - "@walletconnect/browser-utils": ^1.8.0 - "@walletconnect/encoding": ^1.0.1 - "@walletconnect/jsonrpc-utils": ^1.0.3 - "@walletconnect/types": ^1.8.0 - bn.js: 4.11.8 - js-sha3: 0.8.0 - query-string: 6.13.5 - checksum: 41b21fc6cb29c0714579dac8da988c14985fc0fcc0c5f02979e72509f42bf658e3ca8ea22ac4a50a9753d26b630d38a6b5fec84131a9eff0b78318b809b203dd + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.7 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/sign-client": 2.9.2 + "@walletconnect/types": 2.9.2 + "@walletconnect/utils": 2.9.2 + events: ^3.3.0 + checksum: 4f1003d63e5358fb45b15c1156911cda8287c98d606084c6168bda5fa9b9a376a3d08afc777823b9dfb71dad18c3f90896be0c0c7d5fc56c6061086b91177bc7 languageName: node linkType: hard -"@walletconnect/window-getters@npm:1.0.0": - version: 1.0.0 - resolution: "@walletconnect/window-getters@npm:1.0.0" - checksum: 192af7acb2051d304addb2e5a3f121fedd8c83ba6750018e3b0da5757bad525336bc5d9cb571f63b09828658764151da181337ec0e898811ad7f506910bd3b5f +"@walletconnect/utils@npm:2.9.2": + version: 2.9.2 + resolution: "@walletconnect/utils@npm:2.9.2" + dependencies: + "@stablelib/chacha20poly1305": 1.0.1 + "@stablelib/hkdf": 1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/sha256": 1.0.1 + "@stablelib/x25519": ^1.0.3 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.9.2 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: ^3.1.0 + checksum: 9caf05fa6f7c95945e675845e305220fc1e7832ae595a9ff39799195d2d5865972914f74a8768044473f45450e98db685a0ff965a09d9cd0220cfdc391279eab languageName: node linkType: hard -"@walletconnect/window-getters@npm:^1.0.0": +"@walletconnect/window-getters@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/window-getters@npm:1.0.1" dependencies: @@ -3782,12 +4381,13 @@ __metadata: languageName: node linkType: hard -"@walletconnect/window-metadata@npm:1.0.0": - version: 1.0.0 - resolution: "@walletconnect/window-metadata@npm:1.0.0" +"@walletconnect/window-metadata@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-metadata@npm:1.0.1" dependencies: - "@walletconnect/window-getters": ^1.0.0 - checksum: eec506ff6d35ae6e88db1e38b6f514f6cbf1a45b979878e5e50819d229b616fc645a2b0816145b61acda2701042160a4e0685f080927b87461853a62a887a9e9 + "@walletconnect/window-getters": ^1.0.1 + tslib: 1.14.1 + checksum: e82aea7195c6fe95c00e87bb38051c5549838c2e8302da94f1afa48206f79f0b620166c9820f847494505d282d1568e2086a1561b0493d2d0a1fa115f9106aef languageName: node linkType: hard @@ -3829,9 +4429,6 @@ __metadata: resolution: "@zk-email/contracts@workspace:packages/contracts" dependencies: "@openzeppelin/contracts": ^4.9.3 - "@openzeppelin/contracts-upgradeable": ^4.9.2 - ds-test: "https://github.com/dapphub/ds-test" - forge-std: "https://github.com/foundry-rs/forge-std" languageName: unknown linkType: soft @@ -3886,7 +4483,7 @@ __metadata: version: 0.0.0-use.local resolution: "@zk-email/twitter-verifier@workspace:packages/twitter-verifier-app" dependencies: - "@rainbow-me/rainbowkit": ^0.8.0 + "@rainbow-me/rainbowkit": ^1.0.9 "@testing-library/jest-dom": ^5.16.3 "@testing-library/react": ^12.1.4 "@twitter-verifier/circuits": "workspace:^" @@ -3904,7 +4501,7 @@ __metadata: browserstack-local: ^1.5.1 browserstack-node-sdk: ^1.6.1 circomlibjs: ^0.1.2 - ethers: ^5.7.1 + ethers: ^6.7.1 jest: ^29.5.0 jest-environment-jsdom: ^29.5.0 jest-fetch-mock: ^3.0.3 @@ -3923,13 +4520,12 @@ __metadata: serve: ^14.0.1 snarkjs: "https://github.com/sampritipanda/snarkjs.git#fef81fc51d17a734637555c6edbd585ecda02d9e" styled-components: ^5.3.5 - typescript: ^4.8.3 - vite: ^4.3.3 + vite: ^4.4.9 vite-plugin-commonjs: ^0.7.1 vite-plugin-ngmi-polyfill: ^0.0.2 vite-plugin-node-polyfills: ^0.8.2 vite-tsconfig-paths: ^4.2.0 - wagmi: ^0.6.8 + wagmi: ^1.3.10 languageName: unknown linkType: soft @@ -3966,6 +4562,34 @@ __metadata: languageName: node linkType: hard +"abitype@npm:0.8.7": + version: 0.8.7 + resolution: "abitype@npm:0.8.7" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + checksum: 4351466808969bcc73e5c535c3d96bb687ee2be0bccd48eba024c47e6cc248f0c8bd368f9e42dab35d39923e63b1349ade470f72812de27127968caf1a1426c9 + languageName: node + linkType: hard + +"abitype@npm:0.9.3": + version: 0.9.3 + resolution: "abitype@npm:0.9.3" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: f97c5a118180563b9ed8b97da492a82d3ce53dcd7d96c87764e90dbe84c04ae72dd5703d1ed5a54601033ab1772b8a235a1b5aadaf7aad6c4b5fdad7fd3a69a7 + languageName: node + linkType: hard + "abstract-leveldown@npm:~0.12.0, abstract-leveldown@npm:~0.12.1": version: 0.12.4 resolution: "abstract-leveldown@npm:0.12.4" @@ -4025,6 +4649,13 @@ __metadata: languageName: node linkType: hard +"aes-js@npm:4.0.0-beta.5": + version: 4.0.0-beta.5 + resolution: "aes-js@npm:4.0.0-beta.5" + checksum: cc2ea969d77df939c32057f7e361b6530aa6cb93cb10617a17a45cd164e6d761002f031ff6330af3e67e58b1f0a3a8fd0b63a720afd591a653b02f649470e15b + languageName: node + linkType: hard + "aes-js@npm:^3.1.2": version: 3.1.2 resolution: "aes-js@npm:3.1.2" @@ -4052,6 +4683,15 @@ __metadata: languageName: node linkType: hard +"agentkeepalive@npm:^4.3.0": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -4118,13 +4758,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -4139,7 +4772,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -4382,6 +5015,13 @@ __metadata: languageName: node linkType: hard +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.5": version: 1.0.5 resolution: "available-typed-arrays@npm:1.0.5" @@ -4403,15 +5043,6 @@ __metadata: languageName: node linkType: hard -"axios@npm:^0.21.0": - version: 0.21.4 - resolution: "axios@npm:0.21.4" - dependencies: - follow-redirects: ^1.14.0 - checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c - languageName: node - linkType: hard - "axios@npm:^0.27.2": version: 0.27.2 resolution: "axios@npm:0.27.2" @@ -4614,6 +5245,13 @@ __metadata: languageName: node linkType: hard +"big-integer@npm:^1.6.51": + version: 1.6.51 + resolution: "big-integer@npm:1.6.51" + checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 + languageName: node + linkType: hard + "bigint-buffer@npm:^1.1.5": version: 1.1.5 resolution: "bigint-buffer@npm:1.1.5" @@ -4706,13 +5344,6 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:4.11.8": - version: 4.11.8 - resolution: "bn.js@npm:4.11.8" - checksum: 80d4709cd58a21f0be8201e9e5859fea5ef133318e9800c8454cd334625c6e1caea593ca21f9b9a085fb560fbc12fb2fb3514363f8604258db924237fd039139 - languageName: node - linkType: hard - "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -4995,23 +5626,6 @@ __metadata: languageName: node linkType: hard -"buffer-alloc-unsafe@npm:^1.1.0": - version: 1.1.0 - resolution: "buffer-alloc-unsafe@npm:1.1.0" - checksum: c5e18bf51f67754ec843c9af3d4c005051aac5008a3992938dda1344e5cfec77c4b02b4ca303644d1e9a6e281765155ce6356d85c6f5ccc5cd21afc868def396 - languageName: node - linkType: hard - -"buffer-alloc@npm:^1.2.0": - version: 1.2.0 - resolution: "buffer-alloc@npm:1.2.0" - dependencies: - buffer-alloc-unsafe: ^1.1.0 - buffer-fill: ^1.0.0 - checksum: 560cd27f3cbe73c614867da373407d4506309c62fe18de45a1ce191f3785ec6ca2488d802ff82065798542422980ca25f903db078c57822218182c37c3576df5 - languageName: node - linkType: hard - "buffer-crc32@npm:~0.2.3": version: 0.2.13 resolution: "buffer-crc32@npm:0.2.13" @@ -5019,14 +5633,7 @@ __metadata: languageName: node linkType: hard -"buffer-fill@npm:^1.0.0": - version: 1.0.0 - resolution: "buffer-fill@npm:1.0.0" - checksum: c29b4723ddeab01e74b5d3b982a0c6828f2ded49cef049ddca3dac661c874ecdbcecb5dd8380cf0f4adbeb8cff90a7de724126750a1f1e5ebd4eb6c59a1315b1 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0, buffer-from@npm:^1.1.1": +"buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb @@ -5050,7 +5657,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.2.1, buffer@npm:^5.4.3, buffer@npm:^5.5.0, buffer@npm:^5.7.1": +"buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.7.1": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -5492,17 +6099,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^5.0.0": - version: 5.0.0 - resolution: "cliui@npm:5.0.0" - dependencies: - string-width: ^3.1.0 - strip-ansi: ^5.2.0 - wrap-ansi: ^5.1.0 - checksum: 0bb8779efe299b8f3002a73619eaa8add4081eb8d1c17bc4fedc6240557fb4eacdc08fe87c39b002eacb6cfc117ce736b362dbfd8bf28d90da800e010ee97df4 - languageName: node - linkType: hard - "cliui@npm:^6.0.0": version: 6.0.0 resolution: "cliui@npm:6.0.0" @@ -5821,7 +6417,7 @@ __metadata: languageName: node linkType: hard -"copy-to-clipboard@npm:^3.3.1": +"copy-to-clipboard@npm:^3.3.1, copy-to-clipboard@npm:^3.3.3": version: 3.3.3 resolution: "copy-to-clipboard@npm:3.3.3" dependencies: @@ -5906,7 +6502,7 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^3.0.4, cross-fetch@npm:^3.1.4": +"cross-fetch@npm:^3.0.4": version: 3.1.6 resolution: "cross-fetch@npm:3.1.6" dependencies: @@ -5915,6 +6511,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.4, cross-fetch@npm:^3.1.5": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -6134,7 +6739,7 @@ __metadata: languageName: node linkType: hard -"decode-uri-component@npm:^0.2.0": +"decode-uri-component@npm:^0.2.0, decode-uri-component@npm:^0.2.2": version: 0.2.2 resolution: "decode-uri-component@npm:0.2.2" checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 @@ -6308,10 +6913,10 @@ __metadata: languageName: node linkType: hard -"detect-browser@npm:5.2.0": - version: 5.2.0 - resolution: "detect-browser@npm:5.2.0" - checksum: 63b5c38fecc657ff12de01a41e6c8c97b3d610dffa37aef1983ec5bfb4314687d588c0c44c5ee03bd45ef15b7fe465bce9349c373369e6a7405f318e0aae56f9 +"detect-browser@npm:5.3.0, detect-browser@npm:^5.3.0": + version: 5.3.0 + resolution: "detect-browser@npm:5.3.0" + checksum: dd6e08d55da1d9e0f22510ac79872078ae03d9dfa13c5e66c96baedc1c86567345a88f96949161f6be8f3e0fafa93bf179bdb1cd311b14f5f163112fcc70ab49 languageName: node linkType: hard @@ -6660,6 +7265,18 @@ __metadata: languageName: node linkType: hard +"duplexify@npm:^4.1.2": + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" + dependencies: + end-of-stream: ^1.4.1 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + stream-shift: ^1.0.0 + checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -6677,15 +7294,6 @@ __metadata: languageName: node linkType: hard -"eip1193-provider@npm:1.0.1": - version: 1.0.1 - resolution: "eip1193-provider@npm:1.0.1" - dependencies: - "@json-rpc-tools/provider": ^1.5.5 - checksum: a56d6a874786b788c1f09f96d329b118ca6b3d381055865bb1ec1bde17da8d433a4141200baa2922108d67ac0d83813841940d2813814e56ea923fc9fafb369a - languageName: node - linkType: hard - "ejs@npm:^3.1.6": version: 3.1.9 resolution: "ejs@npm:3.1.9" @@ -6733,13 +7341,6 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^7.0.1": - version: 7.0.3 - resolution: "emoji-regex@npm:7.0.3" - checksum: 9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -6900,32 +7501,32 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.17.5": - version: 0.17.19 - resolution: "esbuild@npm:0.17.19" - dependencies: - "@esbuild/android-arm": 0.17.19 - "@esbuild/android-arm64": 0.17.19 - "@esbuild/android-x64": 0.17.19 - "@esbuild/darwin-arm64": 0.17.19 - "@esbuild/darwin-x64": 0.17.19 - "@esbuild/freebsd-arm64": 0.17.19 - "@esbuild/freebsd-x64": 0.17.19 - "@esbuild/linux-arm": 0.17.19 - "@esbuild/linux-arm64": 0.17.19 - "@esbuild/linux-ia32": 0.17.19 - "@esbuild/linux-loong64": 0.17.19 - "@esbuild/linux-mips64el": 0.17.19 - "@esbuild/linux-ppc64": 0.17.19 - "@esbuild/linux-riscv64": 0.17.19 - "@esbuild/linux-s390x": 0.17.19 - "@esbuild/linux-x64": 0.17.19 - "@esbuild/netbsd-x64": 0.17.19 - "@esbuild/openbsd-x64": 0.17.19 - "@esbuild/sunos-x64": 0.17.19 - "@esbuild/win32-arm64": 0.17.19 - "@esbuild/win32-ia32": 0.17.19 - "@esbuild/win32-x64": 0.17.19 +"esbuild@npm:^0.18.10": + version: 0.18.20 + resolution: "esbuild@npm:0.18.20" + dependencies: + "@esbuild/android-arm": 0.18.20 + "@esbuild/android-arm64": 0.18.20 + "@esbuild/android-x64": 0.18.20 + "@esbuild/darwin-arm64": 0.18.20 + "@esbuild/darwin-x64": 0.18.20 + "@esbuild/freebsd-arm64": 0.18.20 + "@esbuild/freebsd-x64": 0.18.20 + "@esbuild/linux-arm": 0.18.20 + "@esbuild/linux-arm64": 0.18.20 + "@esbuild/linux-ia32": 0.18.20 + "@esbuild/linux-loong64": 0.18.20 + "@esbuild/linux-mips64el": 0.18.20 + "@esbuild/linux-ppc64": 0.18.20 + "@esbuild/linux-riscv64": 0.18.20 + "@esbuild/linux-s390x": 0.18.20 + "@esbuild/linux-x64": 0.18.20 + "@esbuild/netbsd-x64": 0.18.20 + "@esbuild/openbsd-x64": 0.18.20 + "@esbuild/sunos-x64": 0.18.20 + "@esbuild/win32-arm64": 0.18.20 + "@esbuild/win32-ia32": 0.18.20 + "@esbuild/win32-x64": 0.18.20 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -6973,7 +7574,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: ac11b1a5a6008e4e37ccffbd6c2c054746fc58d0ed4a2f9ee643bd030cfcea9a33a235087bc777def8420f2eaafb3486e76adb7bdb7241a9143b43a69a10afd8 + checksum: 5d253614e50cdb6ec22095afd0c414f15688e7278a7eb4f3720a6dd1306b0909cf431e7b9437a90d065a31b1c57be60130f63fe3e8d0083b588571f31ee6ec7b languageName: node linkType: hard @@ -7136,7 +7737,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^5.5.1, ethers@npm:^5.7.1": +"ethers@npm:^5.5.1": version: 5.7.2 resolution: "ethers@npm:5.7.2" dependencies: @@ -7174,6 +7775,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.7.1": + version: 6.7.1 + resolution: "ethers@npm:6.7.1" + dependencies: + "@adraffy/ens-normalize": 1.9.2 + "@noble/hashes": 1.1.2 + "@noble/secp256k1": 1.7.1 + "@types/node": 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + checksum: 07833692e3f53b18e28c4cba9f53f3d5ebff8360de02ad57b2584c00c52b88f5b790373f9b9f6b4f6b52ffa2074530a6101192b30c3260f7cdeff929d34bb88b + languageName: node + linkType: hard + "event-stream@npm:=3.3.4": version: 3.3.4 resolution: "event-stream@npm:3.3.4" @@ -7189,7 +7805,7 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:4.0.7, eventemitter3@npm:^4.0.7": +"eventemitter3@npm:^4.0.7": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 @@ -7364,6 +7980,13 @@ __metadata: languageName: node linkType: hard +"fast-redact@npm:^3.0.0": + version: 3.3.0 + resolution: "fast-redact@npm:3.3.0" + checksum: 3f7becc70a5a2662a9cbfdc52a4291594f62ae998806ee00315af307f32d9559dbf512146259a22739ee34401950ef47598c1f4777d33b0ed5027203d67f549c + languageName: node + linkType: hard + "fast-safe-stringify@npm:^2.0.6": version: 2.1.1 resolution: "fast-safe-stringify@npm:2.1.1" @@ -7521,6 +8144,13 @@ __metadata: languageName: node linkType: hard +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10 + languageName: node + linkType: hard + "find-file-up@npm:^0.1.2": version: 0.1.3 resolution: "find-file-up@npm:0.1.3" @@ -7563,15 +8193,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: ^3.0.0 - checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 - languageName: node - linkType: hard - "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -7612,7 +8233,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.9": +"follow-redirects@npm:^1.14.9": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -8215,6 +8836,13 @@ __metadata: languageName: node linkType: hard +"hey-listen@npm:^1.0.8": + version: 1.0.8 + resolution: "hey-listen@npm:1.0.8" + checksum: 6bad60b367688f5348e25e7ca3276a74b59ac5a09b0455e6ff8ab7d4a9e38cd2116c708a7dcd8a954d27253ce1d8717ec891d175723ea739885b828cf44e4072 + languageName: node + linkType: hard + "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -8677,13 +9305,6 @@ __metadata: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 - languageName: node - linkType: hard - "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -9012,7 +9633,7 @@ __metadata: languageName: node linkType: hard -"isarray@npm:^2.0.1, isarray@npm:^2.0.5": +"isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a @@ -9054,6 +9675,15 @@ __metadata: languageName: node linkType: hard +"isomorphic-ws@npm:5.0.0": + version: 5.0.0 + resolution: "isomorphic-ws@npm:5.0.0" + peerDependencies: + ws: "*" + checksum: e20eb2aee09ba96247465fda40c6d22c1153394c0144fa34fe6609f341af4c8c564f60ea3ba762335a7a9c306809349f9b863c8beedf2beea09b299834ad5398 + languageName: node + linkType: hard + "isomorphic-ws@npm:^4.0.1": version: 4.0.1 resolution: "isomorphic-ws@npm:4.0.1" @@ -10198,6 +10828,37 @@ __metadata: languageName: node linkType: hard +"lit-element@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-element@npm:3.3.3" + dependencies: + "@lit-labs/ssr-dom-shim": ^1.1.0 + "@lit/reactive-element": ^1.3.0 + lit-html: ^2.8.0 + checksum: 29a596fa556e231cce7246ca3e5687ad238f299b0cb374a0934d5e6fe9adf1436e031d4fbd21b280aabfc0e21a66e6c4b52da558a908df2566d09d960f3ca93d + languageName: node + linkType: hard + +"lit-html@npm:^2.7.0, lit-html@npm:^2.8.0": + version: 2.8.0 + resolution: "lit-html@npm:2.8.0" + dependencies: + "@types/trusted-types": ^2.0.2 + checksum: 2d70df07248bcb2f502a3afb1e91d260735024fa669669ffb1417575aa39c3092779725ac1b90f5f39e4ce78c63f431f51176bc67f532389f0285a6991573255 + languageName: node + linkType: hard + +"lit@npm:2.7.6": + version: 2.7.6 + resolution: "lit@npm:2.7.6" + dependencies: + "@lit/reactive-element": ^1.6.0 + lit-element: ^3.3.0 + lit-html: ^2.7.0 + checksum: 984a7fb9c0fa387f20177a07de22ea1c9cdc01a7dc7cb1c400d1df5b43a8956908460482a3259ea173555c6f0f13457d2ddc5c84d4c365007afd86e7ca58b384 + languageName: node + linkType: hard + "localforage@npm:^1.10.0": version: 1.10.0 resolution: "localforage@npm:1.10.0" @@ -10207,16 +10868,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-path@npm:3.0.0" - dependencies: - p-locate: ^3.0.0 - path-exists: ^3.0.0 - checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 - languageName: node - linkType: hard - "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -10242,6 +10893,13 @@ __metadata: languageName: node linkType: hard +"lodash.isequal@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 + languageName: node + linkType: hard + "lodash.memoize@npm:4.x": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -10726,9 +11384,9 @@ __metadata: linkType: hard "mitt@npm:^3.0.0": - version: 3.0.0 - resolution: "mitt@npm:3.0.0" - checksum: f7be5049d27d18b1dbe9408452d66376fa60ae4a79fe9319869d1b90ae8cbaedadc7e9dab30b32d781411256d468be5538996bb7368941c09009ef6bbfa6bfc7 + version: 3.0.1 + resolution: "mitt@npm:3.0.1" + checksum: b55a489ac9c2949ab166b7f060601d3b6d893a852515ae9eca4e11df01c013876df777ea109317622b5c1c60e8aae252558e33c8c94e14124db38f64a39614b1 languageName: node linkType: hard @@ -10848,6 +11506,20 @@ __metadata: languageName: node linkType: hard +"motion@npm:10.16.2": + version: 10.16.2 + resolution: "motion@npm:10.16.2" + dependencies: + "@motionone/animation": ^10.15.1 + "@motionone/dom": ^10.16.2 + "@motionone/svelte": ^10.16.2 + "@motionone/types": ^10.15.1 + "@motionone/utils": ^10.15.1 + "@motionone/vue": ^10.16.2 + checksum: 0b91256808c2374d8b7f4ac5e7ed513f2ca8df2b7d1be4fbc00ec5baece5162ada648aedaa5bc1d60be9ad2e6c9bc1d3bb160333051c20ab79e241b8e02e3c92 + languageName: node + linkType: hard + "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -10903,6 +11575,13 @@ __metadata: languageName: node linkType: hard +"multiformats@npm:^9.4.2": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: d3e8c1be400c09a014f557ea02251a2710dbc9fca5aa32cc702ff29f636c5471e17979f30bdcb0a9cbb556f162a8591dc2e1219c24fc21394a56115b820bb84e + languageName: node + linkType: hard + "mute-stream@npm:0.0.8": version: 0.0.8 resolution: "mute-stream@npm:0.0.8" @@ -11014,6 +11693,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.6.12": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + "node-forge@npm:^1.3.1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" @@ -11021,7 +11714,18 @@ __metadata: languageName: node linkType: hard -"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.2.2, node-gyp-build@npm:^4.3.0": +"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": + version: 4.6.1 + resolution: "node-gyp-build@npm:4.6.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: c3676d337b36803bc7792e35bf7fdcda7cdcb7e289b8f9855a5535702a82498eb976842fefcf487258c58005ca32ce3d537fbed91280b04409161dcd7232a882 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.2": version: 4.6.0 resolution: "node-gyp-build@npm:4.6.0" bin: @@ -11256,6 +11960,13 @@ __metadata: languageName: node linkType: hard +"on-exit-leak-free@npm:^0.2.0": + version: 0.2.0 + resolution: "on-exit-leak-free@npm:0.2.0" + checksum: d22b0f0538069110626b578db6e68b6ee0e85b1ee9cc5ef9b4de1bba431431d6a8da91a61e09d2ad46f22a96f968e5237833cb9d0b69bc4d294f7ec82f609b05 + languageName: node + linkType: hard + "on-headers@npm:~1.0.2": version: 1.0.2 resolution: "on-headers@npm:1.0.2" @@ -11363,7 +12074,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": +"p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -11381,15 +12092,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^3.0.0": - version: 3.0.0 - resolution: "p-locate@npm:3.0.0" - dependencies: - p-limit: ^2.0.0 - checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae - languageName: node - linkType: hard - "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -11515,13 +12217,6 @@ __metadata: languageName: node linkType: hard -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a - languageName: node - linkType: hard - "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -11649,6 +12344,44 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:v0.5.0": + version: 0.5.0 + resolution: "pino-abstract-transport@npm:0.5.0" + dependencies: + duplexify: ^4.1.2 + split2: ^4.0.0 + checksum: c503f867de3189f8217ab9cf794e8a631dddd0029a829f0f985f5511308152ebd53e363764fbc5570b3d1c715b341e3923456ce16ad84cd41be2b9a074ada234 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: 89d487729b58c9d3273a0ee851ead068d6d2e2ccc1af8e1c1d28f1b3442423679bec7ec04d9a2aba36f94f335e82be9f4de19dc4fbc161e71c136aaa15b85ad3 + languageName: node + linkType: hard + +"pino@npm:7.11.0": + version: 7.11.0 + resolution: "pino@npm:7.11.0" + dependencies: + atomic-sleep: ^1.0.0 + fast-redact: ^3.0.0 + on-exit-leak-free: ^0.2.0 + pino-abstract-transport: v0.5.0 + pino-std-serializers: ^4.0.0 + process-warning: ^1.0.0 + quick-format-unescaped: ^4.0.3 + real-require: ^0.1.0 + safe-stable-stringify: ^2.1.0 + sonic-boom: ^2.2.1 + thread-stream: ^0.15.1 + bin: + pino: bin.js + checksum: b919e7dbe41de978bb050dcef94fd687c012eb78d344a18f75f04ce180d5810fc162be1f136722d70cd005ed05832c4023a38b9acbc1076ae63c9f5ec5ca515c + languageName: node + linkType: hard + "pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" @@ -11681,13 +12414,6 @@ __metadata: languageName: node linkType: hard -"pngjs@npm:^3.3.0": - version: 3.4.0 - resolution: "pngjs@npm:3.4.0" - checksum: 8bd40bd698abd16b72c97b85cb858c80894fbedc76277ce72a784aa441e14795d45d9856e97333ca469b34b67528860ffc8a7317ca6beea349b645366df00bcd - languageName: node - linkType: hard - "pngjs@npm:^5.0.0": version: 5.0.0 resolution: "pngjs@npm:5.0.0" @@ -11737,17 +12463,21 @@ __metadata: languageName: node linkType: hard -"preact@npm:10.4.1": - version: 10.4.1 - resolution: "preact@npm:10.4.1" - checksum: e8c5eae6dca469226177394cf49994d6beab5b9b10d31e000d8b16d9b00bfa52cdd10b41331759d68646e7b8f601430d78eb025f9026263adc90150699800ed3 +"postcss@npm:^8.4.27": + version: 8.4.29 + resolution: "postcss@npm:8.4.29" + dependencies: + nanoid: ^3.3.6 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: dd6daa25e781db9ae5b651d9b7bfde0ec6e60e86a37da69a18eb4773d5ddd51e28fc4ff054fbdc04636a31462e6bf09a1e50986f69ac52b10d46b7457cd36d12 languageName: node linkType: hard -"preact@npm:^10.5.9": - version: 10.15.1 - resolution: "preact@npm:10.15.1" - checksum: dabad11843b19b40b11846a25ff0b1fc4bc58268909e01a7faddb341a40983d24fbe7d44ad6e2c5d35e43091963af616800552fec9af44dd0a2f0f698d1bba1f +"preact@npm:^10.12.0, preact@npm:^10.5.9": + version: 10.17.1 + resolution: "preact@npm:10.17.1" + checksum: d25193272d2d2e58beb5dea7c0a715090a942d437638e39977b92f5729eb8d8a3410393f6f73799c850953e679ca79cf7a285dca31f34c492ff62df2f27643bf languageName: node linkType: hard @@ -11848,6 +12578,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: c708a03241deec3cabaeee39c4f9ee8c4d71f1c5ef9b746c8252cdb952a6059068cfcdaf348399775244cbc441b6ae5e26a9c87ed371f88335d84f26d19180f9 + languageName: node + linkType: hard + "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -11896,6 +12633,13 @@ __metadata: languageName: node linkType: hard +"proxy-compare@npm:2.5.1": + version: 2.5.1 + resolution: "proxy-compare@npm:2.5.1" + checksum: c7cc151ac255150bcb24becde6495b3e399416c31991af377ce082255b51f07eaeb5d861bf8bf482703e92f88b90a5892ad57d3153ea29450d03ef921683d9fa + languageName: node + linkType: hard + "proxy-from-env@npm:1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -12008,26 +12752,23 @@ __metadata: languageName: node linkType: hard -"qrcode@npm:1.4.4": - version: 1.4.4 - resolution: "qrcode@npm:1.4.4" +"qrcode@npm:1.5.0": + version: 1.5.0 + resolution: "qrcode@npm:1.5.0" dependencies: - buffer: ^5.4.3 - buffer-alloc: ^1.2.0 - buffer-from: ^1.1.1 dijkstrajs: ^1.0.1 - isarray: ^2.0.1 - pngjs: ^3.3.0 - yargs: ^13.2.4 + encode-utf8: ^1.0.3 + pngjs: ^5.0.0 + yargs: ^15.3.1 bin: - qrcode: ./bin/qrcode - checksum: 8c1a7ee3092c0ed60f0413594af879ac6dffb897d4921144a8e7ae3dce40c04ba6457ab21664ca43934ba3fe19cced85abaf0b87b07916239d7254d4bb4fcf13 + qrcode: bin/qrcode + checksum: a0857713d4390937900a2789d5a065700f7cf78cd760e773bf8524c0e907ff629db19c9bdd4210aac55b8eef53ec1c7bcaa2acf01f340ef049c53098388a45a0 languageName: node linkType: hard -"qrcode@npm:1.5.0": - version: 1.5.0 - resolution: "qrcode@npm:1.5.0" +"qrcode@npm:1.5.3, qrcode@npm:^1.5.1": + version: 1.5.3 + resolution: "qrcode@npm:1.5.3" dependencies: dijkstrajs: ^1.0.1 encode-utf8: ^1.0.3 @@ -12035,7 +12776,7 @@ __metadata: yargs: ^15.3.1 bin: qrcode: bin/qrcode - checksum: a0857713d4390937900a2789d5a065700f7cf78cd760e773bf8524c0e907ff629db19c9bdd4210aac55b8eef53ec1c7bcaa2acf01f340ef049c53098388a45a0 + checksum: 9a8a20a0a9cb1d15de8e7b3ffa214e8b6d2a8b07655f25bd1b1d77f4681488f84d7bae569870c0652872d829d5f8ac4922c27a6bd14c13f0e197bf07b28dead7 languageName: node linkType: hard @@ -12055,14 +12796,27 @@ __metadata: languageName: node linkType: hard -"query-string@npm:6.13.5": - version: 6.13.5 - resolution: "query-string@npm:6.13.5" +"query-string@npm:7.1.3": + version: 7.1.3 + resolution: "query-string@npm:7.1.3" + dependencies: + decode-uri-component: ^0.2.2 + filter-obj: ^1.1.0 + split-on-first: ^1.0.0 + strict-uri-encode: ^2.0.0 + checksum: 91af02dcd9cc9227a052841d5c2eecb80a0d6489d05625df506a097ef1c59037cfb5e907f39b84643cbfd535c955abec3e553d0130a7b510120c37d06e0f4346 + languageName: node + linkType: hard + +"query-string@npm:^6.13.5": + version: 6.14.1 + resolution: "query-string@npm:6.14.1" dependencies: decode-uri-component: ^0.2.0 + filter-obj: ^1.1.0 split-on-first: ^1.0.0 strict-uri-encode: ^2.0.0 - checksum: 1019dea0ab277bdf606bcc022ec223a9ab9947608d2696114ef9198f72ae553be039705d6c52e16af43d9b79bac67385f63fb7fe9241cd2f7b703dd23c7ab8d3 + checksum: f2c7347578fa0f3fd4eaace506470cb4e9dc52d409a7ddbd613f614b9a594d750877e193b5d5e843c7477b3b295b857ec328903c943957adc41a3efb6c929449 languageName: node linkType: hard @@ -12087,6 +12841,13 @@ __metadata: languageName: node linkType: hard +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd + languageName: node + linkType: hard + "quote-unquote@npm:^1.0.0": version: 1.0.0 resolution: "quote-unquote@npm:1.0.0" @@ -12223,26 +12984,26 @@ __metadata: linkType: hard "react-router-dom@npm:^6.2.2": - version: 6.12.1 - resolution: "react-router-dom@npm:6.12.1" + version: 6.15.0 + resolution: "react-router-dom@npm:6.15.0" dependencies: - "@remix-run/router": 1.6.3 - react-router: 6.12.1 + "@remix-run/router": 1.8.0 + react-router: 6.15.0 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 885528986b6e32bde0cc6ff1f318186ce6931cf4a2a36511fe12eafb380576b448a991d43fe473dbb9bc97bb7efa0c87ac179a7470345a1d3534a34b65578677 + checksum: 95301837e293654f00934de6a4bdb27bfb06f613503e4cce7a93f19384793729832e7479d50faf3b9457d149014d4df40a3ee3a5193d7e3a3caadb7aaa6ec0f9 languageName: node linkType: hard -"react-router@npm:6.12.1": - version: 6.12.1 - resolution: "react-router@npm:6.12.1" +"react-router@npm:6.15.0": + version: 6.15.0 + resolution: "react-router@npm:6.15.0" dependencies: - "@remix-run/router": 1.6.3 + "@remix-run/router": 1.8.0 peerDependencies: react: ">=16.8" - checksum: a23a0f2e6635eba19aec8d50b9126f61663d1e6ee6e69d6b2ca6e5dd678496b54d925f0d86a375270646da11cc12be66ac5e6ebf73962957af91ac828b63d10b + checksum: 345b29277e13997f2625f0037f537eaf1955bb9f44ebfea80dd3ff83fc06273f7b64e1be944bfc75945fd2af5af917874133a8a93ed5ecaca523be8f045ae166 languageName: node linkType: hard @@ -12367,6 +13128,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.1.0": + version: 0.1.0 + resolution: "real-require@npm:0.1.0" + checksum: 96745583ed4f82cd5c6a6af012fd1d3c6fc2f13ae1bcff1a3c4f8094696013a1a07c82c5aa66a403d7d4f84949fc2203bc927c7ad120caad125941ca2d7e5e8e + languageName: node + linkType: hard + "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -12400,6 +13168,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.14.0": + version: 0.14.0 + resolution: "regenerator-runtime@npm:0.14.0" + checksum: 1c977ad82a82a4412e4f639d65d22be376d3ebdd30da2c003eeafdaaacd03fc00c2320f18120007ee700900979284fc78a9f00da7fb593f6e6eeebc673fba9a3 + languageName: node + linkType: hard + "regenerator-transform@npm:^0.15.1": version: 0.15.1 resolution: "regenerator-transform@npm:0.15.1" @@ -12725,9 +13500,9 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^3.21.0": - version: 3.24.0 - resolution: "rollup@npm:3.24.0" +"rollup@npm:^3.27.1": + version: 3.28.1 + resolution: "rollup@npm:3.28.1" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -12735,7 +13510,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 373d0062a79cfce3583d4f6b7ab8ac9aa3201a9af1fa20b24f61a4ddea95a45974c4a8baed3087cb4e7bfc34a9dcd6774b7a635eb071ba52f97f51a59e860d6e + checksum: 1fcab0929c16130218447c76c19b56ccc0e677110552462297e3679188fc70185a6ec418cef8ce138ec9fb78fd5188537a3f5d28762788e8c88b12a7fb8ba0fb languageName: node linkType: hard @@ -12753,13 +13528,13 @@ __metadata: jest: ^29.5.0 ts-jest: ^29.1.0 ts-node: ^10.9.1 - typescript: ^5.1.6 + typescript: ^5.2.2 languageName: unknown linkType: soft "rpc-websockets@npm:^7.5.1": - version: 7.5.1 - resolution: "rpc-websockets@npm:7.5.1" + version: 7.6.0 + resolution: "rpc-websockets@npm:7.6.0" dependencies: "@babel/runtime": ^7.17.2 bufferutil: ^4.0.1 @@ -12772,7 +13547,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 9dda8c63a1d3e85e11597e1c364835ec6aa9a8de1b5cfb1629d0eafc3ae04509011d485025ed4f717c0b1dd048e2aafdd75080e866540b93e55fd8a2cd91bcfe + checksum: af2b254f65985610bd354e8e13de07b5a36010b94672b0b5a9d226b9bb1b8b17d01c63221cad97263845888f3610e55867a32e4c0017dfb92fddf89417c4cb6c languageName: node linkType: hard @@ -12840,7 +13615,7 @@ __metadata: languageName: node linkType: hard -"safe-stable-stringify@npm:^2.3.1": +"safe-stable-stringify@npm:^2.1.0, safe-stable-stringify@npm:^2.3.1": version: 2.4.3 resolution: "safe-stable-stringify@npm:2.4.3" checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 @@ -12918,7 +13693,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": +"semver@npm:7.x, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": version: 7.5.1 resolution: "semver@npm:7.5.1" dependencies: @@ -12938,6 +13713,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.3.8": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + "semver@npm:~2.3.1": version: 2.3.2 resolution: "semver@npm:2.3.2" @@ -13178,6 +13964,15 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^2.2.1": + version: 2.8.0 + resolution: "sonic-boom@npm:2.8.0" + dependencies: + atomic-sleep: ^1.0.0 + checksum: c7f9c89f931d7f60f8e0741551a729f0d81e6dc407a99420fc847a9a4c25af048a615b1188ab3c4f1fb3708fe4904973ddab6ebcc8ed5b78b50ab81a99045910 + languageName: node + linkType: hard + "source-map-js@npm:^1.0.2": version: 1.0.2 resolution: "source-map-js@npm:1.0.2" @@ -13234,6 +14029,13 @@ __metadata: languageName: node linkType: hard +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 05d54102546549fe4d2455900699056580cca006c0275c334611420f854da30ac999230857a85fdd9914dc2109ae50f80fda43d2a445f2aa86eccdc1dfce779d + languageName: node + linkType: hard + "split@npm:0.3": version: 0.3.3 resolution: "split@npm:0.3.3" @@ -13373,6 +14175,13 @@ __metadata: languageName: node linkType: hard +"stream-shift@npm:^1.0.0": + version: 1.0.1 + resolution: "stream-shift@npm:1.0.1" + checksum: 59b82b44b29ec3699b5519a49b3cedcc6db58c72fb40c04e005525dfdcab1c75c4e0c180b923c380f204bed78211b9bad8faecc7b93dece4d004c3f6ec75737b + languageName: node + linkType: hard + "stream-to-array@npm:^2.3.0": version: 2.3.0 resolution: "stream-to-array@npm:2.3.0" @@ -13433,17 +14242,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^3.0.0, string-width@npm:^3.1.0": - version: 3.1.0 - resolution: "string-width@npm:3.1.0" - dependencies: - emoji-regex: ^7.0.1 - is-fullwidth-code-point: ^2.0.0 - strip-ansi: ^5.1.0 - checksum: 57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2 - languageName: node - linkType: hard - "string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -13491,15 +14289,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": - version: 5.2.0 - resolution: "strip-ansi@npm:5.2.0" - dependencies: - ansi-regex: ^4.1.0 - checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 - languageName: node - linkType: hard - "strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -13585,9 +14374,9 @@ __metadata: linkType: hard "stylis@npm:^4.0.6": - version: 4.2.0 - resolution: "stylis@npm:4.2.0" - checksum: 0eb6cc1b866dc17a6037d0a82ac7fa877eba6a757443e79e7c4f35bacedbf6421fadcab4363b39667b43355cbaaa570a3cde850f776498e5450f32ed2f9b7584 + version: 4.3.0 + resolution: "stylis@npm:4.3.0" + checksum: 6120de3f03eacf3b5adc8e7919c4cca991089156a6badc5248752a3088106afaaf74996211a6817a7760ebeadca09004048eea31875bd8d4df51386365c50025 languageName: node linkType: hard @@ -13738,6 +14527,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^0.15.1": + version: 0.15.2 + resolution: "thread-stream@npm:0.15.2" + dependencies: + real-require: ^0.1.0 + checksum: 0547795a8f357ba1ac0dba29c71f965182e29e21752951a04a7167515ee37524bfba6c410f31e65a01a8d3e5b93400b812889aa09523e38ce4d744c894ffa6c0 + languageName: node + linkType: hard + "throttle-debounce@npm:^3.0.1": version: 3.0.1 resolution: "throttle-debounce@npm:3.0.1" @@ -14004,6 +14802,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.4.0": + version: 2.4.0 + resolution: "tslib@npm:2.4.0" + checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 + languageName: node + linkType: hard + "tslib@npm:^2.0.0, tslib@npm:^2.1.0": version: 2.5.3 resolution: "tslib@npm:2.5.3" @@ -14011,6 +14816,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.3.1": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -14115,7 +14927,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.0.0, typescript@npm:^4.8.3, typescript@npm:^4.9.5": +"typescript@npm:^4.0.0, typescript@npm:^4.9.5": version: 4.9.5 resolution: "typescript@npm:4.9.5" bin: @@ -14125,13 +14937,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.1.6": - version: 5.1.6 - resolution: "typescript@npm:5.1.6" +"typescript@npm:^5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: b2f2c35096035fe1f5facd1e38922ccb8558996331405eb00a5111cc948b2e733163cc22fab5db46992aba7dd520fff637f2c1df4996ff0e134e77d3249a7350 + checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c languageName: node linkType: hard @@ -14145,7 +14957,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^4.0.0#~builtin, typescript@patch:typescript@^4.8.3#~builtin, typescript@patch:typescript@^4.9.5#~builtin": +"typescript@patch:typescript@^4.0.0#~builtin, typescript@patch:typescript@^4.9.5#~builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=a1c5e5" bin: @@ -14155,13 +14967,22 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^5.1.6#~builtin": - version: 5.1.6 - resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=a1c5e5" +"typescript@patch:typescript@^5.2.2#~builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 21e88b0a0c0226f9cb9fd25b9626fb05b4c0f3fddac521844a13e1f30beb8f14e90bd409a9ac43c812c5946d714d6e0dee12d5d02dfc1c562c5aacfa1f49b606 + checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 + languageName: node + linkType: hard + +"uint8arrays@npm:^3.0.0, uint8arrays@npm:^3.1.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: ^9.4.2 + checksum: b93b6c3f0a526b116799f3a3409bd4b5d5553eb3e73e485998ece7974742254fbc0d2f7988dd21ac86c4b974552f45d9ae9cf9cba9647e529f8eb1fdd2ed84d0 languageName: node linkType: hard @@ -14444,6 +15265,21 @@ __metadata: languageName: node linkType: hard +"valtio@npm:1.11.0": + version: 1.11.0 + resolution: "valtio@npm:1.11.0" + dependencies: + proxy-compare: 2.5.1 + use-sync-external-store: 1.2.0 + peerDependencies: + react: ">=16.8" + peerDependenciesMeta: + react: + optional: true + checksum: 77e42f5841054ba3e41b456fbb96b679eaeb6d9dbb46b7ce9aee6acf1352de73969858dea837a706c969ca908155d6cb97966e33be10b69b097744dd99b5174a + languageName: node + linkType: hard + "vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -14462,6 +15298,28 @@ __metadata: languageName: node linkType: hard +"viem@npm:^1.0.0": + version: 1.9.2 + resolution: "viem@npm:1.9.2" + dependencies: + "@adraffy/ens-normalize": 1.9.0 + "@noble/curves": 1.1.0 + "@noble/hashes": 1.3.0 + "@scure/bip32": 1.3.0 + "@scure/bip39": 1.2.0 + "@types/ws": ^8.5.4 + abitype: 0.9.3 + isomorphic-ws: 5.0.0 + ws: 8.12.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 2b5d134f51843a306ef52d5a84f0141547e7c84c22621057ed4a3080944c1a9eba28cbbe3c94b3378d2e02e4b1250e0d2b89576f0193404c23cf024c42e63396 + languageName: node + linkType: hard + "vite-plugin-commonjs@npm:^0.7.1": version: 0.7.1 resolution: "vite-plugin-commonjs@npm:0.7.1" @@ -14525,17 +15383,18 @@ __metadata: languageName: node linkType: hard -"vite@npm:^4.3.3": - version: 4.3.9 - resolution: "vite@npm:4.3.9" +"vite@npm:^4.4.9": + version: 4.4.9 + resolution: "vite@npm:4.4.9" dependencies: - esbuild: ^0.17.5 + esbuild: ^0.18.10 fsevents: ~2.3.2 - postcss: ^8.4.23 - rollup: ^3.21.0 + postcss: ^8.4.27 + rollup: ^3.27.1 peerDependencies: "@types/node": ">= 14" less: "*" + lightningcss: ^1.21.0 sass: "*" stylus: "*" sugarss: "*" @@ -14548,6 +15407,8 @@ __metadata: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true stylus: @@ -14558,7 +15419,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 8c45a516278d1e0425fac00c0877336790f71484a851a318346a70e0d2aef9f3b9651deb2f9f002c791ceb920eda7d6a3cda753bdefd657321c99f448b02dd25 + checksum: c511024ceae39c68c7dbf2ac4381ee655cd7bb62cf43867a14798bc835d3320b8fa7867a336143c30825c191c1fb4e9aa3348fce831ab617e96203080d3d2908 languageName: node linkType: hard @@ -14578,21 +15439,24 @@ __metadata: languageName: node linkType: hard -"wagmi@npm:^0.6.8": - version: 0.6.8 - resolution: "wagmi@npm:0.6.8" +"wagmi@npm:^1.3.10": + version: 1.3.10 + resolution: "wagmi@npm:1.3.10" dependencies: - "@coinbase/wallet-sdk": ^3.3.0 - "@tanstack/query-sync-storage-persister": ^4.0.10 - "@tanstack/react-query": ^4.0.10 - "@tanstack/react-query-persist-client": ^4.0.10 - "@wagmi/core": ^0.5.8 - "@walletconnect/ethereum-provider": ^1.7.8 + "@tanstack/query-sync-storage-persister": ^4.27.1 + "@tanstack/react-query": ^4.28.0 + "@tanstack/react-query-persist-client": ^4.28.0 + "@wagmi/core": 1.3.9 + abitype: 0.8.7 use-sync-external-store: ^1.2.0 peerDependencies: - ethers: ">=5.5.1" react: ">=17.0.0" - checksum: 4049907c85757285d28f7e0887f6705ee06c18671d1a6dbebb0dd87a25b76c6b4028d884748060ce560e0b0597e12bfc8be33977664d5341da256e3375108d78 + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: ed329b9e8e7c1263312b028967980a3e47764586f154fc1040eb03fc48b9e1742b5de9eca962efcad04ea24b3440c846b439f4a35ca0849a56183783564e80f7 languageName: node linkType: hard @@ -14870,17 +15734,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^5.1.0": - version: 5.1.0 - resolution: "wrap-ansi@npm:5.1.0" - dependencies: - ansi-styles: ^3.2.0 - string-width: ^3.0.0 - strip-ansi: ^5.0.0 - checksum: 9b48c862220e541eb0daa22661b38b947973fc57054e91be5b0f2dcc77741a6875ccab4ebe970a394b4682c8dfc17e888266a105fb8b0a9b23c19245e781ceae - languageName: node - linkType: hard - "wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -14958,9 +15811,24 @@ __metadata: languageName: node linkType: hard -"ws@npm:7.5.3": - version: 7.5.3 - resolution: "ws@npm:7.5.3" +"ws@npm:8.12.0": + version: 8.12.0 + resolution: "ws@npm:8.12.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 818ff3f8749c172a95a114cceb8b89cedd27e43a82d65c7ad0f7882b1e96a2ee6709e3746a903c3fa88beec0c8bae9a9fcd75f20858b32a166dfb7519316a5d7 + languageName: node + linkType: hard + +"ws@npm:8.5.0": + version: 8.5.0 + resolution: "ws@npm:8.5.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -14969,7 +15837,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 423dc0d859fa74020f5555140905b862470a60ea1567bb9ad55a087263d7718b9c94f69678be1cee9868925c570f1e6fc79d09f90c39057bc63fa2edbb2c547b + checksum: 76f2f90e40344bf18fd544194e7067812fb1372b2a37865678d8f12afe4b478ff2ebc0c7c0aff82cd5e6b66fc43d889eec0f1865c2365d8f7a66d92da7744a77 languageName: node linkType: hard @@ -15003,7 +15871,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.4.0, ws@npm:^7.4.5": +"ws@npm:^7.4.5, ws@npm:^7.5.1": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: @@ -15121,16 +15989,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^13.1.2": - version: 13.1.2 - resolution: "yargs-parser@npm:13.1.2" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b - languageName: node - linkType: hard - "yargs-parser@npm:^18.1.2": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" @@ -15182,24 +16040,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^13.2.4": - version: 13.3.2 - resolution: "yargs@npm:13.3.2" - dependencies: - cliui: ^5.0.0 - find-up: ^3.0.0 - get-caller-file: ^2.0.1 - require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^3.0.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^13.1.2 - checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 - languageName: node - linkType: hard - "yargs@npm:^15.3.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" @@ -15258,19 +16098,22 @@ __metadata: languageName: node linkType: hard -"zustand@npm:^4.0.0": - version: 4.3.8 - resolution: "zustand@npm:4.3.8" +"zustand@npm:^4.3.1": + version: 4.4.1 + resolution: "zustand@npm:4.4.1" dependencies: use-sync-external-store: 1.2.0 peerDependencies: + "@types/react": ">=16.8" immer: ">=9.0" react: ">=16.8" peerDependenciesMeta: + "@types/react": + optional: true immer: optional: true react: optional: true - checksum: 24db6bf063ce1fc8b2ee238f13211a88f43236541a716e5f6f706f613c671a45332465f9ed06d694f8c353da3d24c53ea668e5712a86aceda9ad74f6c433e8c0 + checksum: 80acd0fbf633782996642802c8692bbb80ae5c80a8dff4c501b88250acd5ccd468fbc6398bdce198475a25e3839c91385b81da921274f33ffb5c2d08c3eab400 languageName: node linkType: hard