Private trades.
Compliant identity.
One ZK stack.
Off-chain matching, on-chain ZK settlement, KYC-aware without doxxing your users. Three apps, one shared core.
Why zkScatter
Read the paper →Groth16 proofs over a commitment pool. Order amounts and trader identities are never revealed on-chain.
Multi-CA identity gating attests jurisdiction and KYC status — without exposing who the trader is.
A relayer network matches orders off-chain and submits settlement so users pay nothing and front-runners see nothing.
Built for your role
Same ZK core, different surface. Pick the app shaped to your job.
Trade privately. No MEV.
For semi-pro and OTC traders who need private limit orders without front-running.
- Hidden orders, public proof
- Half-proof authorization (~15K constraints)
- Gasless claims via relayer network
Pay your team privately.
For crypto-native companies and DAOs running payroll, vendor payouts, and treasury ops.
- Up to 16 recipients per private settlement (64 / 128 tiers planned)
- Recipient amounts hidden on-chain
- zk-X509 compliance built in
Privacy in your pocket.
One app for wallet, trading, and private payments — wherever you are.
- Self-custody EdDSA keys
- On-device proof generation
- iOS + Android
Run the network
Every zkScatter user app runs on a permissionless relayer network. Match orders, generate ZK proofs, earn fees.
How it works
Three steps. No mempool exposure. No identity leak.
User signs an EdDSA order locally. Amount, side, and identity stay on the device.
A relayer matches against the shared orderbook off-chain and produces a half-proof per side (~15K constraints).
PrivateSettlement verifies the proof and writes a commitment to the pool. Claims happen later, gaslessly.
Build private, compliant trading in an afternoon.
One TypeScript SDK across contracts, ZK circuits, the relayer network, and the shared orderbook. Used by every persona app.
import {
PRIVATE_SETTLEMENT_IFACE,
chainName,
parseTokenList,
type NetworkConfig,
} from "@zkscatter/sdk";
const network: NetworkConfig = {
chainId: 11155111,
rpcUrl: process.env.RPC_URL!,
contracts: { /* ... */ },
tokens: parseTokenList(
"0x...:USDC:6,0x...:WETH:18",
),
};
chainName(network.chainId);
// → "Sepolia"
PRIVATE_SETTLEMENT_IFACE.parseLog(log);
// decode Settled events without
// re-instantiating ethers.Backed by published research.
Half-proof authorization, commitment-pool settlement, and zk-X509 identity gating — designed and analyzed in the open.
Read the whitepaper →Ship privacy without losing compliance.
Pick the app shaped for you, or build your own on the same ZK core.