mirror of
https://github.com/semaphore-protocol/semaphore.git
synced 2026-01-13 00:28:00 -05:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18f77ac0bb | ||
|
|
f3c4cf27e2 | ||
|
|
57132a38df | ||
|
|
6ef16976f7 | ||
|
|
2849ca1d24 | ||
|
|
d05d783852 | ||
|
|
993e46a427 | ||
|
|
f984c1e864 |
@@ -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.9.2",
|
||||
"@semaphore-protocol/utils": "4.11.0",
|
||||
"@svgr/webpack": "^5.5.0",
|
||||
"clsx": "^1.2.1",
|
||||
"docusaurus-plugin-sass": "^0.2.5",
|
||||
|
||||
@@ -87,6 +87,11 @@ You may choose to delegate such functionality to existing wallets such as Metama
|
||||
3. The user can now recreate their Semaphore identity whenever they want by signing the same message with their Ethereum account in Metamask.
|
||||
:::
|
||||
|
||||
:::warning Privacy risk
|
||||
If a user signs the **same message** on multiple websites using MetaMask, all those websites will be able to **generate the same Semaphore identity**. This undermines anonymity and may allow third parties to **link identities across platforms** or even **gain control over a user's identity**.\
|
||||
To mitigate this, encourage users to sign **unique messages per application** or implement safeguards that detect and warn about reuse.
|
||||
:::
|
||||
|
||||
## Sign and verify messages
|
||||
|
||||
Semaphore V4 uses asymmetric cryptography and in particular EdDSA to generate the identity keys. It is therefore also possible to sign messages and verify their signatures.
|
||||
|
||||
@@ -47,6 +47,7 @@ You can access any subgraph supported by Semaphore with the following URL: `http
|
||||
Supported networks:
|
||||
|
||||
- `sepolia`
|
||||
- `ethereum`
|
||||
- `optimism`
|
||||
- `optimism-sepolia`
|
||||
- `arbitrum`
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
"codegen:sepolia": "yarn codegen sepolia",
|
||||
"build": "graph build",
|
||||
"build:sepolia": "yarn codegen:sepolia && graph build",
|
||||
"auth": "graph auth --studio",
|
||||
"deploy": "graph deploy --studio ${0}",
|
||||
"auth": "graph auth",
|
||||
"deploy": "graph deploy ${0}",
|
||||
"start-ipfs": "node scripts/start-ipfs.js",
|
||||
"create-local": "graph create --node http://localhost:8020/ semaphore",
|
||||
"remove-local": "graph remove --node http://localhost:8020/ semaphore",
|
||||
|
||||
@@ -15,6 +15,10 @@ function mapNetwork(n) {
|
||||
return "arbitrum-one"
|
||||
}
|
||||
|
||||
if (n === "ethereum") {
|
||||
return "mainnet"
|
||||
}
|
||||
|
||||
return network
|
||||
}
|
||||
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
[
|
||||
{
|
||||
"name": "DIF - Decentralized Identity Foundation",
|
||||
"date": "Oct 1 - Nov 4, 2024",
|
||||
"description": "Semaphore team will deliver a talk and sponsor prizes for the online hackathon.",
|
||||
"link": "https://identity.foundation/"
|
||||
"name": "ETHDam",
|
||||
"date": "May 9-11, 2025",
|
||||
"description": "Semaphore team will deliver an in-person talk.",
|
||||
"link": "https://www.ethdam.com/"
|
||||
},
|
||||
{
|
||||
"name": "Devcon",
|
||||
"date": "Nov 12-15, 2024",
|
||||
"name": "ZuBerlin",
|
||||
"date": "June 14-22, 2025",
|
||||
"description": "Semaphore team will deliver an in-person talk.",
|
||||
"link": "https://zuberlin.city/"
|
||||
},
|
||||
{
|
||||
"name": "Devconnect",
|
||||
"date": "Nov 17-22, 2025",
|
||||
"description": "Semaphore team will deliver an in-person talk and run workshops.",
|
||||
"link": "https://devcon.org/en/"
|
||||
},
|
||||
{
|
||||
"name": "ETHIndia",
|
||||
"date": "Dec 6-8, 2024",
|
||||
"description": "Semaphore team will deliver an in-person talk on Semaphore and Bandada.",
|
||||
"link": "https://ethindia.co"
|
||||
"link": "https://devconnect.org/"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -575,5 +575,16 @@
|
||||
"links": {
|
||||
"github": "https://github.com/quartz-technology/obscurus"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Semaphore Modular Smart Account Modules",
|
||||
"categories": ["Wallet", "Privacy"],
|
||||
"tagline": "Anonymous multi-sig wallet with Semaphore",
|
||||
"pse": false,
|
||||
"icon": "",
|
||||
"links": {
|
||||
"github": "https://github.com/jimmychu0807/semaphore-msa-modules",
|
||||
"website": "https://semaphore-msa-modules.jimmychu0807.hk"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Semaphore Rust Implementation",
|
||||
"done": false
|
||||
"done": true
|
||||
},
|
||||
{
|
||||
"name": "Semaphore Noir Implementation",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/circuits",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.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.9.2",
|
||||
"version": "4.11.0",
|
||||
"description": "Semaphore Foundry template.",
|
||||
"license": "Unlicense",
|
||||
"devDependencies": {
|
||||
"@semaphore-protocol/contracts": "4.9.2",
|
||||
"@semaphore-protocol/contracts": "4.11.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.9.2",
|
||||
"version": "4.11.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.9.2",
|
||||
"@semaphore-protocol/hardhat": "4.9.2",
|
||||
"@semaphore-protocol/utils": "4.9.2",
|
||||
"@semaphore-protocol/core": "4.11.0",
|
||||
"@semaphore-protocol/hardhat": "4.11.0",
|
||||
"@semaphore-protocol/utils": "4.11.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.9.2"
|
||||
"@semaphore-protocol/contracts": "4.11.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.9.2",
|
||||
"@semaphore-protocol/hardhat": "4.9.2",
|
||||
"@semaphore-protocol/utils": "4.9.2",
|
||||
"@semaphore-protocol/core": "4.11.0",
|
||||
"@semaphore-protocol/hardhat": "4.11.0",
|
||||
"@semaphore-protocol/utils": "4.11.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.9.2"
|
||||
"@semaphore-protocol/contracts": "4.11.0"
|
||||
},
|
||||
"packageManager": "yarn@4.1.0"
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/core": "4.9.2",
|
||||
"@semaphore-protocol/data": "4.9.2",
|
||||
"@semaphore-protocol/utils": "4.9.2",
|
||||
"@semaphore-protocol/core": "4.11.0",
|
||||
"@semaphore-protocol/data": "4.11.0",
|
||||
"@semaphore-protocol/utils": "4.11.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.9.2",
|
||||
"version": "4.11.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.9.2",
|
||||
"@semaphore-protocol/hardhat": "4.9.2",
|
||||
"@semaphore-protocol/utils": "4.9.2",
|
||||
"@semaphore-protocol/core": "4.11.0",
|
||||
"@semaphore-protocol/hardhat": "4.11.0",
|
||||
"@semaphore-protocol/utils": "4.11.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.9.2"
|
||||
"@semaphore-protocol/contracts": "4.11.0"
|
||||
},
|
||||
"packageManager": "yarn@4.1.0"
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/core": "4.9.2",
|
||||
"@semaphore-protocol/data": "4.9.2",
|
||||
"@semaphore-protocol/utils": "4.9.2",
|
||||
"@semaphore-protocol/core": "4.11.0",
|
||||
"@semaphore-protocol/data": "4.11.0",
|
||||
"@semaphore-protocol/utils": "4.11.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.9.2",
|
||||
"version": "4.11.0",
|
||||
"description": "Semaphore Hardhat + Next.js + SemaphoreSubgraph template.",
|
||||
"license": "Unlicense",
|
||||
"files": [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/cli",
|
||||
"type": "module",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.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.9.2",
|
||||
"@semaphore-protocol/utils": "4.9.2",
|
||||
"@semaphore-protocol/data": "4.11.0",
|
||||
"@semaphore-protocol/utils": "4.11.0",
|
||||
"axios": "^1.6.7",
|
||||
"boxen": "^7.1.1",
|
||||
"chalk": "^5.3.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/contracts",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.0",
|
||||
"description": "Semaphore contracts to manage groups and broadcast anonymous signals.",
|
||||
"license": "MIT",
|
||||
"files": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/core",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.0",
|
||||
"description": "Core library for the essential Semaphore features.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
@@ -42,8 +42,8 @@
|
||||
"access": "public"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/group": "4.9.2",
|
||||
"@semaphore-protocol/identity": "4.9.2",
|
||||
"@semaphore-protocol/proof": "4.9.2"
|
||||
"@semaphore-protocol/group": "4.11.0",
|
||||
"@semaphore-protocol/identity": "4.11.0",
|
||||
"@semaphore-protocol/proof": "4.11.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,8 +49,8 @@
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
| This library provides tools for querying and interacting with the [`Semaphore.sol`](https://github.com/semaphore-protocol/semaphore/blob/main/packages/contracts/contracts/Semaphore.sol) smart contract. It supports both the Semaphore subgraph and direct Ethereum network connections via Ethers. Designed for use in both Node.js and browser environments, it facilitates the management of group data and verification processes within the Semaphore protocol. |
|
||||
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| This library provides tools for querying and interacting with the [`Semaphore.sol`](https://github.com/semaphore-protocol/semaphore/blob/main/packages/contracts/contracts/Semaphore.sol) smart contract. It supports the Semaphore subgraph and direct Ethereum network connections via Ethers or Viem. Designed for use in both Node.js and browser environments, it facilitates the management of group data and verification processes within the Semaphore protocol. |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
|
||||
## 🛠 Install
|
||||
|
||||
@@ -187,3 +187,59 @@ const isMember = await semaphoreEthers.isGroupMember(
|
||||
"16948514235341957898454876473214737047419402240398321289450170535251226167324"
|
||||
)
|
||||
```
|
||||
|
||||
### Using Viem for Direct Blockchain Interaction
|
||||
|
||||
**Initialize a Semaphore Viem instance**
|
||||
|
||||
```typescript
|
||||
import { SemaphoreViem } from "@semaphore-protocol/data"
|
||||
|
||||
const semaphoreViem = new SemaphoreViem()
|
||||
|
||||
// or:
|
||||
const semaphoreViemOnSepolia = new SemaphoreViem("sepolia", {
|
||||
address: "semaphore-address",
|
||||
startBlock: 0n
|
||||
})
|
||||
|
||||
// or:
|
||||
const localViemInstance = new SemaphoreViem("http://localhost:8545", {
|
||||
address: "semaphore-address"
|
||||
})
|
||||
```
|
||||
|
||||
With your SemaphoreViem instance, you can:
|
||||
|
||||
**Fetch Group IDs**
|
||||
|
||||
```typescript
|
||||
const groupIds = await semaphoreViem.getGroupIds()
|
||||
```
|
||||
|
||||
**Fetch Group Details**
|
||||
|
||||
```typescript
|
||||
const group = await semaphoreViem.getGroup("42")
|
||||
```
|
||||
|
||||
**Fetch Group Members**
|
||||
|
||||
```typescript
|
||||
const members = await semaphoreViem.getGroupMembers("42")
|
||||
```
|
||||
|
||||
**Fetch Validated Proofs**
|
||||
|
||||
```typescript
|
||||
const validatedProofs = await semaphoreViem.getGroupValidatedProofs("42")
|
||||
```
|
||||
|
||||
**Check Group Membership**
|
||||
|
||||
```typescript
|
||||
const isMember = await semaphoreViem.isGroupMember(
|
||||
"42",
|
||||
"16948514235341957898454876473214737047419402240398321289450170535251226167324"
|
||||
)
|
||||
```
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/data",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.0",
|
||||
"description": "A library for querying Semaphore smart contract.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
@@ -37,9 +37,10 @@
|
||||
"rollup-plugin-cleanup": "^3.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/utils": "4.9.2",
|
||||
"@semaphore-protocol/utils": "4.11.0",
|
||||
"@zk-kit/utils": "1.3.0",
|
||||
"axios": "1.6.6",
|
||||
"ethers": "6.13.4"
|
||||
"ethers": "6.13.4",
|
||||
"viem": "2.23.7"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.2.0`
|
||||
return `https://api.studio.thegraph.com/query/14377/semaphore-${supportedNetwork}/v4.3.0`
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import SemaphoreEthers from "./ethers"
|
||||
import SemaphoreSubgraph from "./subgraph"
|
||||
import SemaphoreViem from "./viem"
|
||||
|
||||
export * from "./types"
|
||||
export { SemaphoreSubgraph, SemaphoreEthers }
|
||||
export { SemaphoreSubgraph, SemaphoreEthers, SemaphoreViem }
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { Chain, Transport } from "viem"
|
||||
|
||||
export type EthersNetwork =
|
||||
| "mainnet"
|
||||
| "sepolia"
|
||||
@@ -12,6 +14,8 @@ export type EthersNetwork =
|
||||
| "linea"
|
||||
| "linea-sepolia"
|
||||
|
||||
export type ViemNetwork = EthersNetwork
|
||||
|
||||
export type GroupOptions = {
|
||||
members?: boolean
|
||||
validatedProofs?: boolean
|
||||
@@ -54,3 +58,11 @@ export type EthersOptions = {
|
||||
applicationId?: string // Pocket
|
||||
applicationSecret?: string // Pocket
|
||||
}
|
||||
|
||||
export type ViemOptions = {
|
||||
address?: string
|
||||
startBlock?: bigint | number
|
||||
transport?: Transport // Transport from viem
|
||||
chain?: Chain // Chain from viem
|
||||
apiKey?: string
|
||||
}
|
||||
|
||||
405
packages/data/src/viem.ts
Normal file
405
packages/data/src/viem.ts
Normal file
@@ -0,0 +1,405 @@
|
||||
import {
|
||||
SupportedNetwork,
|
||||
defaultNetwork,
|
||||
getDeployedContract,
|
||||
isSupportedNetwork
|
||||
} from "@semaphore-protocol/utils/networks"
|
||||
import { SemaphoreABI } from "@semaphore-protocol/utils/constants"
|
||||
import { requireString } from "@zk-kit/utils/error-handlers"
|
||||
import {
|
||||
Address,
|
||||
createPublicClient,
|
||||
http,
|
||||
PublicClient,
|
||||
getContract,
|
||||
GetContractReturnType,
|
||||
zeroAddress,
|
||||
Transport,
|
||||
Chain,
|
||||
Log
|
||||
} from "viem"
|
||||
import { GroupResponse, ViemNetwork, ViemOptions } from "./types"
|
||||
|
||||
// Define types for the event logs to properly access args
|
||||
type GroupCreatedLog = Log<bigint, number, boolean, any, any, any, "GroupCreated"> & {
|
||||
args: {
|
||||
groupId: bigint
|
||||
}
|
||||
}
|
||||
|
||||
type MemberRemovedLog = Log<bigint, number, boolean, any, any, any, "MemberRemoved"> & {
|
||||
args: {
|
||||
groupId: string
|
||||
index: bigint
|
||||
}
|
||||
}
|
||||
|
||||
type MemberUpdatedLog = Log<bigint, number, boolean, any, any, any, "MemberUpdated"> & {
|
||||
args: {
|
||||
groupId: string
|
||||
index: bigint
|
||||
newIdentityCommitment: string
|
||||
}
|
||||
}
|
||||
|
||||
type MembersAddedLog = Log<bigint, number, boolean, any, any, any, "MembersAdded"> & {
|
||||
args: {
|
||||
groupId: string
|
||||
startIndex: bigint
|
||||
identityCommitments: string[]
|
||||
}
|
||||
}
|
||||
|
||||
type MemberAddedLog = Log<bigint, number, boolean, any, any, any, "MemberAdded"> & {
|
||||
args: {
|
||||
groupId: string
|
||||
index: bigint
|
||||
identityCommitment: string
|
||||
}
|
||||
}
|
||||
|
||||
type ProofValidatedLog = Log<bigint, number, boolean, any, any, any, "ProofValidated"> & {
|
||||
args: {
|
||||
groupId: string
|
||||
message: string
|
||||
merkleTreeRoot: string
|
||||
merkleTreeDepth: string
|
||||
scope: string
|
||||
nullifier: string
|
||||
x: string
|
||||
y: string
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The SemaphoreViem class provides a high-level interface to interact with the Semaphore smart contract
|
||||
* using the {@link https://viem.sh | viem} library. It encapsulates all necessary functionalities to connect to Ethereum networks,
|
||||
* manage contract instances, and perform operations such as retrieving group information or checking group memberships.
|
||||
* This class simplifies the interaction with the Ethereum blockchain by abstracting the details of network connections
|
||||
* and contract interactions.
|
||||
*/
|
||||
export default class SemaphoreViem {
|
||||
private _network: ViemNetwork | string
|
||||
private _options: ViemOptions
|
||||
private _client: PublicClient
|
||||
private _contract: GetContractReturnType<typeof SemaphoreABI, PublicClient>
|
||||
|
||||
/**
|
||||
* Constructs a new SemaphoreViem instance, initializing it with a network or a custom Ethereum node URL,
|
||||
* and optional configuration settings for the viem client and contract.
|
||||
* @param networkOrEthereumURL The Ethereum network name or a custom JSON-RPC URL to connect to.
|
||||
* @param options Configuration options for the viem client and the Semaphore contract.
|
||||
*/
|
||||
constructor(networkOrEthereumURL: ViemNetwork | string = defaultNetwork, options: ViemOptions = {}) {
|
||||
requireString(networkOrEthereumURL, "networkOrEthereumURL")
|
||||
|
||||
if (options.transport) {
|
||||
// Transport is provided directly
|
||||
} else if (!networkOrEthereumURL.startsWith("http")) {
|
||||
// Default to http transport if no transport is provided and network is not a URL
|
||||
options.transport = http()
|
||||
}
|
||||
|
||||
if (options.apiKey) {
|
||||
requireString(options.apiKey, "apiKey")
|
||||
}
|
||||
|
||||
if (isSupportedNetwork(networkOrEthereumURL)) {
|
||||
const { address, startBlock } = getDeployedContract(networkOrEthereumURL as SupportedNetwork)
|
||||
|
||||
options.address ??= address
|
||||
options.startBlock ??= BigInt(startBlock || 0)
|
||||
} else {
|
||||
options.startBlock ??= 0n
|
||||
}
|
||||
|
||||
if (options.address === undefined) {
|
||||
throw new Error(`Network '${networkOrEthereumURL}' needs a Semaphore contract address`)
|
||||
}
|
||||
|
||||
// Create the public client
|
||||
let transport: Transport
|
||||
|
||||
if (options.transport) {
|
||||
transport = options.transport
|
||||
} else {
|
||||
// If no transport is provided, use http transport with the URL
|
||||
transport = http(networkOrEthereumURL)
|
||||
}
|
||||
|
||||
this._network = networkOrEthereumURL
|
||||
this._options = options
|
||||
|
||||
// Create the public client
|
||||
this._client = createPublicClient({
|
||||
transport,
|
||||
chain: options.chain as Chain
|
||||
})
|
||||
|
||||
// Create the contract instance
|
||||
this._contract = getContract({
|
||||
address: options.address as Address,
|
||||
abi: SemaphoreABI,
|
||||
client: this._client
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the Ethereum network or custom URL currently used by this instance.
|
||||
* @returns The network or URL as a string.
|
||||
*/
|
||||
get network(): ViemNetwork | string {
|
||||
return this._network
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the options used for configuring the viem client and the Semaphore contract.
|
||||
* @returns The configuration options.
|
||||
*/
|
||||
get options(): ViemOptions {
|
||||
return this._options
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the viem Contract instance used to interact with the Semaphore contract.
|
||||
* @returns The Contract instance.
|
||||
*/
|
||||
get contract(): GetContractReturnType<typeof SemaphoreABI, PublicClient> {
|
||||
return this._contract
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the viem Public Client instance used to interact with the blockchain.
|
||||
* @returns The Public Client instance.
|
||||
*/
|
||||
get client(): PublicClient {
|
||||
return this._client
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the list of group IDs from the Semaphore contract by querying the "GroupCreated" events.
|
||||
* @returns A promise that resolves to an array of group IDs as strings.
|
||||
*/
|
||||
async getGroupIds(): Promise<string[]> {
|
||||
const logs = (await this._client.getContractEvents({
|
||||
address: this._options.address as Address,
|
||||
abi: SemaphoreABI,
|
||||
eventName: "GroupCreated",
|
||||
fromBlock: BigInt(this._options.startBlock || 0)
|
||||
})) as GroupCreatedLog[]
|
||||
|
||||
return logs.map((log) => log.args.groupId.toString())
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves detailed information about a specific group by its ID. This method queries the Semaphore contract
|
||||
* to get the group's admin, Merkle tree root, depth, and size.
|
||||
* @param groupId The unique identifier of the group.
|
||||
* @returns A promise that resolves to a GroupResponse object.
|
||||
*/
|
||||
async getGroup(groupId: string): Promise<GroupResponse> {
|
||||
requireString(groupId, "groupId")
|
||||
|
||||
const groupAdmin = await this._contract.read.getGroupAdmin([groupId])
|
||||
|
||||
if (groupAdmin === zeroAddress) {
|
||||
throw new Error(`Group '${groupId}' not found`)
|
||||
}
|
||||
|
||||
const merkleTreeRoot = await this._contract.read.getMerkleTreeRoot([groupId])
|
||||
const merkleTreeDepth = await this._contract.read.getMerkleTreeDepth([groupId])
|
||||
const merkleTreeSize = await this._contract.read.getMerkleTreeSize([groupId])
|
||||
|
||||
const group: GroupResponse = {
|
||||
id: groupId,
|
||||
admin: groupAdmin as string,
|
||||
merkleTree: {
|
||||
depth: Number(merkleTreeDepth),
|
||||
size: Number(merkleTreeSize),
|
||||
root: merkleTreeRoot ? merkleTreeRoot.toString() : ""
|
||||
}
|
||||
}
|
||||
|
||||
return group
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches a list of members from a specific group. This method queries the Semaphore contract for events
|
||||
* related to member additions and updates, and constructs the list of current group members.
|
||||
* @param groupId The unique identifier of the group.
|
||||
* @returns A promise that resolves to an array of member identity commitments as strings.
|
||||
*/
|
||||
async getGroupMembers(groupId: string): Promise<string[]> {
|
||||
requireString(groupId, "groupId")
|
||||
|
||||
const groupAdmin = await this._contract.read.getGroupAdmin([groupId])
|
||||
|
||||
if (groupAdmin === zeroAddress) {
|
||||
throw new Error(`Group '${groupId}' not found`)
|
||||
}
|
||||
|
||||
// Get member removed events
|
||||
const memberRemovedEvents = (await this._client.getContractEvents({
|
||||
address: this._options.address as Address,
|
||||
abi: SemaphoreABI,
|
||||
eventName: "MemberRemoved",
|
||||
args: {
|
||||
groupId
|
||||
},
|
||||
fromBlock: BigInt(this._options.startBlock || 0)
|
||||
})) as MemberRemovedLog[]
|
||||
|
||||
// Get member updated events
|
||||
const memberUpdatedEvents = (await this._client.getContractEvents({
|
||||
address: this._options.address as Address,
|
||||
abi: SemaphoreABI,
|
||||
eventName: "MemberUpdated",
|
||||
args: {
|
||||
groupId
|
||||
},
|
||||
fromBlock: BigInt(this._options.startBlock || 0)
|
||||
})) as MemberUpdatedLog[]
|
||||
|
||||
const memberUpdatedEventsMap = new Map<string, [bigint, string]>()
|
||||
|
||||
for (const event of memberUpdatedEvents) {
|
||||
if (event.args.index && event.args.newIdentityCommitment && event.blockNumber) {
|
||||
memberUpdatedEventsMap.set(event.args.index.toString(), [
|
||||
event.blockNumber,
|
||||
event.args.newIdentityCommitment.toString()
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
for (const event of memberRemovedEvents) {
|
||||
if (event.args.index && event.blockNumber) {
|
||||
const groupUpdate = memberUpdatedEventsMap.get(event.args.index.toString())
|
||||
|
||||
if (!groupUpdate || (groupUpdate && groupUpdate[0] < event.blockNumber)) {
|
||||
memberUpdatedEventsMap.set(event.args.index.toString(), [event.blockNumber, "0"])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get members added events (batch additions)
|
||||
const membersAddedEvents = (await this._client.getContractEvents({
|
||||
address: this._options.address as Address,
|
||||
abi: SemaphoreABI,
|
||||
eventName: "MembersAdded",
|
||||
args: {
|
||||
groupId
|
||||
},
|
||||
fromBlock: BigInt(this._options.startBlock || 0)
|
||||
})) as MembersAddedLog[]
|
||||
|
||||
const membersAddedEventsMap = new Map<string, string[]>()
|
||||
|
||||
for (const event of membersAddedEvents) {
|
||||
if (event.args.startIndex && event.args.identityCommitments) {
|
||||
membersAddedEventsMap.set(
|
||||
event.args.startIndex.toString(),
|
||||
event.args.identityCommitments.map((i) => i.toString())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Get individual member added events
|
||||
const memberAddedEvents = (await this._client.getContractEvents({
|
||||
address: this._options.address as Address,
|
||||
abi: SemaphoreABI,
|
||||
eventName: "MemberAdded",
|
||||
args: {
|
||||
groupId
|
||||
},
|
||||
fromBlock: BigInt(this._options.startBlock || 0)
|
||||
})) as MemberAddedLog[]
|
||||
|
||||
const members: string[] = []
|
||||
|
||||
const merkleTreeSize = await this._contract.read.getMerkleTreeSize([groupId])
|
||||
|
||||
let index = 0
|
||||
|
||||
while (index < Number(merkleTreeSize)) {
|
||||
const identityCommitments = membersAddedEventsMap.get(index.toString())
|
||||
|
||||
if (identityCommitments) {
|
||||
members.push(...identityCommitments)
|
||||
index += identityCommitments.length
|
||||
} else {
|
||||
const currentIndex = index // Create a closure to capture the current index value
|
||||
const event = memberAddedEvents.find((e) => e.args.index && Number(e.args.index) === currentIndex)
|
||||
|
||||
if (event && event.args.identityCommitment) {
|
||||
members.push(event.args.identityCommitment.toString())
|
||||
} else {
|
||||
members.push("0") // Placeholder for missing member
|
||||
}
|
||||
|
||||
index += 1
|
||||
}
|
||||
}
|
||||
|
||||
// Apply updates to members
|
||||
for (let j = 0; j < members.length; j += 1) {
|
||||
const groupUpdate = memberUpdatedEventsMap.get(j.toString())
|
||||
|
||||
if (groupUpdate) {
|
||||
members[j] = groupUpdate[1].toString()
|
||||
}
|
||||
}
|
||||
|
||||
return members
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches a list of validated proofs for a specific group. This method queries the Semaphore contract for events
|
||||
* related to proof verification.
|
||||
* @param groupId The unique identifier of the group.
|
||||
* @returns A promise that resolves to an array of validated proofs.
|
||||
*/
|
||||
async getGroupValidatedProofs(groupId: string): Promise<any> {
|
||||
requireString(groupId, "groupId")
|
||||
|
||||
const groupAdmin = await this._contract.read.getGroupAdmin([groupId])
|
||||
|
||||
if (groupAdmin === zeroAddress) {
|
||||
throw new Error(`Group '${groupId}' not found`)
|
||||
}
|
||||
|
||||
const proofValidatedEvents = (await this._client.getContractEvents({
|
||||
address: this._options.address as Address,
|
||||
abi: SemaphoreABI,
|
||||
eventName: "ProofValidated",
|
||||
args: {
|
||||
groupId
|
||||
},
|
||||
fromBlock: BigInt(this._options.startBlock || 0)
|
||||
})) as ProofValidatedLog[]
|
||||
|
||||
return proofValidatedEvents.map((event) => ({
|
||||
message: event.args.message?.toString() || "",
|
||||
merkleTreeRoot: event.args.merkleTreeRoot?.toString() || "",
|
||||
merkleTreeDepth: event.args.merkleTreeDepth?.toString() || "",
|
||||
scope: event.args.scope?.toString() || "",
|
||||
nullifier: event.args.nullifier?.toString() || "",
|
||||
points: [event.args.x?.toString() || "", event.args.y?.toString() || ""],
|
||||
timestamp: event.blockNumber ? new Date(Number(event.blockNumber) * 1000).toISOString() : undefined
|
||||
}))
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a given identity commitment is a member of a specific group.
|
||||
* @param groupId The unique identifier of the group.
|
||||
* @param member The identity commitment to check.
|
||||
* @returns A promise that resolves to a boolean indicating whether the member is in the group.
|
||||
*/
|
||||
async isGroupMember(groupId: string, member: string): Promise<boolean> {
|
||||
requireString(groupId, "groupId")
|
||||
requireString(member, "member")
|
||||
|
||||
const members = await this.getGroupMembers(groupId)
|
||||
|
||||
return members.includes(member)
|
||||
}
|
||||
}
|
||||
1299
packages/data/tests/viem.test.ts
Normal file
1299
packages/data/tests/viem.test.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/group",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.0",
|
||||
"description": "A library to create and manage Semaphore groups.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/hardhat",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.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.9.2",
|
||||
"@semaphore-protocol/contracts": "4.11.0",
|
||||
"ethers": "^6.13.4",
|
||||
"hardhat-dependency-compiler": "^1.1.3"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/identity",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.0",
|
||||
"description": "A library to create Semaphore identities.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/proof",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.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.9.2",
|
||||
"@semaphore-protocol/identity": "4.9.2"
|
||||
"@semaphore-protocol/group": "4.11.0",
|
||||
"@semaphore-protocol/identity": "4.11.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@semaphore-protocol/utils": "4.9.2",
|
||||
"@semaphore-protocol/utils": "4.11.0",
|
||||
"@zk-kit/artifacts": "1.8.0",
|
||||
"@zk-kit/utils": "1.3.0",
|
||||
"ethers": "6.13.4",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@semaphore-protocol/utils",
|
||||
"version": "4.9.2",
|
||||
"version": "4.11.0",
|
||||
"description": "A library to provide utility functions to the other Semaphore packages.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -5,17 +5,37 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 6983614
|
||||
"startBlock": 8263690
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 6983614
|
||||
"startBlock": 8263690
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 6983614
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 8263690
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"network": "ethereum",
|
||||
"contracts": [
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 22424592
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 22424592
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 22424592
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -25,17 +45,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 93258221
|
||||
"startBlock": 149903019
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 93258221
|
||||
"startBlock": 149903019
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 93258221
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 149903019
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -45,17 +65,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 19289434
|
||||
"startBlock": 27341051
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 19289434
|
||||
"startBlock": 27341051
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 19289434
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 27341051
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -65,17 +85,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 13850778
|
||||
"startBlock": 21308099
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 13850778
|
||||
"startBlock": 21308099
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 13850778
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 21308099
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -85,17 +105,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 269586534
|
||||
"startBlock": 333645515
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 269586534
|
||||
"startBlock": 333645515
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 269586534
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 333645515
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -105,17 +125,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 63715311
|
||||
"startBlock": 71158898
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 63715311
|
||||
"startBlock": 71158898
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 63715311
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 71158898
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -125,17 +145,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 127391657
|
||||
"startBlock": 135443119
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 127391657
|
||||
"startBlock": 135443119
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 127391657
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 135443119
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -145,17 +165,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 17307202
|
||||
"startBlock": 25358716
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 17307202
|
||||
"startBlock": 25358716
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 17307202
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 25358716
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -165,17 +185,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 5225214
|
||||
"startBlock": 12757656
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 5225214
|
||||
"startBlock": 12757656
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 5225214
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 12757656
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -185,17 +205,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 21796660
|
||||
"startBlock": 29848242
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 21796660
|
||||
"startBlock": 29848242
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 21796660
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 29848242
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -205,17 +225,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 11459722
|
||||
"startBlock": 18707811
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 11459722
|
||||
"startBlock": 18707811
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 11459722
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 18707811
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -225,17 +245,17 @@
|
||||
{
|
||||
"name": "SemaphoreVerifier",
|
||||
"address": "0x6C42599435B82121794D835263C846384869502d",
|
||||
"startBlock": 7397758
|
||||
"startBlock": 9604960
|
||||
},
|
||||
{
|
||||
"name": "PoseidonT3",
|
||||
"address": "0xB43122Ecb241DD50062641f089876679fd06599a",
|
||||
"startBlock": 7397758
|
||||
"startBlock": 9604960
|
||||
},
|
||||
{
|
||||
"name": "Semaphore",
|
||||
"address": "0x06d1530c829366A7fff0069e77c5af6A6FA7db2E",
|
||||
"startBlock": 7397758
|
||||
"address": "0x697c80d1F2654e88d52B16154929EB976568DB04",
|
||||
"startBlock": 9604960
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,6 +5,12 @@ export default {
|
||||
chainId: 11155111,
|
||||
explorer: "https://sepolia.etherscan.io"
|
||||
},
|
||||
ethereum: {
|
||||
name: "Ethereum",
|
||||
url: "https://eth-mainnet.g.alchemy.com/v2/<your-api-key>",
|
||||
chainId: 1,
|
||||
explorer: "https://etherscan.io"
|
||||
},
|
||||
"arbitrum-sepolia": {
|
||||
name: "Arbitrum Sepolia",
|
||||
url: "https://sepolia-rollup.arbitrum.io/rpc",
|
||||
|
||||
File diff suppressed because one or more lines are too long
210
yarn.lock
210
yarn.lock
@@ -12,6 +12,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@adraffy/ens-normalize@npm:^1.10.1":
|
||||
version: 1.11.0
|
||||
resolution: "@adraffy/ens-normalize@npm:1.11.0"
|
||||
checksum: 10/abef75f21470ea43dd6071168e092d2d13e38067e349e76186c78838ae174a46c3e18ca50921d05bea6ec3203074147c9e271f8cb6531d1c2c0e146f3199ddcb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@algolia/autocomplete-core@npm:1.9.3":
|
||||
version: 1.9.3
|
||||
resolution: "@algolia/autocomplete-core@npm:1.9.3"
|
||||
@@ -6491,7 +6498,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@noble/curves@npm:^1.7.0":
|
||||
"@noble/curves@npm:1.8.1, @noble/curves@npm:^1.6.0, @noble/curves@npm:^1.7.0, @noble/curves@npm:~1.8.1":
|
||||
version: 1.8.1
|
||||
resolution: "@noble/curves@npm:1.8.1"
|
||||
dependencies:
|
||||
@@ -6521,7 +6528,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@noble/hashes@npm:1.7.1, @noble/hashes@npm:^1.6.1":
|
||||
"@noble/hashes@npm:1.7.1, @noble/hashes@npm:^1.5.0, @noble/hashes@npm:^1.6.1, @noble/hashes@npm:~1.7.1":
|
||||
version: 1.7.1
|
||||
resolution: "@noble/hashes@npm:1.7.1"
|
||||
checksum: 10/ca3120da0c3e7881d6a481e9667465cc9ebbee1329124fb0de442e56d63fef9870f8cc96f264ebdb18096e0e36cebc0e6e979a872d545deb0a6fed9353f17e05
|
||||
@@ -7440,6 +7447,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@scure/base@npm:~1.2.2, @scure/base@npm:~1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@scure/base@npm:1.2.4"
|
||||
checksum: 10/4b61679209af40143b49ce7b7570e1d9157c19df311ea6f57cd212d764b0b82222dbe3707334f08bec181caf1f047aca31aa91193c678d6548312cb3f9c82ab1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@scure/bip32@npm:1.1.5":
|
||||
version: 1.1.5
|
||||
resolution: "@scure/bip32@npm:1.1.5"
|
||||
@@ -7462,6 +7476,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@scure/bip32@npm:1.6.2, @scure/bip32@npm:^1.5.0":
|
||||
version: 1.6.2
|
||||
resolution: "@scure/bip32@npm:1.6.2"
|
||||
dependencies:
|
||||
"@noble/curves": "npm:~1.8.1"
|
||||
"@noble/hashes": "npm:~1.7.1"
|
||||
"@scure/base": "npm:~1.2.2"
|
||||
checksum: 10/474ee315a8631aa1a7d378b0521b4494e09a231519ec53d879088cb88c8ff644a89b27a02a8bf0b5a9b1c4c0417acc70636ccdb121b800c34594ae53c723f8d7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@scure/bip39@npm:1.1.1":
|
||||
version: 1.1.1
|
||||
resolution: "@scure/bip39@npm:1.1.1"
|
||||
@@ -7482,6 +7507,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@scure/bip39@npm:1.5.4, @scure/bip39@npm:^1.4.0":
|
||||
version: 1.5.4
|
||||
resolution: "@scure/bip39@npm:1.5.4"
|
||||
dependencies:
|
||||
"@noble/hashes": "npm:~1.7.1"
|
||||
"@scure/base": "npm:~1.2.4"
|
||||
checksum: 10/9f08b433511d7637bc48c51aa411457d5f33da5a85bd03370bf394822b0ea8c007ceb17247a3790c28237303d8fc20c4e7725765940cd47e1365a88319ad0d5c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@semaphore-protocol/circuits@workspace:packages/circuits":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/circuits@workspace:packages/circuits"
|
||||
@@ -7501,7 +7536,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.9.2"
|
||||
"@semaphore-protocol/contracts": "npm:4.11.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"
|
||||
@@ -7521,10 +7556,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.9.2"
|
||||
"@semaphore-protocol/core": "npm:4.9.2"
|
||||
"@semaphore-protocol/hardhat": "npm:4.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.9.2"
|
||||
"@semaphore-protocol/contracts": "npm:4.11.0"
|
||||
"@semaphore-protocol/core": "npm:4.11.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.11.0"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@typechain/ethers-v6": "npm:^0.5.0"
|
||||
"@typechain/hardhat": "npm:^9.0.0"
|
||||
"@types/chai": "npm:^4.2.0"
|
||||
@@ -7574,8 +7609,8 @@ __metadata:
|
||||
resolution: "@semaphore-protocol/cli@workspace:packages/cli"
|
||||
dependencies:
|
||||
"@rollup/plugin-typescript": "npm:^11.1.6"
|
||||
"@semaphore-protocol/data": "npm:4.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.9.2"
|
||||
"@semaphore-protocol/data": "npm:4.11.0"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@types/figlet": "npm:^1.5.8"
|
||||
"@types/inquirer": "npm:^9.0.7"
|
||||
"@types/pacote": "npm:^11.1.8"
|
||||
@@ -7599,7 +7634,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/contracts@npm:4.9.2, @semaphore-protocol/contracts@workspace:packages/contracts/contracts":
|
||||
"@semaphore-protocol/contracts@npm:4.11.0, @semaphore-protocol/contracts@workspace:packages/contracts/contracts":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/contracts@workspace:packages/contracts/contracts"
|
||||
dependencies:
|
||||
@@ -7607,33 +7642,34 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/core@npm:4.9.2, @semaphore-protocol/core@workspace:^, @semaphore-protocol/core@workspace:packages/core":
|
||||
"@semaphore-protocol/core@npm:4.11.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.9.2"
|
||||
"@semaphore-protocol/identity": "npm:4.9.2"
|
||||
"@semaphore-protocol/proof": "npm:4.9.2"
|
||||
"@semaphore-protocol/group": "npm:4.11.0"
|
||||
"@semaphore-protocol/identity": "npm:4.11.0"
|
||||
"@semaphore-protocol/proof": "npm:4.11.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/data@npm:4.9.2, @semaphore-protocol/data@workspace:packages/data":
|
||||
"@semaphore-protocol/data@npm:4.11.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.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@zk-kit/utils": "npm:1.3.0"
|
||||
axios: "npm:1.6.6"
|
||||
ethers: "npm:6.13.4"
|
||||
rimraf: "npm:^5.0.5"
|
||||
rollup: "npm:^4.12.0"
|
||||
rollup-plugin-cleanup: "npm:^3.2.1"
|
||||
viem: "npm:2.23.7"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/group@npm:4.9.2, @semaphore-protocol/group@workspace:packages/group":
|
||||
"@semaphore-protocol/group@npm:4.11.0, @semaphore-protocol/group@workspace:packages/group":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/group@workspace:packages/group"
|
||||
dependencies:
|
||||
@@ -7647,13 +7683,13 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/hardhat@npm:4.9.2, @semaphore-protocol/hardhat@workspace:packages/hardhat":
|
||||
"@semaphore-protocol/hardhat@npm:4.11.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.9.2"
|
||||
"@semaphore-protocol/contracts": "npm:4.11.0"
|
||||
ethers: "npm:^6.13.4"
|
||||
hardhat: "npm:^2.19.4"
|
||||
hardhat-dependency-compiler: "npm:^1.1.3"
|
||||
@@ -7665,7 +7701,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/identity@npm:4.9.2, @semaphore-protocol/identity@workspace:packages/identity":
|
||||
"@semaphore-protocol/identity@npm:4.11.0, @semaphore-protocol/identity@workspace:packages/identity":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/identity@workspace:packages/identity"
|
||||
dependencies:
|
||||
@@ -7681,14 +7717,14 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/proof@npm:4.9.2, @semaphore-protocol/proof@workspace:packages/proof":
|
||||
"@semaphore-protocol/proof@npm:4.11.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.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@types/snarkjs": "npm:^0"
|
||||
"@zk-kit/artifacts": "npm:1.8.0"
|
||||
"@zk-kit/utils": "npm:1.3.0"
|
||||
@@ -7698,12 +7734,12 @@ __metadata:
|
||||
rollup-plugin-cleanup: "npm:^3.2.1"
|
||||
snarkjs: "npm:0.7.4"
|
||||
peerDependencies:
|
||||
"@semaphore-protocol/group": 4.9.2
|
||||
"@semaphore-protocol/identity": 4.9.2
|
||||
"@semaphore-protocol/group": 4.11.0
|
||||
"@semaphore-protocol/identity": 4.11.0
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@semaphore-protocol/utils@npm:4.9.2, @semaphore-protocol/utils@workspace:packages/utils":
|
||||
"@semaphore-protocol/utils@npm:4.11.0, @semaphore-protocol/utils@workspace:packages/utils":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@semaphore-protocol/utils@workspace:packages/utils"
|
||||
dependencies:
|
||||
@@ -9834,6 +9870,21 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"abitype@npm:1.0.8, abitype@npm:^1.0.6":
|
||||
version: 1.0.8
|
||||
resolution: "abitype@npm:1.0.8"
|
||||
peerDependencies:
|
||||
typescript: ">=5.0.4"
|
||||
zod: ^3 >=3.22.0
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
zod:
|
||||
optional: true
|
||||
checksum: 10/878e74fbac6a971953649b6216950437aa5834a604e9fa833a5b275a6967cff59857c7e43594ae906387d2fb7cad9370138dec4298eb8814815a3ffb6365902c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8":
|
||||
version: 1.3.8
|
||||
resolution: "accepts@npm:1.3.8"
|
||||
@@ -15119,6 +15170,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eventemitter3@npm:5.0.1, eventemitter3@npm:^5.0.1":
|
||||
version: 5.0.1
|
||||
resolution: "eventemitter3@npm:5.0.1"
|
||||
checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eventemitter3@npm:^4.0.0":
|
||||
version: 4.0.7
|
||||
resolution: "eventemitter3@npm:4.0.7"
|
||||
@@ -15126,13 +15184,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eventemitter3@npm:^5.0.1":
|
||||
version: 5.0.1
|
||||
resolution: "eventemitter3@npm:5.0.1"
|
||||
checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"events@npm:^3.2.0":
|
||||
version: 3.3.0
|
||||
resolution: "events@npm:3.3.0"
|
||||
@@ -18434,6 +18485,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isows@npm:1.0.6":
|
||||
version: 1.0.6
|
||||
resolution: "isows@npm:1.0.6"
|
||||
peerDependencies:
|
||||
ws: "*"
|
||||
checksum: 10/ab9e85b50bcc3d70aa5ec875aa2746c5daf9321cb376ed4e5434d3c2643c5d62b1f466d93a05cd2ad0ead5297224922748c31707cb4fbd68f5d05d0479dce99c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0":
|
||||
version: 3.2.2
|
||||
resolution: "istanbul-lib-coverage@npm:3.2.2"
|
||||
@@ -21511,10 +21571,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.9.2"
|
||||
"@semaphore-protocol/core": "npm:4.9.2"
|
||||
"@semaphore-protocol/hardhat": "npm:4.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.9.2"
|
||||
"@semaphore-protocol/contracts": "npm:4.11.0"
|
||||
"@semaphore-protocol/core": "npm:4.11.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.11.0"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@typechain/ethers-v6": "npm:^0.5.0"
|
||||
"@typechain/hardhat": "npm:^9.0.0"
|
||||
"@types/chai": "npm:^4.2.0"
|
||||
@@ -21547,9 +21607,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.9.2"
|
||||
"@semaphore-protocol/data": "npm:4.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.9.2"
|
||||
"@semaphore-protocol/core": "npm:4.11.0"
|
||||
"@semaphore-protocol/data": "npm:4.11.0"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@types/node": "npm:^20"
|
||||
"@types/react": "npm:^18"
|
||||
"@types/react-dom": "npm:^18"
|
||||
@@ -21574,10 +21634,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.9.2"
|
||||
"@semaphore-protocol/core": "npm:4.9.2"
|
||||
"@semaphore-protocol/hardhat": "npm:4.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.9.2"
|
||||
"@semaphore-protocol/contracts": "npm:4.11.0"
|
||||
"@semaphore-protocol/core": "npm:4.11.0"
|
||||
"@semaphore-protocol/hardhat": "npm:4.11.0"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@typechain/ethers-v6": "npm:^0.5.0"
|
||||
"@typechain/hardhat": "npm:^9.0.0"
|
||||
"@types/chai": "npm:^4.2.0"
|
||||
@@ -21610,9 +21670,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.9.2"
|
||||
"@semaphore-protocol/data": "npm:4.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.9.2"
|
||||
"@semaphore-protocol/core": "npm:4.11.0"
|
||||
"@semaphore-protocol/data": "npm:4.11.0"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@types/node": "npm:^20"
|
||||
"@types/react": "npm:^18"
|
||||
"@types/react-dom": "npm:^18"
|
||||
@@ -22571,6 +22631,26 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ox@npm:0.6.7":
|
||||
version: 0.6.7
|
||||
resolution: "ox@npm:0.6.7"
|
||||
dependencies:
|
||||
"@adraffy/ens-normalize": "npm:^1.10.1"
|
||||
"@noble/curves": "npm:^1.6.0"
|
||||
"@noble/hashes": "npm:^1.5.0"
|
||||
"@scure/bip32": "npm:^1.5.0"
|
||||
"@scure/bip39": "npm:^1.4.0"
|
||||
abitype: "npm:^1.0.6"
|
||||
eventemitter3: "npm:5.0.1"
|
||||
peerDependencies:
|
||||
typescript: ">=5.4.0"
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: 10/442fb31e1afb68922bf942025930d8cd6d8c677696e9a6de308008b3608669f22127cadbc0f77181e012d23d7b74318e5f85e63b06b16eecbc887d7fac32a6dc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"p-cancelable@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "p-cancelable@npm:3.0.0"
|
||||
@@ -26098,7 +26178,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.9.2"
|
||||
"@semaphore-protocol/utils": "npm:4.11.0"
|
||||
"@svgr/webpack": "npm:^5.5.0"
|
||||
"@types/react": "npm:^18.2.29"
|
||||
clsx: "npm:^1.2.1"
|
||||
@@ -29125,6 +29205,27 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"viem@npm:2.23.7":
|
||||
version: 2.23.7
|
||||
resolution: "viem@npm:2.23.7"
|
||||
dependencies:
|
||||
"@noble/curves": "npm:1.8.1"
|
||||
"@noble/hashes": "npm:1.7.1"
|
||||
"@scure/bip32": "npm:1.6.2"
|
||||
"@scure/bip39": "npm:1.5.4"
|
||||
abitype: "npm:1.0.8"
|
||||
isows: "npm:1.0.6"
|
||||
ox: "npm:0.6.7"
|
||||
ws: "npm:8.18.0"
|
||||
peerDependencies:
|
||||
typescript: ">=5.0.4"
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: 10/bf1618f39ca3645082323776342c0f87fa37f60bcca0476a7db0f6fbb9d1b6db7ab1e434a57463e8486bea29f97c5ab01e95b6139190a008d6f9a30194b7b081
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"vscode-oniguruma@npm:^1.7.0":
|
||||
version: 1.7.0
|
||||
resolution: "vscode-oniguruma@npm:1.7.0"
|
||||
@@ -30022,6 +30123,21 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ws@npm:8.18.0":
|
||||
version: 8.18.0
|
||||
resolution: "ws@npm:8.18.0"
|
||||
peerDependencies:
|
||||
bufferutil: ^4.0.1
|
||||
utf-8-validate: ">=5.0.2"
|
||||
peerDependenciesMeta:
|
||||
bufferutil:
|
||||
optional: true
|
||||
utf-8-validate:
|
||||
optional: true
|
||||
checksum: 10/70dfe53f23ff4368d46e4c0b1d4ca734db2c4149c6f68bc62cb16fc21f753c47b35fcc6e582f3bdfba0eaeb1c488cddab3c2255755a5c3eecb251431e42b3ff6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ws@npm:^7.3.1, ws@npm:^7.4.6":
|
||||
version: 7.5.9
|
||||
resolution: "ws@npm:7.5.9"
|
||||
|
||||
Reference in New Issue
Block a user