开发者工具

Rust库 halo2 中包含了数个工具,为你设计并开发自己的电路提供帮助。

Mock prover

halo2::dev::MockProver 是一个用来调试电路用的工具。除此之外,它还可以用来在单元测试中快速检验电路正确性。

隐私输入和公开输入的计算过程,是和生成一个真正的证明一样。但是,MockProver::run 函数只会生成一个对象,它直接检验电路中每一条约束是否满足。如果电路中某个约束不满足,那这个对象就会返回关于该约束的一个细粒度的错误信息。

消耗估算器

程序 cost-model 可以根据电路设计所采用的不同参数,估算出,验证一个证明的时长,以及对应的证明大小。

用法: cargo run --example cost-model -- [OPTIONS] k

Positional arguments:
  k                       2^k 总行数的上界.

Optional arguments:
  -h, --help              打印此用法信息.
  -a, --advice R[,R..]    An advice column with the given rotations. May be repeated.
  -i, --instance R[,R..]  An instance column with the given rotations. May be repeated.
  -f, --fixed R[,R..]     A fixed column with the given rotations. May be repeated.
  -g, --gate-degree D     Maximum degree of the custom gates.
  -l, --lookup N,I,T      A lookup over N columns with max input degree I and max table degree T. May be repeated.
  -p, --permutation N     A permutation over N columns. May be repeated.

比如,估算有三个 advice列,一个 fixed 列(有相对引用)和门的最高次数为4的电路:

cargo run --example cost-model -- -a 0,1 -a 0 -a 0,-1,1 -f 0 -g 4 11
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/examples/cost-model -a 0,1 -a 0 -a 0,-1,1 -f 0 -g 4 11`
Circuit {
    k: 11,
    max_deg: 4,
    advice_columns: 3,
    lookups: 0,
    permutations: [],
    column_queries: 7,
    point_sets: 3,
    estimator: Estimator,
}
Proof size: 1440 bytes
Verification: at least 81.689ms