Solidity security checklist.
A bookmarkable reference. Every item has a stable ID you can cite in reviews, and links to the explainer and the case where it mattered.
Every balance/accounting write happens before ETH transfers, token hooks, or callbacks.
Apply a nonReentrant guard where control can leave the contract.
Values that must move together are updated on every path; one contract never reads a variable that another updates separately.
Use TWAPs or vetted signed feeds that cannot move within one transaction.
Reject stale rounds and values outside a plausible band.
EIP-7702 lets an EOA run code; this guard no longer implies 'not a contract'.
Per-block change limits and manipulation-resistant inputs bound the blast radius.
Minting, upgrading, withdrawing, and config changes are gated by role/owner checks.
Guard against re-init and initializer front-running in upgradeable contracts.
No blind signing; the presented payload matches on-chain execution.
Prevent foreign code from rewriting the caller's storage context.
Bind to nonce and chainId; reject malleable signature forms.
Independent, hardware-isolated signers with least privilege.
Integrity checks and dependency pinning for the signer UI and its assets.
