Research

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.

DR-NOTE-011 · 2026-07-11 · process

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 contracts

The 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 contracts

Read-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 contracts

How 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 · process

What 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 · wallets

Token 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 contracts

The 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 · bridges

How 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 contracts

Rounding 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 · process

We 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 · lineage

Patched 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 →
:: more notes as we publish them ::

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.