Skip to content

Commit 1d469dd

Browse files
kunxian-xiahero78119darth-cy
authored
Feat: pin to ceno master branch (#64)
Co-authored-by: sm.wu <[email protected]> Co-authored-by: Ray Gao <[email protected]>
1 parent 0228649 commit 1d469dd

File tree

8 files changed

+324
-469
lines changed

8 files changed

+324
-469
lines changed

Cargo.lock

Lines changed: 79 additions & 396 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@ rand = { version = "0.8.5", default-features = false }
1717
itertools = { version = "0.13.0", default-features = false }
1818
bincode = "1.3.3"
1919
tracing = "0.1.40"
20+
serde = { version = "1.0", features = ["derive"] }
21+
serde_json = "1.0"
2022

2123
# Plonky3
24+
# replace all dep with `p3` from gkr-backend
2225
p3-air = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" }
2326
p3-baby-bear = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" }
2427
p3-field = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" }
@@ -29,7 +32,7 @@ p3-challenger = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc8
2932
p3-monty-31 = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" }
3033
p3-symmetric = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" }
3134
p3-fri = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" }
32-
p3-goldilocks = { git = "https://github.com/Plonky3/plonky3", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" }
35+
p3-goldilocks = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" }
3336

3437
# WHIR
3538
ark-std = { version = "0.5", features = ["std"] }
@@ -38,29 +41,36 @@ ark-poly = "0.5"
3841
ark-serialize = "0.5"
3942

4043
# Ceno
41-
ceno_mle = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support", package = "multilinear_extensions" }
42-
ceno_sumcheck = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support", package = "sumcheck" }
43-
ceno_transcript = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support", package = "transcript" }
44-
ceno_witness = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support", package = "witness" }
45-
ceno_zkvm = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support" }
46-
ceno_emul = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support" }
47-
gkr_iop = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support" }
48-
mpcs = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support" }
49-
ff_ext = { git = "https://github.com/scroll-tech/ceno.git", branch = "feat/smaller_field_support" }
50-
serde = { version = "1.0", features = ["derive"] }
51-
serde_json = "1.0"
44+
ceno_mle = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6", package = "multilinear_extensions" }
45+
ceno_sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6", package = "sumcheck" }
46+
ceno_transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6", package = "transcript" }
47+
ceno_witness = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6", package = "witness" }
48+
ceno_zkvm = { git = "https://github.com/scroll-tech/ceno.git", branch = "master" }
49+
ceno_emul = { git = "https://github.com/scroll-tech/ceno.git", branch = "master" }
50+
gkr_iop = { git = "https://github.com/scroll-tech/ceno.git", branch = "master" }
51+
mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6" }
52+
ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", rev = "v1.0.0-alpha.6" }
5253

5354
[features]
54-
default = ["parallel"]
55+
default = ["parallel", "nightly-features"]
56+
nightly-features = [
57+
"ceno_zkvm/nightly-features",
58+
"openvm-stark-sdk/nightly-features",
59+
]
5560
parallel = ["openvm-stark-backend/parallel"]
5661
bench-metrics = ["openvm-circuit/bench-metrics"]
5762

58-
# [patch."https://github.com/scroll-tech/ceno.git"]
59-
# ceno_mle = { path = "../ceno/multilinear_extensions", package = "multilinear_extensions" }
60-
# ceno_sumcheck = { path = "../ceno/sumcheck", package = "sumcheck" }
61-
# ceno_transcript = { path = "../ceno/transcript", package = "transcript" }
62-
# ceno_witness = { path = "../ceno/witness", package = "witness" }
63-
# ceno_zkvm = { path = "../ceno/ceno_zkvm" }
64-
# ceno_emul = { path = "../ceno/ceno_emul" }
65-
# mpcs = { path = "../ceno/mpcs" }
66-
# ff_ext = { path = "../ceno/ff_ext" }
63+
# [patch."https://github.com/scroll-tech/gkr-backend"]
64+
# ff_ext = { path = "../gkr-backend/crates/ff_ext", package = "ff_ext" }
65+
# ceno_mle = { path = "../gkr-backend/crates/multilinear_extensions", package = "multilinear_extensions" }
66+
# mpcs = { path = "../gkr-backend/crates/mpcs", package = "mpcs" }
67+
# ceno_poseidon = { path = "../gkr-backend/crates/poseidon", package = "poseidon" }
68+
# ceno_sumcheck = { path = "../gkr-backend/crates/sumcheck", package = "sumcheck" }
69+
# ceno_transcript = { path = "../gkr-backend/crates/transcript", package = "transcript" }
70+
# ceno_whir = { path = "../gkr-backend/crates/whir", package = "whir" }
71+
# ceno_witness = { path = "../gkr-backend/crates/witness", package = "witness" }
72+
73+
# [patch."https://github.com/scroll-tech/ceno"]
74+
# ceno_zkvm = { path = "../ceno/ceno_zkvm", package = "ceno_zkvm" }
75+
# ceno_emul = { path = "../ceno/ceno_emul", package = "ceno_emul" }
76+
# gkr_iop = { path = "../ceno/gkr_iop", package = "gkr_iop" }

rust-toolchain.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[toolchain]
22
channel = "nightly-2025-03-25"
33
targets = ["riscv32im-unknown-none-elf"]
4-
components = ["clippy", "rustfmt", "rust-src"]
4+
components = ["clippy", "rustfmt", "rust-src"]

scripts/e2e_test.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ if [ ! -d "$REPO_ROOT/build/ceno" ] || [ -z "$(ls -A "$REPO_ROOT/build/ceno" 2>/
99
fi
1010

1111
# Enter the ceno directory
12-
cd $REPO_ROOT/build/ceno && git checkout feat/smaller_field_support
12+
cd $REPO_ROOT/build/ceno && git checkout master && git pull origin master
1313

1414
# Execute the ceno_zkvm e2e test
1515
RUST_LOG=info cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno \

src/arithmetics/mod.rs

Lines changed: 126 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
use crate::tower_verifier::binding::PointAndEvalVariable;
22
use crate::zkvm_verifier::binding::ZKVMChipProofInputVariable;
3+
use ceno_mle::StructuralWitInType::{
4+
EqualDistanceSequence, InnerRepeatingIncrementalSequence, OuterRepeatingIncrementalSequence,
5+
};
36
use ceno_mle::{Expression, Fixed, Instance};
47
use ceno_zkvm::structs::{ChallengeId, WitnessId};
58
use ff_ext::ExtensionField;
@@ -573,10 +576,11 @@ pub fn evaluate_ceno_expr<C: Config, T>(
573576
match expr {
574577
Expression::Fixed(f) => fixed_in(builder, f),
575578
Expression::WitIn(witness_id) => wit_in(builder, *witness_id),
576-
Expression::StructuralWitIn(witness_id, max_len, offset, multi_factor) => {
577-
structural_wit_in(builder, *witness_id, *max_len, *offset, *multi_factor)
579+
Expression::StructuralWitIn(witness_id, _) => {
580+
structural_wit_in(builder, *witness_id, 0, 0, 0)
578581
}
579582
Expression::Instance(i) => instance(builder, *i),
583+
Expression::InstanceScalar(i) => instance(builder, *i),
580584
Expression::Constant(scalar) => match scalar {
581585
Either::Left(s) => constant(builder, E::from_base(*s)),
582586
Either::Right(s) => constant(builder, *s),
@@ -688,7 +692,7 @@ pub fn evaluate_ceno_expr<C: Config, T>(
688692
}
689693

690694
/// evaluate MLE M(x0, x1, x2, ..., xn) address vector with it evaluation format a*[0, 1, 2, 3, ....2^n-1] + b
691-
/// on r = [r0, r1, r2, ...rn] succintly
695+
/// on r = [r0, r1, r2, ...rn] succinctly
692696
/// a, b, is constant
693697
/// the result M(r0, r1,... rn) = r0 + r1 * 2 + r2 * 2^2 + .... rn * 2^n
694698
pub fn eval_wellform_address_vec<C: Config>(
@@ -722,6 +726,62 @@ pub fn eval_wellform_address_vec<C: Config>(
722726
res
723727
}
724728

729+
/// Evaluate MLE M(x0, x1, ..., xn) whose evaluations are [0, 0, 1, 1, 2, 2, 2, 2, ...]
730+
/// on r = [r0, r1, r2, ... rn] succinctly
731+
pub fn eval_stacked_constant<C: Config>(
732+
builder: &mut Builder<C>,
733+
r: &Array<C, Ext<C::F, C::EF>>,
734+
) -> Ext<C::F, C::EF> {
735+
let one: Ext<C::F, C::EF> = builder.constant(C::EF::ONE);
736+
let res: Ext<C::F, C::EF> = builder.constant(C::EF::ZERO);
737+
let loop_i: Ext<C::F, C::EF> = builder.constant(C::EF::ONE);
738+
739+
builder.range(1, r.len()).for_each(|i_vec, builder| {
740+
let i: Var<C::N> = builder.eval(i_vec[0]);
741+
let ri = builder.get(r, i);
742+
// res = res * (1-ri) + ri * i
743+
builder.assign(&res, res * (one.clone() - ri.clone()) + ri * loop_i);
744+
builder.assign(&loop_i, loop_i + one);
745+
});
746+
747+
res
748+
}
749+
750+
/// Evaluate MLE M(x0, x1, ..., xn) whose evaluations are [0, 0, 0, 1, 0, 1, 2, 3, ...]
751+
/// on r = [r0, r1, r2, ... rn] succinctly
752+
pub fn eval_stacked_wellform_address_vec<C: Config>(
753+
builder: &mut Builder<C>,
754+
r: &Array<C, Ext<C::F, C::EF>>,
755+
) -> Ext<C::F, C::EF> {
756+
let one: Ext<C::F, C::EF> = builder.constant(C::EF::ONE);
757+
758+
let two: Ext<C::F, C::EF> = builder.constant(C::EF::TWO);
759+
let pow_two: Ext<C::F, C::EF> = builder.constant(C::EF::ONE);
760+
761+
// compute \sum_j r_j * 2^j in an incremental way
762+
let well_formed_inc: Ext<C::F, C::EF> = builder.constant(C::EF::ZERO);
763+
let res: Ext<C::F, C::EF> = builder.constant(C::EF::ZERO);
764+
765+
builder.range(1, r.len()).for_each(|i_vec, builder| {
766+
let i: Var<C::N> = builder.eval(i_vec[0]);
767+
let i_minus_1: Var<C::N> = builder.eval(i.clone() - RVar::from(1));
768+
let ri = builder.get(r, i);
769+
let r_i_minus_1 = builder.get(r, i_minus_1);
770+
771+
// well_formed_inc += 2^{i-1} * r_{i-1}
772+
builder.assign(&well_formed_inc, well_formed_inc + pow_two * r_i_minus_1);
773+
builder.assign(&pow_two, pow_two * two);
774+
775+
// res = res * (1-ri) + ri * (\sum_{j < i} 2^j * rj)
776+
builder.assign(
777+
&res,
778+
res * (one - ri.clone()) + ri * well_formed_inc.clone(),
779+
);
780+
});
781+
782+
res
783+
}
784+
725785
pub fn max_usize_vec<C: Config>(builder: &mut Builder<C>, vec: Vec<Usize<C::N>>) -> Usize<C::N> {
726786
assert!(vec.len() > 0);
727787

@@ -968,3 +1028,66 @@ pub fn extend<C: Config>(
9681028

9691029
out
9701030
}
1031+
1032+
#[cfg(test)]
1033+
mod tests {
1034+
use ff_ext::BabyBearExt4;
1035+
use openvm_circuit::arch::{instructions::program::Program, SystemConfig, VmExecutor};
1036+
use openvm_native_circuit::{Native, NativeConfig};
1037+
use openvm_native_compiler::{
1038+
asm::{AsmBuilder, AsmCompiler},
1039+
conversion::{convert_program, CompilerOptions},
1040+
ir::Ext,
1041+
};
1042+
use p3_baby_bear::BabyBear;
1043+
use p3_field::FieldAlgebra;
1044+
1045+
use crate::arithmetics::eval_stacked_wellform_address_vec;
1046+
1047+
type E = BabyBearExt4;
1048+
type F = BabyBear;
1049+
1050+
fn run_test_program(program: Program<F>) {
1051+
let system_config = SystemConfig::default()
1052+
.with_public_values(20)
1053+
.with_max_segment_len((1 << 22) - 100);
1054+
let config = NativeConfig::new(system_config, Native);
1055+
1056+
let executor = VmExecutor::<F, NativeConfig>::new(config);
1057+
1058+
executor
1059+
.execute_and_then(program.clone(), vec![], |_, seg| Ok(seg), |err| err)
1060+
.unwrap();
1061+
}
1062+
1063+
#[test]
1064+
fn test_structural_witness() {
1065+
let mut builder = AsmBuilder::<F, E>::default();
1066+
1067+
// eval_stacked_wellform_address_vec
1068+
let r = builder.dyn_array(4);
1069+
let expected = vec![0, 0, 0, 1, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7];
1070+
1071+
for i in 0..16 {
1072+
for b in 0..4 {
1073+
let bit = (i >> b) & 1;
1074+
let bit: Ext<F, E> = builder.constant(E::from_canonical_u32(bit));
1075+
builder.set_value(&r, b, bit);
1076+
}
1077+
let val = eval_stacked_wellform_address_vec(&mut builder, &r);
1078+
let expected_val: Ext<F, E> =
1079+
builder.constant(E::from_canonical_u32(expected[i as usize]));
1080+
1081+
builder.assert_ext_eq(val, expected_val);
1082+
}
1083+
builder.halt();
1084+
1085+
let options = CompilerOptions::default();
1086+
let mut compiler = AsmCompiler::new(options.word_size);
1087+
compiler.build(builder.operations);
1088+
let asm_code = compiler.code();
1089+
1090+
let program: Program<F> = convert_program(asm_code, options);
1091+
run_test_program(program);
1092+
}
1093+
}

src/basefold_verifier/basefold.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::collections::BTreeMap;
22

33
use itertools::Itertools;
4-
use mpcs::basefold::BasefoldProof as InnerBasefoldProof;
4+
use mpcs::basefold::structure::BasefoldProof as InnerBasefoldProof;
55
use openvm_native_compiler::{asm::AsmConfig, prelude::*};
66
use openvm_native_compiler_derive::iter_zip;
77
use openvm_native_recursion::hints::{Hintable, VecAutoHintable};

src/basefold_verifier/query_phase.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Note: check all XXX comments!
22

33
use ff_ext::{BabyBearExt4, ExtensionField, PoseidonField};
4-
use mpcs::basefold::QueryOpeningProof as InnerQueryOpeningProof;
4+
use mpcs::basefold::structure::QueryOpeningProof as InnerQueryOpeningProof;
55
use openvm_native_compiler::{asm::AsmConfig, prelude::*};
66
use openvm_native_compiler_derive::iter_zip;
77
use openvm_native_recursion::{

0 commit comments

Comments
 (0)