mirror of
https://github.com/getwax/wax.git
synced 2026-01-09 15:18:02 -05:00
SafeAnonAadhaarPlugin test files
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
73
packages/plugins/src/safe/utils/anonAadhaar/AnonAadhaar.sol
Normal file
73
packages/plugins/src/safe/utils/anonAadhaar/AnonAadhaar.sol
Normal 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;
|
||||
}
|
||||
}
|
||||
283
packages/plugins/src/safe/utils/anonAadhaar/Verifier.sol
Normal file
283
packages/plugins/src/safe/utils/anonAadhaar/Verifier.sol
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
287
packages/plugins/test/e2e/SafeAnonAadhaarPlugin.test.ts
Normal file
287
packages/plugins/test/e2e/SafeAnonAadhaarPlugin.test.ts
Normal 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);
|
||||
// });
|
||||
});
|
||||
3
packages/plugins/test/e2e/utils/assets/dataInput.json
Normal file
3
packages/plugins/test/e2e/utils/assets/dataInput.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"testQRData": "8259163575998395410294216884136380576185817320339145460288951755287582961380611852552428987321584902318624273479337130653734982789439199350807739714406680256506601030028361685736660257517232716829232450159251789263870750283214820475102793105777087762238893090228084052270739203426767272062178826235941508196284529472654271516164224874687419158221021213944829682919423174703783469927383220474654008065915029614141226522064062660593170425792840873655513538373377850112144063189928583588899889878172757870400281696669604010659786496608127700010264443115263361656744433002559396889060190428705316366290450741550935385486607346514118464415324976934593027192262025619948063647667007927187736245772179085671658409804311603784752615097922989017361163561315974008304022542448394278143245816470881130080719485003834016131185071765229491892891069788319670287394271744730364788949609836924781874523936880888005883165757273872375006288978183466996520618718348187182821516617721340861010989807614756396013627238651856164981477576514065364628430139194213240602981419233621531616776712580234318576148789862972873366521755587675635811636464535551028275057950562020714225333126426609311459495088802145911084644641596208432517247324679678535859879970296810837735288916946197174410518342751033634782712968162882714769666441813893046220965525694847349131353986974388432968669605721975441870936552792275255624723251162192468002453471184713983574359601113515796454264270501379717344206777921353459767049560942843350534472442799601294637063232419543855742825887931841338302499933012059977947394755335155868283405337181095220998277373266658634859632929226320059674299759100792654417315629048732480315019941928105082550091217622422743467170706956093632228513797781797454779203616427853022505097310749994766657051986303478622173767936568165644251615127773430128638507677775244195799780291921828512257290767451475181728141544788756907393883042588060697683541401090581157249784874529424005078918452607589129440476242749110421616270676359722523229311894327359615548588038186027827017569331332262329182564217789843145105509621002324556840213928256545454178891208004109769624959566302976213521762873815749009289995208912424872527724417047936432945498377307452190302923489092664437908497749093491199476080757200233878726847198496754472664256996743796092233459542884818717466621372105594672115988382565552756801323160697003960485232732393383241422077506009076922303757067128564302338914230360252223406874457414109774901980252709597099278192874164252010830754720603092419792069707099362278082792090307065378744856387301364608460967253691290230861162587170799141457093188189022390589265654613500974699477990974878105678883229707694455342266695530373994049224098435972125150350136428446936271698977517627416435999970351222450833295217051468307037908262231982382247410542334757724852032521780157518474618653527191342825230455100778913195115477763082159513429761573752871477695723697689470263993132596482716347199834315782099668846081963760553679915994617396376870314998926788197388410764535427795200340714967872713095483294486407886767431404892448155562283436571050452251042117926586451385682519188252281397"
|
||||
}
|
||||
23
packages/plugins/test/e2e/utils/assets/testCertificate.pem
Normal file
23
packages/plugins/test/e2e/utils/assets/testCertificate.pem
Normal 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-----
|
||||
83
packages/plugins/test/e2e/utils/computeNullifier.ts
Normal file
83
packages/plugins/test/e2e/utils/computeNullifier.ts
Normal 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;
|
||||
}
|
||||
@@ -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
|
||||
);
|
||||
};
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
@@ -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==
|
||||
|
||||
Reference in New Issue
Block a user