Circuits
14 production Groth16 zk-SNARK circuits (BN128 curve). Artifacts served from zkrune.com/circuits/.
All circuits use Groth16 zk-SNARKs (BN128 curve). Artifacts (WASM + zkey + vkey) are served from zkrune.com/circuits/. Each entry below shows the public/private inputs.
Identity
age-verification — self-asserted
Prove minimum age without revealing birth year.
| Field | Type | Label |
|---|---|---|
birthYear | integer | Birth Year |
currentYear | integer | Current Year |
minimumAge | integer | Minimum Age |
Artifacts: age-verification.wasm · age-verification.zkey · age-verification_vkey.json
membership-proof — production
Prove group membership via Merkle inclusion (depth=16, Poseidon).
| Field | Type | Label |
|---|---|---|
memberId | hash | Member ID |
pathElements | hash | Path Elements [16] |
pathIndices | hash | Path Indices [16] |
root | hash | Merkle Root |
credential-proof — issuer-attested
Prove you hold an unexpired credential an issuer attested to, without revealing the credential.
At issuance the issuer publishes expectedHash = Poseidon(credentialSecret, validUntil) and gives the holder the secret. The circuit checks that the
private inputs open that commitment and that the credential has not expired,
so only a real holder can produce a proof. Because validUntil is hashed
into the commitment, the expiry cannot be extended independently.
zkRune verifies the issuer's attestation. It does not establish the underlying claim — that remains the issuer's responsibility.
| Field | Type | Label | Visibility |
|---|---|---|---|
credentialSecret | hash | Credential Secret | private |
validUntil | timestamp | Valid Until | private |
currentTime | timestamp | Current Time | public |
expectedHash | hash | Issuer Commitment | public |
anonymous-reputation — self-asserted
Prove reputation score exceeds threshold anonymously.
| Field | Type | Label |
|---|---|---|
userId | hash | User ID |
reputationScore | integer | Reputation Score |
userNonce | hash | User Nonce |
thresholdScore | integer | Threshold |
platformId | hash | Platform ID |
Financial
balance-proof — production
Prove balance exceeds threshold (attested when wallet connected).
| Field | Type | Label |
|---|---|---|
balance | integer | Balance |
minimumBalance | integer | Minimum Balance |
range-proof — self-asserted
Prove a value is within a range.
| Field | Type | Label |
|---|---|---|
value | integer | Value |
minRange | integer | Minimum |
maxRange | integer | Maximum |
token-swap — self-asserted
Prove swap eligibility without revealing balance.
| Field | Type | Label |
|---|---|---|
tokenABalance | integer | Token A Balance |
swapSecret | hash | Swap Secret |
requiredTokenA | integer | Required Token A |
swapRate | integer | Swap Rate |
minReceive | integer | Min Receive |
nft-ownership — self-asserted
Prove NFT ownership without revealing which one.
| Field | Type | Label |
|---|---|---|
nftTokenId | integer | NFT Token ID |
ownerSecret | hash | Owner Secret |
collectionRoot | hash | Collection Root |
minTokenId | integer | Min Token ID |
maxTokenId | integer | Max Token ID |
whale-holder — self-asserted
Prove whale-level holdings without revealing amount.
| Field | Type | Label |
|---|---|---|
balance | integer | Balance |
minimumBalance | integer | Whale Threshold |
Governance
private-voting — production
Cast verifiable vote without revealing identity.
| Field | Type | Label |
|---|---|---|
voterId | hash | Voter ID |
voteChoice | integer | Vote Choice |
pollId | hash | Poll ID |
quadratic-voting — self-asserted
Quadratic vote weighted by token balance.
| Field | Type | Label |
|---|---|---|
voterId | hash | Voter ID |
tokenBalance | integer | Token Balance |
voteChoice | integer | Vote Choice |
pollId | hash | Poll ID |
minTokens | integer | Min Tokens |
Cryptographic
hash-preimage — production
Prove knowledge of a hash preimage.
| Field | Type | Label |
|---|---|---|
preimage | hash | Preimage |
salt | hash | Salt |
expectedHash | hash | Expected Hash |
signature-verification — production
Verify EdDSA signature inside a ZK circuit.
| Field | Type | Label |
|---|---|---|
R8x | hash | R8 X |
R8y | hash | R8 Y |
S | hash | S |
Ax | hash | Public Key X |
Ay | hash | Public Key Y |
M | hash | Message |
patience-proof — production
Prove minimum wait period elapsed.
| Field | Type | Label |
|---|---|---|
startTime | timestamp | Start Time |
endTime | timestamp | End Time |
secret | hash | Secret |
minimumWaitTime | integer | Min Wait |
commitmentHash | hash | Commitment Hash |
rwa-eligibility — issuer-attested
Prove an issuer attested you are eligible for a regulated offering, without revealing who you are, where you live, or what tier you hold.
The trust anchor is the issuer's public key. A venue configures the transfer agent or KYC provider it already relies on, once, and every credential that issuer signs verifies against it — there is no per-investor commitment to publish and no root to refresh as investors are onboarded.
The holder generates the subject secret and sends only a commitment to the issuer, so the issuer signs a claim about a commitment it cannot open. It cannot prove eligibility on an investor's behalf, and a breach of issuer records yields no usable credentials.
Four things are proven at once: the issuer signed this exact claim, the prover knows the secret behind the commitment, the tier clears the offering's bar, and the country is on the venue's allowlist. Each proof is bound to a session nonce the verifier issues, so a captured proof cannot be replayed elsewhere.
The published nullifier is deterministic per investor per offering. A gate can enforce one entry each without being able to follow that investor anywhere else.
Credentials carry a validity window and no revocation list. Until revocation ships, issue short-lived credentials and re-issue on demand.
| Field | Type | Visibility |
|---|---|---|
subjectSecret | hash | private |
accreditationTier | number | private |
jurisdictionCode | number | private |
issuedAt / expiresAt | timestamp | private |
issuerR8x / issuerR8y / issuerS | hash | private |
issuerAx / issuerAy | hash | public |
requiredTier | number | public |
jurisdictionRoot | hash | public |
currentTime | timestamp | public |
policyId | number | public |
sessionNonce | number | public |
lockup-proof — agent-attested
Prove a transfer restriction has elapsed and the position still meets a venue minimum, without revealing the size of the position or whose it is.
The transfer agent publishes a Merkle root over the positions it recorded. Both the amount and the unlock date are hashed into the leaf, so a holder can neither inflate the position nor bring the unlock date forward.
| Field | Type | Visibility |
|---|---|---|
credentialSecret | hash | private |
lockedAmount | number | private |
unlockTime | timestamp | private |
issuerRoot | hash | public |
minimumAmount | number | public |
currentTime | timestamp | public |
contextId | number | public |
