性能审查技能Skill compact-reviewer:performance-review

本技能用于分析和优化区块链智能合约(特别是Compact电路)的性能。它专注于识别性能瓶颈、优化约束数量、减少证明生成时间以及降低Gas和计算成本。关键词包括:电路性能、约束优化、证明生成、Gas成本、性能分析、智能合约优化、区块链效率。

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

name: compact-reviewer:performance-review description: 用于审查Compact电路的性能问题、优化约束数量、分析证明生成时间或识别Gas和成本优化机会时使用。

性能审查技能

分析电路效率并识别Compact合约中的优化机会。

何时使用

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

  • 电路性能和效率
  • 约束数量优化
  • 证明生成时间
  • Gas/成本优化
  • 性能瓶颈

触发词:性能、优化、约束、电路效率、证明生成、Gas、成本

快速参考

约束成本表

操作 成本 备注
加法 (+) 0 在R1CS中免费
减法 (-) 0 免费
乘法 (*) 1 单个约束
除法 (/) ~1 包含逆运算
相等性检查 (==) ~1 直接检查
不等式检查 (<, >) ~254 位分解
哈希 (Pedersen) ~1,000 已优化
SHA256 ~25,000 昂贵
Merkle证明 (深度 N) ~N×1,000 每层哈希

复杂度估算

总约束数 ≈
  (哈希操作数 × 1,000) +
  (SHA256操作数 × 25,000) +
  (比较操作数 × 254) +
  (Merkle深度 × 1,000) +
  (循环迭代次数 × 循环体成本)

快速优化

优化措施 节省量 难度
替换 SHA256 → Pedersen 每个哈希节省约25倍
使用 == 代替 < 节省约253个约束
减少Merkle深度 每层节省约1,000个约束
将计算移至见证数据 可变

审查流程

1. 统计昂贵操作

扫描合约中的以下内容:

// 高成本操作
persistentHash()      // ~1,000 个约束
persistentCommit()    // ~1,000 个约束
sha256()              // ~25,000 个约束 ❌ 避免使用
ecMul()               // ~5,000-10,000 个约束

// 中等成本操作
if x < y { }          // ~254 个约束 (位分解)
for i in 0..N { }     // 内部约束乘以 N

// 低成本操作
x + y                 // 免费
x * y                 // 1 个约束
x == y                // ~1 个约束

2. 分析循环

针对每个循环:

1. 循环内部有哪些操作?
2. 有多少次迭代?
3. 是否有操作可以移到循环外部?
4. 循环是否必要?

示例

// ❌ 低效:哈希在循环内
for i in 0..10 {
    hashes[i] = hash(data[i]);  // 10 × 1,000 = 10,000 个约束
}

// ✅ 考虑:是否可以在见证数据中完成?

3. 检查类型选择

较小的类型意味着更便宜的比较:

类型 比较成本
Uint<8> ~8 个约束
Uint<64> ~64 个约束
Uint<254> ~254 个约束

4. 评估Merkle使用

// 深度为20的Merkle树
const proof = get_merkle_proof();  // ~20,000 个约束

// 考虑:深度20是否必要?
// 深度10将需要约10,000个约束

参考资料

相关技能