Skip to content
Merged
26 changes: 13 additions & 13 deletions air-script/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ miden-diagnostics = { workspace = true }
mir = { package = "air-mir", path = "../mir", version = "0.5" }

# 0xMiden Plonky3 Fork
p3-matrix = { package = "p3-matrix", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-field = { package = "p3-field", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-matrix = { package = "p3-matrix", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-field = { package = "p3-field", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }

# MassaLabs fork
miden-processor = { package = "miden-processor", git="https://github.com/massalabs/miden-vm", rev = "bc553af69a2543a0789830e8508b019694528181", default-features = false }
Expand All @@ -41,16 +41,16 @@ miden-air = { package = "miden-air", git="https://github.com/massalabs/miden-vm"
expect-test = "1.4"

# 0xMiden Plonky3 Fork
p3-air = { package = "p3-air", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-challenger = { package = "p3-challenger", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-commit = { package = "p3-commit", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-dft = { package = "p3-dft", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-fri = { package = "p3-fri", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-miden-prover = { package = "miden-prover", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-sha256 = { package = "p3-sha256", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false }
p3-air = { package = "p3-air", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-challenger = { package = "p3-challenger", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-commit = { package = "p3-commit", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-dft = { package = "p3-dft", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-fri = { package = "p3-fri", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-miden-prover = { package = "miden-prover", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-sha256 = { package = "p3-sha256", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }
p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false }

winter-air = { package = "winter-air", version = "0.12", default-features = false }
winter-math = { package = "winter-math", version = "0.12", default-features = false }
Expand Down
30 changes: 28 additions & 2 deletions air-script/src/test_utils/air_tester_macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,38 @@ macro_rules! generate_air_plonky3_test_with_airscript_traits {
.iter()
.map(|&x| <Val as p3_field::PrimeCharacteristicRing>::from_u64(x))
.collect();
let var_len_pub_inputs = generate_var_len_pub_inputs();
let mut var_len_pub_inputs_goldilocks_vec: Vec<Vec<Vec<Val>>> = vec![];
for arr in var_len_pub_inputs.iter() {
let mut goldilocks_arr: Vec<Vec<Val>> = vec![];
for slice in arr.iter() {
let goldilocks_slice: Vec<Val> = slice
.iter()
.map(|&x| <Val as p3_field::PrimeCharacteristicRing>::from_u64(x))
.collect();
goldilocks_arr.push(goldilocks_slice);
}
var_len_pub_inputs_goldilocks_vec.push(goldilocks_arr);
}
let var_len_pub_inputs_goldilocks_vec_slice: Vec<Vec<&[Val]>> =
var_len_pub_inputs_goldilocks_vec
.iter()
.map(|outer| outer.iter().map(|inner| inner.as_slice()).collect())
.collect();
let var_len_pub_inputs_goldilocks: Vec<&[&[Val]]> =
var_len_pub_inputs_goldilocks_vec_slice.iter().map(|v| v.as_slice()).collect();

let trace = generate_trace_rows::<Val>(inputs);

let proof = p3_miden_prover::prove(&config, &$air_name {}, &trace, &inputs_goldilocks);
p3_miden_prover::verify(&config, &$air_name {}, &proof, &inputs_goldilocks)
.expect("Verification failed");
p3_miden_prover::verify(
&config,
&$air_name {},
&proof,
&inputs_goldilocks,
&var_len_pub_inputs_goldilocks,
)
.expect("Verification failed");
}
};
}
4 changes: 1 addition & 3 deletions air-script/src/tests/binary/binary_plonky3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing};
use p3_matrix::Matrix;
use p3_matrix::dense::RowMajorMatrixView;
use p3_matrix::stack::VerticalPair;
use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix};
use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix};

pub const MAIN_WIDTH: usize = 2;
pub const AUX_WIDTH: usize = 0;
Expand Down Expand Up @@ -38,8 +38,6 @@ impl<F, EF> MidenAir<F, EF> for BinaryAir {
builder.assert_zero(main_current[0].clone().into() * main_current[0].clone().into() - main_current[0].clone().into());
builder.assert_zero(main_current[1].clone().into() * main_current[1].clone().into() - main_current[1].clone().into());

// Aux boundary constraints

// Aux integrity/transition constraints
}
}
4 changes: 4 additions & 0 deletions air-script/src/tests/binary/test_air_plonky3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,8 @@ fn generate_inputs() -> Vec<u64> {
vec![1; 16]
}

fn generate_var_len_pub_inputs<'a>() -> Vec<Vec<Vec<u64>>> {
vec![]
}

generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, BinaryAir);
4 changes: 1 addition & 3 deletions air-script/src/tests/bitwise/bitwise_plonky3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing};
use p3_matrix::Matrix;
use p3_matrix::dense::RowMajorMatrixView;
use p3_matrix::stack::VerticalPair;
use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix};
use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix};

pub const MAIN_WIDTH: usize = 14;
pub const AUX_WIDTH: usize = 0;
Expand Down Expand Up @@ -67,8 +67,6 @@ where F: Field,
builder.when_transition().assert_zero_ext(AB::ExprEF::from(periodic_values[1].clone().into()) * (AB::ExprEF::from(main_current[12].clone().into()) - AB::ExprEF::from(main_next[11].clone().into())));
builder.assert_zero((AB::Expr::ONE - main_current[0].clone().into()) * (main_current[12].clone().into() - (main_current[11].clone().into() * AB::Expr::from_u64(16) + main_current[3].clone().into() * main_current[7].clone().into() + main_current[4].clone().into().double() * main_current[8].clone().into() + AB::Expr::from_u64(4) * main_current[5].clone().into() * main_current[9].clone().into() + AB::Expr::from_u64(8) * main_current[6].clone().into() * main_current[10].clone().into())) + main_current[0].clone().into() * (main_current[12].clone().into() - (main_current[11].clone().into() * AB::Expr::from_u64(16) + main_current[3].clone().into() + main_current[7].clone().into() - main_current[3].clone().into().double() * main_current[7].clone().into() + (main_current[4].clone().into() + main_current[8].clone().into() - main_current[4].clone().into().double() * main_current[8].clone().into()).double() + AB::Expr::from_u64(4) * (main_current[5].clone().into() + main_current[9].clone().into() - main_current[5].clone().into().double() * main_current[9].clone().into()) + AB::Expr::from_u64(8) * (main_current[6].clone().into() + main_current[10].clone().into() - main_current[6].clone().into().double() * main_current[10].clone().into()))));

// Aux boundary constraints

// Aux integrity/transition constraints
}
}
4 changes: 4 additions & 0 deletions air-script/src/tests/bitwise/test_air_plonky3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,8 @@ fn generate_inputs() -> Vec<u64> {
vec![1; 16]
}

fn generate_var_len_pub_inputs<'a>() -> Vec<Vec<Vec<u64>>> {
vec![]
}

generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, BitwiseAir);
15 changes: 8 additions & 7 deletions air-script/src/tests/buses/buses_complex_plonky3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing};
use p3_matrix::Matrix;
use p3_matrix::dense::RowMajorMatrixView;
use p3_matrix::stack::VerticalPair;
use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix};
use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix};

pub const MAIN_WIDTH: usize = 7;
pub const AUX_WIDTH: usize = 2;
Expand All @@ -29,6 +29,13 @@ where F: Field,
AUX_WIDTH
}

fn bus_types(&self) -> Vec<BusType> {
vec![
BusType::Multiset,
BusType::Logup,
]
}

fn build_aux_trace(&self, _main: &RowMajorMatrix<F>, _challenges: &[EF]) -> Option<RowMajorMatrix<F>> {
// Note: consider using Some(build_aux_trace_with_miden_vm::<F, EF>(_main, _challenges, module)) if you want to build the aux trace using Miden VM aux trace builders.

Expand Down Expand Up @@ -98,12 +105,6 @@ where F: Field,
builder.assert_zero(main_current[2].clone().into() * main_current[2].clone().into() - main_current[2].clone().into());
builder.assert_zero(main_current[3].clone().into() * main_current[3].clone().into() - main_current[3].clone().into());

// Aux boundary constraints
builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE);
builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE);
builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into()));
builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into()));

// Aux integrity/transition constraints
builder.when_transition().assert_zero_ext(((alpha.into() + beta_challenges[0].into() + (AB::ExprEF::from_u64(3) + AB::ExprEF::from(main_current[1].clone().into())) * beta_challenges[1].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[2].into()) * AB::ExprEF::from(main_current[2].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[2].clone().into())) * ((alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[2].clone().into())) + AB::ExprEF::from(main_current[2].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into() + (AB::ExprEF::from_u64(3) + AB::ExprEF::from(main_current[1].clone().into())) * beta_challenges[1].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[2].into()) * AB::ExprEF::from(main_current[3].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[3].clone().into())) * ((alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[3].clone().into())) + AB::ExprEF::from(main_current[3].clone().into())) * AB::ExprEF::from(aux_next[0].clone().into()));
builder.when_transition().assert_zero_ext((alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[4].clone().into()) + (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[5].clone().into()) - ((alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[6].clone().into())));
Expand Down
14 changes: 8 additions & 6 deletions air-script/src/tests/buses/buses_simple_plonky3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing};
use p3_matrix::Matrix;
use p3_matrix::dense::RowMajorMatrixView;
use p3_matrix::stack::VerticalPair;
use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix};
use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix};

pub const MAIN_WIDTH: usize = 1;
pub const AUX_WIDTH: usize = 2;
Expand All @@ -29,6 +29,13 @@ where F: Field,
AUX_WIDTH
}

fn bus_types(&self) -> Vec<BusType> {
vec![
BusType::Multiset,
BusType::Logup,
]
}

fn build_aux_trace(&self, _main: &RowMajorMatrix<F>, _challenges: &[EF]) -> Option<RowMajorMatrix<F>> {
// Note: consider using Some(build_aux_trace_with_miden_vm::<F, EF>(_main, _challenges, module)) if you want to build the aux trace using Miden VM aux trace builders.

Expand Down Expand Up @@ -95,11 +102,6 @@ where F: Field,

// Main integrity/transition constraints

// Aux boundary constraints
builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE);
builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into()));
builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into()));

// Aux integrity/transition constraints
builder.when_transition().assert_zero_ext(((alpha.into() + beta_challenges[0].into()) * AB::ExprEF::from(main_current[0].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into()) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) + AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(aux_next[0].clone().into()));
builder.when_transition().assert_zero_ext((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()).double()));
Expand Down
Loading