Security
Security model
Cowl is non-custodial and private by construction. Here is exactly what each part guarantees — and what it deliberately cannot do.
Guarantees
- ZK shielded pool. Balances and trades live inside zero-knowledge proofs. The explorer sees commitments and nullifiers, never amounts or addresses.
- Permissionless to enter. Shielding, spending, and running a relayer need no account and no approval. There is no allowlist, which also means there is no list anybody can be added to.
- Relayer can censor, not seize. Relayers pay gas and may drop a transaction, but never read amounts, move funds, or deanonymize you. Route around a bad one.
- Selective disclosure. View keys are read-only and scoped. There is no switch that makes an account public.
- Non-custodial keys. Your keys stay on your device; no service can move your funds.
Threat model
| Adversary | What they get |
|---|---|
| Block explorer / chain watcher | Commitments and nullifiers — no amounts, assets, or links to you |
| MEV bot | Nothing to front-run; orders are proofs, not public intents |
| Malicious relayer | Can only ignore you; cannot read or move funds |
| Deposit-boundary observer | Deposit amount and timing — mitigate with good hygiene at the edge |
What is checked, and how often
The deployed pool is immutable, so its security is not a promise about future patches — it is what the code already does, checked continuously from outside. Every control below runs on every push and publishes its findings.
| Control | What it holds |
|---|---|
| Invariant suite | Six properties held across 245,760 randomised calls against the pool |
| Circuit harness | Adversarial witnesses, not just valid ones — 17 constraints deleted one at a time, 17 caught |
| Static analysis | Two scanners on every push, with the build failing on anything untriaged |
| Live monitoring | Turnstile, governance, and relayer float read off chain against a baseline |
Check it rather than trust it
Every report, every finding, and the commands to reproduce them are published on the audits page. Testnet runs the same code with free funds if you would rather rehearse first.