Jat documentation
Pay privately on Solana, then prove that payment as a one-time on-chain receipt. Any app verifies the receipt through a CPI to unlock access, without linking the unlock to your wallet. Payment first; the gate reads the proof.
Getting started on devnet
LiveRun the full private-payment round-trip end to end, against Solana devnet right now.
- Receive, pay, claim, and withdraw
- Fee relayer covers the gas
- Keys generated in your browser
Embed
LiveAdd private payments to any site by pasting two lines of HTML, with nothing to install.
- Drop-in script, no build step
- Hosted pay popup on the Jat domain
- Your page never touches keys
How it works
The design behind the round-trip: stealth addresses, the fixed-denomination proof pool, and the key model.
- Ed25519 ECDH stealth addresses
- Groth16 fixed-denomination pool
- No operator or auditor key
The two layers
A payer funds a one-time stealth address derived from your published link, so there is no on-chain link between payer and recipient. This is pure Ed25519 ECDH, no proof. You then deposit into the fixed-denomination pool and withdraw to a fresh address with a zero-knowledge proof, so the payout is unlinked from your specific deposit. The deposit uses fixed denominations, so the denomination tier is public; what the proof shields is the link between deposit and withdrawal, not the amount. A fee relayer pays the gas, so a brand-new address can receive and withdraw without ever holding SOL first. The two layers compose, and you can use one or both.
Use it from the site
Four pages, one round-trip:
- Receive generates a meta-address in your browser and a shareable
seal:pay:link. - Pay sends from a connected wallet to a one-time address derived from a link.
- Claim finds your payments and claims them to an address or into the pool.
- Withdraw proves ownership in the browser and pays out to a clean address.
The deeper mechanics live on the blog; this section is the how-to.