Audits

Write the PoC anyway

I was annoyed when Cantina made proofs of concept mandatory. After a year of competing and judging, and a flood of AI-generated reports, I think it's the most useful rule in audit competitions.

When Cantina announced that every finding needs a proof of concept, I was upset. Writing a PoC for a complex protocol, often without any guidance from the project team, takes a lot of time. Time spent on a PoC is time not spent finding the next bug.

I changed my mind. Even where it isn't required, I now write a PoC for almost every bug I submit.

What a PoC gets you

It catches false positives before you submit. A surprising number of "valid" issues fall apart the moment you try to execute them. A familiar loop from the Pump.fun competition:

  1. Find an issue that looks valid (and imagine the six-figure payout).
  2. Start the PoC.
  3. Fail to make it work.
  4. Realize the chain's design prevents the exploit.

Repeat. Painful, but much better than finding out from the judge.

It also turns up other bugs. Building a working exploit forces you through code paths you'd otherwise skim. Some of my better findings came from something odd I noticed while writing a PoC for a different issue.

And it makes the report hard to argue with. A judge doesn't have to trust your reasoning when they can run the test.

The view from the judge's seat

I started judging competitions at Cantina in early 2025. It is a very different job from being a researcher: across hundreds of submissions, the question shifts from "is there a bug?" to "does this report prove what it claims?"

Over the past year I've seen more and more reports that are clearly generated by LLMs: confident, well formatted, and wrong. They describe a plausible attack that the code doesn't allow.

The mandatory PoC rule is effective. In competitions without it, a much higher share of reports look LLM-generated.

A PoC is the cheapest filter we have. A model can produce a convincing paragraph; producing a passing exploit test against the real codebase is much harder.

This isn't anti-AI

AI is genuinely useful for auditing, and I use it every day. Automated tools and AI-assisted workflows are already finding real bugs in competitions, and that's good for the industry.

It also means the number of plausible-looking reports will keep growing, so the bar on evidence has to stay where it is. If you used AI to find a bug, use it to help write the PoC too.

My checklist before submitting

  • The PoC runs against the in-scope commit, not a modified copy.
  • It shows the actual impact (funds lost, invariant broken), not just an unexpected state.
  • Assumptions about roles and trust are stated explicitly. "That is trusted" is a common reason for rejection, so I address it up front.
  • If I can't make it work, I find out why before I submit.

Keep reading

View all