用途
该技能面向 EVM 兼容区块链上的 Solidity 智能合约工作,包括编写、审查、审计与部署。其定位是让智能体以专业审计人员的方式处理合约代码,强调代码部署后不可更改、漏洞可能造成巨额资金损失、每次计算都消耗 Gas 这一开发纪律。
主要能力
技能涵盖以下方向:
- Solidity 最佳实践与安全优先的开发方式
- DeFi 协议模式:AMM(恒定乘积公式)、借贷(抵押率、清算)、收益金库(ERC-4626)、质押(奖励分配)、治理(投票、时间锁)
- Gas 优化:存储读写优化、结构体打包、使用 calldata、批量操作等
- 审计级代码审查:重入、闪电贷攻击、预言机操纵、抢跑(MEV)、整数溢出、访问控制失效、代理存储碰撞等
- ERC 标准:ERC-20、ERC-721、ERC-1155、ERC-4626
- 测试框架配置:Foundry、Hardhat
核心原则
- 安全优先于技巧:优先使用经过审计的 OpenZeppelin 实现,而非自定义代码。
- 检查-生效-交互(CEI):先校验输入,再更新状态,最后进行外部调用,这是防重入的主要手段。
- Gas 即成本:每个操作码都有用户支付的成本,需优化存储读写(SSTORE 为 20,000 gas)、打包结构体、只读参数使用 calldata、尽可能批量操作。
- 不可变性要求完美:部署后无法修补,需全面测试(100% 分支覆盖)、可行时进行形式化验证,并在主网部署前进行独立审计。
- 可组合性既是特性也是风险:假设所有外部合约都是恶意的,使用重入防护并校验返回值。
使用方式与常见任务
技能提供了若干典型任务的代码示例与操作指引:
- 编写安全的 ERC-20 代币:继承 OpenZeppelin,不从头实现代币逻辑。
- 防止重入攻击:应用 CEI 模式并使用 OpenZeppelin 的 ReentrancyGuard。
- 优化 Gas:打包结构体、对构造函数设置的变量使用 immutable、缓存存储读取、使用自定义错误替代 require 字符串。
- 实现 ERC-4626 代币化金库。
- 配置 Foundry 测试,包括模糊测试(fuzz testing)。
- 审计合约常见漏洞:按优先级检查重入、访问控制、整数溢出、预言机操纵、闪电贷攻击、抢跑、未检查返回值、存储碰撞。
反模式与常见错误
技能列出了若干危险做法及替代方案,例如:自行实现代币逻辑、使用 tx.origin 做认证、状态更新前进行外部调用、使用 DEX 池现货价格、对数组进行无界循环、使用 transfer() 或 send()、代码中使用魔法数字。
注意事项(Gotchas)
- CEI 模式可能被修饰器破坏:修饰器在函数体前后执行,若在修饰器中进行外部调用,会先于函数体的状态更新执行。
- address.transfer() 和 address.send() 已弃用但仍被教授:硬编码 2300 gas 限额会在接收方有复杂逻辑时失败,正确做法是使用 call{value: amount}("") 配合 ReentrancyGuard。
- 代理存储碰撞会静默损坏状态:可升级代理模式中,实现合约的状态变量若与代理管理槽重叠,会导致写入时状态损坏,应使用 OpenZeppelin 的非结构化存储模式,并在升级前用 forge inspect 验证存储布局。
- Foundry 模糊测试默认种子可能反复命中而不扩展语料库:应定义 vm.assume() 守卫有效范围,并在 foundry.toml 中提高 fuzz.runs,对安全性关键函数使用不变量测试。
- 区块时间戳在约 15 秒内可被矿工操纵:对时间敏感逻辑(代币归属悬崖、拍卖截止)影响有限但值得注意,可使用 block.number 配合预期出块时间做更粗粒度计时。
参考资料与配套检查
技能包含 references/ 目录下的详细文档:security-audit.md(完整审计清单与漏洞目录)、gas-optimization.md(完整 Gas 优化指南)、defi-patterns.md(DeFi 构建模块)。仅在任务需要深入细节时加载相应文件。
技能首次在对话中激活时,会运行命令检查已安装的配套技能,并与 frontmatter 中的 recommended_skills 字段对比;对缺失项会提示一次并提供安装命令:npx skills add AbsolutelySkilled/AbsolutelySkilled --skill <name>。若 recommended_skills 为空或全部已安装则跳过。
限制
不适用于使用 ethers.js/wagmi 的前端 dApp 开发,也不适用于与智能合约无关的通用密码学概念。关于收费、价格、平台支持范围等信息,资料中暂未提供。