Skip to main content

HOST_MAIN_DEV_TEMPLATE

Constant HOST_MAIN_DEV_TEMPLATE 

Source
const HOST_MAIN_DEV_TEMPLATE: &str = "use airbender_host::{\n    Inputs, Program, Prover, Result, Runner, SecurityLevel, VerificationRequest, Verifier,\n};\nuse std::path::PathBuf;\n\nfn main() -> Result<()> {\n    let prove = std::env::args().skip(1).any(|arg| arg == \"--prove\");\n    // We assume that the guest program is located in `../guest/dist/app`,\n    // which is the default behavior of `cargo airbender build`.\n    let dist_dir = PathBuf::from(env!(\"CARGO_MANIFEST_DIR\")).join(\"../guest/dist/app\");\n    let program = Program::load(&dist_dir)?;\n\n    let mut inputs = Inputs::new();\n    inputs.push(&41u32)?;\n\n    let runner = program.transpiler_runner().build()?;\n    let execution = runner.run(inputs.words())?;\n    let exec_output = execution.receipt.output[0];\n    println!(\n        \"Execution finished: cycles={}, reached_end={}, output={}\",\n        execution.cycles_executed, execution.reached_end, exec_output\n    );\n\n    if !prove {\n        println!(\"Skipping proof generation (pass `--prove` to generate and verify proof).\");\n        return Ok(());\n    }\n\n    let security = SecurityLevel::default();\n    let prover = program.dev_prover().with_security(security).build()?;\n    let prove_result = prover.prove(inputs.words())?;\n    let proof_output = prove_result.receipt.output[0];\n    println!(\n        \"Proof generated: cycles={}, output={}\",\n        prove_result.cycles, proof_output\n    );\n    assert_eq!(\n        exec_output, proof_output,\n        \"execution and proof output mismatch\"\n    );\n\n    let expected_output = 42u32;\n    let verifier = program.dev_verifier().build()?;\n    let vk = verifier.generate_vk(security)?;\n    verifier.verify(\n        &prove_result.proof,\n        &vk,\n        VerificationRequest::dev(inputs.words(), &expected_output),\n    )?;\n    println!(\"Proof verified.\");\n\n    Ok(())\n}\n";