SafeAnonAadhaarPlugin test files

This commit is contained in:
Porco
2024-04-15 18:08:37 +04:00
parent 62709ca572
commit 40eb6b9c5e
13 changed files with 1417 additions and 209 deletions

View File

@@ -10,20 +10,25 @@
"lint": "eslint . --ext js,jsx,ts,tsx --report-unused-disable-directives --max-warnings 0"
},
"dependencies": {
"@getwax/circuits": "../zkp"
"@getwax/circuits": "../zkp",
"circomlibjs": "0.1.1"
},
"devDependencies": {
"@account-abstraction/contracts": "^0.6.0",
"@account-abstraction/utils": "^0.6.0",
"@anon-aadhaar/contracts": "^2.0.2",
"@anon-aadhaar/core": "^2.0.2",
"@nomicfoundation/hardhat-chai-matchers": "^2.0.0",
"@nomicfoundation/hardhat-ethers": "^3.0.0",
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
"@nomicfoundation/hardhat-toolbox": "^3.0.0",
"@nomicfoundation/hardhat-verify": "^1.0.0",
"@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers",
"@thehubbleproject/bls": "^0.5.1",
"@typechain/ethers-v6": "^0.4.0",
"@typechain/hardhat": "^8.0.0",
"@types/chai": "^4.2.0",
"@types/circomlibjs": "^0.1.6",
"@types/mocha": ">=9.1.0",
"@types/node": ">=16.0.0",
"@typescript-eslint/eslint-plugin": ">=6.0.0",

View File

@@ -5,16 +5,7 @@ pragma abicoder v2;
import {Safe4337Base} from "./utils/Safe4337Base.sol";
import {IEntryPoint, UserOperation} from "account-abstraction/contracts/interfaces/IEntryPoint.sol";
import {UserOperation} from "account-abstraction/contracts/interfaces/IEntryPoint.sol";
interface IAnonAadhaar {
function verifyAnonAadhaarProof(
uint identityNullifier,
uint userNullifier,
uint timestamp,
uint signal,
uint[8] memory groth16Proof
) external view returns (bool);
}
import {IAnonAadhaar} from "./utils/anonAadhaar/interfaces/IAnonAadhaar.sol";
interface ISafe {
function enableModule(address module) external;
@@ -39,8 +30,8 @@ contract SafeAnonAadhaarPlugin is Safe4337Base {
address internal constant _SENTINEL_MODULES = address(0x1);
address public anonAadhaarAddr; // external contract managed by AnonAadhaar. it has verifyAnonAadhaarProof() method
uint public userDataHash; // the hash of unique and private user data extracted from Aadhaar QR code
address public immutable anonAadhaarAddr; // external contract managed by AnonAadhaar. it has verifyAnonAadhaarProof() method
uint public immutable userDataHash; // the hash of unique and private user data extracted from Aadhaar QR code
mapping(uint => bool) public signalNullifiers;
event OWNER_UPDATED(
@@ -113,30 +104,34 @@ contract SafeAnonAadhaarPlugin is Safe4337Base {
function _validateSignature(
UserOperation calldata userOp,
bytes32 userOpHash
) internal override returns (uint256 validationData) {
) internal view override returns (uint256 validationData) {
(
uint identityNullifier,
uint nullifierSeed,
uint timestamp,
uint signal,
uint[4] memory revealArray,
uint[8] memory groth16Proof
) = abi.decode(userOp.signature, (uint, uint, uint, uint[8]));
// see if the proof is fresh enough
require(isLessThan3HoursAgo(timestamp), "INVALID_TIMESTAMP");
) = abi.decode(userOp.signature, (uint, uint, uint, uint[4], uint[8]));
// check the signal hasn't already been nullified
require(!signalNullifiers[signal], "DUPLICATED_NULLIFIER");
// WIP: can't be access due to delegate-call from Safe
// require(!signalNullifiers[signal], "DUPLICATED_NULLIFIER");
// make sure userOpHash == signal
require(uint(userOpHash) == signal, "INVALID_SIGNAL");
// see if the proof is fresh enough
// commented-out for the sake of local test w/ old proof
// require(isLessThan3HoursAgo(timestamp), "INVALID_TIMESTAMP");
// verify proof throuugh AnonAadhaar and AnonAadhaarGroth16Verifier contracts
if (
!IAnonAadhaar(anonAadhaarAddr).verifyAnonAadhaarProof(
identityNullifier,
nullifierSeed,
userDataHash,
timestamp,
signal,
revealArray,
groth16Proof
)
) {
@@ -144,7 +139,7 @@ contract SafeAnonAadhaarPlugin is Safe4337Base {
}
// store nullifier
signalNullifiers[signal] = true;
// signalNullifiers[signal] = true;
return 0;
}
}

View File

@@ -0,0 +1,73 @@
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.19;
import "./interfaces/IAnonAadhaarGroth16Verifier.sol";
import "./interfaces/IAnonAadhaar.sol";
contract AnonAadhaar is IAnonAadhaar {
address public verifier;
uint256 public storedPublicKeyHash;
constructor(address _verifier, uint256 _pubkeyHash) {
verifier = _verifier;
storedPublicKeyHash = _pubkeyHash;
}
/// @dev Verifies that the public key received is corresponding with the one stored in the contract.
/// @param _receivedpubkeyHash: Public key received.
/// @return Verified bool
function verifyPublicKeyHash(
uint256 _receivedpubkeyHash
) private view returns (bool) {
return storedPublicKeyHash == _receivedpubkeyHash;
}
/// @dev Verifies the AnonAadhaar proof received.
/// @param nullifier: Nullifier for the users Aadhaar.
/// @param timestamp: Timestamp of when the QR code was signed.
/// @param signal: Signal committed while genereting the proof.
/// @param revealArray: Array of the values used as input for the proof generation (equal to [0, 0, 0, 0] if no field reveal were asked).
/// @param groth16Proof: SNARK Groth16 proof.
/// @return Verified bool
function verifyAnonAadhaarProof(
uint nullifierSeed,
uint nullifier,
uint timestamp,
uint signal,
uint[4] memory revealArray,
uint[8] memory groth16Proof
) public view returns (bool) {
uint signalHash = _hash(signal);
return
IAnonAadhaarGroth16Verifier(verifier).verifyProof(
[groth16Proof[0], groth16Proof[1]],
[
[groth16Proof[2], groth16Proof[3]],
[groth16Proof[4], groth16Proof[5]]
],
[groth16Proof[6], groth16Proof[7]],
[
storedPublicKeyHash,
nullifier,
timestamp,
// revealAgeAbove18
revealArray[0],
// revealGender
revealArray[1],
// revealPincode
revealArray[2],
// revealState
revealArray[3],
nullifierSeed,
signalHash
]
);
}
/// @dev Creates a keccak256 hash of a message compatible with the SNARK scalar modulus.
/// @param message: Message to be hashed.
/// @return Message digest.
function _hash(uint256 message) private pure returns (uint256) {
return uint256(keccak256(abi.encodePacked(message))) >> 8;
}
}

View File

@@ -0,0 +1,283 @@
// SPDX-License-Identifier: GPL-3.0
/*
Copyright 2021 0KIMS association.
This file is generated with [snarkJS](https://github.com/iden3/snarkjs).
snarkJS is a free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
snarkJS is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with snarkJS. If not, see <https://www.gnu.org/licenses/>.
*/
pragma solidity >=0.7.0 <0.9.0;
contract Verifier {
// Scalar field size
uint256 constant r =
21888242871839275222246405745257275088548364400416034343698204186575808495617;
// Base field size
uint256 constant q =
21888242871839275222246405745257275088696311157297823662689037894645226208583;
// Verification Key data
uint256 constant alphax =
20491192805390485299153009773594534940189261866228447918068658471970481763042;
uint256 constant alphay =
9383485363053290200918347156157836566562967994039712273449902621266178545958;
uint256 constant betax1 =
4252822878758300859123897981450591353533073413197771768651442665752259397132;
uint256 constant betax2 =
6375614351688725206403948262868962793625744043794305715222011528459656738731;
uint256 constant betay1 =
21847035105528745403288232691147584728191162732299865338377159692350059136679;
uint256 constant betay2 =
10505242626370262277552901082094356697409835680220590971873171140371331206856;
uint256 constant gammax1 =
11559732032986387107991004021392285783925812861821192530917403151452391805634;
uint256 constant gammax2 =
10857046999023057135944570762232829481370756359578518086990519993285655852781;
uint256 constant gammay1 =
4082367875863433681332203403145435568316851327593401208105741076214120093531;
uint256 constant gammay2 =
8495653923123431417604973247489272438418190587263600148770280649306958101930;
uint256 constant deltax1 =
6071654364864117822716107678715164059368627655003446090945989955304467149837;
uint256 constant deltax2 =
13072340564387245197081358962854142189492579581726328392485837679318594883337;
uint256 constant deltay1 =
16129185200821936946192616352115510872942769319488962175576366786927733342036;
uint256 constant deltay2 =
9836457315723936304363664004692049268022671903565158357714875289404248646887;
uint256 constant IC0x =
433034494523434914838102899254531846355204811401746992363532148649453851856;
uint256 constant IC0y =
16185574754751233049810707218299416895262406359332203380500058501402789092067;
uint256 constant IC1x =
21179290673531710816687977342442120864089027091423249719403961326728385126112;
uint256 constant IC1y =
21685817308918906303962846527488982719733648919047127372368322998248408686255;
uint256 constant IC2x =
16100345601521557134194855549484898410417807824858064135652678289345593201927;
uint256 constant IC2y =
15869267152111393688788798630241758050473907203620223106987984095328251916473;
uint256 constant IC3x =
3661100149498521668411736359067392242407918494756591190087645099587667381975;
uint256 constant IC3y =
5532193562576932112972421444049102557989670390519012070371880238868149535842;
uint256 constant IC4x =
15814298253537154024860920042546391625869188476066246152054757278826188069206;
uint256 constant IC4y =
329319601839229691290147591339045066663286618419843056627123245234969319813;
uint256 constant IC5x =
13122061734022923252145656969204117801566730463244754086040826478704381808829;
uint256 constant IC5y =
5051423751245794332768923801879261853063836733804734167893836203571890589014;
uint256 constant IC6x =
5695352610426489934721399411472928171685138239743965011184726148703568464482;
uint256 constant IC6y =
19017397729221116094927376031010535791774099897418232523304761570408659474050;
uint256 constant IC7x =
20257142077231484125759557782723901546054059679085015952389946335748432164034;
uint256 constant IC7y =
19824425651126428710541555737047577915043071440220796465355399011013568905190;
uint256 constant IC8x =
14323907968731727282177352381162840302516308415708544090376415098456091244895;
uint256 constant IC8y =
15548900963703170140527630250333660897322677891626101360609254760914596318310;
uint256 constant IC9x =
8644550155122380458782935101189632949180134684837399409015079657415766761673;
uint256 constant IC9y =
8313064741271336560028609756676039614638525915857937834013902691432501510836;
// Memory data
uint16 constant pVk = 0;
uint16 constant pPairing = 128;
uint16 constant pLastMem = 896;
function verifyProof(
uint[2] calldata _pA,
uint[2][2] calldata _pB,
uint[2] calldata _pC,
uint[9] calldata _pubSignals
) public view returns (bool) {
assembly {
function checkField(v) {
if iszero(lt(v, q)) {
mstore(0, 0)
return(0, 0x20)
}
}
// G1 function to multiply a G1 value(x,y) to value in an address
function g1_mulAccC(pR, x, y, s) {
let success
let mIn := mload(0x40)
mstore(mIn, x)
mstore(add(mIn, 32), y)
mstore(add(mIn, 64), s)
// success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)
success := staticcall(not(0), 7, mIn, 96, mIn, 64)
if iszero(success) {
mstore(0, 0)
return(0, 0x20)
}
mstore(add(mIn, 64), mload(pR))
mstore(add(mIn, 96), mload(add(pR, 32)))
// success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)
success := staticcall(not(0), 6, mIn, 128, pR, 64)
if iszero(success) {
mstore(0, 0)
return(0, 0x20)
}
}
function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {
let _pPairing := add(pMem, pPairing)
let _pVk := add(pMem, pVk)
mstore(_pVk, IC0x)
mstore(add(_pVk, 32), IC0y)
// Compute the linear combination vk_x
g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))
g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))
g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))
g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))
g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))
g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))
g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))
g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))
g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))
// -A
mstore(_pPairing, calldataload(pA))
mstore(
add(_pPairing, 32),
mod(sub(q, calldataload(add(pA, 32))), q)
)
// B
mstore(add(_pPairing, 64), calldataload(pB))
mstore(add(_pPairing, 96), calldataload(add(pB, 32)))
mstore(add(_pPairing, 128), calldataload(add(pB, 64)))
mstore(add(_pPairing, 160), calldataload(add(pB, 96)))
// alpha1
mstore(add(_pPairing, 192), alphax)
mstore(add(_pPairing, 224), alphay)
// beta2
mstore(add(_pPairing, 256), betax1)
mstore(add(_pPairing, 288), betax2)
mstore(add(_pPairing, 320), betay1)
mstore(add(_pPairing, 352), betay2)
// vk_x
mstore(add(_pPairing, 384), mload(add(pMem, pVk)))
mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))
// gamma2
mstore(add(_pPairing, 448), gammax1)
mstore(add(_pPairing, 480), gammax2)
mstore(add(_pPairing, 512), gammay1)
mstore(add(_pPairing, 544), gammay2)
// C
mstore(add(_pPairing, 576), calldataload(pC))
mstore(add(_pPairing, 608), calldataload(add(pC, 32)))
// delta2
mstore(add(_pPairing, 640), deltax1)
mstore(add(_pPairing, 672), deltax2)
mstore(add(_pPairing, 704), deltay1)
mstore(add(_pPairing, 736), deltay2)
// let success := staticcall(
// sub(gas(), 2000),
// 8,
// _pPairing,
// 768,
// _pPairing,
// 0x20
// )
let success := staticcall(
// sub(gas(), 2000),
// 100000,
not(0),
8,
_pPairing,
768,
_pPairing,
0x20
)
isOk := and(success, mload(_pPairing))
}
let pMem := mload(0x40)
mstore(0x40, add(pMem, pLastMem))
// Validate that all evaluations ∈ F
checkField(calldataload(add(_pubSignals, 0)))
checkField(calldataload(add(_pubSignals, 32)))
checkField(calldataload(add(_pubSignals, 64)))
checkField(calldataload(add(_pubSignals, 96)))
checkField(calldataload(add(_pubSignals, 128)))
checkField(calldataload(add(_pubSignals, 160)))
checkField(calldataload(add(_pubSignals, 192)))
checkField(calldataload(add(_pubSignals, 224)))
checkField(calldataload(add(_pubSignals, 256)))
checkField(calldataload(add(_pubSignals, 288)))
// Validate all evaluations
let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)
mstore(0, isValid)
return(0, 0x20)
}
}
}

View File

@@ -0,0 +1,13 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.19;
interface IAnonAadhaar {
function verifyAnonAadhaarProof(
uint nullifierSeed,
uint nullifier,
uint timestamp,
uint signal,
uint[4] memory revealArray,
uint[8] memory groth16Proof
) external view returns (bool);
}

View File

@@ -0,0 +1,11 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.19;
interface IAnonAadhaarGroth16Verifier {
function verifyProof(
uint[2] calldata _pA,
uint[2][2] calldata _pB,
uint[2] calldata _pC,
uint[9] calldata publicInputs
) external view returns (bool);
}

View File

@@ -0,0 +1,287 @@
/* eslint-disable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/comma-dangle */
/* eslint-disable prettier/prettier */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import { expect } from "chai";
import {
BytesLike,
JsonRpcProvider,
NonceManager,
Signer,
ethers,
} from "ethers";
import DeterministicDeployer from "../../lib-ts/deterministic-deployer/DeterministicDeployer";
import {
SafeAnonAadhaarFactory__factory,
SafeAnonAadhaarPlugin__factory,
Verifier__factory,
AnonAadhaar__factory,
Safe,
} from "../../typechain-types";
import receiptOf from "./utils/receiptOf";
import { setupTests } from "./utils/setupTests";
import {
createAnonAadhaarOperation,
sendUserOpWithAnonAadhaarSig,
} from "./utils/createUserOp";
import {
InitArgs,
init,
generateArgs,
prove,
verify,
artifactUrls,
packGroth16Proof,
ArtifactsOrigin,
} from "@anon-aadhaar/core";
import { testQRData } from "./utils/assets/dataInput.json";
import fs from "fs";
import { copmuteUserNullifier } from "./utils/computeNullifier";
import { getUserOpHash } from "@account-abstraction/utils";
export const testPublicKeyHash =
"15134874015316324267425466444584014077184337590635665158241104437045239495873";
const oneEther = ethers.parseEther("1");
// what is nullifier seed: https://anon-aadhaar-documentation.vercel.app/docs/nullifiers
// using wallet address makes sense...?
const nullifierSeed = 1234;
describe("SafeAnonAadhaarPlugin", () => {
let bundlerProvider: JsonRpcProvider;
let provider: JsonRpcProvider;
let admin: NonceManager;
let owner: Signer;
let entryPointAddress: string;
let safeSingleton: Safe;
let deployer: DeterministicDeployer;
let certificate: string;
let anonAadhaarAddress: string;
before(async () => {
const setup = await setupTests();
({
provider,
bundlerProvider,
admin,
owner,
entryPointAddress,
deployer,
safeSingleton,
} = setup);
console.log("admin: ", await admin.getAddress());
console.log("owner: ", await owner.getAddress());
console.log("entryPointAddress: ", entryPointAddress);
console.log("safeSingleton: ", await safeSingleton.getAddress());
const signer = await provider.getSigner();
const anonAadhaarVerifier = await new Verifier__factory(signer).deploy();
console.log(
"anonAadhaarVerifier: ",
await anonAadhaarVerifier.getAddress()
);
const anonAadhaar = await new AnonAadhaar__factory(signer).deploy(
await anonAadhaarVerifier.getAddress(),
BigInt(testPublicKeyHash).toString()
);
anonAadhaarAddress = await anonAadhaar.getAddress();
console.log("anonAadhaarAddress: ", anonAadhaarAddress);
// load test certificate
const certificateDirName = __dirname + "/utils/assets";
certificate = fs
.readFileSync(certificateDirName + "/testCertificate.pem")
.toString();
const anonAadhaarInitArgs: InitArgs = {
wasmURL: artifactUrls.v2.wasm,
zkeyURL: artifactUrls.v2.zkey,
vkeyURL: artifactUrls.v2.vk,
artifactsOrigin: ArtifactsOrigin.server,
};
await init(anonAadhaarInitArgs);
});
it("should pass the ERC4337 validation", async () => {
const safeAnonAadhaarFactory = await deployer.connectOrDeploy(
SafeAnonAadhaarFactory__factory,
[]
);
// get user_data_hash
const userDataHash = await copmuteUserNullifier(nullifierSeed, testQRData);
console.log("userDataHash: ", userDataHash);
const createArgs = [
safeSingleton,
entryPointAddress,
await owner.getAddress(),
0,
anonAadhaarAddress,
userDataHash,
] satisfies Parameters<typeof safeAnonAadhaarFactory.create.staticCall>;
const accountAddress = await safeAnonAadhaarFactory.create.staticCall(
...createArgs
);
console.log("accountAddress: ", accountAddress);
await receiptOf(safeAnonAadhaarFactory.create(...createArgs));
const safeAnonAadhaarPlugin = SafeAnonAadhaarPlugin__factory.connect(
accountAddress,
owner
);
// Native tokens for the pre-fund
await receiptOf(
admin.sendTransaction({
to: accountAddress,
value: ethers.parseEther("10"),
})
);
const recipient = ethers.Wallet.createRandom();
const transferAmount = ethers.parseEther("1");
// Construct userOp
const userOpCallData = safeAnonAadhaarPlugin.interface.encodeFunctionData(
"execTransaction",
[recipient.address, transferAmount, "0x00"]
);
console.log("userOpCallData: ", userOpCallData);
// get userOp
const unsignedUserOperation = await createAnonAadhaarOperation(
provider,
accountAddress,
userOpCallData,
entryPointAddress
);
// get userOpHash
const userOpHash = getUserOpHash(
unsignedUserOperation,
entryPointAddress,
Number((await provider.getNetwork()).chainId)
);
console.log("userOpHash: ", userOpHash);
// prove
const args = await generateArgs({
qrData: testQRData,
certificateFile: certificate,
nullifierSeed: nullifierSeed,
signal: userOpHash, // user op hash
});
console.log("args: ", args);
const anonAadhaarCore = await prove(args);
const ret = await verify(anonAadhaarCore);
console.log("ret: ", ret);
const anonAadhaarProof = anonAadhaarCore.proof;
const packedGroth16Proof = packGroth16Proof(anonAadhaarProof.groth16Proof);
console.log("anonAadhaarCore: ", anonAadhaarCore);
console.log("nullifierSeed: ", anonAadhaarCore.proof.nullifierSeed);
console.log("nullifier: ", anonAadhaarProof.nullifier);
console.log("nullifier bg: ", BigInt(anonAadhaarProof.nullifier));
console.log("timestamp: ", Number(anonAadhaarCore?.proof.timestamp));
// encode signautre
const encoder = ethers.AbiCoder.defaultAbiCoder();
const userOpSignature = encoder.encode(
["uint", "uint", "uint", "uint[4]", "uint[8]"],
[
BigInt(nullifierSeed),
Number(anonAadhaarCore?.proof.timestamp),
BigInt(userOpHash), // insert userOpHash into signature
[
anonAadhaarProof.ageAbove18,
anonAadhaarProof.gender,
anonAadhaarProof.pincode,
anonAadhaarProof.state,
],
packedGroth16Proof,
]
);
console.log("userOpSignature: ", userOpSignature);
// send userOp
await sendUserOpWithAnonAadhaarSig(
bundlerProvider,
entryPointAddress,
unsignedUserOperation,
userOpSignature
);
console.log("userOp sent");
expect(await provider.getBalance(recipient.address)).to.equal(oneEther);
}).timeout(0);
// it("should not allow execTransaction from unrelated address", async () => {
// const {
// provider,
// admin,
// owner,
// entryPointAddress,
// deployer,
// safeSingleton,
// } = await setupTests();
// const safeAnonAadhaarFactory = await deployer.connectOrDeploy(
// SafeAnonAadhaarFactory__factory,
// []
// );
// const createArgs = [
// safeSingleton,
// entryPointAddress,
// await owner.getAddress(),
// 0,
// "0x", // _anonAadhaarAddr
// "0x", // _userDataHash
// ] satisfies Parameters<typeof safeAnonAadhaarFactory.create.staticCall>;
// const accountAddress = await safeAnonAadhaarFactory.create.staticCall(
// ...createArgs
// );
// await receiptOf(safeAnonAadhaarFactory.create(...createArgs));
// const unrelatedWallet = ethers.Wallet.createRandom(provider);
// await receiptOf(
// admin.sendTransaction({
// to: unrelatedWallet.address,
// value: 100n * oneEther,
// })
// );
// const account = SafeAnonAadhaarPlugin__factory.connect(
// accountAddress,
// unrelatedWallet
// );
// const recipient = ethers.Wallet.createRandom(provider);
// await expect(
// receiptOf(account.execTransaction(recipient.address, oneEther, "0x"))
// ).to.eventually.rejected;
// await expect(provider.getBalance(recipient)).to.eventually.equal(0n);
// });
});

View File

@@ -0,0 +1,3 @@
{
"testQRData": "8259163575998395410294216884136380576185817320339145460288951755287582961380611852552428987321584902318624273479337130653734982789439199350807739714406680256506601030028361685736660257517232716829232450159251789263870750283214820475102793105777087762238893090228084052270739203426767272062178826235941508196284529472654271516164224874687419158221021213944829682919423174703783469927383220474654008065915029614141226522064062660593170425792840873655513538373377850112144063189928583588899889878172757870400281696669604010659786496608127700010264443115263361656744433002559396889060190428705316366290450741550935385486607346514118464415324976934593027192262025619948063647667007927187736245772179085671658409804311603784752615097922989017361163561315974008304022542448394278143245816470881130080719485003834016131185071765229491892891069788319670287394271744730364788949609836924781874523936880888005883165757273872375006288978183466996520618718348187182821516617721340861010989807614756396013627238651856164981477576514065364628430139194213240602981419233621531616776712580234318576148789862972873366521755587675635811636464535551028275057950562020714225333126426609311459495088802145911084644641596208432517247324679678535859879970296810837735288916946197174410518342751033634782712968162882714769666441813893046220965525694847349131353986974388432968669605721975441870936552792275255624723251162192468002453471184713983574359601113515796454264270501379717344206777921353459767049560942843350534472442799601294637063232419543855742825887931841338302499933012059977947394755335155868283405337181095220998277373266658634859632929226320059674299759100792654417315629048732480315019941928105082550091217622422743467170706956093632228513797781797454779203616427853022505097310749994766657051986303478622173767936568165644251615127773430128638507677775244195799780291921828512257290767451475181728141544788756907393883042588060697683541401090581157249784874529424005078918452607589129440476242749110421616270676359722523229311894327359615548588038186027827017569331332262329182564217789843145105509621002324556840213928256545454178891208004109769624959566302976213521762873815749009289995208912424872527724417047936432945498377307452190302923489092664437908497749093491199476080757200233878726847198496754472664256996743796092233459542884818717466621372105594672115988382565552756801323160697003960485232732393383241422077506009076922303757067128564302338914230360252223406874457414109774901980252709597099278192874164252010830754720603092419792069707099362278082792090307065378744856387301364608460967253691290230861162587170799141457093188189022390589265654613500974699477990974878105678883229707694455342266695530373994049224098435972125150350136428446936271698977517627416435999970351222450833295217051468307037908262231982382247410542334757724852032521780157518474618653527191342825230455100778913195115477763082159513429761573752871477695723697689470263993132596482716347199834315782099668846081963760553679915994617396376870314998926788197388410764535427795200340714967872713095483294486407886767431404892448155562283436571050452251042117926586451385682519188252281397"
}

View File

@@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID6jCCAtKgAwIBAgIBATANBgkqhkiG9w0BAQsFADBpMRQwEgYDVQQDEwtleGFt
cGxlLm9yZzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRMwEQYDVQQH
EwpCbGFja3NidXJnMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MB4XDTI0
MDMwMTE2MTc0MFoXDTI1MDMwMTE2MTc0MFowaTEUMBIGA1UEAxMLZXhhbXBsZS5v
cmcxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhWaXJnaW5pYTETMBEGA1UEBxMKQmxh
Y2tzYnVyZzENMAsGA1UEChMEVGVzdDENMAsGA1UECxMEVGVzdDCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAJXoH3UGWVzCYq3c/d012AQFWyrfRtxxnFa1
ju4ZmZXvoaMlRxBiCseAHpdvROO+RU2w8ZDj99TjWYlyEXNE3lL894JvhJSIqVmn
s9Iett0DRRZi6og+7u/eiJoUmbmkf5UExfCWwmK5bSPRl1AzLZ6X62FB0mHel5lN
TEFjypy+PgdyIbRCU9z4FglCi2g1HuPptg0rNR/apu6MKKhFI5+X3nzA/l0UTkdI
E/tD7Fg/gbTuMowiFnM0iY0hC6AXom7GiUDwXfIr2cyGu8OkNUOSNy1WYWd2m3Nb
oSyjWA+RnBvYunDEwqsKzysJvC+umB88ApWm4enySPUAcwlP+vECAwEAAaOBnDCB
mTAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIC9DA7BgNVHSUENDAyBggrBgEFBQcD
AQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwgwEQYJYIZI
AYb4QgEBBAQDAgD3MCwGA1UdEQQlMCOGG2h0dHA6Ly9leGFtcGxlLm9yZy93ZWJp
ZCNtZYcEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAjDnIK8R7ruSiJpdUeZ2ZxaGI
ewf020sAc0ENw6x3jaKKFINNLnMqEKLntZzIg7WbjnKLhtUhb/SLHP59mfT2OJVS
YMW7uRmnajfEd0MzfrXIUKBwCeWTCyP/bcdlJOT4u24ngFnkUyWaEKnqH3YuI8cw
BKWQ26Lq7ODq6e6Otxf0KOtWTeVSzlCL66MGBvQ36LF1g8PLEZ9hvvX06ieaE99W
HDK9/pGSuobx6Fi7ufzqymirT/GOuxslquB4mleCu4ArCg2qAVC2wDjQymgvq8FS
bVukYnC6XdwqYhvIuTPnEys4gGdeirY+UPGQeqxMrNm+ZpKPTS0NwzxHwlhutw==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,83 @@
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/comma-dangle */
/* eslint-disable @typescript-eslint/prefer-for-of */
/* eslint-disable prettier/prettier */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/naming-convention */
import {
convertBigIntToByteArray,
decompressByteArray,
extractPhoto,
} from "@anon-aadhaar/core";
import { buildPoseidon } from "circomlibjs";
export async function copmuteUserNullifier(
nullifierSeed: number,
qrData: string
): Promise<bigint> {
const QRDataBytes = convertBigIntToByteArray(BigInt(qrData));
console.log("QRDataBytes: ", QRDataBytes);
const QRDataDecode = decompressByteArray(QRDataBytes);
console.log("QRDataDecode: ", QRDataDecode);
const signedData = QRDataDecode.slice(0, QRDataDecode.length - 256);
console.log("signedData: ", signedData);
const { bytes: photoBytes } = extractPhoto(Array.from(signedData));
console.log("photoBytes: ", photoBytes);
const photoBytesPacked = padArrayWithZeros(
bytesToIntChunks(new Uint8Array(photoBytes), 31),
32
);
console.log("photoBytesPacked: ", photoBytesPacked);
const poseidon = await buildPoseidon();
const first16 = poseidon([...photoBytesPacked.slice(0, 16)]);
console.log("first16: ", first16);
const last16 = poseidon([...photoBytesPacked.slice(16, 32)]);
console.log("last16: ", last16);
const nullifier = poseidon([nullifierSeed, first16, last16]);
console.log("nullifier: ", nullifier);
console.log("nullifier str: ", nullifier.toString());
return BigInt(poseidon.F.toString(nullifier));
}
export function bytesToIntChunks(
bytes: Uint8Array,
maxBytesInField: number
): bigint[] {
const numChunks = Math.ceil(bytes.length / maxBytesInField);
const ints: bigint[] = new Array(numChunks).fill(BigInt(0));
for (let i = 0; i < numChunks; i++) {
let intSum = BigInt(0);
for (let j = 0; j < maxBytesInField; j++) {
const idx = maxBytesInField * i + j;
if (idx >= bytes.length) break; // Stop if we've processed all bytes
// Shift byte into position and add to current integer sum
intSum += BigInt(bytes[idx]) * BigInt(256) ** BigInt(j);
}
ints[i] = intSum;
}
return ints;
}
export function padArrayWithZeros(
bigIntArray: bigint[],
requiredLength: number
) {
const currentLength = bigIntArray.length;
const zerosToFill = requiredLength - currentLength;
if (zerosToFill > 0) {
return [...bigIntArray, ...Array(zerosToFill).fill(BigInt(0))];
}
return bigIntArray;
}

View File

@@ -1,4 +1,4 @@
import { ethers, getBytes, NonceManager, Signer } from "ethers";
import { BytesLike, ethers, getBytes, NonceManager, Signer } from "ethers";
import { AddressZero } from "@ethersproject/constants";
import { UserOperationStruct } from "@account-abstraction/contracts";
import { getUserOpHash } from "@account-abstraction/utils";
@@ -6,164 +6,214 @@ import { getUserOpHash } from "@account-abstraction/utils";
import { SafeProxyFactory } from "../../../typechain-types/lib/safe-contracts/contracts/proxies/SafeProxyFactory";
import { Safe } from "../../../typechain-types/lib/safe-contracts/contracts/Safe";
import {
EntryPoint__factory,
SafeBlsPlugin,
SafeWebAuthnPlugin,
EntryPoint__factory,
SafeBlsPlugin,
SafeWebAuthnPlugin,
} from "../../../typechain-types";
import receiptOf from "./receiptOf";
import { calculateProxyAddress } from "./calculateProxyAddress";
import { getGasEstimates } from "./getGasEstimates";
import { getFeeData, getGasEstimates } from "./getGasEstimates";
import sendUserOpAndWait from "./sendUserOpAndWait";
type Plugin = SafeBlsPlugin | SafeWebAuthnPlugin;
export const generateInitCodeAndAddress = async (
admin: NonceManager,
owner: NonceManager,
plugin: Plugin,
safeSingleton: Safe,
safeProxyFactory: SafeProxyFactory,
admin: NonceManager,
owner: NonceManager,
plugin: Plugin,
safeSingleton: Safe,
safeProxyFactory: SafeProxyFactory
) => {
const pluginAddress = await plugin.getAddress();
const singletonAddress = await safeSingleton.getAddress();
const factoryAddress = await safeProxyFactory.getAddress();
const pluginAddress = await plugin.getAddress();
const singletonAddress = await safeSingleton.getAddress();
const factoryAddress = await safeProxyFactory.getAddress();
const moduleInitializer = plugin.interface.encodeFunctionData("enableMyself");
const encodedInitializer = safeSingleton.interface.encodeFunctionData(
"setup",
[
[await owner.getAddress()],
1,
pluginAddress,
moduleInitializer,
pluginAddress,
AddressZero,
0,
AddressZero,
],
);
const moduleInitializer = plugin.interface.encodeFunctionData("enableMyself");
const encodedInitializer = safeSingleton.interface.encodeFunctionData(
"setup",
[
[await owner.getAddress()],
1,
pluginAddress,
moduleInitializer,
pluginAddress,
AddressZero,
0,
AddressZero,
]
);
const deployedAddress = await calculateProxyAddress(
safeProxyFactory,
await safeSingleton.getAddress(),
encodedInitializer,
73,
);
const deployedAddress = await calculateProxyAddress(
safeProxyFactory,
await safeSingleton.getAddress(),
encodedInitializer,
73
);
// Native tokens for the pre-fund
await receiptOf(
admin.sendTransaction({
to: deployedAddress,
value: ethers.parseEther("10"),
}),
);
// Native tokens for the pre-fund
await receiptOf(
admin.sendTransaction({
to: deployedAddress,
value: ethers.parseEther("10"),
})
);
// The initCode contains 20 bytes of the factory address and the rest is the
// calldata to be forwarded
const initCode = ethers.concat([
factoryAddress,
safeProxyFactory.interface.encodeFunctionData("createProxyWithNonce", [
singletonAddress,
encodedInitializer,
73,
]),
]);
// The initCode contains 20 bytes of the factory address and the rest is the
// calldata to be forwarded
const initCode = ethers.concat([
factoryAddress,
safeProxyFactory.interface.encodeFunctionData("createProxyWithNonce", [
singletonAddress,
encodedInitializer,
73,
]),
]);
return { initCode, deployedAddress };
return { initCode, deployedAddress };
};
export const createUserOperation = async (
provider: ethers.JsonRpcProvider,
bundlerProvider: ethers.JsonRpcProvider,
accountAddress: string,
initCode: string,
userOpCallData: string,
entryPointAddress: string,
dummySignature: string,
provider: ethers.JsonRpcProvider,
bundlerProvider: ethers.JsonRpcProvider,
accountAddress: string,
initCode: string,
userOpCallData: string,
entryPointAddress: string,
dummySignature: string
) => {
const entryPoint = EntryPoint__factory.connect(
entryPointAddress,
await provider.getSigner(),
);
const nonce = await entryPoint.getNonce(accountAddress, "0x00");
const nonceHex = "0x0" + nonce.toString();
const entryPoint = EntryPoint__factory.connect(
entryPointAddress,
await provider.getSigner()
);
const nonce = await entryPoint.getNonce(accountAddress, "0x00");
const nonceHex = "0x0" + nonce.toString();
const userOperationWithoutGasFields = {
sender: accountAddress,
nonce: nonceHex,
initCode,
callData: userOpCallData,
callGasLimit: "0x00",
paymasterAndData: "0x",
signature: dummySignature,
};
const userOperationWithoutGasFields = {
sender: accountAddress,
nonce: nonceHex,
initCode,
callData: userOpCallData,
callGasLimit: "0x00",
paymasterAndData: "0x",
signature: dummySignature,
};
const {
callGasLimit,
verificationGasLimit,
preVerificationGas,
maxFeePerGas,
maxPriorityFeePerGas,
} = await getGasEstimates(
provider,
bundlerProvider,
userOperationWithoutGasFields,
entryPointAddress,
);
const {
callGasLimit,
verificationGasLimit,
preVerificationGas,
maxFeePerGas,
maxPriorityFeePerGas,
} = await getGasEstimates(
provider,
bundlerProvider,
userOperationWithoutGasFields,
entryPointAddress
);
const unsignedUserOperation = {
sender: accountAddress,
nonce: nonceHex,
initCode,
callData: userOpCallData,
callGasLimit,
verificationGasLimit,
preVerificationGas,
maxFeePerGas,
maxPriorityFeePerGas,
paymasterAndData: "0x",
signature: dummySignature,
} satisfies UserOperationStruct;
const unsignedUserOperation = {
sender: accountAddress,
nonce: nonceHex,
initCode,
callData: userOpCallData,
callGasLimit,
verificationGasLimit,
preVerificationGas,
maxFeePerGas,
maxPriorityFeePerGas,
paymasterAndData: "0x",
signature: dummySignature,
} satisfies UserOperationStruct;
return await ethers.resolveProperties(unsignedUserOperation);
return await ethers.resolveProperties(unsignedUserOperation);
};
export const createAndSendUserOpWithEcdsaSig = async (
provider: ethers.JsonRpcProvider,
bundlerProvider: ethers.JsonRpcProvider,
owner: Signer,
accountAddress: string,
initCode: string,
userOpCallData: string,
entryPointAddress: string,
dummySignature: string,
provider: ethers.JsonRpcProvider,
bundlerProvider: ethers.JsonRpcProvider,
owner: Signer,
accountAddress: string,
initCode: string,
userOpCallData: string,
entryPointAddress: string,
dummySignature: string
) => {
const unsignedUserOperation = await createUserOperation(
provider,
bundlerProvider,
accountAddress,
initCode,
userOpCallData,
entryPointAddress,
dummySignature,
);
const unsignedUserOperation = await createUserOperation(
provider,
bundlerProvider,
accountAddress,
initCode,
userOpCallData,
entryPointAddress,
dummySignature
);
const userOpHash = getUserOpHash(
unsignedUserOperation,
entryPointAddress,
Number((await provider.getNetwork()).chainId),
);
const userOpHash = getUserOpHash(
unsignedUserOperation,
entryPointAddress,
Number((await provider.getNetwork()).chainId)
);
const userOpSignature = await owner.signMessage(getBytes(userOpHash));
const userOpSignature = await owner.signMessage(getBytes(userOpHash));
const userOperation = {
...unsignedUserOperation,
signature: userOpSignature,
};
const userOperation = {
...unsignedUserOperation,
signature: userOpSignature,
};
return await sendUserOpAndWait(
userOperation,
entryPointAddress,
bundlerProvider,
);
return await sendUserOpAndWait(
userOperation,
entryPointAddress,
bundlerProvider
);
};
export const createAnonAadhaarOperation = async (
provider: ethers.JsonRpcProvider,
accountAddress: string,
userOpCallData: string,
entryPointAddress: string
) => {
const entryPoint = EntryPoint__factory.connect(
entryPointAddress,
await provider.getSigner()
);
const nonce = await entryPoint.getNonce(accountAddress, "0x00");
const nonceHex = "0x0" + nonce.toString();
const { maxFeePerGas, maxPriorityFeePerGas } = await getFeeData(provider);
const unsignedUserOperation = {
sender: accountAddress,
nonce: nonceHex,
initCode: "0x",
callData: userOpCallData,
callGasLimit: ethers.toBeHex(150000n),
verificationGasLimit: ethers.toBeHex(1000000n),
preVerificationGas: ethers.toBeHex(200000n),
maxFeePerGas,
maxPriorityFeePerGas,
paymasterAndData: "0x",
signature: "0x",
} satisfies UserOperationStruct;
return await ethers.resolveProperties(unsignedUserOperation);
};
export const sendUserOpWithAnonAadhaarSig = async (
bundlerProvider: ethers.JsonRpcProvider,
entryPointAddress: string,
unsignedUserOperation: UserOperationStruct,
userOpSignature: BytesLike
) => {
const userOperation = {
...unsignedUserOperation,
signature: userOpSignature,
};
return await sendUserOpAndWait(
userOperation,
entryPointAddress,
bundlerProvider
);
};

View File

@@ -1,49 +1,49 @@
import { ethers } from "ethers";
export const getGasEstimates = async (
provider: ethers.JsonRpcProvider,
bundlerProvider: ethers.JsonRpcProvider,
userOperationWithoutGasFields: any,
entryPointAddress: string,
provider: ethers.JsonRpcProvider,
bundlerProvider: ethers.JsonRpcProvider,
userOperationWithoutGasFields: any,
entryPointAddress: string
) => {
const gasEstimate = (await bundlerProvider.send(
"eth_estimateUserOperationGas",
[userOperationWithoutGasFields, entryPointAddress],
)) as {
verificationGasLimit: string;
preVerificationGas: string;
callGasLimit: string;
};
const gasEstimate = (await bundlerProvider.send(
"eth_estimateUserOperationGas",
[userOperationWithoutGasFields, entryPointAddress]
)) as {
verificationGasLimit: string;
preVerificationGas: string;
callGasLimit: string;
};
const safeVerificationGasLimit =
BigInt(gasEstimate.verificationGasLimit) +
BigInt(gasEstimate.verificationGasLimit); // + 100% TODO: (merge-ok) why do we have to increase the limit so much for all tests to pass?
const safeVerificationGasLimit =
BigInt(gasEstimate.verificationGasLimit) +
BigInt(gasEstimate.verificationGasLimit); // + 100% TODO: (merge-ok) why do we have to increase the limit so much for all tests to pass?
const safePreVerificationGas =
BigInt(gasEstimate.preVerificationGas) +
BigInt(gasEstimate.preVerificationGas) / 10n; // + 10%
const safePreVerificationGas =
BigInt(gasEstimate.preVerificationGas) +
BigInt(gasEstimate.preVerificationGas) / 10n; // + 10%
const { maxFeePerGas, maxPriorityFeePerGas } = await getFeeData(provider);
const { maxFeePerGas, maxPriorityFeePerGas } = await getFeeData(provider);
return {
callGasLimit: gasEstimate.callGasLimit,
verificationGasLimit: ethers.toBeHex(safeVerificationGasLimit),
preVerificationGas: ethers.toBeHex(safePreVerificationGas),
maxFeePerGas,
maxPriorityFeePerGas,
};
return {
callGasLimit: gasEstimate.callGasLimit,
verificationGasLimit: ethers.toBeHex(safeVerificationGasLimit),
preVerificationGas: ethers.toBeHex(safePreVerificationGas),
maxFeePerGas,
maxPriorityFeePerGas,
};
};
async function getFeeData(provider: ethers.Provider) {
const feeData = await provider.getFeeData();
if (!feeData.maxFeePerGas || !feeData.maxPriorityFeePerGas) {
throw new Error(
"maxFeePerGas or maxPriorityFeePerGas is null or undefined",
);
}
export async function getFeeData(provider: ethers.Provider) {
const feeData = await provider.getFeeData();
if (!feeData.maxFeePerGas || !feeData.maxPriorityFeePerGas) {
throw new Error(
"maxFeePerGas or maxPriorityFeePerGas is null or undefined"
);
}
const maxFeePerGas = "0x" + feeData.maxFeePerGas.toString();
const maxPriorityFeePerGas = "0x" + feeData.maxPriorityFeePerGas.toString();
const maxFeePerGas = "0x" + feeData.maxFeePerGas.toString();
const maxPriorityFeePerGas = "0x" + feeData.maxPriorityFeePerGas.toString();
return { maxFeePerGas, maxPriorityFeePerGas };
return { maxFeePerGas, maxPriorityFeePerGas };
}

View File

@@ -29,10 +29,37 @@
resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7"
integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==
"@adraffy/ens-normalize@1.9.2":
version "1.9.2"
resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz#60111a5d9db45b2e5cbb6231b0bb8d97e8659316"
integrity sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==
"@adraffy/ens-normalize@1.10.1":
version "1.10.1"
resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069"
integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==
"@anon-aadhaar/contracts@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@anon-aadhaar/contracts/-/contracts-2.0.2.tgz#d89bb3eaadad70b6c5c998013445b6825e999760"
integrity sha512-JrIFflrbNV0ngYIJJFOMfvryMLk3Oz/Vo/e3xF7VLXyY+LlV39AikF4I3W01G+OnuPB2+rI/xuNP+y2Mx83zJg==
"@anon-aadhaar/core@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@anon-aadhaar/core/-/core-2.0.2.tgz#03da5b3307d9d12173dd967cdbf74646c2969251"
integrity sha512-RAhV3Pr47AeGfqmqoLjBR5kJt+uUZQaL9ozMNRrhHexkcmRrUeaGcjAqPfHnH9v1Va50EL4IxMK4m4Phq2NAbQ==
dependencies:
"@pcd/pcd-types" "^0.10.0"
"@pcd/tsconfig" "^0.6.0"
"@types/node-forge" "^1.3.8"
"@types/snarkjs" "^0.7.6"
"@zk-email/helpers" "^3.1.3"
buffer "^6.0.3"
json-bigint "^1.0.0"
localforage "^1.10.0"
pako "^2.1.0"
react "^18.2.0"
react-dom "^18.2.0"
snarkjs "^0.7.3"
styled-components "^6.0.0-rc.1"
uuid "^9.0.0"
valid-url "^1.0.9"
web-worker "1.2.0"
"@babel/code-frame@7.12.11":
version "7.12.11"
@@ -98,6 +125,23 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
"@emotion/is-prop-valid@1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc"
integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==
dependencies:
"@emotion/memoize" "^0.8.1"
"@emotion/memoize@^0.8.1":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17"
integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
"@emotion/unitless@0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db"
integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
@@ -579,11 +623,6 @@
dependencies:
"@noble/hashes" "1.3.2"
"@noble/hashes@1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183"
integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==
"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12"
@@ -865,11 +904,26 @@
"@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1"
"@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1"
"@nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers":
version "0.4.1"
resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.4.1.tgz#dd70b0cc413ed99e98994047b383a004cf1c14f8"
integrity sha512-RM6JUcD0dOCjemxnKLtK7XQQI7NWn+LxF5qicGYax0PtWayEUXAewOb4WIHZ/yearhj+s2t6dL0MnHyLTENwJg==
"@openzeppelin/contracts@^4.7.3":
version "4.9.3"
resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.3.tgz#00d7a8cf35a475b160b3f0293a6403c511099364"
integrity sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==
"@pcd/pcd-types@^0.10.0":
version "0.10.0"
resolved "https://registry.yarnpkg.com/@pcd/pcd-types/-/pcd-types-0.10.0.tgz#2076b37fe3d95fd2545e321a37c7b3a24bfd70a5"
integrity sha512-QoBlHYVhNA8nbjpl8hmwHLkV78XolFCC7hdpt0U+STY7dfQO+aAegVYbx18yHo4G76nFj9xRUSfjVFV8ZzxIlQ==
"@pcd/tsconfig@^0.6.0":
version "0.6.2"
resolved "https://registry.yarnpkg.com/@pcd/tsconfig/-/tsconfig-0.6.2.tgz#64d3b279eb69f40c58d218b628828b9c9e51ce33"
integrity sha512-sdva2fJW+fB1a4xQ63oNhDwSJFrNn1Rc5TyJpuSeRH48U7YAQOYkYiKJz1jlRW6Ak0QJaSDgVhBmzsIE2DmNIg==
"@pkgr/utils@^2.3.1":
version "2.4.2"
resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc"
@@ -1055,6 +1109,11 @@
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b"
integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==
"@types/circomlibjs@^0.1.6":
version "0.1.6"
resolved "https://registry.yarnpkg.com/@types/circomlibjs/-/circomlibjs-0.1.6.tgz#dba1b9cc68ae4f75da045b8b14c50f3444b31d7f"
integrity sha512-yF174bPDaiKgejlZzCSqKwZaqXhlxMcVEHrAtstFohwP05OjtvHXOdxO6HQeTg8WwIdgMg7MJb1WyWZdUCGlPQ==
"@types/concat-stream@^1.6.0":
version "1.6.1"
resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74"
@@ -1102,6 +1161,13 @@
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b"
integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==
"@types/node-forge@^1.3.8":
version "1.3.11"
resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da"
integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==
dependencies:
"@types/node" "*"
"@types/node@*", "@types/node@>=16.0.0":
version "20.4.5"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69"
@@ -1164,6 +1230,16 @@
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564"
integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==
"@types/snarkjs@^0.7.6":
version "0.7.8"
resolved "https://registry.yarnpkg.com/@types/snarkjs/-/snarkjs-0.7.8.tgz#8fd47457247efd4a6dabcdd71ec1986532155480"
integrity sha512-x37Jsv1vx6I6RMJdfvYEmDUOLYgzYMecwlk13gniDOcN20xLVe9hy9DlQxWeCPirqpDY/jwugQSqCi2RxehU3g==
"@types/stylis@4.2.0":
version "4.2.0"
resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.0.tgz#199a3f473f0c3a6f6e4e1b17cdbc967f274bdc6b"
integrity sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==
"@typescript-eslint/eslint-plugin@>=6.0.0":
version "6.7.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.0.tgz#ed2a38867190f8a688af85ad7c8a74670b8b3675"
@@ -1249,6 +1325,23 @@
"@typescript-eslint/types" "6.7.0"
eslint-visitor-keys "^3.4.1"
"@zk-email/helpers@^3.1.3":
version "3.2.3"
resolved "https://registry.yarnpkg.com/@zk-email/helpers/-/helpers-3.2.3.tgz#a31aa06f6fc97938cc6ae766233febb1f477298e"
integrity sha512-jhHqRqnCkwg6a2k3OkNRUd99sO7zkG/H/Pd/HL4PHhtS17Lqby/btOu0W3y7AX7wWn13xhNdonjuMEsISYRpQg==
dependencies:
addressparser "^1.0.1"
atob "^2.1.2"
circomlibjs "^0.1.7"
libmime "^5.2.1"
localforage "^1.10.0"
lodash "^4.17.21"
node-forge "^1.3.1"
pako "^2.1.0"
pki "^1.1.0"
psl "^1.9.0"
snarkjs "https://github.com/sampritipanda/snarkjs.git#fef81fc51d17a734637555c6edbd585ecda02d9e"
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -1297,6 +1390,11 @@ address@^1.0.1:
resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
addressparser@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746"
integrity sha512-aQX7AISOMM7HFE0iZ3+YnD07oIeJqWGVnJ+ZIKaBZAk03ftmVYVqsGas/rbXKR21n4D/hKCSHypvcyOkds/xzg==
adm-zip@^0.4.16:
version "0.4.16"
resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365"
@@ -1586,6 +1684,11 @@ at-least-node@^1.0.0:
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
atob@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
available-typed-arrays@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
@@ -1656,6 +1759,11 @@ bigint-crypto-utils@^3.0.23:
resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77"
integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==
bignumber.js@^9.0.0:
version "9.1.2"
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c"
integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -1848,6 +1956,11 @@ camelcase@^6.0.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
camelize@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"
integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
case@^1.6.3:
version "1.6.3"
resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9"
@@ -1965,6 +2078,13 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
inherits "^2.0.1"
safe-buffer "^5.0.1"
circom_runtime@0.1.21:
version "0.1.21"
resolved "https://registry.yarnpkg.com/circom_runtime/-/circom_runtime-0.1.21.tgz#0ee93bb798b5afb8ecec30725ed14d94587a999b"
integrity sha512-qTkud630B/GK8y76hnOaaS1aNuF6prfV0dTrkeRsiJKnlP1ryQbP2FWLgDOPqn6aKyaPlam+Z+DTbBhkEzh8dA==
dependencies:
ffjavascript "0.2.56"
circom_runtime@0.1.24:
version "0.1.24"
resolved "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.24.tgz#60ca8a31c3675802fbab5a0bcdeb02556e510733"
@@ -1977,7 +2097,17 @@ circomlib@2.0.5:
resolved "https://registry.npmjs.org/circomlib/-/circomlib-2.0.5.tgz#183c703e53ed7d011811842dbeeeb9819f4cc1d6"
integrity sha512-O7NQ8OS+J4eshBuoy36z/TwQU0YHw8W3zxZcs4hVwpEll3e4hDm3mgkIPqItN8FDeLEKZFK3YeT/+k8TiLF3/A==
circomlibjs@0.1.7:
circomlibjs@0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/circomlibjs/-/circomlibjs-0.1.1.tgz#00085017f6fa00072a13a2092f643cfd12b11f6b"
integrity sha512-Bl7Mylf/VERdI5bRTIQ4hpi2EgbfIvEyJrn/MPh2pEqScbCkatX44RF8fuNGigoiQGdhItaIikgHKLTdlPPLPQ==
dependencies:
blake-hash "^2.0.0"
blake2b "^2.1.3"
ethers "^5.5.1"
ffjavascript "^0.2.45"
circomlibjs@0.1.7, circomlibjs@^0.1.7:
version "0.1.7"
resolved "https://registry.npmjs.org/circomlibjs/-/circomlibjs-0.1.7.tgz#9f5a7d9a23323744b11ee456b05b0cd81f48b554"
integrity sha512-GRAUoAlKAsiiTa+PA725G9RmEmJJRc8tRFxw/zKktUxlQISGznT4hH4ESvW8FNTsrGg/nNd06sGP/Wlx0LUHVg==
@@ -2179,6 +2309,25 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3:
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
css-color-keywords@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
css-to-react-native@3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32"
integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==
dependencies:
camelize "^1.0.0"
css-color-keywords "^1.0.0"
postcss-value-parser "^4.0.2"
csstype@3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@@ -2388,6 +2537,11 @@ encode-utf8@^1.0.2:
resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda"
integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==
encoding-japanese@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/encoding-japanese/-/encoding-japanese-2.0.0.tgz#fa0226e5469e7b5b69a04fea7d5481bd1fa56936"
integrity sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==
enquirer@^2.3.0, enquirer@^2.3.5:
version "2.4.1"
resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56"
@@ -3003,13 +3157,13 @@ ethers@^5.5.1, ethers@^5.5.3, ethers@^5.7.0, ethers@^5.7.1:
"@ethersproject/wordlists" "5.7.0"
ethers@^6.4.0:
version "6.6.7"
resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.6.7.tgz#9cf773bcbc0ca56d783d4774e9b73b4d1aff9962"
integrity sha512-1SdT3W5/IPAcx9l5/+9qKRYR/iqVIdNQIct18yeh+XvN+I4RK44mvOsAerMwJYCAwdQfsOgf3OkfozeuMInbtQ==
version "6.11.1"
resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af"
integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==
dependencies:
"@adraffy/ens-normalize" "1.9.2"
"@noble/hashes" "1.1.2"
"@noble/secp256k1" "1.7.1"
"@adraffy/ens-normalize" "1.10.1"
"@noble/curves" "1.2.0"
"@noble/hashes" "1.3.2"
"@types/node" "18.15.13"
aes-js "4.0.0-beta.5"
tslib "2.4.0"
@@ -3140,6 +3294,15 @@ fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
ffjavascript@0.2.56:
version "0.2.56"
resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.2.56.tgz#3509f98fcbd3e44ea93cd23519071b76d6eae433"
integrity sha512-em6G5Lrj7ucIqj4TYEgyoHs/j99Urwwqa4+YxEVY2hggnpRimVj+noX5pZQTxI1pvtiekZI4rG65JBf0xraXrg==
dependencies:
wasmbuilder "0.0.16"
wasmcurves "0.2.0"
web-worker "^1.2.0"
ffjavascript@0.2.60:
version "0.2.60"
resolved "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.60.tgz#4d8ae613d6bf4e98b3cc29ba10c626f5853854cf"
@@ -3149,6 +3312,15 @@ ffjavascript@0.2.60:
wasmcurves "0.2.2"
web-worker "^1.2.0"
ffjavascript@0.2.63:
version "0.2.63"
resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.2.63.tgz#0c1216a1f123dc9181df69e144473704d2f115eb"
integrity sha512-dBgdsfGks58b66JnUZeZpGxdMIDQ4QsD3VYlRJyFVrKQHb2kJy4R2gufx5oetrTxXPT+aEjg0dOvOLg1N0on4A==
dependencies:
wasmbuilder "0.0.16"
wasmcurves "0.2.2"
web-worker "1.2.0"
ffjavascript@^0.2.45, ffjavascript@^0.2.48:
version "0.2.62"
resolved "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.62.tgz#f508dfe662a70181598ec5eb8ce5127eb342f624"
@@ -3848,6 +4020,13 @@ iconv-lite@0.4.24:
dependencies:
safer-buffer ">= 2.1.2 < 3"
iconv-lite@0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@@ -3863,6 +4042,11 @@ ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
immediate@~3.0.5:
version "3.0.6"
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
immutable@^4.0.0-rc.12:
version "4.3.1"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.1.tgz#17988b356097ab0719e2f741d56f3ec6c317f9dc"
@@ -4178,7 +4362,7 @@ js-sha3@0.8.0, js-sha3@^0.8.0:
resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
js-tokens@^4.0.0:
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
@@ -4211,6 +4395,13 @@ jsbn@~0.1.0:
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
json-bigint@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1"
integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==
dependencies:
bignumber.js "^9.0.0"
json-buffer@3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
@@ -4360,6 +4551,40 @@ levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
libbase64@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-1.3.0.tgz#053314755a05d2e5f08bbfc48d0290e9322f4406"
integrity sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==
libmime@^5.2.1:
version "5.3.4"
resolved "https://registry.yarnpkg.com/libmime/-/libmime-5.3.4.tgz#e7ac598dab2d461a74890da79d726bd22e283c20"
integrity sha512-TsqPdercr6DHrnoQx1F0nS2Y4yPT+fWuOjEP2rqzvV77hMYWomTe/rpm0u9JORQ/FavEXybAGcBJsQbLr9+hjA==
dependencies:
encoding-japanese "2.0.0"
iconv-lite "0.6.3"
libbase64 "1.3.0"
libqp "2.1.0"
libqp@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/libqp/-/libqp-2.1.0.tgz#ce84bffd86b76029032093bd866d316e12a3d3f5"
integrity sha512-O6O6/fsG5jiUVbvdgT7YX3xY3uIadR6wEZ7+vy9u7PKHAlSEB6blvC1o5pHBjgsi95Uo0aiBBdkyFecj6jtb7A==
lie@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==
dependencies:
immediate "~3.0.5"
localforage@^1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4"
integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==
dependencies:
lie "3.1.1"
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -4433,6 +4658,13 @@ logplease@^1.2.15:
resolved "https://registry.npmjs.org/logplease/-/logplease-1.2.15.tgz#3da442e93751a5992cc19010a826b08d0293c48a"
integrity sha512-jLlHnlsPSJjpwUfcNyUxXCl33AYg2cHhIf9QhGL2T4iPT0XPB+xP1LRKFPgIg1M/sg9kAJvy94w9CzBNrfnstA==
loose-envify@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
loupe@^2.3.1:
version "2.3.6"
resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53"
@@ -4739,6 +4971,11 @@ nanoid@3.3.3:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
nanoid@^3.3.6:
version "3.3.7"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
napi-macros@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044"
@@ -4779,6 +5016,11 @@ node-environment-flags@1.0.6:
object.getownpropertydescriptors "^2.0.3"
semver "^5.7.0"
node-forge@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055"
@@ -5036,6 +5278,11 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
pako@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86"
integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==
parent-module@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -5119,6 +5366,25 @@ pify@^4.0.1:
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
pki@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/pki/-/pki-1.1.0.tgz#abd7c257816ceb2a0c0afef5642180227355d173"
integrity sha512-OzMMXAo8sI7X3+EW46eIfGfOnuM0d0Cef0iVp7UUCsh2VV7RvsUztLTc6xacBwgsz16Vp6qQuQA8Lep5bxeuOA==
postcss-value-parser@^4.0.2:
version "4.2.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@8.4.31:
version "8.4.31"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
dependencies:
nanoid "^3.3.6"
picocolors "^1.0.0"
source-map-js "^1.0.2"
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -5163,7 +5429,7 @@ promise@^8.0.0:
dependencies:
asap "~2.0.6"
psl@^1.1.28:
psl@^1.1.28, psl@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
@@ -5190,6 +5456,16 @@ queue-microtask@^1.2.2, queue-microtask@^1.2.3:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
r1csfile@0.0.41:
version "0.0.41"
resolved "https://registry.yarnpkg.com/r1csfile/-/r1csfile-0.0.41.tgz#e3d2709d36923156dd1fc2db9858987b30c92948"
integrity sha512-Q1WDF3u1vYeAwjHo4YuddkA8Aq0TulbKjmGm99+Atn13Lf5fTsMZBnBV9T741w8iSyPFG6Uh6sapQby77sREqA==
dependencies:
"@iden3/bigarray" "0.0.2"
"@iden3/binfileutils" "0.0.11"
fastfile "0.0.20"
ffjavascript "0.2.56"
r1csfile@0.0.47:
version "0.0.47"
resolved "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.47.tgz#ed95a0dc8e910e9c070253906f7a31bd8c5333c8"
@@ -5217,6 +5493,21 @@ raw-body@^2.4.1:
iconv-lite "0.4.24"
unpipe "1.0.0"
react-dom@^18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
dependencies:
loose-envify "^1.1.0"
scheduler "^0.23.0"
react@^18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
dependencies:
loose-envify "^1.1.0"
readable-stream@^2.2.2:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
@@ -5514,7 +5805,7 @@ safe-regex-test@^1.0.0:
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -5539,6 +5830,13 @@ sc-istanbul@^0.4.5:
which "^1.1.1"
wordwrap "^1.0.0"
scheduler@^0.23.0:
version "0.23.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
dependencies:
loose-envify "^1.1.0"
scrypt-js@2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16"
@@ -5627,6 +5925,11 @@ sha1@^1.1.1:
charenc ">= 0.0.1"
crypt ">= 0.0.1"
shallowequal@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -5692,6 +5995,38 @@ snarkjs@0.7.1:
logplease "^1.2.15"
r1csfile "0.0.47"
snarkjs@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/snarkjs/-/snarkjs-0.7.3.tgz#7f703d05b810235255f2d0a70d8a9b8b3ea916e5"
integrity sha512-cDLpWqdqEJSCQNc+cXYX1XTKdUZBtYEisuOsgmXf/HUsN5WmGN+FO7HfCS+cMQT1Nzbm1a9gAEpKH6KRtDtS1Q==
dependencies:
"@iden3/binfileutils" "0.0.11"
bfj "^7.0.2"
blake2b-wasm "^2.4.0"
circom_runtime "0.1.24"
ejs "^3.1.6"
fastfile "0.0.20"
ffjavascript "0.2.63"
js-sha3 "^0.8.0"
logplease "^1.2.15"
r1csfile "0.0.47"
"snarkjs@https://github.com/sampritipanda/snarkjs.git#fef81fc51d17a734637555c6edbd585ecda02d9e":
version "0.5.0"
resolved "https://github.com/sampritipanda/snarkjs.git#fef81fc51d17a734637555c6edbd585ecda02d9e"
dependencies:
"@iden3/binfileutils" "0.0.11"
bfj "^7.0.2"
blake2b-wasm "^2.4.0"
circom_runtime "0.1.21"
ejs "^3.1.6"
fastfile "0.0.20"
ffjavascript "0.2.56"
js-sha3 "^0.8.0"
localforage "^1.10.0"
logplease "^1.2.15"
r1csfile "0.0.41"
solc@0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a"
@@ -5733,6 +6068,11 @@ solidity-coverage@^0.8.0:
shelljs "^0.8.3"
web3-utils "^1.3.6"
source-map-js@^1.0.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
source-map-support@^0.5.13:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
@@ -5954,6 +6294,26 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
styled-components@^6.0.0-rc.1:
version "6.1.8"
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.8.tgz#c109d36aeea52d8f049e12de2f3be39a6fc86201"
integrity sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==
dependencies:
"@emotion/is-prop-valid" "1.2.1"
"@emotion/unitless" "0.8.0"
"@types/stylis" "4.2.0"
css-to-react-native "3.2.0"
csstype "3.1.2"
postcss "8.4.31"
shallowequal "1.1.0"
stylis "4.3.1"
tslib "2.5.0"
stylis@4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.1.tgz#ed8a9ebf9f76fe1e12d462f5cc3c4c980b23a7eb"
integrity sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==
supports-color@6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
@@ -6152,6 +6512,11 @@ tslib@2.4.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
tslib@2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
tslib@^1.9.3:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
@@ -6377,6 +6742,11 @@ uuid@^8.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
uuid@^9.0.0:
version "9.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
v8-compile-cache-lib@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
@@ -6387,6 +6757,11 @@ v8-compile-cache@^2.0.3:
resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128"
integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==
valid-url@^1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==
verror@1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
@@ -6401,6 +6776,13 @@ wasmbuilder@0.0.16:
resolved "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz#f34c1f2c047d2f6e1065cbfec5603988f16d8549"
integrity sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==
wasmcurves@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/wasmcurves/-/wasmcurves-0.2.0.tgz#ccfc5a7d3778b6e0768b82a9336c80054f9bc0cf"
integrity sha512-3e2rbxdujOwaod657gxgmdhZNn+i1qKdHO3Y/bK+8E7bV8ttV/fu5FO4/WLBACF375cK0QDLOP+65Na63qYuWA==
dependencies:
wasmbuilder "0.0.16"
wasmcurves@0.2.2:
version "0.2.2"
resolved "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.2.2.tgz#ca444f6a6f6e2a5cbe6629d98ff478a62b4ccb2b"
@@ -6408,7 +6790,7 @@ wasmcurves@0.2.2:
dependencies:
wasmbuilder "0.0.16"
web-worker@^1.2.0:
web-worker@1.2.0, web-worker@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da"
integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==