Prove you meet an issuer’s rule without showing who you are
A regulated provider verifies you once. For each asset you want to hold, your wallet proves in 256 bytes that you meet its issuer’s rule; Solana checks the proof and writes a pass that the asset’s transfers read.
An example credential shown as four panels: residency EU, investor status Professional, age 34, screened 12 days ago.
Example rule sets
Rule passrule set 12 · wallet 7xKpQ…v3fQa · expires 2027-04-04 · epoch 3
Your passport
One example credential, read against eight example assets. Change the residency or the investor status and every rule re-evaluates; point at an asset to see which attributes its rule reads.
- Age
- 34, over 18
- Screening
- 12 days ago
Rule pass Treasury bill fund, rule set 12
6 of 8 example assets open to this credential
Verify once
A regulated KYC provider checks who you are, one time, and keeps that record itself. Your wallet receives a credential of four attributes, and Solana stores a commitment to each, never the value. You can link more than one wallet to the same verification.
On Solana · the credential’s commitments
- Residency0x2c71…9e04
- Investor status0x8fa3…41d7
- Age0x13e9…b2c0
- Screening0x5d0b…7a1f
One proof per rule set
- The rule set
An issuer binds a rule set to its mint. This one reads two of your four attributes and leaves the other two alone.
- The proof
Your wallet builds a Groth16 proof over BN254 that its committed values satisfy the predicate: three curve points, A and C in G1, B in G2.
- Checked on Solana
Writ's program checks one pairing equation with the alt_bn128 syscalls. The values never reach the chain.
- The rule pass
prove(rule_set, proof) writes a RulePass account for your wallet with the rule set, an expiry and the epoch. The issuer reads that account and nothing more.
e(A, B) = e(α, β) · e(L, γ) · e(C, δ)
- wallet
- 7xKpQ…v3fQa
- rule_set
- 12
- expires_at
- 2027-04-04
- epoch
- 3
Checked inside every transfer
Token-2022 calls Writ’s hook whenever a bound mint moves. It checks the destination’s rule pass against the current credential epoch, verifier and mint rule. The transfer settles or reverts inside the same transaction. This demonstration uses example wallets; the app reads finalized chain accounts.
Send to a destination to run the hook.
Revocation
The verifier revokes by moving the credential to its next epoch. From then on every issuer’s hook treats passes written on the old epoch as missing, for every rule set at once.
A holder who still qualifies proves again, and each pass is written anew.
The example holder’s rule passes
- 12
- 31
- 47
- 66
- 88
- 94
Write a rule
Choose the clauses your mint requires. Writ compiles them into the predicate every holder’s proof answers, and you see which wallets hold a pass by address, never by name.
Predicateregion ∈ {EU, UK, CH} ∧ status ≥ 1 (Qualified)
Rule set 104 · example mint Wr1t…7bQe
3 of 7 example wallets can hold this mint
- 7xKpQ…v3fQaRule pass
- 3Fb9…Lr2DRule pass
- Gq2M…9hVbNo pass
- Hn4T…c8WuRule pass
- 2Vwx…Kd3sNo pass
- 9aQe…Yt6FNo pass
- 5rJd…Pq7mNo pass
$WRIT
Each rule pass Writ records costs its rule set’s issuer the pass fee, paid from the pass funds it adds to the rule set. All of it buys $WRIT on the market and burns it. Holders only prove.
1,000,000,000fixed supply
100%to the public launch, on equal terms
- Rule passrecorded for a holder who proved the rule set
- Pass feepaid by the rule set's issuer from its pass funds
- Protocol accounttakes every pass fee; no key signs for it
- Bought and burned100% of it buys $WRIT on the market