Skip to content
Back to skills

Reviewing Reentrancy And Callbacks

ASecurity

Review reentrancy and token/AMM callbacks: classic, cross-function, read-only, ERC-777/721/1155 hooks, Uniswap callbacks, failed-call DoS. Use on any value-moving Solidity that makes external calls.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 2, 2026
ai-agentsgo

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add nuroctane/nur-cli --skill reviewing-reentrancy-and-callbacks --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Reviewing Reentrancy And Callbacks?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Reviewing Reentrancy And Callbacks
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nuroctane-reviewing-reentrancy-and-callbacks/badge)](https://www.skillsdirectory.com/skills/nuroctane-reviewing-reentrancy-and-callbacks)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: reviewing-reentrancy-and-callbacks
description: "Review reentrancy and token/AMM callbacks: classic, cross-function, read-only, ERC-777/721/1155 hooks, Uniswap callbacks, failed-call DoS. Use on any value-moving Solidity that makes external calls."
---

# Reviewing reentrancy and callbacks

SWC-107 plus the economic variants static tools miss. In-scope. Attacker contracts live in `test/` only.

## Variants

1. **Classic** - external call then state update. CEI or `nonReentrant`.
2. **Cross-function** - `withdraw` re-enters `transfer` that still sees old balances.
3. **Read-only** - a view (`totalAssets`, `getRate`, `balanceOf`) used by another protocol mid-call. The view is "safe" and still exploitable.
4. **ERC-777 / 721 / 1155 hooks** - `tokensReceived`, `onERC721Received`.
5. **AMM callbacks** - `uniswapV2Call`, v3 swap/mint callbacks (`reviewing-amm-and-cl-pools`).
6. **Failed-call DoS** - push ETH to a contract that `revert`s in `receive` (SWC-113). Pull payments.

## Confirm

- Slither `reentrancy-eth` / `reentrancy-no-eth` / `reentrancy-benign`.
- Write a test attacker with `receive()` / `onERC721Received` that re-enters. Assert the invariant still holds (or that the call reverts).

## Fix language (for reports)

Checks-Effects-Interactions, OZ `ReentrancyGuard`, pull-over-push, view isolation (snapshot before external call).

Do not ship a mainnet-ready attacker. The test file is the proof.

## Paid bounty analogs

Paid Immunefi rows in this class are thinner than hacks. Still review:

| Analog | Pack | Notes |
|--------|------|-------|
| OpenZeppelin Timelock reentrancy (also-paid) | T21 / T07 | gov + callback |
| Curve Vyper 2023 **hack** | T35 | compiler lock; `case-cards.md` 7.19 |
| Conic / Sturdy / Penpie / Cream / Fei-Rari **hacks** | T07 / T08 | `case-cards.md` |

Read-only reentrancy on `totalAssets` / Curve LP is a contest staple (`contest-winning-classes.md`).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.