3 个版本 (破坏性更新)
0.3.0 | 2023年7月12日 |
---|---|
0.2.0 | 2023年2月23日 |
0.1.0 | 2022年11月10日 |
#954 in 编程语言
36 每月下载量
用于 air-script
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