ERC-777 (and ERC-1363/ERC-721 safe transfers) invoke a hook on the sender/recipient. A token transfer that looks atomic actually hands control to attacker code via tokensReceived/onERC721Received, enabling reentrancy even without raw ETH calls.
function deposit(uint256 amt) external nonReentrant {
shares[msg.sender] += amt; // effects first
token.transferFrom(msg.sender, address(this), amt);
}
Largest recorded losses in the same failure class — related, not the same bug:
The SaferICO scanner runs 201 detectors over your Solidity source, SAFE-0004 among them. Paste an address or the source itself — a small per-scan fee, shown before you sign, or unlimited on any plan.