|
| 1 | +--- |
| 2 | +mode: 'agent' |
| 3 | +model: GPT-5 |
| 4 | +tools: ['search', 'usages', 'problems', 'changes', 'githubRepo', 'todos'] |
| 5 | +description: 'HyperLiquid MCP 项目代码质量自动检测与分析' |
| 6 | +--- |
| 7 | + |
| 8 | +# HyperLiquid MCP 代码审查指南 |
| 9 | + |
| 10 | +## 审查目标 |
| 11 | +对 HyperLiquid MCP 服务器项目进行全面的代码质量检查,确保交易功能的安全性、可靠性和最佳实践。 |
| 12 | + |
| 13 | +## 核心审查领域 |
| 14 | + |
| 15 | +### 1. 安全性审查 🔒 |
| 16 | +**重点关注:** |
| 17 | +- ✅ 私钥处理:确保私钥永不泄露、正确加密存储 |
| 18 | +- ✅ 环境变量配置:检查 `.env` 文件是否正确添加到 `.gitignore` |
| 19 | +- ✅ API 认证:验证所有交易操作的身份验证机制 |
| 20 | +- ✅ 输入验证:所有用户输入必须经过严格验证(订单大小、价格、币种等) |
| 21 | +- ✅ 错误信息:确保错误信息不暴露敏感数据 |
| 22 | +- ✅ 测试网/主网隔离:验证网络切换逻辑正确无误 |
| 23 | + |
| 24 | +**检查清单:** |
| 25 | +```python |
| 26 | +# ❌ 错误示例 |
| 27 | +print(f"Private key: {private_key}") # 永不打印私钥 |
| 28 | + |
| 29 | +# ✅ 正确示例 |
| 30 | +logger.info(f"Account initialized: {account_address[:6]}...{account_address[-4:]}") |
| 31 | +``` |
| 32 | + |
| 33 | +### 2. 交易逻辑审查 💰 |
| 34 | +**关键模式验证:** |
| 35 | +- ✅ **订单大小 vs 美元金额**:确保 `size` 参数代表代币数量,非美元价值 |
| 36 | + ```python |
| 37 | + # ❌ 常见错误:用户想买 $20 的 SOL |
| 38 | + place_limit_order(coin="SOL", size=20.0) # 错误!这是 20 个 SOL |
| 39 | + |
| 40 | + # ✅ 正确做法 |
| 41 | + token_amount = calculate_token_amount_from_dollars("SOL", 20.0) |
| 42 | + place_limit_order(coin="SOL", size=token_amount["token_amount"]) |
| 43 | + ``` |
| 44 | + |
| 45 | +- ✅ **OCO 订单分组**:验证不同场景使用正确的分组类型 |
| 46 | + - `normalTpSl`:新仓位的止盈止损(`place_bracket_order`) |
| 47 | + - `positionTpSl`:现有仓位的止盈止损(`set_position_tpsl`) |
| 48 | + |
| 49 | +- ✅ **仓位管理**:区分新仓位操作 vs 现有仓位操作 |
| 50 | + - 新仓位:`market_open_position()`, `place_bracket_order()` |
| 51 | + - 现有仓位:`set_take_profit_stop_loss()`, `market_close_position()` |
| 52 | + |
| 53 | +- ✅ **滑点计算**:检查 `_slippage_price()` 方法的正确性 |
| 54 | + |
| 55 | +### 3. 异步模式审查 ⚡ |
| 56 | +**FastMCP 架构要求:** |
| 57 | +- ✅ 所有 `@mcp.tool` 装饰的函数必须是 `async def` |
| 58 | +- ✅ 服务层调用使用 `await` 关键字 |
| 59 | +- ✅ 全局服务实例的正确初始化(单例模式) |
| 60 | +- ✅ 避免阻塞操作影响异步性能 |
| 61 | + |
| 62 | +```python |
| 63 | +# ✅ 正确的异步工具实现 |
| 64 | +@mcp.tool |
| 65 | +async def get_account_balance() -> Dict[str, Any]: |
| 66 | + initialize_service() # 确保服务已初始化 |
| 67 | + return await hyperliquid_service.get_account_balance() |
| 68 | +``` |
| 69 | + |
| 70 | +### 4. 错误处理审查 🛡️ |
| 71 | +**标准化返回格式:** |
| 72 | +```python |
| 73 | +# ✅ 成功响应 |
| 74 | +{ |
| 75 | + "success": True, |
| 76 | + "data": {...}, |
| 77 | + "order_result": {...} |
| 78 | +} |
| 79 | + |
| 80 | +# ✅ 失败响应 |
| 81 | +{ |
| 82 | + "success": False, |
| 83 | + "error": "详细错误描述" |
| 84 | +} |
| 85 | +``` |
| 86 | + |
| 87 | +**检查要点:** |
| 88 | +- ✅ 所有 API 调用都有 try-except 包裹 |
| 89 | +- ✅ 错误日志包含足够的上下文信息 |
| 90 | +- ✅ 用户友好的错误提示 |
| 91 | +- ✅ 关键操作失败时的回滚机制 |
| 92 | + |
| 93 | +### 5. 日志与监控审查 📊 |
| 94 | +**日志策略:** |
| 95 | +- ✅ 结构化日志:包含时间戳、级别、上下文 |
| 96 | +- ✅ 文件日志:写入 `hyperliquid_mcp.log` |
| 97 | +- ✅ 敏感信息过滤:订单 ID 可记录,私钥绝不记录 |
| 98 | +- ✅ API 交互日志:记录请求参数和响应(排除敏感数据) |
| 99 | + |
| 100 | +```python |
| 101 | +# ✅ 良好的日志实践 |
| 102 | +self.logger.info(f"Placing order: {coin} {side} {sz} @ {limit_px}") |
| 103 | +self.logger.error(f"Failed to place order for {coin}: {e}", exc_info=True) |
| 104 | +``` |
| 105 | + |
| 106 | +### 6. 配置管理审查 ⚙️ |
| 107 | +**三层配置系统:** |
| 108 | +1. 环境变量(优先级最高) |
| 109 | +2. `.env` 文件 |
| 110 | +3. `config.json` 文件 |
| 111 | + |
| 112 | +**验证要点:** |
| 113 | +- ✅ 配置加载顺序正确 |
| 114 | +- ✅ 必需配置缺失时提供清晰的错误提示 |
| 115 | +- ✅ 配置验证使用 Pydantic 模型 |
| 116 | +- ✅ 测试网/主网配置清晰标识 |
| 117 | + |
| 118 | +### 7. SDK 集成审查 🔌 |
| 119 | +**HyperLiquid SDK 使用:** |
| 120 | +- ✅ Info 客户端:只读操作(余额、持仓、市场数据) |
| 121 | +- ✅ Exchange 客户端:交易操作(订单、取消、转账) |
| 122 | +- ✅ 自定义扩展:`_bulk_orders_with_grouping()` 正确设置 OCO 分组 |
| 123 | +- ✅ 钱包集成:`eth-account` 正确签名交易 |
| 124 | + |
| 125 | +### 8. 代码质量审查 ✨ |
| 126 | +**Python 最佳实践:** |
| 127 | +- ✅ 类型注解:使用 `typing` 模块标注参数和返回值 |
| 128 | +- ✅ 文档字符串:所有公共方法包含清晰的 docstring |
| 129 | +- ✅ 命名规范:遵循 PEP 8(snake_case 函数,CamelCase 类) |
| 130 | +- ✅ 代码复用:避免重复代码,提取通用函数 |
| 131 | +- ✅ 依赖管理:使用 `uv` 管理依赖,保持 `pyproject.toml` 整洁 |
| 132 | + |
| 133 | +## 自动化检查流程 |
| 134 | + |
| 135 | +### 步骤 1:问题诊断 🔍 |
| 136 | +```bash |
| 137 | +# 使用 'problems' 工具检查编译和 lint 错误 |
| 138 | +- 检查类型错误 |
| 139 | +- 检查未使用的导入 |
| 140 | +- 检查潜在的 bug |
| 141 | +``` |
| 142 | + |
| 143 | +### 步骤 2:代码变更分析 📝 |
| 144 | +```bash |
| 145 | +# 使用 'changes' 工具查看最近修改 |
| 146 | +- 识别新增或修改的交易功能 |
| 147 | +- 检查是否影响核心安全逻辑 |
| 148 | +- 验证测试覆盖 |
| 149 | +``` |
| 150 | + |
| 151 | +### 步骤 3:代码搜索 🔎 |
| 152 | +```bash |
| 153 | +# 使用 'search' 工具查找特定模式 |
| 154 | +- 搜索硬编码的敏感信息(API 密钥、私钥等) |
| 155 | +- 查找未处理的异常 |
| 156 | +- 识别同步代码在异步环境中的使用 |
| 157 | +``` |
| 158 | + |
| 159 | +### 步骤 4:使用情况分析 📈 |
| 160 | +```bash |
| 161 | +# 使用 'usages' 工具分析函数调用 |
| 162 | +- 验证服务层函数被正确调用 |
| 163 | +- 检查已弃用的 API 使用 |
| 164 | +- 识别未使用的代码 |
| 165 | +``` |
| 166 | + |
| 167 | +### 步骤 5:待办事项检查 ✅ |
| 168 | +```bash |
| 169 | +# 使用 'todos' 工具查找未完成工作 |
| 170 | +- 检查 TODO 注释 |
| 171 | +- 识别 FIXME 标记 |
| 172 | +- 查找临时解决方案 |
| 173 | +``` |
| 174 | + |
| 175 | +## 特定场景审查清单 |
| 176 | + |
| 177 | +### 新增交易工具函数 |
| 178 | +- [ ] 函数名清晰描述功能 |
| 179 | +- [ ] 包含完整的 docstring(参数、返回值、示例) |
| 180 | +- [ ] 使用 `@mcp.tool` 装饰器 |
| 181 | +- [ ] 函数声明为 `async def` |
| 182 | +- [ ] 调用 `initialize_service()` 初始化服务 |
| 183 | +- [ ] 参数验证完整(类型、范围、格式) |
| 184 | +- [ ] 错误处理遵循标准返回格式 |
| 185 | +- [ ] 日志记录关键操作 |
| 186 | +- [ ] 添加使用示例或测试用例 |
| 187 | + |
| 188 | +### 修改核心服务层 |
| 189 | +- [ ] 保持向后兼容性 |
| 190 | +- [ ] 更新相关文档 |
| 191 | +- [ ] 验证所有调用点 |
| 192 | +- [ ] 添加或更新单元测试 |
| 193 | +- [ ] 考虑性能影响 |
| 194 | +- [ ] 审查错误处理路径 |
| 195 | + |
| 196 | +### 配置变更 |
| 197 | +- [ ] 更新 `.env.example` 文件 |
| 198 | +- [ ] 文档化新配置项 |
| 199 | +- [ ] 提供默认值或验证逻辑 |
| 200 | +- [ ] 测试配置缺失场景 |
| 201 | +- [ ] 更新 README.md |
| 202 | + |
| 203 | +## 输出格式 |
| 204 | + |
| 205 | +### 审查报告结构 |
| 206 | +```markdown |
| 207 | +# HyperLiquid MCP 代码审查报告 |
| 208 | + |
| 209 | +## 📊 总体评分 |
| 210 | +- 安全性:X/10 |
| 211 | +- 代码质量:X/10 |
| 212 | +- 文档完整性:X/10 |
| 213 | +- 测试覆盖率:X/10 |
| 214 | + |
| 215 | +## 🔴 严重问题(必须修复) |
| 216 | +1. [问题描述] |
| 217 | + - 位置:文件名:行号 |
| 218 | + - 影响:安全性/功能性 |
| 219 | + - 建议:具体修复方案 |
| 220 | + |
| 221 | +## 🟡 警告(建议修复) |
| 222 | +1. [问题描述] |
| 223 | + - 位置:文件名:行号 |
| 224 | + - 建议:改进方案 |
| 225 | + |
| 226 | +## 🟢 最佳实践建议 |
| 227 | +1. [建议内容] |
| 228 | + - 位置:文件名:行号 |
| 229 | + - 优化:具体建议 |
| 230 | + |
| 231 | +## 📝 详细分析 |
| 232 | +[按审查领域组织的详细发现] |
| 233 | + |
| 234 | +## ✅ 操作项 |
| 235 | +- [ ] 修复严重安全问题 |
| 236 | +- [ ] 改进错误处理 |
| 237 | +- [ ] 补充文档 |
| 238 | +- [ ] 添加测试用例 |
| 239 | +``` |
| 240 | + |
| 241 | +## 参考文档 |
| 242 | +- **项目文档**:`AGENT.md` - AI 编程指南 |
| 243 | +- **FastMCP 文档**:https://github.com/jlowin/fastmcp |
| 244 | +- **HyperLiquid SDK**:https://github.com/hyperliquid-dex/hyperliquid-python-sdk |
| 245 | +- **Python 异步编程**:PEP 492 |
| 246 | + |
| 247 | +--- |
| 248 | + |
| 249 | +**执行建议**: |
| 250 | +1. 优先审查涉及资金操作的代码 |
| 251 | +2. 关注最近变更的文件 |
| 252 | +3. 验证所有错误路径的处理 |
| 253 | +4. 确保文档与代码同步 |
| 254 | +5. 定期运行自动化检查工具 |
| 255 | + |
| 256 | + |
0 commit comments