Files
semaphore/packages/group
Jeeiii ba99809deb chore: update copyright year
Former-commit-id: 1847f0bc40
2024-01-12 10:54:42 +00:00
..
2024-01-12 10:54:42 +00:00
2024-01-12 10:54:42 +00:00
2024-01-12 10:54:42 +00:00
2024-01-12 10:54:42 +00:00
2024-01-12 10:54:42 +00:00

Semaphore group

A library to create and manage Semaphore groups.

Github license NPM version Downloads Documentation typedoc Linter eslint Code style prettier

This library is an abstraction of the LeanIMT data structure (part of @zk-kit/imt). The main goal is to make it easier to create offchain groups, which are also used to generate Semaphore proofs. Semaphore groups are actually Merkle trees, and the group members are tree leaves.

🛠 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(members: BigNumberish[] = []): Group

import { Group } from "@semaphore-protocol/group"
import { Identity } from "@semaphore-protocol/identity"

const group1 = new Group()

const identity1 = new Identity()
const identity2 = new Identity()

const group2 = new Group([identity1.commitment, identity2.commitment])

# addMember(member: BigNumberish)

import { Group } from "@semaphore-protocol/group"
import { Identity } from "@semaphore-protocol/identity"

const group = new Group()

const { commitment } = new Identity()

group.addMember(commitment)

// "12989101133047504182892154686643420754368236204022364847543591045056549053997"
console.log(group.members[0])

# addMembers(members: BigNumberish[])

import { Group } from "@semaphore-protocol/group"
import { Identity } from "@semaphore-protocol/identity"

const group = new Group()

const identity1 = new Identity()
const identity2 = new Identity()

group.addMembers([identity1.commitment, identity2.commitment])

# updateMember(index: number, member: BigNumberish)

import { Group } from "@semaphore-protocol/group"

const group = new Group([1, 3])

group.updateMember(0, 2)

console.log(group.members[0]) // "2"

# removeMember(index: number)

import { Group } from "@semaphore-protocol/group"

const group = new Group([1, 3])

group.removeMember(0)

console.log(group.members[0]) // "0"

# indexOf(member: BigNumberish): number

import { Group } from "@semaphore-protocol/group"

const group = new Group([1])

const index = group.indexOf(1)

console.log(index) // 0

# generateMerkleProof(index: number): MerkleProof

import { Group } from "@semaphore-protocol/group"

const group = new Group([1, 3])

const proof = group.generateMerkleProof(0)

console.log(proof)
/*
{
    index: 0,
    leaf: '1',
    root: '21106761926285267690763443010820487107972411248208546226053195422384279971821',
    siblings: [ '3' ]
}
*/