Compare commits

...

17 Commits

Author SHA1 Message Date
cedoor
3e7db08eeb chore: v4.7.0 2024-11-27 17:24:57 +07:00
Cedoor
8adfc30da8 chore(contracts): add scroll sepolia to supported networks (#902)
* chore(contracts): add scroll sepolia to supported networks

* chore(contracts): deploy contracts on scroll sepolia

re #899

* chore(contracts): deploy semaphore on correct scroll sepolia network

re #899
2024-11-27 17:24:08 +07:00
sripwoud
42639662c3 docs: add soldeer install instructions (#903)
* docs: add  `soldeer` install instructions

* update README
2024-11-27 12:36:36 +07:00
Shikhar Singh
64025516c0 feat: clean node_modules before building subgraph (#884)
* feat(cli): remove @semaphore-protocol/cli prepublish script

The idea is to remove the prepublish script from the scripts object of the package.json file of
every cli template when the template is downloaded using the CLI.

BREAKING CHANGE: n

* refactor(cli): add comment

* refactor(cli): create seperate file for removePrePublishScript function

* refactor(cli): using updatedPackageJsonContent var instead of calling readFileSync again

* fix(subgraph): clean node_modules before building subgraph

* refactor(subgraph): fix: test typo

* refactor(subgraph): refactor: remove nohoist

* refactor(subgraph): refactor: workspaces structure
2024-11-26 09:42:42 +01:00
sripwoud
91f8a4be2a fix(ci): publish pkg if no releases yet (#900)
* fix(ci): publish pkg if no releases yet

* chore(ci): add workflow release trigger

* fix: workflow dispatch instead of workflow release
2024-11-26 15:21:07 +07:00
Bryer
ebd9a27c1b typo fix Update CONTRIBUTING.md (#901)
Corrected phrasing in "Commit rules" section
2024-11-26 15:20:14 +07:00
cedoor
bada8b8792 chore: v4.6.0 2024-11-25 13:09:50 +07:00
Cedoor
e93b19c566 chore(contracts): deploy contracts (#892)
* chore(contracts): deploy contracts

* chore(subgraph): deploy new subgraphs
2024-11-25 13:08:31 +07:00
leopardracer
862f715d05 fix: typos in documentation files (#898)
* Update usage.md

* Update glossary.md
2024-11-25 12:42:49 +07:00
Dmitry
3ed6c38587 Fixed closing tag issue in Update README.md (#894)
In the table section, there is a minor mistake in the closing tag. Instead of using </tbody>, it should be </tbody>. This is a formatting mistake.
2024-11-20 15:53:14 +07:00
Cedoor
7e183f3d2c refactor(contracts): support version range (#891)
re #888
2024-10-31 13:19:05 +00:00
Jimmy Chu
901d0954c0 refactor(contracts): specify gas cost in SemaphoreVerifier precompile calls (#883)
* chore(contracts): remove sub() from gas() in staticcall at SemaphoreVerifier

re #871

* refactor(contracts): using fixed gas cost on precompile calls

re #871

* refactor(contracts): increease fixed gas cost with safety buffer
2024-10-31 12:35:19 +00:00
Erick Vasquez
caebc1a4ab feat: add veilescrow to projects section (#890) 2024-10-30 18:46:38 +01:00
Vivian Plasencia
9b419f0c78 docs: add benchmarks page (#889)
* docs(docs): add benchmarks page to the docs

re #815

* chore(docs): update the docusaurus version
2024-10-30 10:54:13 +01:00
Vivian Plasencia
c67b888eb6 chore: v4.5.0 2024-10-28 20:23:40 +01:00
Vivian Plasencia
376cd11808 docs(identity): add export import identity to the docs (#887)
re #872
2024-10-28 13:29:35 +01:00
Vivian Plasencia
58132a9478 feat(identity): export point and signature types (#886)
* feat(identity): export point and signature types

re #885

* docs(identity): add the generate commitment function to the readme file
2024-10-28 13:29:03 +01:00
62 changed files with 2374 additions and 815 deletions

View File

@@ -4,6 +4,7 @@ permissions:
contents: write
on:
workflow_dispatch:
push:
tags:
- "v*"

View File

@@ -42,7 +42,7 @@ When you submit your PR (or later change that code), a CI build will automatical
We always use ESLint and Prettier. To check that your code follows the rules, simply run the npm script `yarn lint`.
### Commits rules
### Commit rules
For commits it is recommended to use [Conventional Commits](https://www.conventionalcommits.org).

View File

@@ -264,7 +264,7 @@ The core of the Semaphore protocol is in the [circuit logic](/packages/circuits/
</a>
</td>
</tr>
<tbody>
</tbody>
</table>
## 🛠 Install

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

View File

@@ -16,10 +16,10 @@
"format:write": "remark ./**/*.mdx --output"
},
"dependencies": {
"@docusaurus/core": "3.1.1",
"@docusaurus/preset-classic": "3.1.1",
"@docusaurus/core": "3.5.2",
"@docusaurus/preset-classic": "3.5.2",
"@mdx-js/react": "^3.0.0",
"@semaphore-protocol/utils": "4.4.2",
"@semaphore-protocol/utils": "4.7.0",
"@svgr/webpack": "^5.5.0",
"clsx": "^1.2.1",
"docusaurus-plugin-sass": "^0.2.5",
@@ -31,8 +31,8 @@
"url-loader": "^4.1.1"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.1.1",
"@docusaurus/tsconfig": "3.1.1",
"@docusaurus/module-type-aliases": "3.5.2",
"@docusaurus/tsconfig": "3.5.2",
"@types/react": "^18.2.29",
"remark-cli": "^12.0.0",
"remark-frontmatter": "^5.0.0",

View File

@@ -26,7 +26,7 @@ With the Client contract as the owner of the Semaphore contract, the Client
contract may call owner-only Semaphore functions such as
`addExternalNullifier()`.
## Add, deactivate, or reactivate external nullifiiers
## Add, deactivate, or reactivate external nullifiers
These functions add, deactivate, and reactivate an external nullifier respectively.
As each identity can only signal once to an external nullifier, and as a signal

View File

@@ -37,7 +37,7 @@ For more information, see [Merkle tree in Wikipedia](https://en.wikipedia.org/wi
## Nullifier
A value used to prevent double entry or double signalling.
A value used to prevent double entry or double signaling.
See [Circuit nullifier hash](/V3/technical-reference/circuits/#nullifier-hash).

View File

@@ -0,0 +1,131 @@
---
sidebar_position: 8
---
# Benchmarks
Semaphore v4 introduces new features and performance improvements. Detailed changes are available in the [release changelog](https://github.com/semaphore-protocol/semaphore/releases/tag/v4.0.0).
The primary changes in benchmark values are driven by the two major protocol updates:
- New [Identity schema](https://github.com/semaphore-protocol/semaphore/tree/main/packages/identity).
- [LeanIMT](https://github.com/privacy-scaling-explorations/zk-kit/tree/main/packages/lean-imt): New optimized IMT.
## New Identity schema
Semaphore v4 includes a new schema for the identities allowing the creation and verification of signatures.
Although the new Identity package is slightly slower than the one in Semaphore v3 (by just a few milliseconds), the trade-off is minimal considering the included functionality.
The new identity schema adds additional constraints to the Semaphore v4 circuit; however, this does not negatively impact overall performance of the protocol.
## LeanIMT
Semaphore v4 uses the LeanIMT data structure for group operations, an improvement over the IMT used in v3.
For further details, see the [LeanIMT paper](https://github.com/privacy-scaling-explorations/zk-kit/tree/main/papers/leanimt).
The LeanIMT offers dynamic depth, resulting in faster and more cost-effective group operations, across Node.js, browser and smart contracts.
Semaphore v4 support tree depths from 1 to 32, while v3 supports depths from 16 to 32, both for proof generation and verification.
## System Specifications and Software environment
All the benchmarks were run in an environment with these properties:
**System Specifications**
Computer: MacBook Pro
Chip: Apple M2 Pro
Memory (RAM): 16 GB
Operating System: macOS Sequoia version 15.0.1
**Software environment**
Node.js version: 20.18.0
Browser: Google Chrome Version 130.0.6723.92 (Official Build) (arm64)
## Running the benchmarks
### Javascript and Circom
GitHub repository to the run Node.js, browser and Circom benchmarks: https://github.com/vplasencia/semaphore-benchmarks
### Solidity
GitHub repository to run the Solidity benchmarks: https://github.com/semaphore-protocol/semaphore
## Node.js benchmarks
### Identities
![Identities](../../assets/img-benchmarks/node/identity-node-benchmarks.png)
### Create Group
Create group, either empty or with initial members.
![Create Group](../../assets/img-benchmarks/node/create-group-node-benchmarks.png)
### Add Member
Add a member to groups with different sizes.
![Add Member](../../assets/img-benchmarks/node/add-member-node-benchmarks.png)
### Generate Proof
Generate a proof using groups with different numbers of members.
![Generate Proof](../../assets/img-benchmarks/node/generate-proof-node-benchmarks.png)
### Verify Proof
Verify a proof using groups with different numbers of members.
![Verify Proof](../../assets/img-benchmarks/node/verify-proof-node-benchmarks.png)
## Browser benchmarks
Main functions used in the browser.
![Browser benchmarks](../../assets/img-benchmarks/browser/browser-benchmarks.png)
## Circuit benchmarks
### Semaphore V3
<img
src={require('../../assets/img-benchmarks/circuits/semaphore-v3-circuits-benchmarks.png').default}
alt="Circuit benchmarks Semaphore v3"
style={{ width: '300px', height: 'auto' }}
/>
### Semaphore V4
<img
src={require('../../assets/img-benchmarks/circuits/semaphore-v4-circuits-benchmarks.png').default}
alt="Circuit benchmarks Semaphore v4"
style={{ width: '300px', height: 'auto' }}
/>
## Contracts
<img
src={require('../../assets/img-benchmarks/contracts/contract-benchmarks.png').default}
alt="Contract Benchmarks"
style={{ width: '590px', height: 'auto' }}
/>
### Semaphore V3 gas report
![Contracts benchmarks Semaphore v3](../../assets/img-benchmarks/contracts/semaphore-v3-contracts-benchmarks.png)
### Semaphore V4 gas report
![Contracts benchmarks Semaphore v4](../../assets/img-benchmarks/contracts/semaphore-v4-contracts-benchmarks.png)

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 12
sidebar_position: 13
---
# Credits

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 11
sidebar_position: 12
---
# FAQ

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 8
sidebar_position: 9
---
# Glossary

View File

@@ -109,3 +109,33 @@ After a message is signed, anyone can verify the signature using the message its
// Static method.
Identity.verifySignature(message, signature, identity1.publicKey)
```
## Export and import an identity
A Semaphore Identity can be exported and then imported later for reuse.
### Export an identity
Returns the private key encoded as a base64 string.
```ts
import { Identity } from "@semaphore-protocol/identity"
const identity = new Identity()
const privateKey = identity.export()
```
### Import an identity
Returns a Semaphore identity based on a private key encoded as a base64 string.
```ts
import { Identity } from "@semaphore-protocol/identity"
const identity = new Identity()
const privateKey = identity.export()
const identity2 = Identity.import(privateKey)
```

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 9
sidebar_position: 10
---
import Articles from '@site/src/components/Articles';

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 10
sidebar_position: 11
---
import Tabs from "@theme/Tabs"

View File

@@ -42,21 +42,22 @@
## Networks
You can access any subgraph supported by Semaphore with the following URL: https://api.studio.thegraph.com/query/14377/semaphore-<network-name>/v4.0.0-beta.17.
You can access any subgraph supported by Semaphore with the following URL: https://api.studio.thegraph.com/query/14377/semaphore-<network-name>/v4.1.0.
Supported networks:
- `sepolia`
- `optimism`
- `optimism-sepolia`
- `arbitrum-one`
- `arbitrum`
- `arbitrum-sepolia`
- `matic`
- `polygon-amoy`
- `matic-amoy`
- `base-sepolia`
- `base`
- `linea-sepolia`
- `linea`
- `scroll-sepolia`
## 🛠 Install

View File

@@ -555,5 +555,15 @@
"github": "https://github.com/GeneralMagicio/pairwise-RPGF4",
"website": "https://pairwise.vote"
}
},
{
"name": "VeilEscrow",
"categories": ["Privacy", "Coordination"],
"tagline": "Secure, private, and decentralized escrows for anonymous transactions",
"pse": false,
"icon": "",
"links": {
"github": "https://github.com/evgongora/VeilEscrow"
}
}
]

View File

@@ -9,7 +9,8 @@
"scripts": {
"build": "yarn build:libraries && yarn build:subgraph && yarn build:website && yarn build:docs",
"build:libraries": "yarn workspaces foreach -Apt --no-private run build",
"build:subgraph": "yarn workspace semaphore-subgraph build:sepolia",
"clean:subgraph": "rimraf apps/subgraph/node_modules",
"build:subgraph": "yarn clean:subgraph && yarn workspace semaphore-subgraph build:sepolia",
"build:website": "yarn workspace semaphore-website build",
"build:docs": "yarn workspace semaphore-docs build",
"compile:contracts": "yarn workspace semaphore-contracts compile",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/circuits",
"version": "4.4.2",
"version": "4.7.0",
"description": "Semaphore Circom circuits to generate zero-knowledge proofs.",
"license": "MIT",
"files": [

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/cli-template-contracts-hardhat",
"version": "4.4.2",
"version": "4.7.0",
"description": "Semaphore Hardhat template.",
"license": "Unlicense",
"files": [
@@ -41,9 +41,9 @@
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
"@nomicfoundation/hardhat-toolbox": "^4.0.0",
"@nomicfoundation/hardhat-verify": "^2.0.0",
"@semaphore-protocol/core": "4.4.2",
"@semaphore-protocol/hardhat": "4.4.2",
"@semaphore-protocol/utils": "4.4.2",
"@semaphore-protocol/core": "4.7.0",
"@semaphore-protocol/hardhat": "4.7.0",
"@semaphore-protocol/utils": "4.7.0",
"@typechain/ethers-v6": "^0.5.0",
"@typechain/hardhat": "^9.0.0",
"@types/chai": "^4.2.0",
@@ -71,7 +71,7 @@
"typescript": "^5.3.3"
},
"dependencies": {
"@semaphore-protocol/contracts": "4.4.2"
"@semaphore-protocol/contracts": "4.7.0"
},
"packageManager": "yarn@4.1.0"
}

View File

@@ -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.4.2",
"@semaphore-protocol/hardhat": "4.4.2",
"@semaphore-protocol/utils": "4.4.2",
"@semaphore-protocol/core": "4.7.0",
"@semaphore-protocol/hardhat": "4.7.0",
"@semaphore-protocol/utils": "4.7.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.4.2"
"@semaphore-protocol/contracts": "4.7.0"
},
"packageManager": "yarn@4.1.0"
}

View File

@@ -9,9 +9,9 @@
"lint": "next lint"
},
"dependencies": {
"@semaphore-protocol/core": "4.4.2",
"@semaphore-protocol/data": "4.4.2",
"@semaphore-protocol/utils": "4.4.2",
"@semaphore-protocol/core": "4.7.0",
"@semaphore-protocol/data": "4.7.0",
"@semaphore-protocol/utils": "4.7.0",
"ethers": "^6.11.1",
"next": "14.1.0",
"next-pwa": "^5.6.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/cli-template-monorepo-ethers",
"version": "4.4.2",
"version": "4.7.0",
"description": "Semaphore Hardhat + Next.js + SemaphoreEthers template.",
"license": "Unlicense",
"files": [

View File

@@ -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.4.2",
"@semaphore-protocol/hardhat": "4.4.2",
"@semaphore-protocol/utils": "4.4.2",
"@semaphore-protocol/core": "4.7.0",
"@semaphore-protocol/hardhat": "4.7.0",
"@semaphore-protocol/utils": "4.7.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.4.2"
"@semaphore-protocol/contracts": "4.7.0"
},
"packageManager": "yarn@4.1.0"
}

View File

@@ -9,9 +9,9 @@
"lint": "next lint"
},
"dependencies": {
"@semaphore-protocol/core": "4.4.2",
"@semaphore-protocol/data": "4.4.2",
"@semaphore-protocol/utils": "4.4.2",
"@semaphore-protocol/core": "4.7.0",
"@semaphore-protocol/data": "4.7.0",
"@semaphore-protocol/utils": "4.7.0",
"ethers": "^6.11.1",
"next": "14.1.0",
"next-pwa": "^5.6.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/cli-template-monorepo-subgraph",
"version": "4.4.2",
"version": "4.7.0",
"description": "Semaphore Hardhat + Next.js + SemaphoreSubgraph template.",
"license": "Unlicense",
"files": [

View File

@@ -1,7 +1,7 @@
{
"name": "@semaphore-protocol/cli",
"type": "module",
"version": "4.4.2",
"version": "4.7.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.4.2",
"@semaphore-protocol/utils": "4.4.2",
"@semaphore-protocol/data": "4.7.0",
"@semaphore-protocol/utils": "4.7.0",
"axios": "^1.6.7",
"boxen": "^7.1.1",
"chalk": "^5.3.0",

View File

@@ -46,18 +46,16 @@ To learn more about contracts visit [semaphore.pse.dev](https://docs.semaphore.p
## 🛠 Install
### npm or yarn
You can install the semaphore protocol contracts with any node package manager (`bun`, `npm`, `pnpm`,`yarn`) or the solidity package manager [`soldeer`](https://soldeer.xyz).
Install the `@semaphore-protocol/contracts` package with npm:
```bash
```commandline
bun add @semaphore-protocol/contracts
npm i @semaphore-protocol/contracts
```
or yarn:
```bash
pnpm add @semaphore-protocol/contracts
yarn add @semaphore-protocol/contracts
# for soldeer, an explicit version is required, e.g:
soldeer install semaphore-protocol-contracts~4.6.0
```
## 📜 Usage

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
pragma solidity >=0.8.23 <=0.8.28;
import {ISemaphore} from "./interfaces/ISemaphore.sol";
import {ISemaphoreVerifier} from "./interfaces/ISemaphoreVerifier.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
pragma solidity >=0.8.23 <=0.8.28;
/// @dev Minimum supported tree depth.
uint8 constant MIN_DEPTH = 1;

View File

@@ -1,5 +1,5 @@
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
pragma solidity >=0.8.23 <=0.8.28;
import {ISemaphoreGroups} from "../interfaces/ISemaphoreGroups.sol";
import {InternalLeanIMT, LeanIMTData} from "@zk-kit/lean-imt.sol/InternalLeanIMT.sol";

View File

@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
// Part of this file was generated with [snarkJS](https://github.com/iden3/snarkjs).
pragma solidity 0.8.23;
pragma solidity >=0.8.23 <=0.8.28;
import {MAX_DEPTH} from "./Constants.sol";
import {SemaphoreVerifierKeyPts} from "./SemaphoreVerifierKeyPts.sol";
@@ -59,7 +59,10 @@ contract SemaphoreVerifier {
mstore(add(mIn, 32), y)
mstore(add(mIn, 64), s)
success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)
// ecMul gas cost is fixed at 6000. Add 33.3% gas for safety buffer.
// Last checked in 2024 Oct, evm codename Cancun
// ref: https://www.evm.codes/precompiled?fork=cancun#0x07
success := staticcall(8000, 7, mIn, 96, mIn, 64)
if iszero(success) {
mstore(0, 0)
@@ -69,7 +72,10 @@ contract SemaphoreVerifier {
mstore(add(mIn, 64), mload(pR))
mstore(add(mIn, 96), mload(add(pR, 32)))
success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)
// ecAdd gas cost is fixed at 150. Add 33.3% gas for safety buffer.
// Last checked in 2024 Oct, evm codename Cancun
// ref: https://www.evm.codes/precompiled?fork=cancun#0x06
success := staticcall(200, 6, mIn, 128, pR, 64)
if iszero(success) {
mstore(0, 0)
@@ -149,7 +155,10 @@ contract SemaphoreVerifier {
mstore(add(_pPairing, 704), mload(add(vkPoints, 64)))
mstore(add(_pPairing, 736), mload(add(vkPoints, 96)))
let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)
// ecPairing gas cost at 181000 given 768 bytes input. Add 33.3% gas for safety buffer.
// Last checked in 2024 Oct, evm codename Cancun
// ref: https://www.evm.codes/precompiled?fork=cancun#0x08
let success := staticcall(241333, 8, _pPairing, 768, _pPairing, 0x20)
isOk := and(success, mload(_pPairing))
}

View File

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: MIT
// Part of this file was generated with [snarkJS](https://github.com/iden3/snarkjs).
pragma solidity 0.8.23;
pragma solidity >=0.8.23 <=0.8.28;
library SemaphoreVerifierKeyPts {
error Semaphore__VKPtBytesMaxDepthInvariantViolated(uint256 actual, uint256 expected);

View File

@@ -1,5 +1,5 @@
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
pragma solidity >=0.8.23 <=0.8.28;
/// @title Semaphore contract interface.
interface ISemaphore {

View File

@@ -1,5 +1,5 @@
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
pragma solidity >=0.8.23 <=0.8.28;
/// @title SemaphoreGroups contract interface.
interface ISemaphoreGroups {

View File

@@ -1,5 +1,5 @@
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
pragma solidity >=0.8.23 <=0.8.28;
/// @title SemaphoreVerifier contract interface.
interface ISemaphoreVerifier {

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/contracts",
"version": "4.4.2",
"version": "4.7.0",
"description": "Semaphore contracts to manage groups and broadcast anonymous signals.",
"license": "MIT",
"files": [

View File

@@ -64,6 +64,14 @@ const hardhatConfig: HardhatUserConfig = {
apiURL: "https://api.lineascan.build/api",
browserURL: "https://lineascan.build"
}
},
{
network: "scroll-sepolia",
chainId: 534351,
urls: {
apiURL: "https://api-sepolia.scrollscan.com/api",
browserURL: "https://sepolia.scrollscan.com"
}
}
]
},

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/core",
"version": "4.4.2",
"version": "4.7.0",
"description": "Core library for the essential Semaphore features.",
"type": "module",
"license": "MIT",
@@ -42,8 +42,8 @@
"access": "public"
},
"dependencies": {
"@semaphore-protocol/group": "4.4.2",
"@semaphore-protocol/identity": "4.4.2",
"@semaphore-protocol/proof": "4.4.2"
"@semaphore-protocol/group": "4.7.0",
"@semaphore-protocol/identity": "4.7.0",
"@semaphore-protocol/proof": "4.7.0"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/data",
"version": "4.4.2",
"version": "4.7.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.4.2",
"@semaphore-protocol/utils": "4.7.0",
"axios": "1.6.6",
"ethers": "6.11.0"
}

View File

@@ -40,7 +40,7 @@ export default class SemaphoreEthers {
* @param options Configuration options for the ethers provider and the Semaphore contract.
*/
constructor(networkOrEthereumURL: EthersNetwork | string = defaultNetwork, options: EthersOptions = {}) {
checkParameter(networkOrEthereumURL, "networkOrSubgraphURL", "string")
checkParameter(networkOrEthereumURL, "networkOrEthereumURL", "string")
if (options.provider) {
checkParameter(options.provider, "provider", "string")

View File

@@ -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.0.0`
return `https://api.studio.thegraph.com/query/14377/semaphore-${supportedNetwork}/v4.1.0`
}

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/group",
"version": "4.4.2",
"version": "4.7.0",
"description": "A library to create and manage Semaphore groups.",
"type": "module",
"license": "MIT",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/hardhat",
"version": "4.4.2",
"version": "4.7.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.4.2",
"@semaphore-protocol/contracts": "4.7.0",
"ethers": "^6.4.0",
"hardhat-dependency-compiler": "^1.1.3"
}

View File

@@ -129,3 +129,11 @@ const signature = identity.signMessage(message)
Identity.verifySignature(message, signature, identity.publicKey)
```
\# **Identity.generateCommitment**(publicKey: _Point_): _bigint_
```typescript
import { Identity } from "@semaphore-protocol/identity"
Identity.generateCommitment(identity.publicKey)
```

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/identity",
"version": "4.4.2",
"version": "4.7.0",
"description": "A library to create Semaphore identities.",
"type": "module",
"license": "MIT",

View File

@@ -1,10 +1,13 @@
import type { Point } from "@zk-kit/baby-jubjub"
import { EdDSAPoseidon, Signature, signMessage, verifySignature } from "@zk-kit/eddsa-poseidon"
import { EdDSAPoseidon, type Signature, signMessage, verifySignature } from "@zk-kit/eddsa-poseidon"
import type { BigNumberish } from "@zk-kit/utils"
import { base64ToBuffer, bufferToBase64, textToBase64 } from "@zk-kit/utils/conversions"
import { isString } from "@zk-kit/utils/type-checks"
import { poseidon2 } from "poseidon-lite/poseidon2"
export type { Point }
export type { Signature }
/**
* The Semaphore identity is essentially an {@link https://www.rfc-editor.org/rfc/rfc8032 | EdDSA}
* public/private key pair. The {@link https://github.com/privacy-scaling-explorations/zk-kit/tree/main/packages/eddsa-poseidon | EdDSA implementation}

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/proof",
"version": "4.4.2",
"version": "4.7.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.4.2",
"@semaphore-protocol/identity": "4.4.2"
"@semaphore-protocol/group": "4.7.0",
"@semaphore-protocol/identity": "4.7.0"
},
"dependencies": {
"@semaphore-protocol/utils": "4.4.2",
"@semaphore-protocol/utils": "4.7.0",
"@zk-kit/artifacts": "1.8.0",
"@zk-kit/utils": "1.2.1",
"ethers": "6.10.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@semaphore-protocol/utils",
"version": "4.4.2",
"version": "4.7.0",
"description": "A library to provide utility functions to the other Semaphore packages.",
"type": "module",
"license": "MIT",

View File

@@ -4,18 +4,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 6333999
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 6983614
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 6333999
"startBlock": 6983614
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 6333999
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 6983614
}
]
},
@@ -24,18 +24,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 64798522
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 93258221
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 64798522
"startBlock": 93258221
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 64798522
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 93258221
}
]
},
@@ -44,18 +44,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 14757931
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 19289434
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 14757931
"startBlock": 19289434
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 14757931
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 19289434
}
]
},
@@ -64,18 +64,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 9636193
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 13850778
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 9636193
"startBlock": 13850778
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 9636193
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 13850778
}
]
},
@@ -84,18 +84,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 258951463
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 269586534
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 258951463
"startBlock": 269586534
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 258951463
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 269586534
}
]
},
@@ -104,18 +104,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 62466952
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 63715311
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 62466952
"startBlock": 63715311
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 62466952
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 63715311
}
]
},
@@ -124,18 +124,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 126057798
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 127391657
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 126057798
"startBlock": 127391657
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 126057798
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 127391657
}
]
},
@@ -144,18 +144,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 16008294
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 17307202
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 16008294
"startBlock": 17307202
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 16008294
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 17307202
}
]
},
@@ -164,18 +164,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 3928632
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 5225214
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 3928632
"startBlock": 5225214
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 3928632
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 5225214
}
]
},
@@ -184,18 +184,18 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 20553357
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 21796660
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 20553357
"startBlock": 21796660
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 20553357
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 21796660
}
]
},
@@ -204,18 +204,38 @@
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0xe538f9DeeE04A397decb1E7dc5D16fD6f123c043",
"startBlock": 10235849
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 11459722
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 10235849
"startBlock": 11459722
},
{
"name": "Semaphore",
"address": "0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f",
"startBlock": 10235849
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 11459722
}
]
},
{
"network": "scroll-sepolia",
"contracts": [
{
"name": "SemaphoreVerifier",
"address": "0x6C42599435B82121794D835263C846384869502d",
"startBlock": 7397758
},
{
"name": "PoseidonT3",
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
"startBlock": 7397758
},
{
"name": "Semaphore",
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
"startBlock": 7397758
}
]
}

View File

@@ -64,5 +64,11 @@ export default {
url: "https://rpc.linea.build",
chainId: 59144,
explorer: "https://lineascan.build"
},
"scroll-sepolia": {
name: "Scroll Sepolia",
url: "https://sepolia-rpc.scroll.io",
chainId: 534351,
explorer: "https://sepolia.scrollscan.com"
}
}

View File

@@ -10,10 +10,12 @@ async function maybePushToSoldeer() {
const response = await fetch(
"https://api.soldeer.xyz/api/v1/revision?project_name=semaphore-protocol-contracts&limit=1"
)
const { data, status } = await response.json()
const { data } = await response.json()
// fail status if no version published at all yet
if (status === "fail" || compare(contractsLocalVersion, data[0].version) === 1)
if (
data.length === 0 || // data = [] if no version has ever been published yet
compare(contractsLocalVersion, data[0].version) === 1
)
execSync(`soldeer push semaphore-protocol-contracts~${contractsLocalVersion} packages/contracts/contracts`, {
stdio: "inherit"
})

2681
yarn.lock

File diff suppressed because it is too large Load Diff