问题修复
编写/审查 Solidity 合约并接入 Web3…
适用于 Solidity 智能合约开发、安全加固、Gas 优化、测试/静态分析及 React Web3 前端集成。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
编写/审查 Solidity 合约并接入通用
解决思路
- 核心原则:减少冗余,只给代码或详细说明。
- 核心原则:保持简洁,同时优先保证准确性和深度。
- 核心原则:先回答,必要时再解释。
- 代码结构与安全:使用显式可见性修饰符和 NatSpec 文档。
- 代码结构与安全:应用函数修饰符以减少重复代码。
- 代码结构与安全:遵循命名约定,合约用 CamelCase。
- 代码结构与安全:接口用 PascalCase 并以 I 为前缀。
- 代码结构与安全:实现接口隔离原则。
- 代码结构与安全:可升级合约使用代理模式。
- 代码结构与安全:为状态变化发出完整事件。
- 代码结构与安全:遵循 Checks-Effects-Interactions 模式防止重入。
- 安全最佳实践:使用 OpenZeppelin 的 AccessControl 管理权限。
- 安全最佳实践:要求 Solidity 0.8.0+ 以获得溢出/下溢保护。
- 安全最佳实践:使用 Pausable 模式实现熔断器。
- 安全最佳实践:实现 ReentrancyGuard 以获得额外保护。
- 安全最佳实践:使用 SafeERC20 进行代币交互。
- 安全最佳实践:采用 pull-over-push 支付模式。
- 安全最佳实践:对敏感操作实施 timelocks 和 multisig 控制。
- Gas 优化:优化 Gas 消耗(部署和运行时)。
- Gas 优化:对构造函数设置的值使用 immutable 变量。
- Gas 优化:使用自定义错误代替 revert 字符串。
- Gas 优化:高效打包存储变量。
- Gas 优化:使用合适的数据类型。
- 工具与分析:集成 Slither 和 Mythril 进行静态分析。
- 工具与分析:利用 Hardhat 的测试和开发环境。
- 工具与分析:实现健壮的 CI/CD 流水线。
- 工具与分析:使用 pre-commit linting 工具。
- 高级模式:使用 Chainlink VRF 获取随机性。
- 高级模式:战略性地使用 assembly,并配以详尽文档。
- 高级模式:对复杂逻辑使用状态机模式。
- 高级模式:对特殊代币使用 ERC20Snapshot、ERC20Permit 和 ERC20Votes。
- 测试与质量:全面的单元、集成和端到端测试。
- 测试与质量:使用基于属性的测试方法。
- 测试与质量:设定高覆盖率目标。
- 测试与质量:定期进行安全审计。
- Web3 前端集成:保持与合约交互的前端代码类型安全且显式——从 ABI 生成 TypeScript 类型(例如通过 TypeChain 或 wagmi/viem codegen),而不是手写合约调用签名。
- Web3 前端集成:将钱包连接、链/网络状态和交易状态视为显式、有类型的 state(connected/connecting/wrong-network/error),而不是隐式布尔值。
- Web3 前端集成:在 UI 中清晰展示交易生命周期:已提交、待确认、已确认、已回滚——永远不要假设已提交的交易成功。
- Web3 前端集成:在提示用户签名之前验证和模拟交易(例如 `eth_call`/gas estimation),以便尽早捕获 revert。
- Web3 前端集成:永远不要信任客户端读取的合约状态来做授权决策——始终在合约本身链上重新验证。
- Web3 前端集成:将 provider/RPC 故障和用户拒绝签名请求处理为预期的、可恢复的错误状态。
适用边界 · 注意事项
- 非 EVM 链或非 Solidity 项目(如 Vyper、Rust 智能合约)不适用。
- 一次性/纯教学原型且无真实资金或权限风险时,不必全套安全审计和高级模式。
- 无法使用 Solidity 0.8.0+ 或无法引入 OpenZeppelin/Hardhat 等基础依赖的遗留环境需裁剪使用。