pub mod ace;
pub mod bitwise;
pub mod columns;
pub mod hasher_control;
pub mod memory;
pub mod permutation;
pub mod selectors;
use miden_core::field::PrimeCharacteristicRing;
use miden_crypto::stark::air::AirBuilder;
use selectors::ChipletSelectors;
use crate::{ChipletCols, MidenAirBuilder};
pub fn enforce_main<AB>(
builder: &mut AB,
local: &ChipletCols<AB::Var>,
next: &ChipletCols<AB::Var>,
selectors: &ChipletSelectors<AB::Expr>,
) where
AB: MidenAirBuilder,
{
builder.when_first_row().assert_eq(local.chip_clk, AB::Expr::ONE);
builder
.when_transition()
.assert_eq(next.chip_clk.into(), local.chip_clk.into() + AB::Expr::ONE);
permutation::enforce_permutation_constraints(builder, local, next, &selectors.permutation);
hasher_control::enforce_controller_constraints(builder, local, next, &selectors.controller);
bitwise::enforce_bitwise_constraints(builder, local, next, &selectors.bitwise);
memory::enforce_memory_constraints(builder, local, next, &selectors.memory);
ace::enforce_ace_constraints_all_rows(builder, local, next, &selectors.ace);
}