Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d99c5644c9 | ||
|
|
1dc597a175 | ||
|
|
b55bf7fd4d | ||
|
|
496e18ecab | ||
|
|
d4fb23a7af | ||
|
|
411667f5c7 | ||
|
|
87709224a3 | ||
|
|
0e20c6884f | ||
|
|
e1e893004d | ||
|
|
2e6bef51d4 | ||
|
|
9e7b2900cf | ||
|
|
cd02f49173 | ||
|
|
a8787bd1fc | ||
|
|
2c6f7846d7 | ||
|
|
8c359ad594 | ||
|
|
7ccb14d362 | ||
|
|
7e60446268 |
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
|
Before Width: | Height: | Size: 315 KiB After Width: | Height: | Size: 322 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 267 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 215 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 124 KiB |
@@ -67,7 +67,7 @@ const config: Config = {
|
||||
announcementBar: {
|
||||
id: "semaphore-v4-beta",
|
||||
content:
|
||||
'<b>New Semaphore V4 <a href="https://ceremony.pse.dev/projects/Semaphore%20Binary%20Merkle%20Root%20Fix" target="_blank">Trusted Setup Ceremony</a> is open for contributions until August 20!</b>',
|
||||
'<b><a href="https://github.com/semaphore-protocol/semaphore/releases/tag/v4.0.0" target="_blank">Semaphore V4</a> is out 🎉 <a href="/getting-started">Try it out</a> and let us know if you have any feedback on <a href="https://semaphore.pse.dev/telegram" target="_blank">Telegram</a> or <a href="https://github.com/orgs/semaphore-protocol/discussions" target="_blank">Github</a>!</b>',
|
||||
backgroundColor: "#dde6fc",
|
||||
textColor: "#000000"
|
||||
},
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"@docusaurus/core": "3.5.2",
|
||||
"@docusaurus/preset-classic": "3.5.2",
|
||||
"@mdx-js/react": "^3.0.0",
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"@svgr/webpack": "^5.5.0",
|
||||
"clsx": "^1.2.1",
|
||||
"docusaurus-plugin-sass": "^0.2.5",
|
||||
|
||||
@@ -42,13 +42,13 @@ Chip: Apple M2 Pro
|
||||
|
||||
Memory (RAM): 16 GB
|
||||
|
||||
Operating System: macOS Sequoia version 15.0.1
|
||||
Operating System: macOS Sequoia version 15.6.1
|
||||
|
||||
**Software environment**
|
||||
|
||||
Node.js version: 20.18.0
|
||||
Node.js version: 23.10.0
|
||||
|
||||
Browser: Google Chrome Version 130.0.6723.92 (Official Build) (arm64)
|
||||
Browser: Google Chrome Version 139.0.7258.156 (Official Build) (arm64)
|
||||
|
||||
## Running the benchmarks
|
||||
|
||||
@@ -60,6 +60,8 @@ GitHub repository to the run Node.js, browser and Circom benchmarks: https://git
|
||||
|
||||
GitHub repository to run the Solidity benchmarks: https://github.com/semaphore-protocol/semaphore
|
||||
|
||||
Semaphore V3 benchmarks were obtained using the code from the latest v3 Git tag (`v3.15.2`), with the Solidity optimizer enabled.
|
||||
|
||||
## Node.js benchmarks
|
||||
|
||||
### Identities
|
||||
@@ -98,6 +100,8 @@ Main functions used in the browser.
|
||||
|
||||
## Circuit benchmarks
|
||||
|
||||
Tree depth = 20
|
||||
|
||||
### Semaphore V3
|
||||
|
||||
<img
|
||||
@@ -119,7 +123,7 @@ style={{ width: '300px', height: 'auto' }}
|
||||
<img
|
||||
src={require('../../assets/img-benchmarks/contracts/contract-benchmarks.png').default}
|
||||
alt="Contract Benchmarks"
|
||||
style={{ width: '590px', height: 'auto' }}
|
||||
style={{ width: '560px', height: 'auto' }}
|
||||
/>
|
||||
|
||||
### Semaphore V3 gas report
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
# Trusted Setup
|
||||
|
||||
We are excited to announce the upcoming Multi-Party Computation (MPC) Phase 2 Trusted Setup ceremony for the Semaphore V4 circuit, following a [bug fix in the BinaryMerkleRoot circuit](https://pse.dev/blog/under-constrained-bug-in-binary-merkle-root-circuit-fixed-in-v200) in ZK-Kit. This is crucial for establishing a robust security foundation for the cryptographic protocol.
|
||||
|
||||
The ceremony will take place from **July 23** to **August 20**. If all goes to plan, finalization should take place on **August 22** with the announcement of the final beacon on **August 21**.
|
||||
|
||||
## Securing Semaphore V4
|
||||
|
||||
To contribute to this ceremony, you will just need your browser!
|
||||
|
||||
1. Visit [ceremony.pse.dev](https://ceremony.pse.dev/projects/Semaphore%20Binary%20Merkle%20Root%20Fix).
|
||||
2. Login and associate your **Github** account.
|
||||
3. Hit the `contribute` button and wait for your turn.
|
||||
|
||||
Please note: You will find your contribution certificate on your GitHub gists - and, if all goes wrong or you feel lost, there are instructions on site or post a message on [Semaphore Telegram](https://semaphore.pse.dev/telegram) chat or [PSE discord](https://discord.com/invite/sF5CT5rzrR).
|
||||
|
||||
## What You Need to Know About the Ceremony
|
||||
|
||||
### Your Role
|
||||
|
||||
Many zero-knowledge proof systems, including those based on the Groth16 scheme, require this layer of randomness, often referred to as "toxic waste” which must remain unknown to anyone to maintain the integrity of the zero-knowledge proof system. Trusted setups rely on a 1 of N honest participant assumption. As long as just one participant actually discards their “toxic waste”, the proof system will be secure. You can be that one participant by providing your unique entropy with your contribution, making the ceremony unpredictable and unbiased, safeguarding the entire process against potential vulnerabilities.
|
||||
|
||||
### Why It Matters
|
||||
|
||||
Trusted setups are crucial as they generate a set of parameters necessary to initiate SNARK-based systems. Through a series of computations performed by various participants. This sequence involves downloading previous contributions, adding generated randomness, and uploading the results of your contribution. These contributions are then integrated into the final artifacts crucial for proof generation/verification.
|
||||
|
||||
### Semaphore Circuit
|
||||
|
||||
The [Semaphore circuit](https://github.com/semaphore-protocol/semaphore/blob/main/packages/circuits/src/semaphore.circom) centered around the creation of the _Semaphore identity_ and _identity commitment_, includes verification processes, and facilitates the generation of the _nullifier_. We are going to support `MAX_DEPTH` from 1 to 32 - therefore you will have to contribute to 32 variants of the same circuit. Since the constraints will range from 2k to less than 10k with very small artifacts size (< 6mb x contribution), the waiting and contribution time shouldn't be much!
|
||||
|
||||
### Transparency and Fairness
|
||||
|
||||
We are committed to transparency on ceremony setup, execution, finalization, and later verification. Our primary goal is to **engage as many contributors as possible** to ensure the circuit is **secure** and **production-ready**. To this end, the ceremony is designed to _maximize contributor inclusion_, monitor & troubleshoot whenever is needed, _lower the entry barriers_, _making contributiong as effortless as possible_. A key step towards achieving these goals is running the ceremony w/ [p0tion](https://github.com/privacy-scaling-explorations/p0tion): an in-house developed, open-source, battle-tested tool that is fully equipped to meet our needs.
|
||||
|
||||
### Ceremony Settings
|
||||
|
||||
To protect the ceremony from sybils, in order to contribute you must have a GitHub account such that you have: 1 public repository, at least 1 follower, following at least 5 other accounts and, your account is at least 1 month old. While to protect from fake contributors or people hanging due to connection/machine resources, we are going to set a 10 minutes time-window on contributions (+ 1 hour verification) - after this amount of time, you will be kicked out and will have to wait **10 minutes** before you can contribute again.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- If you have been idle longer than expected, it may be that the current contributor has been blocked for some reason. Do not worry, the maximum wait in this case is one hour, after which you will be able to continue contributing.
|
||||
|
||||
### Learn more about Trusted Setups
|
||||
|
||||
- [How Do Trusted Setups Work? - Vitalik](https://vitalik.eth.limo/general/2022/03/14/trustedsetup.html)
|
||||
- [p0tion FAQs](https://p0tion.super.site/faqs#block-cebca23ebb514c2ea096ad44d4833356)
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
## Networks
|
||||
|
||||
You can access any subgraph supported by Semaphore with the following URL: `https://api.studio.thegraph.com/query/14377/semaphore-<network-name>/v4.2.0`.
|
||||
You can access any subgraph supported by Semaphore with the following URL: `https://api.studio.thegraph.com/query/14377/semaphore-<network-name>/v4.5.0`.
|
||||
|
||||
Supported networks:
|
||||
|
||||
@@ -59,6 +59,8 @@ Supported networks:
|
||||
- `linea-sepolia`
|
||||
- `linea`
|
||||
- `scroll-sepolia`
|
||||
- `gnosis-chiado`
|
||||
- `gnosis`
|
||||
|
||||
## 🛠 Install
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"@emotion/react": "^11.11.1",
|
||||
"@emotion/styled": "^11.11.0",
|
||||
"framer-motion": "^10.16.4",
|
||||
"next": "13.5.5",
|
||||
"next": "14.2.35",
|
||||
"react": "^18",
|
||||
"react-code-blocks": "^0.1.4",
|
||||
"react-dom": "^18"
|
||||
|
||||
@@ -32,20 +32,19 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
||||
<body suppressHydrationWarning>
|
||||
<Providers>
|
||||
<Banner>
|
||||
Semaphore V4
|
||||
<Link
|
||||
_hover={{
|
||||
textDecoration: "underline",
|
||||
textDecorationColor: "primary.600"
|
||||
}}
|
||||
href="https://ceremony.pse.dev/projects/Semaphore%20Binary%20Merkle%20Root%20Fix"
|
||||
href="https://github.com/semaphore-protocol/semaphore/releases/tag/v4.0.0"
|
||||
ml="1"
|
||||
isExternal
|
||||
color="primary.500"
|
||||
>
|
||||
<b>Trusted Setup Ceremony</b>
|
||||
<b>Semaphore V4</b>
|
||||
</Link>{" "}
|
||||
is open for contributions until <b>August 20</b>!
|
||||
has been released 🚀
|
||||
</Banner>
|
||||
<Navbar />
|
||||
<Container maxW="1440px" px={{ base: "5", md: "10" }}>
|
||||
|
||||
@@ -11,12 +11,6 @@
|
||||
"description": "Semaphore team will deliver an in-person talk.",
|
||||
"link": "https://zuberlin.city/"
|
||||
},
|
||||
{
|
||||
"name": "Trusted Setup Ceremony",
|
||||
"date": "Jul 23 - Aug 6, 2025",
|
||||
"description": "The Semaphore team will perform the Phase 2 MPC Trusted Setup Ceremony to secure V4 circuit variants from 1 to 32 tree depths, following a bug fix in the BinaryMerkleRoot circuit in ZK-Kit.",
|
||||
"link": "https://docs.semaphore.pse.dev/trusted-setup"
|
||||
},
|
||||
{
|
||||
"name": "Devconnect",
|
||||
"date": "Nov 17-22, 2025",
|
||||
|
||||
@@ -586,5 +586,26 @@
|
||||
"github": "https://github.com/jimmychu0807/semaphore-msa-modules",
|
||||
"website": "https://semaphore-msa-modules.jimmychu0807.hk"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Poll.cc",
|
||||
"categories": ["Voting", "Social"],
|
||||
"tagline": "Public online voting on social and political issues. Semaphore is used for anonymous voting while proving you're a real human verified by KYC.",
|
||||
"pse": false,
|
||||
"icon": "",
|
||||
"links": {
|
||||
"website": "https://poll.cc"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "BringID",
|
||||
"tagline": "Privacy-preserving proof of humanity using verifiable Internet credentials",
|
||||
"categories": ["Identity", "Authenticity", "Trust"],
|
||||
"pse": false,
|
||||
"icon": "",
|
||||
"links": {
|
||||
"website": "https://www.bringid.org",
|
||||
"github": "https://github.com/BringID/whitepaper"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"done": true
|
||||
},
|
||||
{
|
||||
"name": "Support more Testnets/Mainnets",
|
||||
"name": "Support more Testnets & Mainnets",
|
||||
"done": true
|
||||
},
|
||||
{
|
||||
@@ -37,10 +37,14 @@
|
||||
},
|
||||
{
|
||||
"name": "Semaphore Noir Implementation",
|
||||
"done": false
|
||||
"done": true
|
||||
},
|
||||
{
|
||||
"name": "Scaling Semaphore with PIR",
|
||||
"done": true
|
||||
},
|
||||
{
|
||||
"name": "Maintenance",
|
||||
"done": false
|
||||
}
|
||||
]
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This function takes an array and divides it into smaller arrays,
|
||||
* or "chunks", each containing a specified number of elements.
|
||||
* @param array The array to be split into chunks.
|
||||
* @param size The size of each chunk. The default size is 10.
|
||||
* @param size The size of each chunk. The default size is 15.
|
||||
* @returns An array containing smaller subarrays (chunks), each with a length defined by the size.
|
||||
*/
|
||||
export function chunkArray(array: any[], size = 15): any[] {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/circuits",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "Semaphore Circom circuits to generate zero-knowledge proofs.",
|
||||
"license": "MIT",
|
||||
"files": [
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/cli-template-contracts-foundry",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "Semaphore Foundry template.",
|
||||
"license": "Unlicense",
|
||||
"devDependencies": {
|
||||
"@semaphore-protocol/contracts": "4.13.0",
|
||||
"@semaphore-protocol/contracts": "4.14.0",
|
||||
"@zk-kit/lean-imt.sol": "2.0.1",
|
||||
"forge-std": "github:foundry-rs/forge-std#v1.9.4",
|
||||
"poseidon-solidity": "0.0.5",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/cli-template-contracts-hardhat",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "Semaphore Hardhat template.",
|
||||
"license": "Unlicense",
|
||||
"files": [
|
||||
@@ -42,9 +42,9 @@
|
||||
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
|
||||
"@nomicfoundation/hardhat-toolbox": "^4.0.0",
|
||||
"@nomicfoundation/hardhat-verify": "^2.0.0",
|
||||
"@semaphore-protocol/core": "4.13.0",
|
||||
"@semaphore-protocol/hardhat": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/core": "4.14.0",
|
||||
"@semaphore-protocol/hardhat": "4.14.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"@typechain/ethers-v6": "^0.5.0",
|
||||
"@typechain/hardhat": "^9.0.0",
|
||||
"@types/chai": "^4.2.0",
|
||||
@@ -72,7 +72,7 @@
|
||||
"typescript": "^5.3.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/contracts": "4.13.0"
|
||||
"@semaphore-protocol/contracts": "4.14.0"
|
||||
},
|
||||
"packageManager": "yarn@4.1.0"
|
||||
}
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
|
||||
"@nomicfoundation/hardhat-toolbox": "^4.0.0",
|
||||
"@nomicfoundation/hardhat-verify": "^2.0.0",
|
||||
"@semaphore-protocol/core": "4.13.0",
|
||||
"@semaphore-protocol/hardhat": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/core": "4.14.0",
|
||||
"@semaphore-protocol/hardhat": "4.14.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"@typechain/ethers-v6": "^0.5.0",
|
||||
"@typechain/hardhat": "^9.0.0",
|
||||
"@types/chai": "^4.2.0",
|
||||
@@ -50,7 +50,7 @@
|
||||
"typescript": "^5.3.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/contracts": "4.13.0"
|
||||
"@semaphore-protocol/contracts": "4.14.0"
|
||||
},
|
||||
"packageManager": "yarn@4.1.0"
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/core": "4.13.0",
|
||||
"@semaphore-protocol/data": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/core": "4.14.0",
|
||||
"@semaphore-protocol/data": "4.14.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"ethers": "^6.13.4",
|
||||
"next": "14.1.0",
|
||||
"next-pwa": "^5.6.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/cli-template-monorepo-ethers",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "Semaphore Hardhat + Next.js + SemaphoreEthers template.",
|
||||
"license": "Unlicense",
|
||||
"files": [
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
|
||||
"@nomicfoundation/hardhat-toolbox": "^4.0.0",
|
||||
"@nomicfoundation/hardhat-verify": "^2.0.0",
|
||||
"@semaphore-protocol/core": "4.13.0",
|
||||
"@semaphore-protocol/hardhat": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/core": "4.14.0",
|
||||
"@semaphore-protocol/hardhat": "4.14.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"@typechain/ethers-v6": "^0.5.0",
|
||||
"@typechain/hardhat": "^9.0.0",
|
||||
"@types/chai": "^4.2.0",
|
||||
@@ -50,7 +50,7 @@
|
||||
"typescript": "^5.3.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/contracts": "4.13.0"
|
||||
"@semaphore-protocol/contracts": "4.14.0"
|
||||
},
|
||||
"packageManager": "yarn@4.1.0"
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/core": "4.13.0",
|
||||
"@semaphore-protocol/data": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/core": "4.14.0",
|
||||
"@semaphore-protocol/data": "4.14.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"ethers": "^6.13.4",
|
||||
"next": "14.1.0",
|
||||
"next-pwa": "^5.6.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/cli-template-monorepo-subgraph",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "Semaphore Hardhat + Next.js + SemaphoreSubgraph template.",
|
||||
"license": "Unlicense",
|
||||
"files": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/cli",
|
||||
"type": "module",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "A command line tool to set up your Semaphore project and get group data.",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
@@ -41,8 +41,8 @@
|
||||
"rollup-plugin-cleanup": "^3.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/data": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/data": "4.14.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"axios": "^1.6.7",
|
||||
"boxen": "^7.1.1",
|
||||
"chalk": "^5.3.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/contracts",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "Semaphore contracts to manage groups and broadcast anonymous signals.",
|
||||
"license": "MIT",
|
||||
"files": [
|
||||
|
||||
@@ -72,6 +72,22 @@ const hardhatConfig: HardhatUserConfig = {
|
||||
apiURL: "https://api-sepolia.scrollscan.com/api",
|
||||
browserURL: "https://sepolia.scrollscan.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
network: "gnosis-chiado",
|
||||
chainId: 10200,
|
||||
urls: {
|
||||
apiURL: "https://gnosis-chiado.blockscout.com/api",
|
||||
browserURL: "https://gnosis-chiado.blockscout.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
network: "gnosis",
|
||||
chainId: 100,
|
||||
urls: {
|
||||
apiURL: "https://api.etherscan.io/v2/api?chainid=100",
|
||||
browserURL: "https://gnosisscan.io"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/core",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "Core library for the essential Semaphore features.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
@@ -42,8 +42,8 @@
|
||||
"access": "public"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/group": "4.13.0",
|
||||
"@semaphore-protocol/identity": "4.13.0",
|
||||
"@semaphore-protocol/proof": "4.13.0"
|
||||
"@semaphore-protocol/group": "4.14.0",
|
||||
"@semaphore-protocol/identity": "4.14.0",
|
||||
"@semaphore-protocol/proof": "4.14.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/data",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "A library for querying Semaphore smart contract.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
@@ -37,7 +37,7 @@
|
||||
"rollup-plugin-cleanup": "^3.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"@zk-kit/utils": "1.3.0",
|
||||
"axios": "1.6.6",
|
||||
"ethers": "6.13.4",
|
||||
|
||||
@@ -208,7 +208,7 @@ export default class SemaphoreEthers {
|
||||
|
||||
const membersAddedEvents = await getEvents(this._contract, "MembersAdded", [groupId], this._options.startBlock)
|
||||
|
||||
const membersAddedEventsMap = new Map<string, [string]>()
|
||||
const membersAddedEventsMap = new Map<string, string[]>()
|
||||
|
||||
for (const [, startIndex, identityCommitments] of membersAddedEvents) {
|
||||
membersAddedEventsMap.set(
|
||||
@@ -295,4 +295,156 @@ export default class SemaphoreEthers {
|
||||
|
||||
return this._contract.hasMember(groupId, member)
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens to the GroupCreated event.
|
||||
* @param callback Called with the groupId of the newly created group.
|
||||
*/
|
||||
onGroupCreated(callback: (groupId: string, event: any) => void): void {
|
||||
this._contract.on("GroupCreated", (groupId, event) => {
|
||||
callback(groupId.toString(), event)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all listeners for the GroupCreated event.
|
||||
* Stop receiving group creation notifications.
|
||||
*/
|
||||
offGropupCreated(): void {
|
||||
this._contract.removeAllListeners("GroupCreated")
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens to MemberAdded events.
|
||||
* @param callback Receives the groupId, identityCommitment and event metadata.
|
||||
*/
|
||||
onMemberAdded(
|
||||
callback: (groupId: string, identityCommitment: string, merkleTreeRoot: string, event: any) => void
|
||||
): void {
|
||||
this._contract.on("MemberAdded", (groupId, _index, identityCommitment, merkleTreeRoot, event) => {
|
||||
callback(groupId.toString(), identityCommitment.toString(), merkleTreeRoot.toString(), event)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all listeners for the MemberAdded event.
|
||||
* Stop tracking when new members are added.
|
||||
*/
|
||||
offMemberAdded(): void {
|
||||
this._contract.removeAllListeners("MemberAdded")
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens to MemberUpdated events.
|
||||
* @param callback Receives the groupId, old identityCommitment, new identityCommitment, and event metadata.
|
||||
*/
|
||||
onMemberUpdated(
|
||||
callback: (
|
||||
groupId: string,
|
||||
oldIdentityCommitment: string,
|
||||
newIdentityCommitment: string,
|
||||
merkleTreeRoot: string,
|
||||
event: any
|
||||
) => void
|
||||
): void {
|
||||
this._contract.on(
|
||||
"MemberUpdated",
|
||||
(groupId, _index, oldIdentityCommitment, newIdentityCommitment, merkleTreeRoot, event) => {
|
||||
callback(
|
||||
groupId.toString(),
|
||||
oldIdentityCommitment.toString(),
|
||||
newIdentityCommitment.toString(),
|
||||
merkleTreeRoot.toString(),
|
||||
event
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all listeners for the MemberUpdated event.
|
||||
* Stop receiving updates when members change their commitment.
|
||||
*/
|
||||
offMemberUpdated(): void {
|
||||
this._contract.removeAllListeners("MemberUpdated")
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens to MemberRemoved events.
|
||||
* @param callback Receives the groupId, identityCommitment and event metadata.
|
||||
*/
|
||||
onMemberRemoved(
|
||||
callback: (groupId: string, identityCommitment: string, merkleTreeRoot: string, event: any) => void
|
||||
): void {
|
||||
this._contract.on("MemberRemoved", (groupId, _index, identityCommitment, merkleTreeRoot, event) => {
|
||||
callback(groupId.toString(), identityCommitment.toString(), merkleTreeRoot.toString(), event)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all listeners for the MemberRemoved event.
|
||||
* Stop listening for member removals.
|
||||
*/
|
||||
offMemberRemoved(): void {
|
||||
this._contract.removeAllListeners("MemberRemoved")
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens to the ProofValidated event.
|
||||
* @param callback Called with proof parameters and event metadata.
|
||||
*/
|
||||
onProofValidated(
|
||||
callback: (proof: {
|
||||
groupId: string
|
||||
merkleTreeDepth: number
|
||||
merkleTreeRoot: string
|
||||
nullifier: string
|
||||
message: string
|
||||
scope: string
|
||||
points: string[]
|
||||
event: any
|
||||
}) => void
|
||||
): void {
|
||||
this._contract.on(
|
||||
"ProofValidated",
|
||||
(groupId, merkleTreeDepth, merkleTreeRoot, nullifier, message, scope, points, event) => {
|
||||
callback({
|
||||
groupId: groupId.toString(),
|
||||
merkleTreeDepth: Number(merkleTreeDepth),
|
||||
merkleTreeRoot: merkleTreeRoot.toString(),
|
||||
nullifier: nullifier.toString(),
|
||||
message: message.toString(),
|
||||
scope: scope.toString(),
|
||||
points: points.map((p: any) => p.toString()),
|
||||
event
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all listeners for the ProofValidated event.
|
||||
* Stop receiving proof validation notifications.
|
||||
*/
|
||||
offProofValidated(): void {
|
||||
this._contract.removeAllListeners("ProofValidated")
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens to the GroupAdminUpdated event.
|
||||
* @param callback Receives the groupId, old admin and new admin addresses and event metadata.
|
||||
*/
|
||||
onGroupAdminUpdated(callback: (groupId: string, oldAdmin: string, newAdmin: string, event: any) => void): void {
|
||||
this._contract.on("GroupAdminUpdated", (groupId, oldAdmin, newAdmin, event) => {
|
||||
callback(groupId.toString(), oldAdmin.toString(), newAdmin.toString(), event)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all listeners for the GroupAdminUpdated event.
|
||||
* Stop tracking when a group's admin is updated.
|
||||
*/
|
||||
offGroupAdminUpdated(): void {
|
||||
this._contract.removeAllListeners("GroupAdminUpdated")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,5 +12,5 @@ export default function getURL(supportedNetwork: SupportedNetwork): string {
|
||||
throw new TypeError(`Network '${supportedNetwork}' is not supported`)
|
||||
}
|
||||
|
||||
return `https://api.studio.thegraph.com/query/14377/semaphore-${supportedNetwork}/v4.3.0`
|
||||
return `https://api.studio.thegraph.com/query/14377/semaphore-${supportedNetwork}/v4.5.0`
|
||||
}
|
||||
|
||||
@@ -257,4 +257,140 @@ describe("SemaphoreEthers", () => {
|
||||
expect(isMember).toBeFalsy()
|
||||
})
|
||||
})
|
||||
|
||||
describe("Event listeners", () => {
|
||||
let mockOn: jest.Mock
|
||||
let mockRemove: jest.Mock
|
||||
|
||||
beforeEach(() => {
|
||||
mockOn = jest.fn()
|
||||
mockRemove = jest.fn()
|
||||
|
||||
ContractMocked.mockImplementation(
|
||||
() =>
|
||||
({
|
||||
on: mockOn,
|
||||
removeAllListeners: mockRemove
|
||||
}) as any
|
||||
)
|
||||
})
|
||||
|
||||
it("onGroupCreated should call the callback with groupId and event", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
const cb = jest.fn()
|
||||
|
||||
semaphore.onGroupCreated(cb)
|
||||
|
||||
const handler = mockOn.mock.calls.find(([e]) => e === "GroupCreated")![1]
|
||||
const fakeEvent = { blockNumber: 123 }
|
||||
handler("42", fakeEvent)
|
||||
|
||||
expect(cb).toHaveBeenCalledWith("42", fakeEvent)
|
||||
expect(mockOn).toHaveBeenCalledWith("GroupCreated", expect.any(Function))
|
||||
})
|
||||
|
||||
it("offGroupCreated should remove all listeners for GroupCreated", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
semaphore.offGropupCreated()
|
||||
expect(mockRemove).toHaveBeenCalledWith("GroupCreated")
|
||||
})
|
||||
|
||||
it("onMemberAdded should call callback with groupId, identityCommitment and event", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
const cb = jest.fn()
|
||||
|
||||
semaphore.onMemberAdded(cb)
|
||||
const handler = mockOn.mock.calls.find(([e]) => e === "MemberAdded")![1]
|
||||
const fakeEvent = { txHash: "0xabc" }
|
||||
|
||||
handler("group1", 0, "identity123", "root111", fakeEvent)
|
||||
|
||||
expect(cb).toHaveBeenCalledWith("group1", "identity123", "root111", fakeEvent)
|
||||
})
|
||||
|
||||
it("onMemberUpdated should call callback with groupId, old and new identity commitments", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
const cb = jest.fn()
|
||||
|
||||
semaphore.onMemberUpdated(cb)
|
||||
const handler = mockOn.mock.calls.find(([e]) => e === "MemberUpdated")![1]
|
||||
const fakeEvent = { blockNumber: 200 }
|
||||
|
||||
handler("groupX", 1, "old123", "new456", "root111", fakeEvent)
|
||||
|
||||
expect(cb).toHaveBeenCalledWith("groupX", "old123", "new456", "root111", fakeEvent)
|
||||
})
|
||||
|
||||
it("onMemberRemoved should call callback with groupId, identityCommitment and event", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
const cb = jest.fn()
|
||||
|
||||
semaphore.onMemberRemoved(cb)
|
||||
const handler = mockOn.mock.calls.find(([e]) => e === "MemberRemoved")![1]
|
||||
const fakeEvent = { txHash: "0xdeadbeef" }
|
||||
|
||||
handler("groupZ", 2, "identity999", "root111", fakeEvent)
|
||||
|
||||
expect(cb).toHaveBeenCalledWith("groupZ", "identity999", "root111", fakeEvent)
|
||||
})
|
||||
|
||||
it("offMemberAdded/Updated/Removed should remove all corresponding listeners", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
|
||||
semaphore.offMemberAdded()
|
||||
semaphore.offMemberUpdated()
|
||||
semaphore.offMemberRemoved()
|
||||
|
||||
expect(mockRemove).toHaveBeenCalledWith("MemberAdded")
|
||||
expect(mockRemove).toHaveBeenCalledWith("MemberUpdated")
|
||||
expect(mockRemove).toHaveBeenCalledWith("MemberRemoved")
|
||||
})
|
||||
|
||||
it("onProofValidated should call callback with proof object", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
const cb = jest.fn()
|
||||
|
||||
semaphore.onProofValidated(cb)
|
||||
const handler = mockOn.mock.calls.find(([e]) => e === "ProofValidated")![1]
|
||||
|
||||
const fakeEvent = { blockNumber: 400 }
|
||||
handler("group1", 3, "root123", "nullifierXYZ", "msg1", "scope1", ["p1", "p2"], fakeEvent)
|
||||
|
||||
expect(cb).toHaveBeenCalledWith({
|
||||
groupId: "group1",
|
||||
merkleTreeDepth: 3,
|
||||
merkleTreeRoot: "root123",
|
||||
nullifier: "nullifierXYZ",
|
||||
message: "msg1",
|
||||
scope: "scope1",
|
||||
points: ["p1", "p2"],
|
||||
event: fakeEvent
|
||||
})
|
||||
})
|
||||
|
||||
it("offProofValidated should remove all ProofValidated listeners", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
semaphore.offProofValidated()
|
||||
expect(mockRemove).toHaveBeenCalledWith("ProofValidated")
|
||||
})
|
||||
|
||||
it("onGroupAdminUpdated should call callback with groupId, oldAdmin, newAdmin and event", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
const cb = jest.fn()
|
||||
|
||||
semaphore.onGroupAdminUpdated(cb)
|
||||
const handler = mockOn.mock.calls.find(([e]) => e === "GroupAdminUpdated")![1]
|
||||
const fakeEvent = { txHash: "0xbeef" }
|
||||
|
||||
handler("group1", "0xOLD", "0xNEW", fakeEvent)
|
||||
|
||||
expect(cb).toHaveBeenCalledWith("group1", "0xOLD", "0xNEW", fakeEvent)
|
||||
})
|
||||
|
||||
it("offGroupAdminUpdated should remove all GroupAdminUpdated listeners", () => {
|
||||
const semaphore = new SemaphoreEthers("sepolia", { address: "0x0000" })
|
||||
semaphore.offGroupAdminUpdated()
|
||||
expect(mockRemove).toHaveBeenCalledWith("GroupAdminUpdated")
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/group",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "A library to create and manage Semaphore groups.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/hardhat",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "A Hardhat plugin to deploy Semaphore contracts.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
@@ -41,7 +41,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@nomicfoundation/hardhat-ethers": "^3.0.0",
|
||||
"@semaphore-protocol/contracts": "4.13.0",
|
||||
"@semaphore-protocol/contracts": "4.14.0",
|
||||
"ethers": "^6.13.4",
|
||||
"hardhat-dependency-compiler": "^1.1.3"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/identity",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "A library to create Semaphore identities.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -62,7 +62,7 @@ export class Identity {
|
||||
|
||||
/**
|
||||
* Returns the secret scalar.
|
||||
* @returns The secret scalar as a string.
|
||||
* @returns The secret scalar as a bigint.
|
||||
*/
|
||||
public get secretScalar(): bigint {
|
||||
return this._secretScalar
|
||||
@@ -78,7 +78,7 @@ export class Identity {
|
||||
|
||||
/**
|
||||
* Returns the commitment hash of the public key.
|
||||
* @returns The commitment as a string.
|
||||
* @returns The commitment as a bigint.
|
||||
*/
|
||||
public get commitment(): bigint {
|
||||
return this._commitment
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -116,3 +116,25 @@ import { verifyProof } from "@semaphore-protocol/proof"
|
||||
|
||||
await verifyProof(proof1)
|
||||
```
|
||||
|
||||
## Resource management: Terminating the bn128 curve
|
||||
|
||||
When using the Semaphore proof library in Node.js environments, especially in tests or scripts that create and use the `bn128` curve (for example, via `getCurveFromName("bn128")` from the `ffjavascript` package), it is important to properly release resources associated with the curve after use. Failing to do so can result in leaked handles (such as `MessagePort` handles), which may prevent Node.js from exiting cleanly. This is particularly relevant when running test suites.
|
||||
|
||||
**How to terminate the bn128 curve:**
|
||||
|
||||
If you create a curve instance using `getCurveFromName("bn128")`, you should call its `terminate()` method when you are done with it. For example:
|
||||
|
||||
```typescript
|
||||
import { getCurveFromName } from "ffjavascript"
|
||||
|
||||
let curve
|
||||
beforeAll(async () => {
|
||||
curve = await getCurveFromName("bn128")
|
||||
})
|
||||
afterAll(async () => {
|
||||
await curve.terminate()
|
||||
})
|
||||
```
|
||||
|
||||
This ensures that all resources are properly released and Node.js can exit cleanly after your script or tests finish.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/proof",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "A library to generate and verify Semaphore proofs.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
@@ -47,11 +47,11 @@
|
||||
"rollup-plugin-cleanup": "^3.2.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@semaphore-protocol/group": "4.13.0",
|
||||
"@semaphore-protocol/identity": "4.13.0"
|
||||
"@semaphore-protocol/group": "4.14.0",
|
||||
"@semaphore-protocol/identity": "4.14.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/utils": "4.13.0",
|
||||
"@semaphore-protocol/utils": "4.14.0",
|
||||
"@zk-kit/artifacts": "2.0.1",
|
||||
"@zk-kit/utils": "1.3.0",
|
||||
"ethers": "6.13.4",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Ethereum Foundation
|
||||
Copyright (c) 2025 Ethereum Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/utils",
|
||||
"version": "4.13.0",
|
||||
"version": "4.14.0",
|
||||
"description": "A library to provide utility functions to the other Semaphore packages.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 8263690
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 9118042
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 8263690
|
||||
"startBlock": 9118042
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 8263690
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 9118042
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -24,18 +24,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 22424592
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 23311418
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 22424592
|
||||
"startBlock": 23311418
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 22424592
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 23311418
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -44,18 +44,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 149903019
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 190173122
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 149903019
|
||||
"startBlock": 190173122
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 149903019
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 190173122
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -64,18 +64,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 27341051
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 32508911
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 27341051
|
||||
"startBlock": 32508911
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 27341051
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 32508911
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -84,18 +84,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 21308099
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 25915415
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 21308099
|
||||
"startBlock": 25915415
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 21308099
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 25915415
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -104,18 +104,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 333645515
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 376612967
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 333645515
|
||||
"startBlock": 376612967
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 333645515
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 376612967
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -124,18 +124,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 71158898
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 76162950
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 71158898
|
||||
"startBlock": 76162950
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 71158898
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 76162950
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -144,18 +144,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 135443119
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 140821423
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 135443119
|
||||
"startBlock": 140821423
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 135443119
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 140821423
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -164,18 +164,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 25358716
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 30526193
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 25358716
|
||||
"startBlock": 30526193
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 25358716
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 30526193
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -184,18 +184,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 12757656
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 17778088
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 12757656
|
||||
"startBlock": 17778088
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 12757656
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 17778088
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -204,18 +204,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 29848242
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 35226469
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 29848242
|
||||
"startBlock": 35226469
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 29848242
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 35226469
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -224,18 +224,18 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 18707811
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 23030579
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 18707811
|
||||
"startBlock": 23030579
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 18707811
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 23030579
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -244,18 +244,58 @@
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 9604960
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 11979239
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 9604960
|
||||
"startBlock": 11979239
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 9604960
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 11979239
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"network": "gnosis-chiado",
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 18246899
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 18246899
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 18246899
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"network": "gnosis",
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x4DeC9E3784EcC1eE002001BfE91deEf4A48931f8",
|
||||
"startBlock": 42592252
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 42592252
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x8A1fd199516489B0Fb7153EB5f075cDAC83c693D",
|
||||
"startBlock": 42592252
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -76,5 +76,17 @@ export default {
|
||||
url: "https://sepolia-rpc.scroll.io",
|
||||
chainId: 534351,
|
||||
explorer: "https://sepolia.scrollscan.com"
|
||||
},
|
||||
"gnosis-chiado": {
|
||||
name: "Gnosis Chiado",
|
||||
url: "https://rpc.chiadochain.net",
|
||||
chainId: 10200,
|
||||
explorer: "https://blockscout.com/gnosis/chiado"
|
||||
},
|
||||
gnosis: {
|
||||
name: "Gnosis",
|
||||
url: "https://rpc.gnosischain.com",
|
||||
chainId: 100,
|
||||
explorer: "https://gnosisscan.io"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,9 @@ async function main() {
|
||||
.filter((file) => file.isDirectory())
|
||||
.map((dir) => dir.name)
|
||||
|
||||
folders.map((app) => gitIgnored.map((f) => rmSync(`${folderName}/${app}/${f}`, { recursive: true, force: true })))
|
||||
folders.forEach((app) =>
|
||||
gitIgnored.forEach((f) => rmSync(`${folderName}/${app}/${f}`, { recursive: true, force: true }))
|
||||
)
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -14,8 +14,8 @@ const gitIgnored = [
|
||||
const folders = ["cli-template-monorepo-ethers", "cli-template-monorepo-subgraph"]
|
||||
|
||||
async function main() {
|
||||
folders.map((pkg) =>
|
||||
gitIgnored.map((f) => rmSync(`${folderName}/${pkg}/apps/${f}`, { recursive: true, force: true }))
|
||||
folders.forEach((pkg) =>
|
||||
gitIgnored.forEach((f) => rmSync(`${folderName}/${pkg}/apps/${f}`, { recursive: true, force: true }))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,9 @@ async function main() {
|
||||
.filter((file) => file.isDirectory())
|
||||
.map((dir) => dir.name)
|
||||
|
||||
folders.map((app) => gitIgnored.map((f) => rmSync(`${folderName}/${app}/${f}`, { recursive: true, force: true })))
|
||||
folders.forEach((app) =>
|
||||
gitIgnored.forEach((f) => rmSync(`${folderName}/${app}/${f}`, { recursive: true, force: true }))
|
||||
)
|
||||
|
||||
rmSync(`${folderName}/circuit/main`, { recursive: true, force: true })
|
||||
rmSync(`${folderName}/circuit/test`, { recursive: true, force: true })
|
||||
|
||||
312
yarn.lock
@@ -6408,13 +6408,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/env@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/env@npm:13.5.5"
|
||||
checksum: 10/519dc30be6db82d57194b6bfe50b397a37b7189a8f35d33061ae0d4f93bb8774ca7710f7da7150b3c85f329d412a35b49782d70e08e44816716b19c7ac463ae1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/env@npm:14.1.0":
|
||||
version: 14.1.0
|
||||
resolution: "@next/env@npm:14.1.0"
|
||||
@@ -6422,6 +6415,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/env@npm:14.2.35":
|
||||
version: 14.2.35
|
||||
resolution: "@next/env@npm:14.2.35"
|
||||
checksum: 10/5685145c9a6e6d21a85c012b023092ff50cfee61b73424d3c913d4155a89c85cf02867e79b5b3bde6ef9f6e6b2bec662cecd644d0d428082801e95c4cbe2393f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/eslint-plugin-next@npm:14.1.0":
|
||||
version: 14.1.0
|
||||
resolution: "@next/eslint-plugin-next@npm:14.1.0"
|
||||
@@ -6431,13 +6431,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-darwin-arm64@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-darwin-arm64@npm:13.5.5"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-darwin-arm64@npm:14.1.0":
|
||||
version: 14.1.0
|
||||
resolution: "@next/swc-darwin-arm64@npm:14.1.0"
|
||||
@@ -6445,10 +6438,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-darwin-x64@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-darwin-x64@npm:13.5.5"
|
||||
conditions: os=darwin & cpu=x64
|
||||
"@next/swc-darwin-arm64@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-darwin-arm64@npm:14.2.33"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6459,10 +6452,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-arm64-gnu@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-linux-arm64-gnu@npm:13.5.5"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
"@next/swc-darwin-x64@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-darwin-x64@npm:14.2.33"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6473,10 +6466,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-arm64-musl@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-linux-arm64-musl@npm:13.5.5"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
"@next/swc-linux-arm64-gnu@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-linux-arm64-gnu@npm:14.2.33"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6487,10 +6480,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-x64-gnu@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-linux-x64-gnu@npm:13.5.5"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
"@next/swc-linux-arm64-musl@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-linux-arm64-musl@npm:14.2.33"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6501,10 +6494,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-linux-x64-musl@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-linux-x64-musl@npm:13.5.5"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
"@next/swc-linux-x64-gnu@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-linux-x64-gnu@npm:14.2.33"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6515,10 +6508,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-arm64-msvc@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-win32-arm64-msvc@npm:13.5.5"
|
||||
conditions: os=win32 & cpu=arm64
|
||||
"@next/swc-linux-x64-musl@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-linux-x64-musl@npm:14.2.33"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6529,10 +6522,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-ia32-msvc@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-win32-ia32-msvc@npm:13.5.5"
|
||||
conditions: os=win32 & cpu=ia32
|
||||
"@next/swc-win32-arm64-msvc@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-win32-arm64-msvc@npm:14.2.33"
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6543,10 +6536,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-x64-msvc@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "@next/swc-win32-x64-msvc@npm:13.5.5"
|
||||
conditions: os=win32 & cpu=x64
|
||||
"@next/swc-win32-ia32-msvc@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-win32-ia32-msvc@npm:14.2.33"
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6557,6 +6550,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@next/swc-win32-x64-msvc@npm:14.2.33":
|
||||
version: 14.2.33
|
||||
resolution: "@next/swc-win32-x64-msvc@npm:14.2.33"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@noble/curves@npm:1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "@noble/curves@npm:1.2.0"
|
||||
@@ -7613,7 +7613,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/cli-template-contracts-foundry@workspace:packages/cli-template-contracts-foundry"
|
||||
dependencies:
|
||||
"@semaphore-protocol/contracts": "npm:4.13.0"
|
||||
"@semaphore-protocol/contracts": "npm:4.14.0"
|
||||
"@zk-kit/lean-imt.sol": "npm:2.0.1"
|
||||
forge-std: "github:foundry-rs/forge-std#v1.9.4"
|
||||
poseidon-solidity: "npm:0.0.5"
|
||||
@@ -7633,10 +7633,10 @@ __metadata:
|
||||
"@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0"
|
||||
"@nomicfoundation/hardhat-toolbox": "npm:^4.0.0"
|
||||
"@nomicfoundation/hardhat-verify": "npm:^2.0.0"
|
||||
"@semaphore-protocol/contracts": "npm:4.13.0"
|
||||
"@semaphore-protocol/core": "npm:4.13.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/contracts": "npm:4.14.0"
|
||||
"@semaphore-protocol/core": "npm:4.14.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.14.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@typechain/ethers-v6": "npm:^0.5.0"
|
||||
"@typechain/hardhat": "npm:^9.0.0"
|
||||
"@types/chai": "npm:^4.2.0"
|
||||
@@ -7686,8 +7686,8 @@ __metadata:
|
||||
resolution: "@semaphore-protocol/cli@workspace:packages/cli"
|
||||
dependencies:
|
||||
"@rollup/plugin-typescript": "npm:^11.1.6"
|
||||
"@semaphore-protocol/data": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/data": "npm:4.14.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@types/figlet": "npm:^1.5.8"
|
||||
"@types/inquirer": "npm:^9.0.7"
|
||||
"@types/pacote": "npm:^11.1.8"
|
||||
@@ -7711,7 +7711,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/contracts@npm:4.13.0, @semaphore-protocol/contracts@workspace:packages/contracts/contracts":
|
||||
"@semaphore-protocol/contracts@npm:4.14.0, @semaphore-protocol/contracts@workspace:packages/contracts/contracts":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/contracts@workspace:packages/contracts/contracts"
|
||||
dependencies:
|
||||
@@ -7719,23 +7719,23 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/core@npm:4.13.0, @semaphore-protocol/core@workspace:^, @semaphore-protocol/core@workspace:packages/core":
|
||||
"@semaphore-protocol/core@npm:4.14.0, @semaphore-protocol/core@workspace:^, @semaphore-protocol/core@workspace:packages/core":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/core@workspace:packages/core"
|
||||
dependencies:
|
||||
"@semaphore-protocol/group": "npm:4.13.0"
|
||||
"@semaphore-protocol/identity": "npm:4.13.0"
|
||||
"@semaphore-protocol/proof": "npm:4.13.0"
|
||||
"@semaphore-protocol/group": "npm:4.14.0"
|
||||
"@semaphore-protocol/identity": "npm:4.14.0"
|
||||
"@semaphore-protocol/proof": "npm:4.14.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/data@npm:4.13.0, @semaphore-protocol/data@workspace:packages/data":
|
||||
"@semaphore-protocol/data@npm:4.14.0, @semaphore-protocol/data@workspace:packages/data":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/data@workspace:packages/data"
|
||||
dependencies:
|
||||
"@rollup/plugin-json": "npm:^6.1.0"
|
||||
"@rollup/plugin-typescript": "npm:^11.1.6"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@zk-kit/utils": "npm:1.3.0"
|
||||
axios: "npm:1.6.6"
|
||||
ethers: "npm:6.13.4"
|
||||
@@ -7746,7 +7746,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/group@npm:4.13.0, @semaphore-protocol/group@workspace:packages/group":
|
||||
"@semaphore-protocol/group@npm:4.14.0, @semaphore-protocol/group@workspace:packages/group":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/group@workspace:packages/group"
|
||||
dependencies:
|
||||
@@ -7760,13 +7760,13 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/hardhat@npm:4.13.0, @semaphore-protocol/hardhat@workspace:packages/hardhat":
|
||||
"@semaphore-protocol/hardhat@npm:4.14.0, @semaphore-protocol/hardhat@workspace:packages/hardhat":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/hardhat@workspace:packages/hardhat"
|
||||
dependencies:
|
||||
"@nomicfoundation/hardhat-ethers": "npm:^3.0.0"
|
||||
"@rollup/plugin-typescript": "npm:^11.1.6"
|
||||
"@semaphore-protocol/contracts": "npm:4.13.0"
|
||||
"@semaphore-protocol/contracts": "npm:4.14.0"
|
||||
ethers: "npm:^6.13.4"
|
||||
hardhat: "npm:^2.19.4"
|
||||
hardhat-dependency-compiler: "npm:^1.1.3"
|
||||
@@ -7778,7 +7778,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/identity@npm:4.13.0, @semaphore-protocol/identity@workspace:packages/identity":
|
||||
"@semaphore-protocol/identity@npm:4.14.0, @semaphore-protocol/identity@workspace:packages/identity":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/identity@workspace:packages/identity"
|
||||
dependencies:
|
||||
@@ -7794,14 +7794,14 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/proof@npm:4.13.0, @semaphore-protocol/proof@workspace:packages/proof":
|
||||
"@semaphore-protocol/proof@npm:4.14.0, @semaphore-protocol/proof@workspace:packages/proof":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/proof@workspace:packages/proof"
|
||||
dependencies:
|
||||
"@rollup/plugin-alias": "npm:^5.1.0"
|
||||
"@rollup/plugin-json": "npm:^6.1.0"
|
||||
"@rollup/plugin-typescript": "npm:^11.1.6"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@types/snarkjs": "npm:^0"
|
||||
"@zk-kit/artifacts": "npm:2.0.1"
|
||||
"@zk-kit/utils": "npm:1.3.0"
|
||||
@@ -7811,12 +7811,12 @@ __metadata:
|
||||
rollup-plugin-cleanup: "npm:^3.2.1"
|
||||
snarkjs: "npm:0.7.5"
|
||||
peerDependencies:
|
||||
"@semaphore-protocol/group": 4.13.0
|
||||
"@semaphore-protocol/identity": 4.13.0
|
||||
"@semaphore-protocol/group": 4.14.0
|
||||
"@semaphore-protocol/identity": 4.14.0
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/utils@npm:4.13.0, @semaphore-protocol/utils@workspace:packages/utils":
|
||||
"@semaphore-protocol/utils@npm:4.14.0, @semaphore-protocol/utils@workspace:packages/utils":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/utils@workspace:packages/utils"
|
||||
dependencies:
|
||||
@@ -8373,6 +8373,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/counter@npm:^0.1.3":
|
||||
version: 0.1.3
|
||||
resolution: "@swc/counter@npm:0.1.3"
|
||||
checksum: 10/df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/helpers@npm:0.5.2":
|
||||
version: 0.5.2
|
||||
resolution: "@swc/helpers@npm:0.5.2"
|
||||
@@ -8382,6 +8389,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/helpers@npm:0.5.5":
|
||||
version: 0.5.5
|
||||
resolution: "@swc/helpers@npm:0.5.5"
|
||||
dependencies:
|
||||
"@swc/counter": "npm:^0.1.3"
|
||||
tslib: "npm:^2.4.0"
|
||||
checksum: 10/1c5ef04f642542212df28c669438f3e0f459dcde7b448a5b1fcafb2e9e4f13e76d8428535a270e91ed123dd2a21189dbed34086b88a8cf68baf84984d6d0e39b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@szmarczak/http-timer@npm:^5.0.1":
|
||||
version: 5.0.1
|
||||
resolution: "@szmarczak/http-timer@npm:5.0.1"
|
||||
@@ -11664,7 +11681,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001579, caniuse-lite@npm:^1.0.30001587, caniuse-lite@npm:^1.0.30001599":
|
||||
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001579, caniuse-lite@npm:^1.0.30001587, caniuse-lite@npm:^1.0.30001599":
|
||||
version: 1.0.30001620
|
||||
resolution: "caniuse-lite@npm:1.0.30001620"
|
||||
checksum: 10/d615ab66eb14d9b621004297a8f61e435dca67e9311f3979e47ee1af1be2a8f14997b947a101073d949b5454dad745cc35134bc3c4295c7f33968f3f665eba19
|
||||
@@ -21721,10 +21738,10 @@ __metadata:
|
||||
"@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0"
|
||||
"@nomicfoundation/hardhat-toolbox": "npm:^4.0.0"
|
||||
"@nomicfoundation/hardhat-verify": "npm:^2.0.0"
|
||||
"@semaphore-protocol/contracts": "npm:4.13.0"
|
||||
"@semaphore-protocol/core": "npm:4.13.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/contracts": "npm:4.14.0"
|
||||
"@semaphore-protocol/core": "npm:4.14.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.14.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@typechain/ethers-v6": "npm:^0.5.0"
|
||||
"@typechain/hardhat": "npm:^9.0.0"
|
||||
"@types/chai": "npm:^4.2.0"
|
||||
@@ -21757,9 +21774,9 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "monorepo-ethers-web-app@workspace:packages/cli-template-monorepo-ethers/apps/web-app"
|
||||
dependencies:
|
||||
"@semaphore-protocol/core": "npm:4.13.0"
|
||||
"@semaphore-protocol/data": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/core": "npm:4.14.0"
|
||||
"@semaphore-protocol/data": "npm:4.14.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@types/node": "npm:^20"
|
||||
"@types/react": "npm:^18"
|
||||
"@types/react-dom": "npm:^18"
|
||||
@@ -21784,10 +21801,10 @@ __metadata:
|
||||
"@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0"
|
||||
"@nomicfoundation/hardhat-toolbox": "npm:^4.0.0"
|
||||
"@nomicfoundation/hardhat-verify": "npm:^2.0.0"
|
||||
"@semaphore-protocol/contracts": "npm:4.13.0"
|
||||
"@semaphore-protocol/core": "npm:4.13.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/contracts": "npm:4.14.0"
|
||||
"@semaphore-protocol/core": "npm:4.14.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.14.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@typechain/ethers-v6": "npm:^0.5.0"
|
||||
"@typechain/hardhat": "npm:^9.0.0"
|
||||
"@types/chai": "npm:^4.2.0"
|
||||
@@ -21820,9 +21837,9 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "monorepo-subgraph-web-app@workspace:packages/cli-template-monorepo-subgraph/apps/web-app"
|
||||
dependencies:
|
||||
"@semaphore-protocol/core": "npm:4.13.0"
|
||||
"@semaphore-protocol/data": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/core": "npm:4.14.0"
|
||||
"@semaphore-protocol/data": "npm:4.14.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@types/node": "npm:^20"
|
||||
"@types/react": "npm:^18"
|
||||
"@types/react-dom": "npm:^18"
|
||||
@@ -22009,61 +22026,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"next@npm:13.5.5":
|
||||
version: 13.5.5
|
||||
resolution: "next@npm:13.5.5"
|
||||
dependencies:
|
||||
"@next/env": "npm:13.5.5"
|
||||
"@next/swc-darwin-arm64": "npm:13.5.5"
|
||||
"@next/swc-darwin-x64": "npm:13.5.5"
|
||||
"@next/swc-linux-arm64-gnu": "npm:13.5.5"
|
||||
"@next/swc-linux-arm64-musl": "npm:13.5.5"
|
||||
"@next/swc-linux-x64-gnu": "npm:13.5.5"
|
||||
"@next/swc-linux-x64-musl": "npm:13.5.5"
|
||||
"@next/swc-win32-arm64-msvc": "npm:13.5.5"
|
||||
"@next/swc-win32-ia32-msvc": "npm:13.5.5"
|
||||
"@next/swc-win32-x64-msvc": "npm:13.5.5"
|
||||
"@swc/helpers": "npm:0.5.2"
|
||||
busboy: "npm:1.6.0"
|
||||
caniuse-lite: "npm:^1.0.30001406"
|
||||
postcss: "npm:8.4.31"
|
||||
styled-jsx: "npm:5.1.1"
|
||||
watchpack: "npm:2.4.0"
|
||||
peerDependencies:
|
||||
"@opentelemetry/api": ^1.1.0
|
||||
react: ^18.2.0
|
||||
react-dom: ^18.2.0
|
||||
sass: ^1.3.0
|
||||
dependenciesMeta:
|
||||
"@next/swc-darwin-arm64":
|
||||
optional: true
|
||||
"@next/swc-darwin-x64":
|
||||
optional: true
|
||||
"@next/swc-linux-arm64-gnu":
|
||||
optional: true
|
||||
"@next/swc-linux-arm64-musl":
|
||||
optional: true
|
||||
"@next/swc-linux-x64-gnu":
|
||||
optional: true
|
||||
"@next/swc-linux-x64-musl":
|
||||
optional: true
|
||||
"@next/swc-win32-arm64-msvc":
|
||||
optional: true
|
||||
"@next/swc-win32-ia32-msvc":
|
||||
optional: true
|
||||
"@next/swc-win32-x64-msvc":
|
||||
optional: true
|
||||
peerDependenciesMeta:
|
||||
"@opentelemetry/api":
|
||||
optional: true
|
||||
sass:
|
||||
optional: true
|
||||
bin:
|
||||
next: dist/bin/next
|
||||
checksum: 10/9e6aa7fd7df96caeeaaf5436b839fa85aedd8f1f9ee695add0e0346bf9941683dd5d81dbcc60d5e19e5b630959a8abee29c523856b21e13419c795882fcb8ef6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"next@npm:14.1.0":
|
||||
version: 14.1.0
|
||||
resolution: "next@npm:14.1.0"
|
||||
@@ -22119,6 +22081,64 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"next@npm:14.2.35":
|
||||
version: 14.2.35
|
||||
resolution: "next@npm:14.2.35"
|
||||
dependencies:
|
||||
"@next/env": "npm:14.2.35"
|
||||
"@next/swc-darwin-arm64": "npm:14.2.33"
|
||||
"@next/swc-darwin-x64": "npm:14.2.33"
|
||||
"@next/swc-linux-arm64-gnu": "npm:14.2.33"
|
||||
"@next/swc-linux-arm64-musl": "npm:14.2.33"
|
||||
"@next/swc-linux-x64-gnu": "npm:14.2.33"
|
||||
"@next/swc-linux-x64-musl": "npm:14.2.33"
|
||||
"@next/swc-win32-arm64-msvc": "npm:14.2.33"
|
||||
"@next/swc-win32-ia32-msvc": "npm:14.2.33"
|
||||
"@next/swc-win32-x64-msvc": "npm:14.2.33"
|
||||
"@swc/helpers": "npm:0.5.5"
|
||||
busboy: "npm:1.6.0"
|
||||
caniuse-lite: "npm:^1.0.30001579"
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
postcss: "npm:8.4.31"
|
||||
styled-jsx: "npm:5.1.1"
|
||||
peerDependencies:
|
||||
"@opentelemetry/api": ^1.1.0
|
||||
"@playwright/test": ^1.41.2
|
||||
react: ^18.2.0
|
||||
react-dom: ^18.2.0
|
||||
sass: ^1.3.0
|
||||
dependenciesMeta:
|
||||
"@next/swc-darwin-arm64":
|
||||
optional: true
|
||||
"@next/swc-darwin-x64":
|
||||
optional: true
|
||||
"@next/swc-linux-arm64-gnu":
|
||||
optional: true
|
||||
"@next/swc-linux-arm64-musl":
|
||||
optional: true
|
||||
"@next/swc-linux-x64-gnu":
|
||||
optional: true
|
||||
"@next/swc-linux-x64-musl":
|
||||
optional: true
|
||||
"@next/swc-win32-arm64-msvc":
|
||||
optional: true
|
||||
"@next/swc-win32-ia32-msvc":
|
||||
optional: true
|
||||
"@next/swc-win32-x64-msvc":
|
||||
optional: true
|
||||
peerDependenciesMeta:
|
||||
"@opentelemetry/api":
|
||||
optional: true
|
||||
"@playwright/test":
|
||||
optional: true
|
||||
sass:
|
||||
optional: true
|
||||
bin:
|
||||
next: dist/bin/next
|
||||
checksum: 10/3647056e208cf0b19821d761841b378c8fb489b291acc8dc4d80a7afe6b1850b30dad91e1766301feda03360275347881d6ead068f1f944d823b4f91177f35ae
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"no-case@npm:^3.0.4":
|
||||
version: 3.0.4
|
||||
resolution: "no-case@npm:3.0.4"
|
||||
@@ -26328,7 +26348,7 @@ __metadata:
|
||||
"@docusaurus/preset-classic": "npm:3.5.2"
|
||||
"@docusaurus/tsconfig": "npm:3.5.2"
|
||||
"@mdx-js/react": "npm:^3.0.0"
|
||||
"@semaphore-protocol/utils": "npm:4.13.0"
|
||||
"@semaphore-protocol/utils": "npm:4.14.0"
|
||||
"@svgr/webpack": "npm:^5.5.0"
|
||||
"@types/react": "npm:^18.2.29"
|
||||
clsx: "npm:^1.2.1"
|
||||
@@ -26416,7 +26436,7 @@ __metadata:
|
||||
"@types/react": "npm:^18"
|
||||
"@types/react-dom": "npm:^18"
|
||||
framer-motion: "npm:^10.16.4"
|
||||
next: "npm:13.5.5"
|
||||
next: "npm:14.2.35"
|
||||
react: "npm:^18"
|
||||
react-code-blocks: "npm:^0.1.4"
|
||||
react-dom: "npm:^18"
|
||||
@@ -29463,16 +29483,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"watchpack@npm:2.4.0":
|
||||
version: 2.4.0
|
||||
resolution: "watchpack@npm:2.4.0"
|
||||
dependencies:
|
||||
glob-to-regexp: "npm:^0.4.1"
|
||||
graceful-fs: "npm:^4.1.2"
|
||||
checksum: 10/4280b45bc4b5d45d5579113f2a4af93b67ae1b9607cc3d86ae41cdd53ead10db5d9dc3237f24256d05ef88b28c69a02712f78e434cb7ecc8edaca134a56e8cab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"watchpack@npm:^2.4.1":
|
||||
version: 2.4.1
|
||||
resolution: "watchpack@npm:2.4.1"
|
||||
|
||||