闲社服务运行正常AI智能体自动化平台
s

Solidity审计预检

技能标识:solidity-audit-precheck

>

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 1.0.1
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

Solidity审计预检

Solidity 审计预检技能

针对Solidity合约的自动化安全预检。在您支付2万美元以上进行人工审计之前,捕获常见漏洞、验证OpenZeppelin使用情况并发现Gas效率问题。

使用场景

  • - 在将合约提交给付费审计机构(Trail of Bits、Certik、Spearbit等)之前
  • 编写新合约功能或进行重大重构之后
  • 在内部审查涉及合约代码的PR时
  • 在接手新合约代码库以了解风险面时
  • 在主网或任何公共测试网部署之前

不适用场景

  • - 不能替代人工审计。 这是预过滤器,而非安全保证。
  • 非Solidity合约(Rust/Anchor、Cairo、Stylus — 请使用特定语言工具)
  • 已部署且不可变的合约(无实际可操作项)
  • 前端/UI代码或链下脚本
  • 作为合规认证 — 自动化工具存在已知的漏报率

工具链配置

安装所需的CLI工具:

bash

Slither — 最全面的静态分析器


pip install slither-analyzer

Mythril — 符号执行 / 基于SMT的分析

pip install mythril

Foundry (forge, cast, anvil) — 用于测试和Gas快照

curl -L https://foundry.paradigm.xyz | bash && foundryup

Solhint — 风格和安全规则检查器

npm install -g solhint

Aderyn — 基于Rust的Solidity AST分析器(快速)

cargo install aderyn

验证:
bash
slither --version
myth version
forge --version
solhint --version
aderyn --version



预检工作流程

第一步 — 盘点代码库

bash

统计合约数量,识别外部依赖


find . -name *.sol | head -50
cat foundry.toml # 或 hardhat.config.ts
cat remappings.txt

识别入口点(已部署合约 vs 库/接口)

grep -r contract src/ --include=*.sol | grep -v interface\|abstract\|library

关键问题:

  • - 有多少个合约?其中已部署的和继承的分别有多少?
  • 使用哪个OpenZeppelin版本?(lib/openzeppelin-contracts/package.json)
  • 使用了哪些外部协议?(Uniswap、Aave、Chainlink等)
  • 升级模式?(UUPS、透明代理、信标、无)



第二步 — Slither静态分析

bash

使用所有检测器进行全面扫描


slither . --checklist --markdown-root .

JSON输出用于结构化审查

slither . --json slither-output.json

打印人类可读摘要

slither . --print human-summary

按严重性过滤

slither . --filter-paths lib/,node_modules/ --exclude-low

严重性级别:

级别操作
高阻止部署 — 审计前修复
中
必须处理 — 如不修复需提供理由 |
| 低 | 修复或记录理由 |
| 信息 | 风格/Gas — 在优化阶段处理 |

需要关注的高严重性检测器:

  • - reentrancy-eth — 可重入的ETH转账
  • unchecked-transfer — 未检查返回值的ERC20转账
  • arbitrary-send-eth — 不受限制的ETH发送
  • controlled-delegatecall — 攻击者控制的delegatecall
  • suicidal — 任何人可触发的selfdestruct
  • tx-origin — 使用tx.origin进行认证



第三步 — Mythril符号执行

bash

分析单个合约(较慢,更深入)


myth analyze contracts/MyContract.sol --solc-json mythril-config.json

针对大型合约设置超时

myth analyze contracts/MyContract.sol --execution-timeout 120 --max-depth 12

输出为JSON

myth analyze contracts/MyContract.sol -o json

Mythril捕获:

  • - 整数溢出/下溢(0.8.x之前的合约)
  • 通过符号路径发现的重入
  • 对用户提供地址的delegatecall
  • 未保护的selfdestruct
  • 对可预测值的依赖(block.timestamp、blockhash)



第四步 — Aderyn AST分析

bash

从项目根目录运行


aderyn .

输出Markdown报告

aderyn . --output report.md

针对特定目录

aderyn src/ --output aderyn-report.md

Aderyn速度快(大多数代码库亚秒级完成),捕获:

  • - 中心化风险(单一所有者控制)
  • 状态变更缺少事件
  • 不安全的ERC20操作
  • 弱访问控制模式
  • 不正确的继承顺序



第五步 — Solhint代码检查

bash

初始化配置


solhint --init

检查所有合约

solhint contracts//*.sol

使用安全规则集

solhint --config .solhint.json contracts//*.sol

推荐的.solhint.json:
json
{
extends: solhint:recommended,
rules: {
avoid-call-value: error,
avoid-low-level-calls: warn,
avoid-tx-origin: error,
check-send-result: error,
compiler-version: [error, ^0.8.20],
func-visibility: [warn, {ignoreConstructors: true}],
mark-callable-contracts: error,
multiple-sends: error,
no-complex-fallback: error,
no-inline-assembly: warn,
not-rely-on-block-hash: error,
not-rely-on-time: warn,
reentrancy: error,
state-visibility: error
}
}



第六步 — OpenZeppelin模式验证

手动检查清单 — 验证每项是否适用:

bash

检查OZ版本


cat lib/openzeppelin-contracts/package.json | grep version

查找所有继承的OZ合约

grep -r import.openzeppelin contracts/ --include=.sol

访问控制:

  • - [ ] 使用Ownable2Step而非Ownable(防止意外所有权转移)
  • [ ] AccessControl角色使用keccak256常量定义,而非内联字符串
  • [ ] 生产环境中DEFAULTADMINROLE不由EOA持有(使用多签)
  • [ ] 测试renounceRole和revokeRole的边缘情况

代币(ERC20/ERC721):

  • - [ ] 所有外部代币转账使用SafeERC20.safeTransfer
  • [ ] ERC721中使用safeMint(而非mint)
  • [ ] 处理回调钩子(onERC721Received)
  • [ ] 在状态变更后调用外部合约的函数上使用重入保护

可升级性:

  • - [ ] 正确调用初始化器(可升级合约中无构造函数逻辑)
  • [ ] 在实现构造函数中调用_disableInitializers()
  • [ ] 所有基础合约中定义存储间隙
  • [ ] 使用ERC-7201命名空间存储(OZ v5+)
  • [ ] 代理和实现之间无存储冲突

可暂停性:

  • - [ ] Pausable与关键函数上的whenNotPaused集成
  • [ ] pause()受角色保护(非公开)
  • [ ] 定义并测试紧急恢复路径



第七步 — Gas优化审计

bash

Forge Gas快照基线


forge snapshot

每个函数的Gas报告

forge test --gas-report

比较优化前后

forge snapshot --diff .gas-snapshot

需要标记的常见Gas优化:

模式问题修复
循环中uint256 i = 0浪费Gasuint256 i(默认值为零)
循环中读取storage变量
每次迭代SLOAD | 先缓存到memory |
| require(condition, long string) | 字符串消耗Gas | 使用自定义错误 |
| 多个mapping vs 结构体 | 额外SLOAD | 打包到结构体 |
| 内部函数使用public | 额外ABI开销 | 使用internal或private |
| 无界循环 | DoS风险+Gas | 添加maxIterations参数 |
| transfer() / send() |

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 solidity-audit-precheck-1776058577 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 solidity-audit-precheck-1776058577 技能

通过命令行安装

skillhub install solidity-audit-precheck-1776058577

下载

⬇ 下载 solidity-audit-precheck v1.0.1(免费)

文件大小: 6.08 KB | 发布时间: 2026-4-15 14:28

v1.0.1 最新 2026-4-15 14:28
Proper name and description (was published as TEST)
返回顶部