一、智能合约安全入门
1.1 什么是智能合约
智能合约,说白了就是跑在区块链上的自动执行程序。我经常跟新人这么解释:它就像一台自动售货机——你投币,它自动出货,中间不需要任何人干预。
传统合约需要律师、公证人、法院来执行。智能合约不一样,代码写死了规则,条件满足就自动执行。谁也改不了,谁也拦不住。
核心特征:
- 去中心化——代码部署后,没人能单方面篡改
- 透明公开——所有逻辑都在链上,谁都能查
- 不可逆——交易一旦确认,回滚几乎不可能
- 自动执行——条件触发,立即执行,无需第三方
拿 Solidity 举个例子,一个最简单的存钱合约:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleVault {
mapping(address => uint) public balances;
function deposit() public payable {
balances[msg.sender] += msg.value;
}
function withdraw(uint amount) public {
require(balances[msg.sender] >= amount, "余额不足");
balances[msg.sender] -= amount;
payable(msg.sender).transfer(amount);
}
}
这段代码看起来简单吧?但我在项目中见过类似逻辑被攻击的案例。问题出在哪?嗯,后面我们会细讲。
1.2 为什么需要关注安全
你可能觉得:「不就是写个程序嘛,能有多大事?」
我跟你讲,传统应用出 bug,最多是服务宕机、数据丢失。智能合约出 bug,那是真金白银直接蒸发。而且一旦部署,想修复?难上加难。
几个残酷的现实:
- 智能合约不可篡改——有漏洞也不能直接改代码
- 链上资产价值高——黑客盯着呢,分分钟几千万
- 攻击手法日新月异——今天安全的代码,明天可能就有新漏洞
- 责任重大——你写的合约可能管理着用户全部积蓄
我个人习惯把智能合约安全比作「在玻璃房子里数钱」。所有人都能看到你的代码,所有人都能尝试攻击你。你想想看,这压力有多大?
1.3 常见的安全事件回顾
聊几个我印象深刻的案例,你就知道安全有多重要了。
| 事件 | 年份 | 损失金额 | 原因 |
|---|---|---|---|
| The DAO 攻击 | 2016 | 约 6000 万 ETH | 重入攻击 |
| Parity 多签钱包 | 2017 | 约 3 亿美元 | 库合约自毁 |
| Poly Network | 2021 | 约 6.1 亿美元 | 跨链桥逻辑漏洞 |
| Nomad Bridge | 2022 | 约 1.9 亿美元 | 初始化参数错误 |
最经典的还是 The DAO。当时我还在上学,看着新闻里说「以太坊被黑客攻击了」,整个社区都炸了。最后不得不硬分叉,才有了现在的以太坊和以太经典。
为什么会这样?因为合约里有个重入漏洞——攻击者在提款函数还没更新余额前,递归调用自己,把资金一次次提走。就一行代码的顺序问题,损失几千万。
我的建议:每次写合约前,先想想「如果我是黑客,我会怎么攻击这段代码?」。这个思维习惯救过我很多次。
1.4 本课程的学习路径
这门课一共 30 章,我按自己的经验分了几个阶段:
- 基础篇(第 1-5 章)——了解智能合约原理,搭建开发环境,写第一个合约
- 漏洞篇(第 6-15 章)——逐个剖析常见漏洞,重入、整数溢出、访问控制……每个都配真实案例
- 防御篇(第 16-22 章)——怎么写出安全的代码,审计工具怎么用,测试怎么做
- 实战篇(第 23-28 章)——模拟审计真实项目,从 DeFi 到 NFT,手把手带你走一遍
- 进阶篇(第 29-30 章)——前沿话题,MEV 安全、形式化验证、未来趋势
下面这张图是我自己整理的课程知识体系,你可以先有个整体印象:
每个章节我都会配真实案例和代码。有些是我自己在审计中踩过的坑,有些是公开的经典漏洞。你跟着走一遍,基本就能入门了。
学习建议:
- 每章看完,自己动手写代码跑一遍
- 遇到不懂的,先记下来,后面章节可能会讲到
- 多去读别人的审计报告,看黑客是怎么思考的
我曾经带过不少新人,发现最大的问题不是学不会,而是「以为自己会了」。智能合约安全这行,纸上谈兵没用。你得真去写、真去测、真去被黑客教育过,才能长记性。
准备好了吗?我们开始吧。