Protocol specification · v1.0

Enter clean. Exit unlinked.

ra:st is a non-custodial shielded pool with a compliance proof built in. Every value below is what the chain actually records — and, just as importantly, what it never sees.

Curve  BN254 Hash  Poseidon Proof  Groth16 Custody  None
01 · Lifecycle

Three moves, and the data behind each

A note is deposited, certified into the association set, then withdrawn. Hover a private field to see what stays yours.

Step 01rst:deposit

Enter

cm = H(v ∥ H(k) ∥ ρ)
▸ published on-chain
cm0x2a7f…c31d
leaf ℓ0x0000000b
value1 unit (fixed)
▸ stays private
kspending key
ρnote randomness
Step 02rst:certify

Attest

rt𝒜 = root( { cm : ok(cm) } )
▸ published on-chain
rt𝒜0x91be…7d04
policyok() — public
includedleaf 0x…000b ✓
▸ never needed
custodycurator holds nothing
identityno user link
Step 03rst:withdraw

Exit

nf = H(kρ)
▸ published on-chain
π192 B proof
nf0x5c30…af11
recipient0x…fresh
▸ stays private
cm, ℓwhich note
pathstree + assoc
02 · The one idea

Two roots, one leaf — why ra:st isn’t a mixer

The withdrawal circuit proves your note is in the global tree and in the association set of non-illicit deposits — bound to the same leaf. A tainted note has no association path, so it simply can’t exit.

𝒯 global tree 𝒜 association set rt 0x…c4a1 rt𝒜 0x…7d04 same cm — bound in-circuit excluded → absent excluded → absent
non-illicit excluded by policy your note
03 · Information

Who learns what

The asymmetry is the whole point. The auditor gets a compliance certificate, the public gets an unlinkable exit, and only you ever hold the link.

PartyLearnsNever learns
You (owner) Everything — you hold k, ρ, ℓ
Public observer A fresh, associated note exited the pool Which deposit it was
Auditor The exit descends from 𝒜 (via rt𝒜) Which leaf inside 𝒜
Pool contract nf is fresh · π verifies · pays R cm, ℓ, k, ρ
Curator A leaf was included in 𝒜 That it was later spent
04 · Cost

What a withdrawal costs

Proving happens once on your device; the chain pays a small, fixed verification cost regardless of pool size.

16,515
R1CS constraints
192 B
proof size · constant
<1s
prove · client-side
~240K
verify gas · fixed
05 · Circuit

Where the constraints go

Two Merkle paths — the global tree and the association set — dominate. The association path is the concrete price of compliance: it roughly doubles the circuit versus a plain mixer.

Sub-circuitConstraintsShare
Address hash · H(k)2161.3%
Commitment hash2761.6%
Nullifier hash2761.6%
Global Merkle path · d=327,84046.5%
Association path · d′=327,84046.5%
Fee range · m=64650.4%
Denomination + bind20.0%
Total16,515100%
Plain-pool baseline (no assoc. path)8,675
06 · Parameters

Reference deployment

Public parameters are immutable once a pool ships — changing them forks the pool and splits its anonymity set.

field pBN254 · 254-bit
hash HPoseidon · x⁵ S-box
tree depth d32 · 2³² capacity
assoc depth d′32
denomination vfixed per pool
root window64 recent roots
public inputs5 · rt, rt𝒜, nf, R, f
proof systemGroth16 · 3 elements
07 · Trust

Who is trusted, and for what

No party holds your funds or keys. The curator is trusted only for policy correctness — it cannot steal, freeze, or deanonymize.

ActorRoleTrusted for
DepositorPublishes a commitmentnothing
WithdrawerProves and spends a notenothing
Pool contractMaintains 𝒯, 𝒩; verifies πon-chain exec
RelayerSubmits a withdrawal txliveness only
CuratorPublishes rt𝒜policy only
AuditorChecks exit compliancenothing
ValidatorsOrder & finalize txsconsensus + DA
08 · Guarantees

What holds, and when it wouldn’t

Four cryptographic guarantees, each reducible to a standard assumption. They fail only if the underlying primitive does.

Privacy
rests onzero-knowledge + hiding + collision resistance
Fails only if the SNARK or hash is broken. A withdrawal cannot be linked to its deposit.
Soundness
rests onknowledge soundness + collision resistance
Fails only if the extractor fails or the hash collides. No overdraw, no double-spend, no forged membership.
Non-malleability
rests oncollision resistance of the nullifier hash
Fails only if a second preimage is found. A nullifier can’t be mauled to unlink a spend.
Compliance
rests onsoundness of the association path
Fails only under forged 𝒜-membership. Every exit provably descends from the association set.

The full specification runs 50 pages.

Circuit, security proofs, anonymity bounds, economics, and benchmarks — the complete treatment lives in the whitepaper.