voidcashdocs

Glossary

Short definitions of the terms used across the Voidcash documentation, with links to where each is explained.

Admin

The key in the config account (Config.admin) that sets the pool's parameters within their caps, sets the guardian, hands over its own role (propose_admin, then accept_admin), pauses and unpauses, withdraws the treasury, and sets the VOID mint and pins the buyback's pool. The same key is the program's upgrade authority. It has no instruction that spends a note. → Trust model

Buyback

The program's buyback account collects its share of every pool fee in SOL (half at launch). The permissionless buyback instruction spends one chunk of it at a time on the pinned DAMM v2 pool to buy $VOID, and burns what it buys in the same instruction. It pays its caller nothing. → The buyback

Commitment

The hash a note is stored as in the tree: Poseidon(amount, pubKey, blinding, asset), with asset 0 for native SOL. It shows neither the owner nor the amount. → Notes

DAMM v2

Meteora's constant-product AMM, the cp-amm program (cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG). The buyback buys $VOID on one VOID/SOL pool of it, pinned by the admin. → Trust model

Deadline slot

The last slot a transaction may land in, bound in its proof. The program refuses it afterwards (Expired), so a relayer cannot hold it. The app sets it 150 slots ahead.

Dummy note

A zero-amount input or output that fills an unused slot, since every transaction spends two notes and creates two. A dummy input has a fresh random key, so its nullifier is unique. → Notes

extDataHash

The public input that binds everything the circuit does not compute: the recipient, the amount crossing the pool's edge, the relayer and its fee, the deadline slot, the fee rate and both ciphertexts, after the domain voidcash/transact/v1 and the program id. The program computes it on-chain with SHA-256, masked below 2^253, so changing any of these fields invalidates the proof. → Program

Groth16

The zero-knowledge proof system Voidcash uses: a 256-byte proof that the program verifies with Solana's alt_bn128 syscalls through groth16-solana. It needs a circuit-specific trusted setup. → The circuit

Guardian

The key in the config account (Config.guardian) that can only pause: deposits, private transfers, exits or the buyback. It cannot unpause, move SOL or change anything else. → Trust model

Indexer

A service that follows the pool program and serves every leaf with its ciphertext and every nullifier, the same to everyone, so clients find their notes without saying which they are. It also sends the alerts on large exits, pauses, parameter changes and upgrades. The app checks its data against the program's root history. → Indexer API

Note

A private amount of SOL in the pool, owned by one vault. On-chain it is a commitment in the tree and an encrypted ciphertext only the owner's viewing key opens. Spending it takes the owner's spending key. → Notes

Note merge

A private transfer from a vault to itself that combines two of its notes into one, less the relayer fee. The app merges notes before a transfer or an unshield that two notes cannot cover. On-chain it looks like any private transfer.

Nullifier

The value a spend publishes for each note it consumes: Poseidon(commitment, index, Poseidon(spendKey, commitment, index)). The program creates an account for it, so the same note cannot be spent twice. It cannot be linked to its commitment without the spending key. → Notes

Pause flags

Four flags in the config account: 1 deposits, 2 private transfers, 4 exits and relayer fees, 8 the buyback. The guardian or the admin sets them; only the admin clears them. → Constants

Private address

The address others send to privately: void followed by base58 of a version byte, the note public key, the viewing public key and a 4-byte checksum. It reveals no wallet. → Keys

Private transfer

A move of SOL from one vault's notes to another private address, inside the pool. The chain shows two nullifiers, two commitments and the relayer as fee payer, and no sender, recipient or amount. It pays no pool fee, only the relayer's. → What is public

Recovery key

The vault's root itself, encoded in base58 with version byte 0x81 and a checksum, shown once when the vault is created. It restores the vault on any device, and whoever holds it can spend the notes. → Recovery

Relayer

A service that submits private transfers and unshields as the fee payer, so the user's wallet never appears on them. It is paid from the notes, in SOL, and its account and fee are bound in the proof: it cannot change the recipient or the amount. → Relayer API

Root history

The last 192 roots of the note tree, one per slot that had an insert, kept in the tree account. A proof names a root by its index in the history, so inserts while a user proves do not invalidate the proof. → The Merkle tree

Shield

Moving SOL from a wallet into the pool, as a new note. The wallet signs and pays; the chain shows its address and the amount. → Shield

Spending key

The secret that spends a vault's notes. It derives from the vault's root, never from a wallet, and the circuit proves knowledge of it without revealing it. Its Poseidon hash is the owner field of every note the vault holds. → Keys

Treasury

The program's treasury account. It receives the part of every pool fee that does not go to the buyback (half at launch), and only the admin can withdraw it.

Trusted setup

The one-time generation of the circuit's Groth16 proving and verifying keys. Whoever knew its secret could forge proofs. Voidcash's keys come from one contribution on a public phase 1, closed with a Solana block hash, with a transcript anyone can verify. → Trusted setup

Unshield

Moving SOL from the pool's notes to any Solana address. The chain shows the recipient and the amount; the recipient receives it less the exit fee. → Unshield

Vault (in your browser)

Your private account in Voidcash: one random 32-byte root, generated in your browser, from which your spending key and viewing key derive. It is sealed with your passphrase in the browser's storage, and the recovery key restores it. The app's "Create a vault" makes one. → Keys

Vault (the program's account)

The program's vault PDA, whose lamports are the SOL behind every note in the pool. Only transact with a valid proof takes SOL out of it. Its balance after each exit is in the Exited event. → Program

Viewing key

The x25519 secret that opens the ciphertexts of notes sent to a vault. It derives from the root. It reads notes but cannot spend them. → Keys

$VOID

The token the buyback buys and burns. Its mint is an SPL Token mint, set in the config account by the admin and fixed once the buyback's pool is pinned. → The buyback

On this page