# 链上地址 / 合约 / DApp 审查

## 触发条件

- 用户请求与区块链地址交互
- 准备交易、swap 或转账
- 遇到要评估的智能合约地址
- 出现 DApp URL 请求交互
- 任何涉及资金移动的操作

## 审查流程

### 第 1 步：地址风险评估

在任何链上交互之前，查询可用风险情报：

| 检查项 | 来源 | 关注点 |
|-------|------|-------|
| **AML 风险评分** | MistTrack API 或 Dune MCP（如有） | 评分和风险类别 |
| **地址标签** | AML 数据库 | 钓鱼、诈骗、混币器、制裁、漏洞 |
| **交易历史** | 区块浏览器 | 年龄、活动模式、对手方 |
| **资金来源** | 追踪工具 | 资金从哪里来？ |
| **关联地址** | 聚类分析 | 集群中是否有已知恶意行为者？ |

**MistTrack API 不可用时的 Fallback 流程：**

1. **尝试 Dune MCP** — 查询地址的代币转移记录和交互历史
2. **区块浏览器直接查询** — 手动查看交易历史、Token 余额、合约交互
3. **地址格式验证** — EVM: `0x` + 40 hex 字符；Solana: 32-44 字符 base58
4. **手动聚类分析** — 检查首尾字符是否与常见地址相似（地址 poisoning 检测）

> ⚠️ **警告：** MistTrack 不可用时，**自动将评级提升一级**（如原本 🟡 → 🟡🔴）。此时必须展示完整审查报告，并在报告中注明"AML 数据不可用，依赖手动分析"。

**风险评分阈值：**

| 评分 | 风险等级 | 行动 |
|------|---------|------|
| ≤ 30 | 🟢 Low | 正常进行，标准谨慎 |
| 31–70 | 🟡 Medium | 展示风险摘要，建议谨慎 |
| 71–90 | 🔴 High | 暂停，展示完整风险报告，需要人类确认 |
| ≥ 91 | ⛔ Severe | **硬性拦截，拒绝继续。** |

**任何被标记为 Phishing、Scam、Sanctioned 或 Exploit 的地址 = 自动 🔴 HIGH 起步，不受评分影响。**

### 第 2 步：智能合约审查（如适用）

| 检查项 | 查找内容 |
|-------|---------|
| **源码验证** | 合约源码是否在区块浏览器上验证？ |
| **代理模式** | 是否为可升级代理？谁控制升级？ |
| **Owner/Admin 函数** | `onlyOwner`, `onlyAdmin` —— 能做什么？ |
| **Approval 模式** | `approve(address, uint256.max)` —— 无限批准请求 |
| **转账模式** | `transferFrom`, `safeTransferFrom` —— 谁可以转移资金？ |
| **自毁** | `selfdestruct` 或 `delegatecall` 到不可信地址 |
| **隐藏增发** | Owner 能否无限增发？ |
| **黑名单/暂停** | Owner 能否冻结账户或暂停转账？ |
| **费用操纵** | 交易费用能否改为 100%？ |
| **重入攻击** | 状态更新前是否有外部调用？ |

**未验证的源码 = 无法审计 = 🔴 HIGH 起步。**

### 第 3 步：DApp 前端审查（如适用）

| 检查项 | 查找内容 |
|-------|---------|
| **域名** | 官方域名？SSL 有效？近期注册？ |
| **钱包权限** | 请求什么权限？最小必要？ |
| **签名类型** | `eth_sign`（危险——签名任意数据）vs `personal_sign` vs EIP-712（结构化，更安全） |
| **批准范围** | 请求无限代币批准？ |
| **交易预览** | DApp 在确认前是否显示签署内容？ |
| **已知前端劫持** | 检查域名近期安全事件 |

**危险签名模式：**
- `eth_sign` — 可签名任何数据包括交易。**避免。**
- `approve(spender, type(uint256).max)` — 无限批准。**始终标记。**
- `permit` (EIP-2612) — 无 gas 批准通过签名。验证接收者。
- `setApprovalForAll` — 批准集合中所有 NFT。**始终标记。**

### 第 4 步：评级与报告

必须使用以下格式输出：

```
╔══════════════════════════════════════════════════╗
  ON-CHAIN SECURITY ASSESSMENT
╠══════════════════════════════════════════════════╣
  Address:       [address]
  Chain:         [chain]
  Type:          [EOA/Contract/Proxy]
  Label:         [AML returned labels]
╠══════════════════════════════════════════════════╣
  AML RISK ASSESSMENT
  Score:         [0-100]
  Risk Level:    [Low/Moderate/High/Severe]
  Tags:          [label list]
  Source:        [MistTrack or other]
╠══════════════════════════════════════════════════╣
  TRANSACTION ANALYSIS
  ...
╠══════════════════════════════════════════════════╣
  VERDICT:       [✅ ALLOW / ⚠️ WARN / ❌ BLOCK]
╚══════════════════════════════════════════════════╝
```

## 常见链上攻击模式

| 攻击 | 原理 | 检测 |
|------|------|------|
| **地址 poisoning** | 攻击者从相似地址发送少量代币，希望受害者复制错误地址 | 验证完整地址，不只是首尾字符 |
| **Approval 钓鱼** | 诱骗用户签署无限 approve() | 检查批准金额和接收者地址 |
| **Permit 钓鱼** | 离线签名授予代币批准 | 签名前解码 EIP-2612 permit 数据 |
| **假代币** | 与真代币同名/同符号 | 通过官方来源验证合约地址 |
| **蜂蜜罐代币** | 可买但不可卖 | 检查 sell 函数是否有限制 |
| **Rug Pull** | Owner 抽走流动性或无限增发 | 检查 Owner 权限、流动性锁定、增发函数 |
| **闪电贷攻击** | 单笔交易中操纵价格预言机 | 检查预言机设计，TWAP vs 现货 |
| **地址伪装** | TransferFrom 从相似地址发起 | 交易来源中检查 from 地址 |

## 交易前检查清单

在任何交易提交前：

- [ ] 接收地址已验证（完整地址，非缩写）
- [ ] AML 风险检查已完成
- [ ] 金额已由人类确认
- [ ] Gas 估算合理（异常高 Gas = 可能有问题）
- [ ] 合约交互已理解（什么函数，什么参数）
- [ ] 批准范围已最小化（精确金额，非无限）
- [ ] 人类已确认交易详情

## MistTrack 评分快速参考

| 评分 | 风险等级 | 行动 | 判决 |
|------|---------|------|------|
| ≤ 30 | 🟢 Low | 正常进行 | ✅ ALLOW |
| 31–70 | 🟡 Moderate | 展示风险摘要 | ⚠️ WARN |
| 71–90 | 🔴 High | 暂停，需要确认 | ⚠️ WARN + CONFIRM |
| ≥ 91 | ⛔ Severe | 硬性拦截 | ❌ BLOCK |

**自动升级规则：**
- 任何 Phishing / Scam / Sanctioned / Exploit 标签 = 最低 🔴 HIGH
- 评分 = 100 = ⛔ REJECT
