privacy-first
stealth payments
on solana

send and receive SOL without revealing your identity on-chain. stealth addresses, relayer privacy, and zero-knowledge proofs.

$ cargo add cloak-sdk
deployed on solana devnet
programAaJF9TTgTPqRTuXfnQnVvBihpYwYUAYroW984foWyVJ
explorer

architecture

a complete privacy stack

ecdh / ed2551901

stealth addresses

unique one-time addresses for every payment. sender and receiver are completely unlinkable on-chain.

anchor program02

on-chain registry

announcement PDAs store ephemeral keys. scalable design with per-announcement accounts.

tx privacy03

relayer network

submit through a relayer to hide the sender's wallet. the relayer pays rent, you sign the transfer.

groth16 / bn25404

zero-knowledge

hide payment amounts with pedersen commitments and zk-SNARK proofs. verify without revealing.

developer experience

privacy in a few lines of code

sdk
main.rs
use cloak_sdk::{
  StealthPayment,
  StealthKeypair,
  Scanner,
};

// create a stealth payment
let payment = StealthPayment::create(
  &receiver_meta, amount
)?;

// scan for incoming payments
let payments = scanner.scan(rpc).await?;

// derive spending key
let kp = StealthKeypair::derive(
  &meta, &ephemeral
)?;
cli
terminal
# generate your stealth identity
$ cloak init
generated new stealth meta-address!

# send a private payment
$ cloak send stealth1abc... 0.5
transaction sent!

# hidden amount (zk-SNARK)
$ cloak send stealth1abc... 0.5 --private
generating zk-SNARK proof...

# through relayer (hidden sender)
$ cloak send stealth1abc... 0.5 --relayer
transaction relayed!

features

why cloak?

stealth addresses

ECDH-derived one-time addresses. each payment goes to a unique address that only the recipient can detect.

hidden amounts

pedersen commitments with groth16 proofs hide payment amounts. verify validity without revealing the value.

relayer privacy

submit transactions through a relayer to hide your wallet address. the relayer pays rent, you only sign the transfer.

smart scanning

efficient on-chain scanning with viewing key delegation. watch-only wallets can detect payments without spending keys.

scalable registry

each announcement is its own PDA — no circular buffers, no limits. indexed by a global counter for deterministic access.

full CLI

init, send, scan, spend, history. supports --private and --relayer modes. everything from the terminal.

protocol

how it works

01

generate

receiver creates a stealth meta-address and shares the public portion.

02

derive

sender uses ECDH with the meta-address to derive a unique one-time stealth address.

03

transfer

SOL is sent to the stealth address. an announcement PDA publishes the ephemeral key on-chain.

04

spend

receiver scans announcements, detects payments, and derives the spending key.

stack

built with

rustcore sdk
anchoron-chain program
ark-groth16zk proofs
ed25519ecdh stealth
axumrelayer server
clapcli framework
bn254elliptic curve
solanadevnet live

applications

use cases

private donations

accept contributions without exposing all donors publicly on-chain. each donation goes to a unique stealth address.

payroll

pay employees privately without revealing salary information. relayer mode hides the company wallet.

anonymous purchases

buy goods and services without linking transactions to your identity. zk-proofs hide the amounts.

treasury management

move funds between wallets without exposing organizational structure. view keys for auditing without spending access.

ready to build?

start integrating privacy-preserving payments in your solana application.