A contract deployed via CREATE2 can be selfdestructed and then re-deployed to the SAME address with different bytecode. Integrations that trust the code at a CREATE2 address can be rugged by a metamorphic swap.
// 1. deploy 'benign' contract via CREATE2, get it whitelisted. // 2. selfdestruct it. 3. CREATE2 again at same address with EVIL code. // integrators still trust the address -> drained.
// pin the expected codehash; disallow selfdestruct in deployed logic
require(addr.codehash == EXPECTED_CODEHASH, "unexpected code");
Largest recorded losses in the same failure class — related, not the same bug:
The SaferICO scanner runs 201 detectors over your Solidity source, SAFE-0236 among them. Paste an address or the source itself — a small per-scan fee, shown before you sign, or unlimited on any plan.