SuperAPI AI 工具集

solidity-coding

编程与开发

查看项目

更新于 10-15 08:48

技能介绍

Solidity Coding 是面向 Solidity 合约开发的编码规范技能,来源为 0xlayerghost/solidity-agent-kit,地址为 https://www.skills.sh/0xlayerghost/solidity-agent-kit/solidity-coding。它标记为 [AUTO-INVOKE],要求在任何 .sol 文件的编写或修改之前必须先调用。

用途 该技能用于统一 Solidity 项目的编码风格、安全实践与结构组织,覆盖从 pragma 版本、依赖管理到错误处理、事件设计、命名约定和目录布局的多个方面,帮助开发者在生成合约代码时遵循既定规则,避免随意实现。

主要能力

  1. 编码原则:规定 pragma solidity ^0.8.19 并保持项目内一致;使用 OpenZeppelin Contracts 4.9.x 并通过 remappings.txt 管理导入;优先使用自定义错误(custom errors)而非 require 字符串;所有 public/external 函数需有 NatSpec(@notice、@param、@return);仅对 address 类型参数加 indexed,其他类型需加注释说明;immutable/constant/unchecked/assembly 必须附行内注释解释原因。
  2. 初始化策略:针对涉及状态初始化的合约,不默认采用单一方案,而是先评估合约是否可升级、依赖是否在部署时已知、是否存在跨合约部署顺序约束,然后向开发者展示三种方案(仅构造函数、仅 initializer、混合)及其取舍,由开发者自行选择。技能给出每种方案在原子性、抢先交易风险、Gas、灵活性、可升级性方面的对比,以及不同场景的建议方案。无论采用哪种方案,都要遵守一次性锁定、initializer 访问控制、优先 immutable、构造函数内不做复杂外部调用、部署脚本负责调用顺序等安全规则。
  3. 事件设计:提出“原因标注事件”模式,当同一操作可能因不同原因发生时,在事件中加入 string reason 参数,使链上数据自解释,并给出适用场景与不适用场景;同时提供 reason 实现方式(string 字面量、uint8 reasonCode、字符串拼接)的 Gas 成本对比与选择建议。通用事件规则要求每个改变状态的 external/public 函数至少 emit 一个事件,事件参数应足以让前端/indexer 重建上下文,NatSpec @param 需列出 reason 的所有可能值。
  4. 命名约定:规定合约/库用 PascalCase、接口用 I+PascalCase、状态变量/函数用 lowerCamelCase、常量/immutable 用 UPPER_SNAKE_CASE、事件用 PascalCase(过去式)、自定义错误用 PascalCase、setter 函数参数前缀 _;禁止拼音命名、单字母变量(循环中 i/j/k 除外)和过度缩写;返回值命名与状态变量冲突时使用语义前缀(is/can/has/current/total)而非追加 _。
  5. 代码组织:跨合约常量放 src/common/Const.sol;接口定义单独放 src/interfaces/I<Name>.sol;共享有状态行为放 src/abstract/<Name>.sol 并通过继承复用;简单链上查询用 Foundry cast CLI;复杂多步操作用 Foundry script(*.s.sol);导入使用命名导入。
  6. 共享管理函数与复杂函数重构:同一管理操作在多个合约中只保留一个规范函数名、参数顺序、事件、错误、NatSpec 和实现;复杂函数重构前需阅读 references/complex-function-refactoring.md,不因增加函数数量而拆分小函数,除用户明确要求行为变更外需保留外部 ABI、执行顺序、revert 行为、状态转换顺序、事件与资金流不变量。
  7. 目录结构与配置管理:给出 src/、test/、script/、config/、deployments/、docs/、lib/ 的目录结构;说明 config/*.json、deployments/latest.env、foundry.toml 的用途,要求重要配置变更在 PR 描述中记录。
  8. OpenZeppelin 库选型:按场景列出访问控制、安全保护、代币标准、工具库、合约升级、预言机与链下服务的推荐库及导入路径;给出库选择决策流程、所有权模型选择规则(1 个角色由开发者选 Ownable 或 Ownable2Step,2 个及以上角色用 AccessControl,治理/DAO 用 TimelockController),以及反模式清单(不写自定义 transfer 包装、不写自定义访问控制、不写自定义暂停逻辑、在 Solidity >= 0.8.0 不用 SafeMath、不用 require(token.transfer(...))、不用 tx.origin 做鉴权)。
  9. MCP 辅助生成:在配置 OpenZeppelinContracts MCP 时,可按合约类型(ERC20、ERC721、ERC1155、稳定币、RWA、智能账户、治理、自定义)使用对应工具生成基础合约,再套用本技能的命名与结构规则并应用 /solidity-security 规则;未配置 MCP 时则回退到库选型标准手写。

使用方式 该技能在编写或修改 Solidity 合约前被自动调用,开发者按其中的规则进行编码。技能本身不提供独立的命令行安装步骤;其配套 Foundry 快速参考命令包括 forge init、forge install openzeppelin-contracts、forge build、forge fmt、forge remappings。具体调用与配置细节以原技能说明为准,本文未提供的收费、价格、平台等信息暂未提供。

适用场景 适用于需要统一 Solidity 编码规范、进行合约初始化设计、事件设计、命名规范、代码组织、OpenZeppelin 库选型以及使用 MCP 辅助生成基础合约的项目。

限制 技能要求不擅自替开发者选择初始化方案或所有权模型,需在无记录选择时列出选项由开发者决定;未配置 MCP 时需回退到手动编写;频繁事件不宜用 string reason 以免消耗额外 Gas;部分引用文档(如 references/shared-contract-behaviors.md、references/complex-function-refactoring.md)的具体内容未在资料中提供。