Audits
Privacy you cannot check is a claim, not a property. Every security control Cowl runs is in the open repository with its report beside it — including the findings, including the ones still open. The rule the audit directory enforces on itself: a security claim without an artifact behind it does not ship, not here and not in a tweet.
Where it stands
| Area | Result |
|---|---|
| Pool accounting | Six invariants held across 245,760 randomised calls. The turnstile reconciles exact to the wei on every token that ever entered, on both live pools. |
| Circuit constraints | Every constraint proven load-bearing: 17 deleted one at a time, 17 caught. Public inputs match the pool on all 14 of spend and 6 of shield. |
| Contracts, static analysis | Slither and Aderyn over the pool and the trade adapter. Neither scanner found a path to deposited funds. Every finding triaged against source, and a gate on every push now fails on anything untriaged. |
| App and CLI code | CodeQL security-extended read on both repositories: 4 findings, 1 fixed, 3 rebutted with reasoning. Nothing flagged in proving, note handling, key derivation or the wire format. |
| Supply chain | Every advisory in both trees read and traced. One install script in what a user installs, and the CLI is proven to work without it. Gated on every push against a baseline. |
| Test integrity | Three mutation harnesses, so a test or an alarm that quietly stopped constraining anything shows up instead of staying green. |
| Continuous integration | Six jobs in the CLI plus the app’s, green since the first run, every action pinned by commit hash. |
| Live monitoring | Governance, turnstile and relayer float watched against a committed baseline, with all seven alarms proven to fire. See monitoring. |
Supply chain scores
OpenSSF Scorecard 5.5.0, measured against the public repositories rather than a working checkout, so the number you get scoring them yourself is the number below.
| Repository | Score | Notables |
|---|---|---|
| Cowl-Protocol/cli | 8.9 | Token permissions, dangerous workflow, binary artifacts all 10 |
| Cowl-Protocol/app | 8.0 | Every GitHub-owned and third-party action pinned by SHA |
Findings, and what happened to them
Findings carry IDs, severities and statuses, and the reports publish them whether or not they flatter the code. Severity is an Impact × Likelihood matrix, kept deliberately separate from whatever a tool scored it, because tool severity and report severity are not the same thing.
- Fixed. The trade adapter dropped ERC-20 return values on two paths; both are fixed in source and pinned by tests proven to fail against the code before the fix.
- Mitigated.The verifier swap is the pool’s only lever, timelocked seven days, and it is now watched from outside — pending swaps and already-executed ones both.
- Acknowledged. The rest were read against source and rebutted in writing, each with the reasoning that closes it. Two of the highest-ranked scanner findings are in this group, which is exactly why the CI gate fails on anything untriaged rather than on anything high.
What is verified where
| Area | Reviewed for |
|---|---|
| ZK circuits | Constraint coverage and soundness under adversarial witnesses — proofs that should be rejected, not just ones that should pass |
| Contracts | Value conservation, access control, the verifier swap path, the trade adapter |
| Cryptography | Commitment and nullifier scheme, note ciphers, key derivation |
| Clients | The CLI and the app, plus everything they depend on to reach you |
Run it yourself
None of this needs our word. Clone the repository and every control above runs on your machine, against the live mainnet deployment.
npm run watch # governance + turnstile + relayer float, live
npm run test:supplychain # install-script and advisory baseline
npm run test:watch-mutants # prove the alarms still fire
cd contracts && forge test # 64 tests, invariant suite included
cd circuits/transfer && nargo testIndependent review
The published work above is the free and continuous half, and it runs on every push. Paid third-party review of the circuits and contracts is the next line of the program, and every report lands here in full and unedited when it does. No free tool audits a Noir circuit, which is precisely why the adversarial witness harness exists in the meantime.
Reporting something
Found a problem? The security policy has the private channel and what a first report should carry. Do not open a public issue. You get an acknowledgement from a human within 72 hours, an assessment within seven days, credit if you want it, and no legal action for good-faith research.