紧凑型合约关键问题审查Skill compact-reviewer:critical-issues

这是一个用于智能合约代码审查的专用技能,专注于检测紧凑型智能合约中的关键缺陷。它能自动识别逻辑错误、断言问题、类型不匹配、死代码、不可达路径和控制流问题,确保合约的正确性和安全性。适用于区块链开发者、智能合约审计员和安全工程师。关键词:智能合约审计,代码审查,逻辑错误检测,区块链安全,Compact语言,断言分析,控制流分析,类型检查。

智能合约 0 次安装 2 次浏览 更新于 2/26/2026

name: 紧凑型合约关键问题审查 reviewer: 关键问题 description: 在审查紧凑型合约时使用,用于发现错误、逻辑错误、断言问题、类型不匹配、死代码、不可达路径或控制流问题。

关键问题审查技能

检测紧凑型智能合约中的错误、逻辑错误和正确性问题。

使用时机

此技能在以下查询时激活:

  • 错误检测和逻辑错误
  • 断言问题
  • 类型不匹配
  • 死代码和不可达路径
  • 控制流问题
  • 状态管理错误

触发词:错误、逻辑错误、断言、不可达、死代码、类型不匹配、正确性

快速参考

常见错误类别

类别 严重性 示例
断言始终失败 🔴 严重 assert x < y 其中 x ≥ y 始终成立
断言始终通过 🟠 高 始终为真的冗余检查
不可达代码 🟡 中等 无条件返回后的代码
类型不匹配 🔴 严重 比较中使用错误类型
整数溢出 🟠 高 无界算术运算
差一错误 🟠 高 循环边界错误

错误检测模式

// ❌ 始终失败的断言
export circuit verify(x: Uint<64>, y: Uint<64>): [] {
    assert x > y;     // 调用时 x = 0
    assert x <= y;    // 矛盾的断言
}

// ❌ 返回后的死代码
export circuit process(): Uint<64> {
    return 42;
    const x = 1;  // 永不执行
}

// ❌ 差一错误
export circuit fill_array(): [] {
    for i in 0..100 {
        items[i + 1].write(0);  // 跳过索引0,在100处溢出
    }
}

审查流程

1. 断言分析

对于每个断言:

  1. 判断条件是否可能为真/假
  2. 检查是否存在矛盾的断言
  3. 验证断言是否有意义

需要标记的模式

  • assert true - 无用
  • assert false - 电路始终失败
  • assert x && !x - 矛盾
  • 赋值后使其始终通过的断言

2. 控制流分析

追踪所有执行路径:

  1. 识别不可达代码
  2. 检查所有分支是否返回适当的值
  3. 验证循环边界

需要标记的模式

  • return 后的代码
  • 分支相同的 if 语句
  • 永不执行的循环 (for i in 0..0)
  • 无限循环(如果可能)

3. 类型正确性

验证类型使用:

  1. 兼容类型之间的比较
  2. 边界内的算术运算
  3. 使用正确索引类型的数组/映射访问

4. 状态一致性

检查账本操作:

  1. 写前读模式
  2. 不一致的状态更新
  3. 缺少初始化

参考资料

相关技能