#air #zero-knowledge #zkp #stark #winterfell

air-codegen-winter

为 AirScript 语言设计的 Winterfell 代码生成器

3 个版本 (破坏性更新)

0.3.0 2023年7月12日
0.2.0 2023年2月23日
0.1.0 2022年11月10日

#954 in 编程语言

36 每月下载量
用于 air-script

MIT 许可证

135KB
3.5K SLoC

Winterfell 代码生成器

此软件包包含一个针对 Winterfell 证明库 的 Rust 库的代码生成器。

此代码生成器的目的是将提供的 AIR 表示(AirScript 的中间表示)转换为自定义 Rust 结构体,该结构体实现了 Winterfell 的 Air 特性。生成的代码可以用来自动生成 Winterfell 的 Air 实现而不是直接在 Rust 中编写。

生成 Winterfell Rust 代码

通过实例化一个带有 AirScript AST(AirScript 解析器的输出)的 CodeGenerator 并调用 generate 来从 AirIR(AirScript 的中间表示)生成 Rust 代码。该 generate 方法将返回 Rust 代码实现作为 String

实例化 CodeGenerator 将添加所需的 Winterfell 导入,创建一个使用为 AIR 定义的名称的自定义 struct,然后为该自定义 struct 实现 Winterfell 的 Air 特性。

示例使用

// parse the source string to a Result containing the AST or an Error
let ast = parse(source.as_str()).expect("Parsing failed");

// process the AST to get a Result containing the AirIR or an Error
let ir = AirIR::new(&ast).expect("AIR is invalid");

// generate Rust code targeting the Winterfell prover
let rust_code = CodeGenerator::new(&ir);

生成的 Winterfell Rust 代码

以下代码用于 Winterfell Air 特性实现的声明和实现。

  • 声明和实现一个 PublicInputs 结构体。
  • 自定义结构体的声明和实现,使用来自原始 AirScript 文件中定义的 AIR 名称
  • 实现 Winterfell Air 特性
    • new 方法中创建 AirContext 时作为约束相关的声明的一部分
      • 主跟踪的边界约束数量
      • 辅助追踪的边界约束数量
      • 主追踪过渡约束的阶数和度数
      • 辅助追踪过渡约束的阶数和度数
    • 获取器
      • 周期性列值(get_periodic_column_values
      • 主追踪边界约束(get_assertions
      • 辅助追踪边界约束(get_aux_assertions
    • 针对的过渡约束评估代码
      • 主追踪过渡约束(evaluate_transition
      • 辅助追踪过渡约束(evaluate_aux_transition

依赖关系

~7-17MB
~200K SLoC