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

AdversaryWhat they get
Block explorer / chain watcherCommitments and nullifiers — no amounts, assets, or links to you
MEV botNothing to front-run; orders are proofs, not public intents
Malicious relayerCan only ignore you; cannot read or move funds
Deposit-boundary observerDeposit 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.

ControlWhat it holds
Invariant suiteSix properties held across 245,760 randomised calls against the pool
Circuit harnessAdversarial witnesses, not just valid ones — 17 constraints deleted one at a time, 17 caught
Static analysisTwo scanners on every push, with the build failing on anything untriaged
Live monitoringTurnstile, 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.