Semaphore data
To fetch on-chain data from the Semaphore.sol contract, you can use the @semaphore-protocol/data library.
There are two ways to do this, using SemaphoreSubgraph
or SemaphoreEthers
. The SemaphoreSubgraph
class uses the Semaphore subgraph, which uses The Graph Protocol under the hood, and the SemaphoreEthers
class uses Ethers.
Install libraryβ
- npm
- Yarn
- pnpm
npm install @semaphore-protocol/data@^3
yarn add @semaphore-protocol/data@^3
pnpm add @semaphore-protocol/data@^3
Fetch data using SemaphoreSubgraphβ
To fetch data using the Semaphore subgraph you can use the SemaphoreSubgraph
class from the @semaphore-protocol/data package.
import { SemaphoreSubgraph } from "@semaphore-protocol/data"
const semaphoreSubgraph = new SemaphoreSubgraph()
// or:
const semaphoreSubgraph = new SemaphoreSubgraph("arbitrum")
// or:
const semaphoreSubgraph = new SemaphoreSubgraph(
"https://api.studio.thegraph.com/query/14377/<your-subgraph>/<your-version>"
)
Get group Idsβ
const groupIds = await semaphoreSubgraph.getGroupIds()
Get groupsβ
const groups = await semaphoreSubgraph.getGroups()
// or
const groups = await semaphoreSubgraph.getGroups({ members: true, verifiedProofs: true })
Get groupβ
const group = await semaphoreSubgraph.getGroup("42")
// or
const { members, verifiedProofs } = semaphoreSubgraph.getGroup("42", { members: true, verifiedProofs: true })
Check if an identity commitment is a member of a groupβ
await semaphoreSubgraph.isGroupMember(
"42",
"16948514235341957898454876473214737047419402240398321289450170535251226167324"
)
info
You can create an off-chain group using the SemaphoreSubgraph class to fetch members like so:
import { Group } from "@semaphore-protocol/group"
import { SemaphoreSubgraph } from "@semaphore-protocol/data"
const groupId = "3"
const semaphoreSubgraph = new SemaphoreSubgraph("sepolia")
const { members } = await semaphoreSubgraph.getGroup(groupId, { members: true })
const group = new Group(groupId, 20, members)
Fetch data using SemaphoreEthersβ
To fetch data using Ethers you can use the SemaphoreEthers
class from the @semaphore-protocol/data package.
import { SemaphoreEthers } from "@semaphore-protocol/data"
const semaphoreEthers = new SemaphoreEthers()
// or:
const semaphoreEthers = new SemaphoreEthers("homestead", {
address: "semaphore-address",
startBlock: 0
})
// or:
const semaphoreEthers = new SemaphoreEthers("http://127.0.0.1:8545", {
address: "semaphore-address"
})
Get group Idsβ
const groupIds = await semaphoreEthers.getGroupIds()
Get groupβ
const group = await semaphoreEthers.getGroup("42")
Get group adminβ
const admin = await semaphoreEthers.getGroupAdmin("42")
Get group membersβ
const members = await semaphoreEthers.getGroupMembers("42")
Get group verified proofsβ
const verifiedProofs = await semaphoreEthers.getGroupVerifiedProofs("42")
info
You can create an off-chain group using the SemaphoreEthers class to fetch members like so:
import { Group } from "@semaphore-protocol/group"
import { SemaphoreEthers } from "@semaphore-protocol/data"
const groupId = "3"
const semaphoreEthers = new SemaphoreEthers("sepolia")
const members = await semaphoreEthers.getGroupMembers(groupId)
const group = new Group(groupId, 20, members)