Trusted setup: one contributor. Try it; do not guard value with it yet.

Read the setup record

Prove What Matters. Reveal Less.

Privacy by Proof. Trust by Design.

Prove you are on an allowlist without saying which entry, or that an attested number clears a bar without showing it. Groth16 proofs, built in your browser, checked on Elysium.

Single-contributor setup: not for anything of value. A proof hides which member you are or your exact value; your address, the gate, the time and the nullifier or commitment stay public.

—Elysium blockread live from the public RPC
—Gas price (gwei)paid in HYPE
Not deployedProof gatescontracts are ready, deploy pending
—Claims verified on chainnothing recorded until deployment

Prove it with Zksium

Five tools around one contract on Elysium. Each card says what it does today; the planned list is separate.

Private Eligibility

Prove you are on a gate's allowlist without saying which entry is yours. One claim per member per gate, enforced by a nullifier.

L0L1L2?L4L5L6L7root (public)which leaf is yours: not in the proof

Selective Disclosure

Prove that a value an attester committed to is at least a threshold. The value stays in your browser; only the yes travels.

0threshold 1002^64
value: hidden
what the verifier learnscommitment 0x2b8e…91c4 (attested)value ≥ 100 ✓ truevalue = ▒▒▒ (never sent)

ZK Proof Verification

Check any Zksium proof three ways: in your browser, with the verifier run on Elysium's own precompiles, and against the gate's rules.

proof π · 8 numbers · public inputs 3–4
this browsersnarkjs + verification key✓ valid
Elysium precompileseth_call, no transaction✓ true
ZksiumProofGateroot · nullifier · recipient✓ code 0

Privacy Developer SDK

The same TypeScript package this site runs on: identities, member trees, commitments, Groth16 proofs, bundles and the contract ABI.

import { createIdentity, leafOf, MemberTree,
  proveEligibility, toBundle } from "@zksium/sdk";

const me = createIdentity();          // secret stays local
const tree = new MemberTree(leaves);  // from MemberAdded logs
const p = await proveEligibility(snarkjs, files,
  me, tree.path(i), scope, recipient);
const bundle = toBundle(p, 99901, gate, gateId);

Proof Verification Dashboard

Create proofs, check them, and track each one from generated to recorded on chain. Gates and claims are read live from Elysium.

proofstatus
Eligibility · gate 3Recorded on chain
Threshold ≥ 100Verified on Elysium
Eligibility · gate 1Rejected: nullifier used
example rows: your own list lives in your browser

Before you trust a proof

What stays public

Your address, the gate, the time, the root, and the nullifier or commitment a claim used. A proof hides which member you are, or your exact value.

Secrets never leave

Proofs are built in a Web Worker in your browser. The secret, the value and the salt are never sent to our server or the chain.

Honest trusted setup

Phase 1 from a public Powers of Tau file, checksum verified. Phase 2 had one contributor: fine to try, not safe for value.

One claim per member

Each member gets one nullifier per gate, so a second claim by the same member is refused. Nullifiers differ between gates, so they do not link one member across gates.

Bound to the recipient

The recipient address is part of the proof, so a proof copied from the mempool cannot be redirected to someone else.

Open circuits and verifiers

Circom source, the setup record, the generated Solidity verifiers and 24 Foundry tests with real proofs are in the repository.

BUILT WITH

Circom 2.2.2Groth16snarkjsPoseidonBN254 precompilesElysiumFoundryWeb Workers

Planned, not built

Proof Generation Credits · Developer API · Privacy Tools · Integration Services · Multi-party setup. $ZKSIUM would pay for these once they exist; today every proof is free.

See the plan