@webb-tools/semaphore-group
v0.0.1-4
Published
A library to create and manage Semaphore-anchor groups.
Downloads
5
Keywords
Readme
| This library is an abstraction of @zk-kit/incremental-merkle-tree
. The main goal is to make it easier to create offchain groups, which are also used to generate Semaphore proofs. Semaphore groups are actually incremental Merkle trees, and the group members are tree leaves. Since the Merkle tree implementation we are using is a binary tree, the maximum number of members of a group is equal to 2^treeDepth
. |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
🛠 Install
npm or yarn
Install the @semaphore-protocol/group
package with npm:
npm i @semaphore-protocol/group
or yarn:
yarn add @semaphore-protocol/group
📜 Usage
# new Group(treeDepth = 20, zeroValue = BigInt(0)): Group
import { Group } from "@semaphore-protocol/group"
// Group with max 1048576 members (20^²).
const group1 = new Group()
// Group with max 65536 members (16^²).
const group2 = new Group(16)
// Group with max 16777216 members (24^²).
const group3 = new Group(24)
# addMember(identityCommitment: Member)
import { Identity } from "@semaphore-protocol/identity"
const identity = new Identity()
const commitment = identity.generateCommitment()
group.addMember(commitment)
# addMembers(identityCommitments: Member[])
let identityCommitments: bigint[]
for (let i = 0; i < 10; i++) {
const identity = new Identity()
const commitment = identity.generateCommitment()
identityCommitments.push(commitment)
}
group.addMember(identityCommitments)
# removeMember(index: number)
group.removeMember(0)
# indexOf(member: Member): number
group.indexOf(commitment) // 0
# generateProofOfMembership(index: number): MerkleProof
const proof = group.generateProofOfMembership(0)