智能合约安全Skill:在部署之前,把重入、预言机操纵和代币小数错误挡在门外
核心结论速览
- 定位精准:这个技能不讲空泛的"要注意安全",而是给出错误写法与正确写法的对照实现,把防御性代码直接落进 Solidity 合约里。
- 覆盖高频雷区:代币小数不一致、无浮点数导致的精度截断、重入攻击、非标准 ERC20、DEX 现货价预言机、ERC-4626 金库通胀攻击、无限批准、访问控制缺失、输入校验遗漏——九类真实造成过资金损失的坑。
- 自带交付物:一份 12 项的预部署安全清单,可在每次上线前逐条打勾,把"靠感觉"变成"靠流程"。
- 进阶议题齐全:MEV 三明治攻击、代理与可升级性(UUPS 与透明代理取舍、存储布局规则)、EIP-712 签名重放、delegatecall 任意地址调用的致命风险。
- 边界清晰:它是最省时间的"上线前自检助手",但不能替代专业审计,最终结论仍需人工复核与工具验证。
1. 该技能叫什么?如何一键安装 AI 技能提升开发效率?
基础信息
| 项目 | 内容 |
|---|---|
| 技能中文名 | 智能合约安全Skill |
| 技能英文名 | security |
| 技能ID | 13689 |
| 技能类型 | 代码安全审查 / 防御性编码助手 |
| 核心能力 | Solidity 安全模式、常见漏洞识别、预部署审计清单 |
它解决什么问题
智能合约开发者最常见的三种错觉,恰恰是它的切入点:
- “我用的 Solidity 0.8+,溢出被语言自动检查,所以我是安全的。” 事实是,溢出只是数十种攻击向量中的一种。当下真正造成大额损失的是重入攻击、预言机价格操纵、授权(approve)漏洞以及代币小数处理错误。
- “我测过了,代码能跑通。” 能正确运行不等于安全。绝大多数漏洞利用的是开发者从未设想过的调用顺序或输入值——函数被以你意想不到的参数组合调用。
- “我这个合约很小,不值得审计。” DAO 事件源于一处并不复杂的重入缺陷,Euler 事件源于一处缺失的检查。合约规模与安全等级没有因果关系。
这个技能的价值就在于:它对每一个高风险点都同时给出"错误的实现方式"和"正确的防护实现",让修正动作变得可以直接执行。
一键安装的思路与步骤
- 确认前提:需要一个支持"技能"机制的 AI 助手运行环境(例如支持技能市场、技能列表或技能插件机制的开发者客户端或编程助手)。环境不具备技能能力时,即使拿到技能内容也无法自动挂载。
- 检索技能:在技能市场 / 技能列表 / 技能搜索入口中,用技能中文名「智能合约安全」、英文名
security或技能ID13689检索。注意英文名security属于通用单词,若有多个同名结果,请以技能ID13689为准进行区分。 - 一键添加:在检索结果中执行添加 / 安装 / 启用操作,使其挂载到当前会话或工作区。
- 验证是否生效:不必先读文档。直接贴一段有外部调用的提款函数并提问:“这个函数存在重入风险吗?请给出修复后的写法。” 如果回答能明确指出"外部调用后更新状态"的时序问题、给出**检查 → 效果 → 交互(CEI)**模式的改写,并提到非重入保护,说明技能已经正确加载。
- 注意:具体安装命令、入口地址、权限配置与版本要求会随宿主平台变化,以官方说明为准;本文不虚构任何命令与链接。
2. 该技能的主要功能和特点
-
九类漏洞的"坏写法 / 好写法"双栏对照 不是只喊"小心重入",而是同时摆出有漏洞的版本和加了检查、效果、交互顺序、又加了重入保护的版本,读者可以逐行替换。
-
代币小数差异的专门处理 明确列出常见精度:USDC 与 USDT 是 6 位、WBTC 是 8 位、DAI 与 WETH 及大多数代币是 18 位。禁止硬编码
1e18,改为读取代币元数据的decimals();跨精度运算时先归一化(例如把 6 位小数金额乘以1e12提升到 18 位)。 -
精度问题的正确姿势 Solidity 没有浮点数,除法直接截断。技能给出标准解法:用基点(1 bp = 0.01%)表达费率,
500即 5%,计算时先乘后除;复杂数学建议引入定点数学库。 -
非标准代币怪癖清单 转账手续费代币(实际到账小于发送金额,必须比对转账前后余额)、变基代币(余额会自行变化,应使用包装版本)、可暂停代币(代币暂停时转账会回滚)、黑名单代币(特定地址被禁止交易)。并强调统一使用
SafeERC20包裹所有代币操作。 -
预言机安全红线 明确禁止用 DEX 现货储备比作为价格来源——闪电贷可以在单笔交易内把池子价格打歪。可选方案为 Chainlink 价格源(配陈旧性检查与合理性检查)或 30 分钟以上的时间加权平均价格(TWAP)。
-
金库通胀攻击的完整推演 用五步还原 ERC-4626 首个存款人如何通过"存 1 wei + 直接捐赠"把份额价格抬到让后来者算出 0 份额,并给出虚拟偏移的修复公式,同时提示 OpenZeppelin 的 ERC4626 实现默认已包含该缓解措施。
-
MEV 与三明治攻击的防护 区分"何时 MEV 重要"(DEX 兑换、大额 DeFi 操作、热门 NFT 铸造)与"何时不重要"(普通转账、L2 交易、私有内存池交易),并给出设置明确最小输出、使用私有交易通道、收紧滑点等具体做法。
-
代理与可升级性的取舍框架 用表格对比 UUPS 与透明代理在升级逻辑位置、用户燃气成本、推荐度与风险上的差异,并列出五条关键规则(用
initializer而非构造函数、存储布局只允许末尾追加、使用可升级版本库、构造函数中禁用初始化器、升级权限移交多签)。 -
EIP-712 与 delegatecall 的边界 说明域分离器、nonce、deadline 三件套如何阻止跨合约与跨链重放;并强调 delegatecall 到用户提供的地址等于把存储控制权交出去。
-
与自动化工具衔接 给出静态分析(Slither)、符号执行(Mythril)、Foundry 模糊测试与燃气报告的命令入口,并列出"Slither 发现绝不能忽视"的四类告警。
-
和普通工具的差别 普通静态分析工具输出的是告警编号与位置,需要你自己判断严重性;这个技能输出的是为什么会出事 + 应该改成什么,更适合在编码阶段边写边修。
3. 如何使用该技能?
推荐使用流程
- 触发技能:在对话中直接说明意图,例如"帮我做部署前的安全自检"“这段 Solidity 有安全问题吗”,或直接引用技能名称。技能描述里已写明适用时机:部署任何合约之前、审查代码时、以及构建任何持有或转移价值的合约之前。
- 投喂上下文:把合约源码、关键函数片段或设计描述贴进来。信息越完整,判断越准——至少要包含涉及外部调用、代币转账、权限控制与价格读取的部分。
- 要求按清单逐项过:让技能以 12 项预部署清单为骨架逐条给出结论,而不是泛泛而谈。清单包括访问控制、重入保护、代币小数处理、预言机安全、整数数学、返回值检查、输入验证、事件发射、激励设计、无限批准、转账费用安全、边缘情况测试。
- 索要修复代码:对每一个被点名的风险,要求给出"改前 / 改后"的对照实现,避免停留在描述层。
- 用高价值问题追问:例如"我接受的代币可能是 6 位小数吗"“这个价格来源是否可被闪电贷操纵”“这处批准是否等价于无限授权”“升级时我会不会打乱存储布局”。
- 收口与复查:要求输出一份可留存的风险清单,修复后再次提交,让技能做一次回归检查。
- 叠加自动化验证:按技能给出的工具入口在本地跑静态分析与模糊测试,把"人工判断"和"机器扫描"交叉验证。
输入示例(提款函数自检)
输入:贴出一段函数——先读取用户余额,用底层调用把 ETH 转给用户,成功后才把余额置零;请按重入攻击的视角审查,并给出修复后的完整函数。
期望输出要点
技能应当指出:状态更新发生在外部调用之后,攻击者可以在回调中使用尚未清零的余额再次提款;修复方向是改为 CEI 顺序(先校验余额大于零 → 先把余额置零 → 最后执行外部调用并检查返回值),同时叠加非重入保护作为第二道防线。
输出结构参考
- 风险等级与位置
- 触发条件与攻击路径
- 修复后代码
- 对应清单条目(便于你回填到自己的上线检查表)
4. 同类型竞品对比分析
| 方案名称 | 定位 | 核心功能 | 安装/使用门槛 | 适用场景 | 优势与不足 |
|---|---|---|---|---|---|
| 智能合约安全Skill(security,技能ID 13689) | AI 助手内的安全审查与防御性编码顾问 | 九类漏洞对照实现、12 项预部署清单、代理与签名安全、MEV 防护、工具链指引 | 低。在支持技能的 AI 环境中检索并启用即可,用自然语言提问;具体入口以官方说明为准 | 编码阶段边写边修、上线前自检、Code Review 补位、安全知识速查 | 优势:给出可直接落地的修复代码,解释"为什么",覆盖设计与实现两层。不足:不执行符号执行与模糊测试,结论依赖人工复核,不能替代正式审计 |
| Slither | 静态分析工具 | 模式匹配扫描常见漏洞、未检查返回值、危险 delegatecall、未保护的状态修改 | 中。需要本地安装与命令行操作,会输出较多告警需人工筛选 | CI 流水线自动扫描、批量扫描存量代码 | 优势:自动化、可进流水线、覆盖稳定。不足:误报较多,只报位置不给修复方案,对业务逻辑漏洞无能为力 |
| Mythril | 符号执行工具 | 通过符号执行探索执行路径,寻找可达的漏洞状态 | 中高。需要配置环境,耗时随合约复杂度上升 | 关键合约的深度验证、与静态分析互补 | 优势:能发现路径相关的深层问题。不足:速度慢,复杂合约可能路径爆炸,结果解读需要经验 |
| OpenZeppelin Contracts + 人工审计 | 经过实战检验的库 + 第三方审计服务 | 提供审计过的代币、访问控制、代理、重入保护、SafeERC20 等标准实现;审计方出具报告 | 库的使用门槛低;人工审计门槛与成本高 | 长期运行的协议、持有大额资产的合约 | 优势:库经过大量实战检验,审计报告具备对外公信力。不足:审计周期长、成本高、属于时点结论,改代码后需重新评估 |
选型建议:把智能合约安全Skill 当作"随身的编码级安全顾问",Slither 与 Mythril 当作"CI 里的自动扫描器",OpenZeppelin 当作"默认底座",人工审计当作"上线前的最后一道闸门"。四者是叠加关系,不是替代关系。
5. 该技能的典型应用场景与实际体验情况
场景一:独立开发者首次部署 DeFi 合约
角色:个人开发者,第一次写涉及资金转移的合约,没有团队可 review。
痛点:分不清哪些是"风格问题"、哪些是"会丢钱的问题"。
用法:把合约整体贴入,要求按 12 项清单逐条过一遍,重点看外部调用与代币转账部分。
体验:上手难度低,几乎零学习成本;收获最明显的是小数与精度这类容易被忽视的细节——例如原本打算硬编码 1e18 表示"一个代币",被指出 USDC 只有 6 位小数,等于要转出一万亿枚。
场景二:小团队的 Code Review 补位
角色:3 到 5 人的合约团队,Review 时间被排期挤压。 痛点:Review 容易停留在命名和注释层面,安全维度缺乏统一检查项。 用法:把技能输出的 12 项清单固化为 PR 模板,每个涉及外部调用、代币操作、权限变更的 PR 都要求作者先自检并贴出结论。 体验:把"凭经验 review"变成"按清单 review",一致性明显提升。需要注意的是,技能给出的结论仍需资深成员确认,特别是涉及经济模型与激励设计的部分。
场景三:可升级协议升级前的专项审查
角色:维护代理合约的协议方,需要发版新实现。 痛点:存储布局错位是最隐蔽的事故源,一旦打乱顺序,旧变量会读出错误的槽位数据。 用法:要求技能专门就"存储布局是否只做了末尾追加"“是否用 initializer 替代了构造函数”“构造函数是否禁用了初始化器”"升级权限是否已交给多签"逐条确认。 体验:这类问题人工 review 很容易漏,技能的规则化提示非常有效。注意:修改后必须重新跑一遍,不要拿旧结论复用。
场景四:前端与交互层防三明治攻击
角色:DApp 前端开发者。 痛点:合约没问题,但用户在前端兑换时被夹。 用法:就滑点设置、最小输出金额、私有交易通道的选择向技能求证。 体验:技能能清楚区分"合约层防护"与"用户/前端层防护",并说明 L2 交易与私有内存池场景下 MEV 风险较低,避免过度设计。
整体体验小结
- 上手难度:很低,自然语言提问即可,不需要记命令。
- 效果:在"已知高危模式"的识别与修复上表现稳定,尤其是重入时序、代币小数、SafeERC20、无限批准、预言机来源这五类,几乎每次都能命中。
- 注意事项:其一,结论必须由人复核,模型可能误判业务语义;其二,它不代替静态分析与符号执行的机器验证;其三,跨版本语法与库接口存在差异,落地前请对照当前使用的库版本文档;其四,它不承诺发现全部漏洞,请把它当作"提高下限"的工具而非"保证上限"的保险。
6. 该技能能为用户带来的价值
效率层面:一次对话就能过完十余项安全检查点,把过去需要翻文档、翻事故复盘、翻审计报告才能拼齐的知识,压缩到几分钟。编码阶段发现问题,比上线后发现问题节省的成本通常高出数个数量级。
门槛层面:把"安全审计"从少数专家的领域,变成每个开发者都能执行的自检流程。哪怕你没有审计预算,也能拿到一份结构化的风险清单和可直接粘贴的修复代码。
可直接量化的收益方向:
- 缩短上线前自检与 Code Review 的轮次;
- 减少因代币小数处理错误导致的"资金去哪了"事故;
- 降低因无限批准在被利用时造成的连带损失面;
- 避免因存储布局错位导致的升级事故;
- 减少因缺少最小输出保护而被三明治攻击吃掉的价差。
长期价值:技能输出的错误与正确写法对照,本质上是一份可沉淀的团队安全编码规范。用得越久,团队自有的检查清单越完善,对 OpenZeppelin 等标准库的正确用法也越熟练,最终形成"默认写安全代码"的工程习惯——这比任何一次单点修复都更有价值。
7. 常见问题 FAQ
Q1:这个技能怎么安装?需要写代码配置吗?
A:在支持技能机制的 AI 助手环境中,用中文名「智能合约安全」、英文名 security 或技能ID 13689 检索并一键添加即可,通常不需要写配置代码。由于 security 是通用词,建议用技能ID 精确匹配。具体的安装入口、命令与权限设置请以官方说明为准。
Q2:收费吗?
A:技能本身是否收费、是否包含在宿主平台的订阅中,取决于所在平台的定价策略,本文不掌握也不虚构任何价格信息,请以官方说明为准。需要注意的是,若你叠加使用第三方审计服务或商业工具,那部分成本需单独核算。
Q3:它能替代专业安全审计吗?
A:不能。它的定位是"上线前的自检助手 + 防御性编码参考",属于提高下限的工具。正式审计还包含人工对经济模型、治理机制与业务逻辑的深度推理,以及符号执行、模糊测试等机器验证。合理做法是:先用本技能做自查与修复,把明显问题清干净,再交给审计方,这样审计资源会集中在真正复杂的问题上。
Q4:它和 Slither、Mythril 这类工具怎么选?
A:不是二选一。Slither 与 Mythril 是自动扫描器,优势是无遗漏地跑规则、可接入持续集成,输出是告警位置;本技能是顾问,优势是解释风险成因并给出修复代码。推荐组合是:编码时用本技能边写边修,提交时用扫描工具自动拦截,上线前用清单收口。
Q5:适合谁用?完全没有 Solidity 基础能用吗?
A:最适合三类人:正在写涉及资金转移合约的 Solidity 开发者、需要做 Code Review 的团队技术负责人、以及负责代理升级与前端交互安全的工程师。完全没有 Solidity 基础的用户也能读懂风险描述,但不建议在不理解代码含义的情况下直接采用生成的修复代码——安全修复的正确性最终由人负责。