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.

FieldTypeLabel
birthYearintegerBirth Year
currentYearintegerCurrent Year
minimumAgeintegerMinimum Age

Artifacts: age-verification.wasm · age-verification.zkey · age-verification_vkey.json

membership-proof — production

Prove group membership via Merkle inclusion (depth=16, Poseidon).

FieldTypeLabel
memberIdhashMember ID
pathElementshashPath Elements [16]
pathIndiceshashPath Indices [16]
roothashMerkle 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.

FieldTypeLabelVisibility
credentialSecrethashCredential Secretprivate
validUntiltimestampValid Untilprivate
currentTimetimestampCurrent Timepublic
expectedHashhashIssuer Commitmentpublic

anonymous-reputation — self-asserted

Prove reputation score exceeds threshold anonymously.

FieldTypeLabel
userIdhashUser ID
reputationScoreintegerReputation Score
userNoncehashUser Nonce
thresholdScoreintegerThreshold
platformIdhashPlatform ID

Financial

balance-proof — production

Prove balance exceeds threshold (attested when wallet connected).

FieldTypeLabel
balanceintegerBalance
minimumBalanceintegerMinimum Balance

range-proof — self-asserted

Prove a value is within a range.

FieldTypeLabel
valueintegerValue
minRangeintegerMinimum
maxRangeintegerMaximum

token-swap — self-asserted

Prove swap eligibility without revealing balance.

FieldTypeLabel
tokenABalanceintegerToken A Balance
swapSecrethashSwap Secret
requiredTokenAintegerRequired Token A
swapRateintegerSwap Rate
minReceiveintegerMin Receive

nft-ownership — self-asserted

Prove NFT ownership without revealing which one.

FieldTypeLabel
nftTokenIdintegerNFT Token ID
ownerSecrethashOwner Secret
collectionRoothashCollection Root
minTokenIdintegerMin Token ID
maxTokenIdintegerMax Token ID

whale-holder — self-asserted

Prove whale-level holdings without revealing amount.

FieldTypeLabel
balanceintegerBalance
minimumBalanceintegerWhale Threshold

Governance

private-voting — production

Cast verifiable vote without revealing identity.

FieldTypeLabel
voterIdhashVoter ID
voteChoiceintegerVote Choice
pollIdhashPoll ID

quadratic-voting — self-asserted

Quadratic vote weighted by token balance.

FieldTypeLabel
voterIdhashVoter ID
tokenBalanceintegerToken Balance
voteChoiceintegerVote Choice
pollIdhashPoll ID
minTokensintegerMin Tokens

Cryptographic

hash-preimage — production

Prove knowledge of a hash preimage.

FieldTypeLabel
preimagehashPreimage
salthashSalt
expectedHashhashExpected Hash

signature-verification — production

Verify EdDSA signature inside a ZK circuit.

FieldTypeLabel
R8xhashR8 X
R8yhashR8 Y
ShashS
AxhashPublic Key X
AyhashPublic Key Y
MhashMessage

patience-proof — production

Prove minimum wait period elapsed.

FieldTypeLabel
startTimetimestampStart Time
endTimetimestampEnd Time
secrethashSecret
minimumWaitTimeintegerMin Wait
commitmentHashhashCommitment 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.

FieldTypeVisibility
subjectSecrethashprivate
accreditationTiernumberprivate
jurisdictionCodenumberprivate
issuedAt / expiresAttimestampprivate
issuerR8x / issuerR8y / issuerShashprivate
issuerAx / issuerAyhashpublic
requiredTiernumberpublic
jurisdictionRoothashpublic
currentTimetimestamppublic
policyIdnumberpublic
sessionNoncenumberpublic

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.

FieldTypeVisibility
credentialSecrethashprivate
lockedAmountnumberprivate
unlockTimetimestampprivate
issuerRoothashpublic
minimumAmountnumberpublic
currentTimetimestamppublic
contextIdnumberpublic