代币集成分析Skill token-integration-analyzer

这个技能用于分析区块链代币的集成和实现,基于 Trail of Bits 的代币集成清单。它检查 ERC20/ERC721 合规性、评估代币模式、进行安全审计,并提供风险评估报告。关键词:代币集成、ERC20、ERC721、智能合约安全、安全审计、区块链分析、代币模式、链上分析。

智能合约 0 次安装 0 次浏览 更新于 3/14/2026

名称: 代币集成分析器 描述: 基于 Trail of Bits 代币集成清单的代币集成和实现分析器。分析代币实现是否符合 ERC20/ERC721 标准,检查 20 多种非标准代币模式,评估合约组成和所有者权限,进行链上稀缺性分析,并评估协议如何处理非标准代币。上下文感知,适用于代币实现和代币集成。

代币集成分析器

目的

使用 Trail of Bits 的代币集成清单,系统地分析代码库中的代币相关安全问题:

  1. 代币实现:分析您的代币是否遵循 ERC20/ERC721 标准或具有非标准行为
  2. 代币集成:分析您的协议如何处理任意代币,包括非标准代币
  3. 链上分析:查询已部署合约的稀缺性、分布和配置
  4. 安全评估:识别 20 多种已知非标准代币模式的风险

框架:构建安全合约 - 代币集成清单 + 非标准 ERC20 数据库


工作原理

第一阶段:上下文发现

确定分析上下文:

  • 代币实现:您是否在构建代币合约?
  • 代币集成:您的协议是否与外部代币交互?
  • 平台:以太坊、其他 EVM 链或其他平台?
  • 代币类型:ERC20、ERC721 或两者?

第二阶段:Slither 分析(如果使用 Solidity)

对于 Solidity 项目,我将帮助运行:

  • slither-check-erc - ERC 合规性检查
  • slither --print human-summary - 复杂性和升级分析
  • slither --print contract-summary - 功能分析
  • slither-prop - 测试属性生成

第三阶段:代码分析

分析:

  • 合约组成和复杂性
  • 所有者权限和中心化风险
  • ERC20/ERC721 合规性
  • 已知非标准代币模式
  • 集成安全模式

第四阶段:链上分析(如果已部署)

如果您提供合约地址,我将查询:

  • 代币稀缺性和分布
  • 总供应量和持有者集中度
  • 交易所上市情况
  • 链上配置

第五阶段:风险评估

提供:

  • 识别的漏洞
  • 非标准行为
  • 集成风险
  • 优先级建议

评估类别

我检查 10 个全面类别,涵盖代币安全的各个方面。有关详细标准、模式和清单,请参阅 ASSESSMENT_CATEGORIES.md

快速参考:

  1. 一般考虑 - 安全审查、团队透明度、安全联系人
  2. 合约组成 - 复杂性分析、SafeMath 使用、功能数量、入口点
  3. 所有者权限 - 可升级性、铸造、可暂停性、黑名单、团队问责制
  4. ERC20 合规性 - 返回值、元数据、小数位数、竞争条件、Slither 检查
  5. ERC20 扩展风险 - 外部调用/钩子、转账费用、重新定价/收益代币
  6. 代币稀缺性分析 - 供应分布、持有者集中度、交易所分布、闪电贷/铸造风险
  7. 非标准 ERC20 模式(24 种模式包括):
    • 重入调用(ERC777 钩子)
    • 缺少返回值(USDT、BNB、OMG)
    • 转账费用(STA、PAXG)
    • 转账外余额修改(Ampleforth、Compound)
    • 可升级代币(USDC、USDT)
    • 闪电铸造(DAI)
    • 黑名单(USDC、USDT)
    • 可暂停代币(BNB、ZIL)
    • 批准竞争保护(USDT、KNC)
    • 对零地址的批准/转账回退
    • 对零值批准/转账的回退
    • 多个代币地址
    • 低小数位数(USDC:6、Gemini:2)
    • 高小数位数(YAM-V2:24)
    • transferFrom 中 src == msg.sender
    • 非字符串元数据(MKR)
    • 失败时不回退(ZRX、EURS)
    • 对大额批准的回退(UNI、COMP)
    • 通过代币名称进行代码注入
    • 非常规许可功能(DAI、RAI、GLM)
    • 转账少于金额(cUSDCv3)
    • ERC-20 原生货币表示(Celo、Polygon、zkSync)
    • 更多…
  8. 代币集成安全 - 安全转账模式、余额验证、允许列表、包装器、防御模式
  9. ERC721 合规性 - 转账到 0x0、safeTransferFrom、元数据、ownerOf、批准清除、代币 ID 不可变性
  10. ERC721 常见风险 - onERC721Received 重入、安全铸造、销毁批准清除

示例输出

分析完成后,您将收到一份结构如下的全面报告:

=== 代币集成分析报告 ===

项目:MultiToken DEX
分析代币:自定义奖励代币 + 集成安全
平台:Solidity 0.8.20
分析日期:2024年3月15日

---

## 执行摘要

代币类型:ERC20 实现 + 协议集成外部代币
总体风险级别:中
关键问题:2
高问题:3
中问题:4

**主要关注点:**
⚠ 未正确处理转账费用代币
⚠ 未验证缺少返回值(USDT 兼容性)
⚠ 所有者可以无限制铸造代币

**建议:**在主网上线前解决关键/高问题。

---

## 1. 一般考虑

✓ 合约由 CertiK 审计(2023年6月)
✓ 团队可通过 security@project.com 联系
✗ 无用于关键公告的安全邮件列表

**风险:**用户不会收到关键问题通知
**行动:**设置 security@project.com 邮件列表

---

## 2. 合约组成

### 复杂性分析

**Slither human-summary 结果:**
- 456 行代码
- 圈复杂度:平均 6,最大 14(transferWithFee())
- 12 个功能,8 个状态变量
- 继承深度:3(中等)

✓ 合约复杂性合理
⚠ transferWithFee() 复杂性高(14)- 考虑拆分

### SafeMath 使用

✓ 使用 Solidity 0.8.20(内置溢出保护)
✓ 未找到未检查块
✓ 所有算术操作受保护

### 非代币功能

**超出 ERC20 的功能:**
- setFeeCollector() - 管理员功能 ✓
- setTransferFee() - 管理员功能 ✓
- withdrawFees() - 管理员功能 ✓
- pause()/unpause() - 紧急功能 ✓

⚠ 4 个非代币功能(可接受但增加复杂性)

### 地址入口点

✓ 单个合约地址
✓ 无具有多个入口点的代理
✓ 无创建地址混淆的代币迁移

**状态:**通过

---

## 3. 所有者权限

### 可升级性

⚠ 合约使用 TransparentUpgradeableProxy
**风险:**所有者可以随时更改合约逻辑

**当前实现:**
- ProxyAdmin:0x1234...(2/3 多签) ✓
- 时间锁:无 ✗

**建议:**为所有升级添加 48 小时时间锁

### 铸造能力

❌ 关键:无限铸造
文件:contracts/RewardToken.sol:89
```solidity
function mint(address to, uint256 amount) external onlyOwner {
    _mint(to, amount);  // 无限制!
}

**风险:**所有者可以任意膨胀供应 **修复:**添加最大供应上限或速率限制铸造

可暂停性

✓ 实现可暂停模式(OpenZeppelin) ✓ 仅所有者可暂停 ⚠ 暂停状态影响所有转账(包括现有持有者)

**风险:**所有者可以困住所有用户资金 **缓解:**使用多签进行暂停功能(已实现 ✓)

黑名单

✗ 无黑名单功能 **评估:**良好 - 无中心化审查风险

团队透明度

✓ 团队成员公开(team.md) ✓ 公司在瑞士注册 ✓ 可问责和可联系

**状态:**可接受


4. ERC20 合规性

Slither-check-erc 结果

命令:slither-check-erc . RewardToken --erc erc20

✓ transfer 返回 bool ✓ transferFrom 返回 bool ✓ name、decimals、symbol 存在 ✓ decimals 返回 uint8(值:18) ✓ 竞争条件缓解(increaseAllowance/decreaseAllowance)

**状态:**完全合规

slither-prop 测试结果

命令:slither-prop . --contract RewardToken

生成 12 个属性,全部通过: ✓ 转账不改变总供应量 ✓ 津贴正确更新 ✓ 余额更新匹配转账金额 ✓ 无余额操作可能 [… 8 更多属性 …]

**Echidna 模糊测试:**50,000 次运行,无违规 ✓

**状态:**优秀


5. 非标准代币模式分析

集成安全检查

您的协议集成 5 个外部代币:

  1. USDT (0xdac17f9…)
  2. USDC (0xa0b86991…)
  3. DAI (0x6b175474…)
  4. WETH (0xc02aaa39…)
  5. UNI (0x1f9840a8…)

发现的关键问题

模式 7.2:缺少返回值 **发现于:**USDT 集成 文件:contracts/Vault.sol:156

IERC20(usdt).transferFrom(msg.sender, address(this), amount);
// 无返回值检查!USDT 不返回 bool

**风险:**USDT 转账时静默失败 **利用:**用户看似存款,但代币未移动 **修复:**使用 OpenZeppelin SafeERC20 包装器


模式 7.3:转账费用 **风险适用于:**任何有转账费用的代币 文件:contracts/Vault.sol:170

uint256 balanceBefore = IERC20(token).balanceOf(address(this));
token.transferFrom(msg.sender, address(this), amount);
shares = amount * exchangeRate;  // 错误!应使用实际收到金额

**风险:**如果代币收取费用,会计不匹配 **利用:**用户获得比存入代币更多的份额 **修复:**从 balanceAfter - balanceBefore 计算份额


已知非标准代币处理

✓ **USDC:**正确处理(SafeERC20、考虑 6 小数位数) ⚠ **DAI:**未使用 permit() 功能(节省 gas 机会) ✗ **USDT:**未处理缺少返回值(关键) ✓ **WETH:**标准包装器,正确处理 ⚠ **UNI:**未检查大额批准处理(回退 >= 2^96)


[… 剩余分析类别的其他部分 …]


有关完整报告模板和交付物格式,请参阅 [REPORT_TEMPLATES.md](resources/REPORT_TEMPLATES.md)。

---

## 理性化(勿跳过)

| 理性化 | 为什么错误 | 必需行动 |
|-----------------|----------------|-----------------|
| "代币看起来标准,ERC20 检查通过" | 20 多种非标准代币模式超出 ERC20 合规性 | 检查数据库中的所有非标准代币模式(缺少返回值、零值回退、钩子等) |
| "Slither 显示无问题,集成安全" | Slither 检测一些模式,但错过集成逻辑 | 完成所有 5 个代币集成标准的手动分析 |
| "未检测到转账费用,跳过该检查" | 转账费用可由所有者控制或有条件 | 测试所有转账场景,检查条件性费用逻辑 |
| "存在余额检查,处理安全" | 余额检查单独不保护免受所有非标准代币 | 验证安全转账包装器、回退处理、批准模式 |
| "代币由信誉团队部署,假设标准" | 信誉不保证标准行为 | 分析实际代码和链上行为,勿信任假设 |
| "集成使用 OpenZeppelin,必须安全" | OpenZeppelin 库不保护免受非标准外部代币 | 验证所有外部代币调用的防御模式 |
| "无法运行 Slither,跳过自动化分析" | Slither 提供关键 ERC 合规性检查 | 手动验证所有 slither-check-erc 标准或记录原因 |
| "此模式似乎良好" | 直觉错过微妙代币集成错误 | 用代码证据系统检查所有 20 多种非标准代币模式 |

---

## 交付物

分析完成后,我将提供:

1. **合规清单** - 所有评估类别的复选框
2. **非标准代币模式分析** - 所有 24 种模式的存在/不存在,含风险级别和证据
3. **链上分析报告**(如适用) - 持有者分布、交易所上市、配置
4. **集成安全评估**(如适用) - 安全转账使用、防御模式、非标准代币处理
5. **优先级建议** - 关键/高/中/低问题,含具体修复

完整交付物模板可在 [REPORT_TEMPLATES.md](resources/REPORT_TEMPLATES.md) 中找到。

---

## 准备开始

**我需要:**
- 您的代码库
- 上下文:代币实现或集成?
- 代币类型:ERC20、ERC721 或两者?
- 合约地址(如果已部署并需要链上分析)
- RPC 端点(如果查询链上)

让我们分析您的代币实现或集成的安全风险!