#proof #parser #different #prover #format #cairo #parse-input

bin+lib cairo-proof-parser

在不同cairo证明格式之间进行转换的解析器

1 个不稳定版本

使用旧的 Rust 2015

0.3.0 2024年4月11日

#24 in #prover

MIT 许可证

57KB
1.5K SLoC

Cairo Proof Parser

这个库包是一个解析器,用于在不同的cairo证明格式之间进行转换。它导出了一个函数

pub fn parse(input: String) -> anyhow::Result<Exprs>

输入

parse 函数的输入是一个以JSON字符串格式表示的证明。期望这个证明由带有 -generate_annotations 标志的 stone prover 生成。目前仅支持 recursivestarknet 布局。

输出

输出是 AST,可以使用 Exprs::to_string(&self) 方法反序列化为字符串。然后可以将其序列化为cairo验证器期望的参数,并使用 cairo args runner 运行。

示例用法

示例用法

use cairo_args_runner::{Arg, Felt252, VecFelt252};
use cairo_proof_parser::parse;

fn main() -> anyhow::Result<()> {
    // Read the stone prover input
    let input = std::fs::read_to_string("main_proof.json")?;

    // Parse the input as an AST
    let parsed = parse(input)?;
    
    // Parse the AST as cairo arguments
    let args: VecFelt252 = serde_json::from_str(
        &parsed.to_string()
    )?;

    // Run the cairo verifier with the aruments
    let result = cairo_args_runner::run(
        "cairo_verifier.sierra.json",
        "main",
        &[Arg::Array(args.to_vec())],
    )?;
    
    println!("{result:?}");
    Ok(())
}

路线图

将来,我们可能会直接解析到 cairo-args-runner::Args 以跳过一步解析。目前,当前方法绝对足够,并提供最大的灵活性。在 cairo-lang-runner 包中也有一些错误修复,使 cairo-args-runner 能够正确地传递多个数组。

依赖项

~7–9.5MB
~188K SLoC