合约安全的思维方式与普通业务开发完全相反,核心假设只有一条:所有外部输入都是恶意的,所有外部合约都可能反向攻击你。具体展开为四条原则: 1. 不要信任任何输入:用户参数、调用者地址、其他合约的返回值、甚至链上「当前价格」「当前时间」都可能被操纵。
不要信任任何外部调用:调用外部合约后,对方的 fallback / receive 可以执行任意逻辑,包括回调你的函数。 3. 权限最小化:默认函数是 external/non-payable,默认没有任何管理特权;每个 owner 权限都要问「如果这个密钥被盗会怎样」。
深度防御:编译检查、require 校验、重入锁、多签、Timelock、监控告警层层叠加,任何一层失效都不应导致资金立即损失。
后续每类漏洞都是某条原则被违反的具体形态。

Code review 时带着「如果我是攻击者,我会怎么喂参数给这个函数」的视角逐行过,比顺着作者思路读有效十倍。









