Field notes
Occasional write-ups on what we see in crypto codebases: patterns worth naming and the discipline that keeps a finding honest. Always generalized, never tied to a client engagement.
Audit, bug bounty, or formal verification: what each one buys
Three different instruments with different shapes of assurance. What each one assures, what it leaves open, and how they layer into a real security program.
Read note → DR-NOTE-010 · 2026-07-07 · smart contractsThe upgrade is the attack surface: proxy pitfalls
An upgradeable contract trades immutability for a function that can replace all of its logic. Uninitialized implementations, storage collisions, open upgrade authorization, and the admin key itself.
Read note → DR-NOTE-009 · 2026-07-03 · smart contractsRead-only reentrancy: the guard that wasn't there
A nonReentrant modifier guards the writes and leaves the views open. How read-only reentrancy feeds a wrong price to another protocol, and how to close it.
Read note → DR-NOTE-008 · 2026-06-30 · smart contractsHow price oracle manipulation drains a lending market
If an attacker can move the price your protocol reads, they can borrow against money they never had. How flash-loan oracle manipulation works, and the manipulation-resistant designs that stop it.
Read note → DR-NOTE-007 · 2026-06-30 · processWhat a good audit report actually contains
How to tell a useful report from a checklist with a logo: scope pinned to a commit, reproducible findings, honest severity, and a clear note of what was never examined.
Read note → DR-NOTE-006 · 2026-06-30 · walletsToken approval phishing and the risk of approve(max)
Most wallets are drained through a signature the owner was tricked into making, not a stolen key. How unlimited approvals become standing liabilities, and how to design them out.
Read note → DR-NOTE-005 · 2026-06-30 · smart contractsThe first-depositor share inflation attack
An empty vault, a one-wei deposit, a direct donation, and a victim whose funds mint zero shares. The defenses that close it, with a reproducible test.
Read note → DR-NOTE-004 · 2026-06-30 · bridgesHow cross-chain bridges get drained
The value sits behind one decision: is this message from the other chain genuine? The verification failures that drain bridges, and how to test against them.
Read note → DR-NOTE-003 · 2026-05-28 · smart contractsRounding direction is a security property
A half-wei here, a truncation there. Why share-based vaults must always round against the user, and how to test that they do.
Read note → DR-NOTE-002 · 2026-04-15 · processWe gate disclosure on a working proof
Why the bar for a finding is a reproducible PoC rather than a plausible argument, and what that discipline saves everyone.
Read note → DR-NOTE-001 · 2026-03-02 · lineagePatched upstream, still live in the fork
A fork is a snapshot. Fixes that land in the parent afterwards never reach it on their own, and published patches tell attackers where to look.
Read note →We publish sparingly and only when a note is useful on its own. If you'd like to be told when something new goes up, say so when you reach out.