stwo-cairo-adapter 1.2.2

Adapter for converting Cairo VM execution traces to Stwo prover format
Documentation
use std::collections::HashMap;
use std::path::PathBuf;

use cairo_vm::types::program::Program;
use cairo_vm::types::relocatable::MaybeRelocatable;
use itertools::Itertools;

pub fn program_from_casm(
    casm: Vec<cairo_lang_casm::instructions::Instruction>,
) -> (cairo_vm::types::program::Program, usize) {
    let felt_code = casm
        .into_iter()
        .flat_map(|instruction| instruction.assemble().encode())
        .map(|felt| MaybeRelocatable::Int(felt.into()))
        .collect_vec();
    let program_len = felt_code.len();
    let program = Program::new_for_proof(
        vec![],
        felt_code,
        0,
        1,
        HashMap::default(),
        Default::default(),
        Default::default(),
        Default::default(),
        Default::default(),
    )
    .expect("Program creation failed");
    (program, program_len)
}

pub fn get_prover_input_path(test_name: &str) -> PathBuf {
    PathBuf::from(env!("CARGO_MANIFEST_DIR"))
        .join("../../test_data/")
        .join(test_name)
        .join("prover_input.json")
}

#[macro_export]
macro_rules! casm_state {
    ($val1 : expr, $val2 : expr, $val3: expr) => {
        CasmState {
            pc: M31($val1),
            ap: M31($val2),
            fp: M31($val3),
        }
    };
}

#[macro_export]
macro_rules! relocated_trace_entry {
    ($val1 : expr, $val2 : expr, $val3: expr) => {
        RelocatedTraceEntry {
            ap: $val1,
            fp: $val2,
            pc: $val3,
        }
    };
}