---
name: code-review
description: 通用代码审查命令，基于业务需求进行白盒逻辑正确性审查和技术架构评估
---

# 代码审查命令

## 审查任务

请对当前工作区的代码修改进行全面审查，重点关注业务逻辑的正确性和技术架构的合理性。

## 审查维度

### 1. 业务层面审查（BLOCKING级别）
- **需求来源验证**：寻找并验证业务需求来源（不能基于代码反推需求）
- **需求实现完整性**：验证代码是否100%满足业务需求
- **业务流程逻辑正确性**：检查状态转换、数据流、条件判断的逻辑
- **数据结构正确性**：验证模型定义、字段约束、业务规则映射
- **Edge Case处理**：评估边界条件和异常场景的处理合理性

### 2. 技术层面审查  
- **架构合理性**：模块化、职责分离、依赖关系
- **KISS原则遵循**：避免过度工程化
- **扩展性评估**：未来功能添加的容易程度
- **非Adhoc修改验证**：是否遵循现有代码模式
- **性能问题检测**：查找明显的性能问题（如N+1查询等）
- **单元测试完备性**：核心逻辑90%覆盖率要求

### 3. 契约与连通性专项检查（BLOCKING）
- 端点一致性：前端端点集中配置；路径/动态段/大小写/末尾分隔符与后端路由完全一致；HTTP 方法语义匹配（幂等/副作用）。
- 认证与跨域：统一的认证机制（会话/令牌）；前端传递方式与后端期望一致（Cookie/Authorization 等）；跨域与 CSRF 策略匹配。
- 请求/响应 Schema：字段名、类型、必选/可选一致；时间/数值/布尔的编码一致；分页/排序参数与响应元信息对齐。
- 错误与状态码：4xx/5xx 使用合理；错误负载结构稳定且可解析；前端根据错误类型提供可恢复提示。
- 异步/事件（如有）：事件类型与载荷字段与文档一致；开始/结束/错误/心跳等语义完整；增量合并无丢失/重复；存在降级路径。
- 端到端透传：API→Service→下游（存储/第三方）参数（上下文/会话/区域/幂等键）无遗漏；写操作具备幂等/去重策略。
- 日志与隐私：日志含必要上下文（追踪/用户/会话），敏感信息脱敏；UI 默认不展示内部实现细节。

#### 全链路 Contract Crosswalk（必做）
- 选取关键用户流，建立“参数对齐矩阵”：
  - 前端请求 → 后端路由/处理 → 服务层 → 下游（存储/第三方）→ 持久化字段。
  - 列出每个参数：`name | type | required | default | source-of-truth(文件:行)`。
  - 如存在事件/流式契约，补充事件类型与载荷字段，以及必要的状态回写。
- 输出差异点与最小修复建议（谁改、改哪、如何不破坏现有行为）。

### 4. 高发问题清单（优先排查）
- 命名错位：不同层对同一概念使用了不同命名风格或名称（例如 `camelCase` ↔ `snake_case`、标识符命名不一致）。
- 路径错位：端点路径或动态段命名不一致；末尾分隔符导致重定向或方法失败。
- 类型漂移：数字/字符串/布尔/时间类型在层间编码不一致或未正确转换。
- 认证混用：请求在不同处使用了不同认证方式；跨域请求未按需携带凭证；CSRF 保护缺失。
- 事件缺口：后端新增事件类型或字段未在前端解析；增量合并逻辑导致重复/丢失。
- 可见性/状态：后端状态位或可见性字段被忽略，导致 UI 展示与真实状态不一致。

### 5. 零假设验证（VERIFY-FIRST Gate，BLOCKING）
- 禁止基于“猜测的字段/API/事件”写逻辑。每个关键元素必须给出证据：
  - 模型/字段定义位置（文件:行）
  - 路由/处理方法签名（文件:行）
  - 前端类型/解析/调用代码（文件:行）
- 无证据的假设一律不通过。

### 6. 用户视角 E2E 可见性审计（BLOCKING）
⚠️ **这是最关键的检查** - "代码完美但功能不工作"的主要原因就是跳过了这一步！

**MANDATORY USER FLOW VERIFICATION (必须执行):**
- **完整点击路径追踪**：从用户点击开始，逐步追踪到最终状态
  - 用户点击X → 调用函数Y → 导航到页面Z → 显示内容W
  - **必须验证每个步骤都正确执行**
- **URL路由验证**：所有导航路径在路由配置中存在且正确处理参数
- **状态传递验证**：点击后的状态变化是否正确反映在UI中
- **错误场景测试**：参数缺失、网络错误、权限不足等场景的处理

**具体检查项目:**
- 入口可见：对应功能的入口（按钮/导航/控件）在默认场景与目标设备上可达；不被误判条件隐藏。
- **链接落地（核心）**：页面路由/回跳/深链接一致；从入口到完成形成闭环。
  - 点击通知 → 是否真的跳转到预期页面？
  - 分享链接 → 是否真的加载预期内容？
  - 所有导航路径都必须实际追踪验证！
- 状态完整：加载/空数据/错误/权限不足 均有清晰呈现与可恢复路径。
- 角色/开关：与权限/Feature Flag 的可见性符合预期；默认值不阻断主流程。

**⛔ 禁止行为:**
- ❌ 只看代码结构，不追踪实际执行流程
- ❌ 假设navigate()调用就等于用户到达了目标页面
- ❌ 不验证URL参数处理逻辑
- ❌ 说"看起来正确"而不验证"实际正确"

### 7. Web3 AI 交易系统安全审查（BLOCKING 级别）
🔐 **资金安全是生死线** - 一个安全漏洞可能导致所有资金损失！

#### 7.1 私钥与密钥管理（CRITICAL）
- **零泄露原则**：
  - ❌ 禁止：私钥/助记词出现在日志、错误消息、前端代码、Git 历史中
  - ❌ 禁止：明文存储私钥（环境变量、配置文件、数据库）
  - ✅ 必需：使用硬件钱包、HSM、或加密密钥管理服务（AWS KMS/Vault）
  - ✅ 必需：API Key、密钥材料必须加密存储，运行时解密
- **最小权限原则**：
  - 交易签名密钥与只读查询密钥分离
  - 每个功能使用独立的子账户/权限
  - 定期轮换 API Key 和访问令牌
- **验证检查**：
  - [ ] grep 搜索 `private_key`、`mnemonic`、`seed` 等关键词，确保无硬编码
  - [ ] 检查所有密钥存储位置的加密状态
  - [ ] 验证密钥访问日志和审计追踪

#### 7.2 交易安全（CRITICAL）
- **签名验证**：
  - ✅ 必需：所有交易必须经过签名验证
  - ✅ 必需：验证交易发起者身份（防止伪造）
  - ✅ 必需：使用 nonce/序列号防止重放攻击
- **交易参数验证**：
  - ✅ 必需：验证接收地址合法性（checksum、白名单）
  - ✅ 必需：金额/价格/滑点限制（防止异常大额交易）
  - ✅ 必需：Gas Price/Gas Limit 上限保护（防止 Gas 耗尽攻击）
  - ✅ 必需：Deadline/超时保护（防止过期交易执行）
- **滑点与价格保护**：
  - ✅ 必需：设置合理的滑点容忍度（如 0.5%-2%）
  - ✅ 必需：价格预言机验证（多源对比、时间戳检查）
  - ✅ 必需：异常价格波动拒绝交易
- **验证检查**：
  - [ ] 所有交易调用都有 nonce 或幂等键
  - [ ] 金额/价格参数都有上下限验证
  - [ ] Gas 费用有最大限制
  - [ ] 滑点保护代码存在且正确

#### 7.3 AI 决策安全（CRITICAL）
- **提示注入防护**：
  - ❌ 禁止：直接将用户输入拼接到 AI prompt 中
  - ✅ 必需：用户输入消毒/转义（防止 prompt injection）
  - ✅ 必需：系统提示与用户输入明确分离（使用角色隔离）
  - ✅ 必需：敏感操作需要用户明确确认，AI 不能自主决定大额交易
- **决策审计**：
  - ✅ 必需：记录所有 AI 决策的完整上下文（输入、输出、时间戳、模型版本）
  - ✅ 必需：决策可追溯、可回放、可审计
  - ✅ 必需：异常决策告警（如突然的大额交易建议）
- **模型安全**：
  - ✅ 必需：使用官方 API，避免第三方代理（防止中间人攻击）
  - ✅ 必需：API 响应验证（检测异常输出、格式错误）
  - ✅ 必需：模型输出不直接执行，必须经过参数验证
- **验证检查**：
  - [ ] 搜索用户输入拼接点，确保有消毒处理
  - [ ] 检查决策日志是否完整（包含所有关键参数）
  - [ ] 验证大额交易需要额外确认机制

#### 7.4 智能合约交互安全（CRITICAL）
- **授权范围控制**：
  - ❌ 禁止：无限授权（`approve(spender, type(uint256).max)`）
  - ✅ 必需：按需授权，每次交易前计算精确授权额度
  - ✅ 必需：定期清理过期授权
  - ✅ 必需：监控授权事件，异常授权告警
- **合约调用验证**：
  - ✅ 必需：合约地址白名单（只与已审计合约交互）
  - ✅ 必需：函数选择器验证（防止调用错误函数）
  - ✅ 必需：调用参数类型/范围验证
  - ✅ 必需：模拟执行（dry-run）后再真实执行
- **重入与异常处理**：
  - ✅ 必需：处理合约调用失败情况（revert、out of gas）
  - ✅ 必需：检查返回值，不假设调用成功
  - ✅ 必需：避免在外部调用后修改关键状态（防重入）
- **验证检查**：
  - [ ] grep `approve` 确保无无限授权
  - [ ] 所有合约地址来自配置/白名单，无硬编码
  - [ ] 调用失败有完整的错误处理和回退逻辑

#### 7.5 资金保护机制（BLOCKING）
- **限额控制**：
  - ✅ 必需：单笔交易金额上限（如 $1000）
  - ✅ 必需：日/周/月累计限额
  - ✅ 必需：异常交易频率限制（防止快速耗尽资金）
  - ✅ 必需：大额交易需要多重签名或延迟执行
- **紧急暂停**：
  - ✅ 必需：全局紧急停止按钮（kill switch）
  - ✅ 必需：异常检测自动暂停（如价格异常、Gas 费暴涨）
  - ✅ 必需：暂停后资金安全提取机制
- **余额监控**：
  - ✅ 必需：实时余额监控，低于阈值告警
  - ✅ 必需：异常资金流出告警（大额转出、未知接收方）
  - ✅ 必需：定期对账（链上余额 vs 系统记录）
- **验证检查**：
  - [ ] 限额配置存在且合理
  - [ ] 紧急暂停功能可测试且有权限控制
  - [ ] 余额监控代码存在且接入告警系统

#### 7.6 链上数据验证（CRITICAL）
- **预言机安全**：
  - ❌ 禁止：单一数据源（可被操纵）
  - ✅ 必需：多预言机对比（Chainlink、Band、UMA 等）
  - ✅ 必需：价格偏差检测（多源价格差异超阈值拒绝）
  - ✅ 必需：时间戳验证（数据新鲜度检查，拒绝过期数据）
- **区块确认**：
  - ✅ 必需：等待足够的区块确认（主网建议 ≥12 块，L2 根据实际情况）
  - ✅ 必需：处理链重组可能（pending → confirmed → finalized）
  - ✅ 必需：交易回执验证（status=1 成功）
- **数据完整性**：
  - ✅ 必需：事件日志完整性检查（topic、参数匹配）
  - ✅ 必需：合约状态一致性验证（链上 vs 本地缓存）
  - ✅ 必需：MEV 保护（使用私有内存池或 Flashbots）
- **验证检查**：
  - [ ] 价格数据来自多个预言机
  - [ ] 区块确认数配置合理
  - [ ] 交易状态检查包含 finalized 状态

## 审查结果

请给出以下三种结果之一：
- ✅ **通过**：可以直接提交
- ❌ **不通过**：存在BLOCKING问题，必须修复
- ⚠️ **需要修复**：有改进空间，建议修复

## 核心原则

1. **白盒逻辑正确性是根本**：业务逻辑错误是生死线
2. **需求驱动**：必须找到真实需求来源
3. **客观分析**：基于实际代码和需求，不自我欺骗
4. **actionable建议**：提供具体的修复指导

## 评审交付物（必须包含）
- **问题清单**：逐条指出"谁与谁不一致"（路径/参数/字段/事件/状态码），附最小复现样本。
- **最小修复建议**：明确"谁改、改哪里、如何不破坏现有调用"（可附 1-3 行级 diff 建议）。
- **兼容/过渡策略**：必要时说明双解析/版本前缀/灰度开关/降级方案。
- **🚨 E2E验证报告**：对每个用户交互流程的完整追踪验证（MANDATORY）

## 强制性E2E验证清单（必须逐项检查）
在给出审查结果前，必须完成以下验证：

### ✅ 用户点击验证
- [ ] 所有onClick处理器都能正确执行
- [ ] 处理器中的navigate()调用指向正确的路径
- [ ] 目标路径在路由配置中存在
- [ ] 目标页面能正确处理URL参数

### ✅ 导航流程验证
- [ ] 从点击到页面加载的完整路径畅通
- [ ] URL参数正确传递和解析
- [ ] 页面状态正确初始化
- [ ] 用户看到预期的内容和界面

### ✅ 状态一致性验证
- [ ] 点击后应用状态正确更新
- [ ] UI界面反映状态变化
- [ ] 没有状态不同步的问题

### ✅ 安全验证（Web3 AI 交易系统 - MANDATORY）
- [ ] **密钥安全**：无私钥泄露（日志/错误/前端/Git）
- [ ] **密钥管理**：私钥加密存储，无明文环境变量
- [ ] **交易验证**：所有交易有签名验证、nonce、金额限制
- [ ] **滑点保护**：价格/滑点验证存在且合理
- [ ] **AI 安全**：用户输入有消毒处理，无直接拼接到 prompt
- [ ] **决策审计**：AI 决策有完整日志（输入/输出/时间戳）
- [ ] **合约安全**：无无限授权，合约地址来自白名单
- [ ] **限额保护**：存在单笔/累计交易限额
- [ ] **紧急机制**：有 kill switch 或暂停功能
- [ ] **预言机安全**：价格数据来自多源，有偏差检测
- [ ] **确认机制**：大额交易需要用户明确确认

### ⛔ 审查失败条件
如果以下任一项为真，审查必须标记为❌不通过：

**功能性问题：**
- 存在navigate()指向不存在或错误的路径
- 用户点击后无法到达预期页面
- 状态更新不完整导致UI不一致
- 关键用户流程无法完成

**安全性问题（Web3 AI 系统）：**
- 私钥/助记词出现在日志、错误消息、前端代码、Git 历史中
- 私钥明文存储（环境变量/配置文件/数据库）
- 交易缺少签名验证、nonce、或金额限制
- 存在无限授权（`approve(spender, type(uint256).max)`）
- 用户输入直接拼接到 AI prompt（prompt injection 风险）
- AI 可以自主决定大额交易（无用户确认）
- 缺少紧急暂停机制
- 单一预言机数据源（可被操纵）
- 大额交易无多重签名或延迟执行

**记住：代码编译通过 ≠ 功能正确工作 ≠ 资金安全**

## 技术验证方法（MANDATORY）

### 🔍 导航路径验证脚本
执行以下检查来验证导航逻辑：
```bash
# 1. 找出所有navigate()调用
grep -r "navigate(" frontend/src --include="*.tsx" --include="*.ts" -n

# 2. 找出所有路由定义
grep -r "path=" frontend/src --include="*.tsx" --include="*.ts" -n

# 3. 检查URL参数处理
grep -r "useSearchParams\|URLSearchParams" frontend/src --include="*.tsx" --include="*.ts" -n
```

### 🔍 状态管理验证
```bash
# 检查状态更新逻辑
grep -r "useState\|useEffect.*navigate" frontend/src --include="*.tsx" --include="*.ts" -n

# 检查onClick处理器
grep -r "onClick.*=>" frontend/src --include="*.tsx" --include="*.ts" -n
```

### 🚨 必须回答的验证问题
对于每个用户交互，审查者必须回答：

1. **点击发生什么？**
   - onClick处理器具体做了什么操作？
   - 调用了哪些函数？传递了什么参数？

2. **导航去哪里？**
   - navigate()的目标路径是什么？
   - 这个路径在路由配置中存在吗？
   - 路径参数格式正确吗？

3. **目标页面做什么？**
   - 目标页面/组件如何处理URL参数？
   - 是否正确提取和使用参数？
   - 用户最终看到什么内容？

4. **状态是否一致？**
   - 点击后应用状态如何变化？
   - UI是否正确反映状态变化？
   - 有没有状态不同步问题？

**如果审查者无法回答这些问题，审查必须标记为❌不通过**

## 快速验证提示
- 端点集中来源：前端禁止硬编码 URL；新增/变更端点已同步到常量/SDK。
- 认证一致：跨域/跨端口请求按需携带凭证（Cookie/Token），不依赖未声明的自定义头。
- 异步降级：在不支持事件/流式或网络异常时具备降级路径与用户提示。
- 可见性扫描：关键入口在默认态与目标设备上可见；空/错误/加载可复现且可恢复。
- 自动化检查：加入简单脚本/CI 规则检查硬编码端点、路径格式、必需认证头/凭证的使用一致性。
