The contract can receive ETH (payable function, receive() or fallback()) but exposes no function that sends ETH out. Any Ether it accumulates is permanently trapped — no owner or user can ever recover it.
// contract Vault { receive() external payable {} } // no way out // users send ETH; it is stuck forever — no withdraw / sweep function exists.
function withdraw() external onlyOwner {
(bool ok, ) = owner().call{value: address(this).balance}("");
require(ok, "withdraw failed");
}
Largest recorded losses in the same failure class — related, not the same bug:
The SaferICO scanner runs 201 detectors over your Solidity source, SAFE-0301 among them. Paste an address or the source itself — a small per-scan fee, shown before you sign, or unlimited on any plan.