Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
b2a5415
add system,gkr air
hero78119 Mar 6, 2026
95c6898
ceno_recursion_v2: stub inner agg prover
hero78119 Mar 7, 2026
bb3b9fd
ceno_recursion_v2: wire dependencies and run check
hero78119 Mar 7, 2026
3adbe99
ceno_recursion_v2: flesh out inner test
hero78119 Mar 7, 2026
09942ff
ceno_recursion_v2: move skills folder local
hero78119 Mar 9, 2026
69f31f9
fork proof-shape module and expose required shims
hero78119 Mar 9, 2026
db92602
docs: add proof shape and system specs
hero78119 Mar 9, 2026
93f16f4
wrap BatchConstraintModule around upstream
hero78119 Mar 10, 2026
6ae7bc2
format code
hero78119 Mar 10, 2026
6fc4241
docs: capture planned GKR refactor
hero78119 Mar 10, 2026
b30a493
Add placeholder GKR idx and claims
hero78119 Mar 10, 2026
3815879
Align GKR layer AIR with new loop counters
hero78119 Mar 10, 2026
a525323
feat(gkr): scaffold prod/logup claim splits
hero78119 Mar 11, 2026
e8ee89d
chore(gkr): remove bus extension traits
hero78119 Mar 11, 2026
1cbced2
fix(gkr): correct per-layer loops and logup folding
hero78119 Mar 11, 2026
913c5d4
refactor(gkr): add lambda-prime accumulators
hero78119 Mar 12, 2026
f4b69af
more comment
hero78119 Mar 12, 2026
1f33490
fix(gkr): thread idx through sumcheck
hero78119 Mar 12, 2026
ccf37ef
feat(gkr): echo lambda/mu via layer output
hero78119 Mar 12, 2026
9109a9a
chore(gkr): drop xi sampler wiring
hero78119 Mar 12, 2026
1b3e494
wip more trait type in RecursionProof
hero78119 Mar 12, 2026
349196a
bump p3 to 0.4.1
hero78119 Mar 13, 2026
1625324
stub recursion tracegen path
hero78119 Mar 13, 2026
5848f97
rng stub
hero78119 Mar 13, 2026
41e4037
Populate GKR traces from ZKVM proofs
hero78119 Mar 13, 2026
8ece50a
commit docs change
hero78119 Mar 13, 2026
27b3135
add cuda module
hero78119 Mar 13, 2026
1dde903
Align recursion CPU/CUDA tracegen with upstream
hero78119 Mar 16, 2026
ec7b757
Simplify GKR buses and inventory
hero78119 Mar 16, 2026
7b05252
separate raed/write count constraint
hero78119 Mar 17, 2026
f59d198
Add main module trace wiring
hero78119 Mar 17, 2026
15b5cb0
add main sumcheck final eval airs
hero78119 Mar 17, 2026
77a3162
Refactor expression tracegen for recursion vk
hero78119 Mar 17, 2026
f6f2f23
use upstream SystemParam
hero78119 Mar 18, 2026
2568f0b
simplify and cleanup proof-shape
hero78119 Mar 18, 2026
e643b77
misc: update specs
hero78119 Mar 18, 2026
786a195
wip: investigate unittest output
hero78119 Mar 18, 2026
f631c17
Add diagnostics for subcircuit proving context failures
hero78119 Mar 18, 2026
91cc6ec
wip: unittest debug constraint panic
hero78119 Mar 18, 2026
882580d
Checkpoint local inner-circuit fork scaffold
hero78119 Mar 18, 2026
4cc427e
Re-enable inner pre/post context wiring for proving ctx
hero78119 Mar 18, 2026
6b1a269
Align inner-circuit RecursionProof fork and refresh migration skill
hero78119 Mar 19, 2026
d2bfbed
Fork transcript tracegen for RecursionProof and wire system module
hero78119 Mar 19, 2026
a9ebe3e
Patch stark-backend deps to hero78119 develop-v2 fork
hero78119 Mar 19, 2026
a45fcfe
Make placeholder traces width-correct and use real pow/exp tracegen
hero78119 Mar 19, 2026
e902c5f
misc: fmt
hero78119 Mar 19, 2026
c017ecf
rename gkr -> tower
hero78119 Mar 19, 2026
7bc2858
refactor(system): use local BusInventory in aggregation interfaces
hero78119 Mar 19, 2026
2d9c232
Refactor preflight transcript replay across proof-shape/main/tower
hero78119 Mar 19, 2026
f393565
Scaffold BatchConstraintModule and park system wiring behind TODOs
hero78119 Mar 19, 2026
93593e9
masked cache commit
hero78119 Mar 24, 2026
1c4ffc5
proof-shape: drop pow-bus wiring and align log-height semantics
hero78119 Mar 24, 2026
feb12a8
proof-shape: add CommitAir with commitments-tidx handoff
hero78119 Mar 24, 2026
63e8c37
misc: format
hero78119 Mar 24, 2026
d5e4d09
continuation: observe transcript label via shared utils helper
hero78119 Mar 24, 2026
0f03639
inner-vm-pvs: fork public-values layout and defer bus mapping
hero78119 Mar 24, 2026
e04638c
trace generation for proof shape
darth-cy Mar 25, 2026
059d02f
trace generation for tower
darth-cy Mar 26, 2026
84c67b2
Merge pull request #1279 from scroll-tech/trace/v2_tower
hero78119 Mar 26, 2026
1335f5f
remove debug constraint gating
darth-cy Mar 26, 2026
ebb0ecf
clippy + fmt
darth-cy Mar 26, 2026
e2767ac
build
darth-cy Mar 26, 2026
d547019
clippy
darth-cy Mar 26, 2026
0a22d3c
Merge pull request #1278 from scroll-tech/trace/v2_proof_shape
hero78119 Mar 26, 2026
8ff2b73
add transcript forking sidechain
darth-cy Mar 29, 2026
ec45947
debug preflight
darth-cy Mar 30, 2026
50c08c4
Merge branch 'master' into feat/forked_transcript
darth-cy Mar 30, 2026
9f8801e
debug preflight
darth-cy Mar 30, 2026
57d1a82
merge with master
hero78119 Mar 30, 2026
397e34f
debug transcript values
darth-cy Mar 30, 2026
9865883
Merge branch 'feat/recursion-v2' into feat/forked_transcript
darth-cy Mar 30, 2026
98ffcbc
adjust fork transcript
darth-cy Mar 31, 2026
ac9595f
balance fork transcript and proof shape
darth-cy Mar 31, 2026
b43936b
constrain initial fork state and bound check
darth-cy Mar 31, 2026
0b1a994
label observation correction
darth-cy Mar 31, 2026
3dc77b8
fix transcript discrepancy
darth-cy Mar 31, 2026
cf0b353
remove global_tidx_offset
darth-cy Apr 1, 2026
dd102a0
move commit air into verifier inner
darth-cy Apr 1, 2026
5898474
restore TODO stash
darth-cy Apr 1, 2026
56035cd
restore TODO stash
darth-cy Apr 1, 2026
1c0ecb2
Merge branch 'master' into feat/recursion-v2
hero78119 Apr 1, 2026
e39c574
merge with master
hero78119 Apr 1, 2026
1cb8e2d
Merge branch 'feat/recursion-v2' into feat/forked_transcript
hero78119 Apr 1, 2026
5025cf4
misc: cargo fmt
hero78119 Apr 1, 2026
1209a30
misc: observe order
hero78119 Apr 1, 2026
a18782f
merge with feat/misc
hero78119 Apr 1, 2026
4bcd150
Merge branch 'feat/recursion-v2' into feat/forked_transcript
hero78119 Apr 1, 2026
4ef0f62
codebase organization
darth-cy Apr 2, 2026
e4e9b22
remove dead code
darth-cy Apr 2, 2026
52d7a1f
lint
darth-cy Apr 2, 2026
2049be5
adjust verifier flow
hero78119 Apr 2, 2026
953ce2e
Merge branch 'feat/forked_transcript' of github.com:scroll-tech/ceno …
hero78119 Apr 2, 2026
26c8b88
Merge pull request #1284 from scroll-tech/feat/forked_transcript
hero78119 Apr 2, 2026
e1b946e
refactor preflight stage of verifier
hero78119 Apr 2, 2026
0746bcd
cleanup unused module
hero78119 Apr 2, 2026
dab32b0
misc: align verifier run-preflight logic
hero78119 Apr 2, 2026
4a7c972
debug alpha/beta
hero78119 Apr 2, 2026
3821bf1
edit skill
hero78119 Apr 2, 2026
d9d9453
refactor(recursion): move preflight ownership and implement real VmPv…
hero78119 Apr 2, 2026
e1b376d
misc comment out num_pvs_bus logic
hero78119 Apr 2, 2026
01d010e
feat(vm_pvs): enforce zkvm shard continuity invariants
hero78119 Apr 2, 2026
69eb941
feat(recursion): wire vm pvs transcript reads and first-pvs tidx
hero78119 Apr 2, 2026
9fdf555
refactor(proof-shape): simplify pvs trace row/tidx derivation
hero78119 Apr 2, 2026
4b6a1af
Merge pull request #1291 from scroll-tech/feat/forked_transcript
hero78119 Apr 2, 2026
55f1ca1
wip
hero78119 Apr 2, 2026
042c7a4
observed num_instance within per-chip fork
hero78119 Apr 3, 2026
fb3a2fb
merge feature branch
hero78119 Apr 3, 2026
2cefb30
follow upstream change
hero78119 Apr 3, 2026
e675877
adjust slightly
hero78119 Apr 3, 2026
9157724
misc: cosmetics
hero78119 Apr 3, 2026
a4a39ad
misc adjustment
hero78119 Apr 3, 2026
924ca8f
refactor(proof-shape): remove legacy cached/cidx paths and VK-back me…
hero78119 Apr 3, 2026
6dd8dee
migrate challenge fields to D_EF across proof-shape and fork transcript
hero78119 Apr 3, 2026
206549b
wire lookup-challenge bus through inner VM-PVS and fork transcript pl…
hero78119 Apr 3, 2026
c65542f
align proof-shape transcript offsets with vm-pvs prefix and fork meta…
hero78119 Apr 4, 2026
e050ae1
remove fork and replace with observing challenge from parent transcript
hero78119 Apr 4, 2026
65c0074
merge with feature branch
hero78119 Apr 5, 2026
58ba53c
refactor(system): align preflight fork flow with upstream semantics
hero78119 Apr 5, 2026
28793ca
refactor(fork-id): normalize fork ids to 0-based indexing
hero78119 Apr 5, 2026
a6a89fb
proof_shape: derive forked challenge tidx from per-air tower span
hero78119 Apr 6, 2026
042a40c
proof_shape: enforce two-instance heights in air and trace
hero78119 Apr 6, 2026
8cdfb76
Merge pull request #1293 from scroll-tech/feat/forked_transcript
hero78119 Apr 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
686 changes: 461 additions & 225 deletions Cargo.lock

Large diffs are not rendered by default.

25 changes: 13 additions & 12 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
[workspace]
exclude = ["ceno_recursion_v2", "ceno_recursion"]
members = [
"ceno_cli",
"ceno_emul",
"ceno_host",
"ceno_serde",
"ceno_rt",
"ceno_zkvm",
"ceno_recursion",
"derive",
"examples-builder",
"examples",
Expand All @@ -27,16 +27,17 @@ version = "0.1.0"
ceno_crypto_primitives = { git = "https://github.com/scroll-tech/ceno-patch.git", package = "ceno_crypto_primitives", branch = "main" }
ceno_syscall = { git = "https://github.com/scroll-tech/ceno-patch.git", package = "ceno_syscall", branch = "main" }

ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", tag = "v1.0.0-alpha.22" }
mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", tag = "v1.0.0-alpha.22" }
multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", tag = "v1.0.0-alpha.22" }
p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", tag = "v1.0.0-alpha.22" }
poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", tag = "v1.0.0-alpha.22" }
sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", tag = "v1.0.0-alpha.22" }
sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", tag = "v1.0.0-alpha.22" }
transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", tag = "v1.0.0-alpha.22" }
whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", tag = "v1.0.0-alpha.22" }
witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", tag = "v1.0.0-alpha.22" }
ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", branch = "feat/bump-p3" }
mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", branch = "feat/bump-p3", features = ["whir"] }
multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", branch = "feat/bump-p3" }
p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", branch = "feat/bump-p3" }
p3-field = { version = "=0.4.1", default-features = false }
poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", branch = "feat/bump-p3" }
sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", branch = "feat/bump-p3" }
sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", branch = "feat/bump-p3" }
transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", branch = "feat/bump-p3" }
whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", branch = "feat/bump-p3" }
witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", branch = "feat/bump-p3" }

anyhow = { version = "1.0", default-features = false }
bincode = "1"
Expand All @@ -60,7 +61,7 @@ proptest = "1"
rand = "0.8"
rand_chacha = { version = "0.3", features = ["serde1"] }
rand_core = "0.6"
rayon = "1.10"
rayon = "^1.11"
rustc-hash = "2.0.0"
secp = "0.4.1"
serde = { version = "1.0", features = ["derive", "rc"] }
Expand Down
3 changes: 1 addition & 2 deletions ceno_cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ tikv-jemallocator = { version = "0.6", optional = true }

ceno_emul = { path = "../ceno_emul" }
ceno_host = { path = "../ceno_host" }
ceno_recursion = { path = "../ceno_recursion" }
ceno_zkvm = { path = "../ceno_zkvm" }

openvm-circuit.workspace = true
Expand All @@ -49,7 +48,7 @@ mpcs.workspace = true
vergen-git2 = { version = "9.1.0", features = ["build", "cargo", "rustc", "emit_and_set"] }

[features]
gpu = ["gkr_iop/gpu", "ceno_zkvm/gpu", "ceno_recursion/gpu", "dep:openvm-cuda-backend", "openvm-native-circuit/cuda"]
gpu = ["gkr_iop/gpu", "ceno_zkvm/gpu", "dep:openvm-cuda-backend", "openvm-native-circuit/cuda"]
jemalloc = ["dep:tikv-jemallocator", "ceno_zkvm/jemalloc"]
jemalloc-prof = ["jemalloc", "tikv-jemallocator?/profiling"]
nightly-features = [
Expand Down
2 changes: 1 addition & 1 deletion ceno_cli/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1 +1 @@
pub mod sdk;
// SDK temporarily disabled due to OpenVM dependency incompatibility
2 changes: 1 addition & 1 deletion ceno_recursion/src/aggregation/internal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use openvm_stark_sdk::{
config::{FriParameters, baby_bear_poseidon2::BabyBearPoseidon2Config},
openvm_stark_backend::p3_field::PrimeField32,
};
use p3::field::FieldAlgebra;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;

use openvm_continuations::verifier::{
common::{
Expand Down
5 changes: 3 additions & 2 deletions ceno_recursion/src/aggregation/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ use openvm_continuations::{
internal::types::{InternalVmVerifierInput, InternalVmVerifierPvs, VmStarkProof},
},
};
use crate::field_ext::CanonicalFieldExt;
#[cfg(feature = "gpu")]
use openvm_cuda_backend::engine::GpuBabyBearPoseidon2Engine as BabyBearPoseidon2Engine;
use openvm_native_circuit::{NativeBuilder, NativeConfig};
Expand Down Expand Up @@ -56,7 +57,7 @@ use openvm_stark_sdk::{
openvm_stark_backend::keygen::types::MultiStarkVerifyingKey,
p3_bn254_fr::Bn254Fr,
};
use p3::field::FieldAlgebra;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;
use serde::{Deserialize, Serialize};
use std::{borrow::Borrow, sync::Arc, time::Instant};
pub type RecPcs = Basefold<E, BasefoldRSParams>;
Expand Down Expand Up @@ -749,7 +750,7 @@ mod tests {
use mpcs::{Basefold, BasefoldRSParams};
use openvm_stark_backend::proof::Proof;
use openvm_stark_sdk::{config::setup_tracing_with_log_level, p3_bn254_fr::Bn254Fr};
use p3::field::FieldAlgebra;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;
use std::fs::File;

pub fn aggregation_inner_thread() {
Expand Down
6 changes: 4 additions & 2 deletions ceno_recursion/src/arithmetics/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ use openvm_native_recursion::{
challenger::{FeltChallenger, duplex::DuplexChallengerVariable},
vars::HintSlice,
};
use openvm_stark_backend::p3_field::{FieldAlgebra, FieldExtensionAlgebra};
use openvm_stark_backend::p3_field::{FieldExtensionAlgebra, PrimeCharacteristicRing as FieldAlgebra};
use crate::field_ext::CanonicalFieldExt;

type E = BabyBearExt4;
const MAX_NUM_VARS: usize = 25;
Expand Down Expand Up @@ -1066,7 +1067,8 @@ mod tests {
conversion::{CompilerOptions, convert_program},
ir::Ext,
};
use p3::{babybear::BabyBear, field::FieldAlgebra};
use p3::babybear::BabyBear;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;

use crate::arithmetics::eval_stacked_wellform_address_vec;

Expand Down
4 changes: 2 additions & 2 deletions ceno_recursion/src/basefold_verifier/field.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ const TWO_ADIC_GENERATORS: [usize; 33] = [
];

use openvm_native_compiler::prelude::*;
use p3_field::FieldAlgebra;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;

fn two_adic_generator<C: Config>(
builder: &mut Builder<C>,
Expand All @@ -51,4 +51,4 @@ fn two_adic_generator<C: Config>(
builder.set_value(&two_adic_generator, i, C::F::from_canonical_usize(TWO_ADIC_GENERATORS[i.value()]));
});
builder.get(&two_adic_generator, bits)
}
}
2 changes: 1 addition & 1 deletion ceno_recursion/src/basefold_verifier/mmcs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ pub mod tests {
use openvm_native_circuit::{Native, NativeConfig};
use openvm_native_compiler::asm::AsmBuilder;
use openvm_native_recursion::hints::Hintable;
use p3::field::FieldAlgebra;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;

use super::{E, F, MmcsCommitment, MmcsVerifierInput, mmcs_verify_batch};

Expand Down
4 changes: 3 additions & 1 deletion ceno_recursion/src/basefold_verifier/query_phase.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ use openvm_native_recursion::{
use openvm_stark_sdk::p3_baby_bear::BabyBear;
use p3::{
commit::ExtensionMmcs,
field::{Field, FieldAlgebra},
field::Field,
};
use p3_field::PrimeCharacteristicRing as FieldAlgebra;
use serde::Deserialize;

use super::{basefold::*, extension_mmcs::*, mmcs::*, rs::*, utils::*};
use crate::{arithmetics::eq_eval_with_index, tower_verifier::binding::*};
use crate::field_ext::CanonicalFieldExt;

pub type F = BabyBear;
pub type E = BabyBearExt4;
Expand Down
6 changes: 4 additions & 2 deletions ceno_recursion/src/basefold_verifier/rs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ use std::{cell::RefCell, collections::BTreeMap};
use openvm_native_compiler::{asm::AsmConfig, prelude::*};
use openvm_native_recursion::hints::Hintable;
use openvm_stark_sdk::p3_baby_bear::BabyBear;
use p3::field::{FieldAlgebra, extension::BinomialExtensionField};
use p3::field::extension::BinomialExtensionField;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;
use serde::Deserialize;

use super::{structs::*, utils::pow_felt_bits};
Expand Down Expand Up @@ -230,7 +231,8 @@ pub mod tests {
use openvm_stark_sdk::{
config::baby_bear_poseidon2::BabyBearPoseidon2Config, p3_baby_bear::BabyBear,
};
use p3::field::{FieldAlgebra, extension::BinomialExtensionField};
use p3::field::extension::BinomialExtensionField;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;

type SC = BabyBearPoseidon2Config;

Expand Down
3 changes: 2 additions & 1 deletion ceno_recursion/src/basefold_verifier/utils.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use openvm_native_compiler::ir::*;
use openvm_native_recursion::vars::HintSlice;
use p3::{babybear::BabyBear, field::FieldAlgebra};
use p3::babybear::BabyBear;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;

use crate::basefold_verifier::mmcs::MmcsProof;

Expand Down
5 changes: 3 additions & 2 deletions ceno_recursion/src/basefold_verifier/verifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use openvm_native_recursion::challenger::{
duplex::DuplexChallengerVariable,
};
use openvm_stark_sdk::p3_baby_bear::BabyBear;
use p3::field::FieldAlgebra;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;

pub type F = BabyBear;
pub type E = BabyBearExt4;
Expand Down Expand Up @@ -176,7 +176,8 @@ pub mod tests {
use openvm_native_recursion::{challenger::duplex::DuplexChallengerVariable, hints::Hintable};
use openvm_stark_backend::p3_challenger::GrindingChallenger;
use openvm_stark_sdk::{config::baby_bear_poseidon2::Challenger, p3_baby_bear::BabyBear};
use p3::field::{Field, FieldAlgebra};
use p3::field::Field;
use p3_field::PrimeCharacteristicRing as FieldAlgebra;
use rand::thread_rng;
use serde::Deserialize;
use transcript::{BasicTranscript, Transcript};
Expand Down
2 changes: 1 addition & 1 deletion ceno_recursion/src/extensions/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ mod tests {
};
use openvm_stark_backend::{
config::StarkGenericConfig,
p3_field::{Field, FieldAlgebra},
p3_field::{Field, PrimeCharacteristicRing as FieldAlgebra},
};
use openvm_stark_sdk::{
config::baby_bear_poseidon2::BabyBearPoseidon2Config, p3_baby_bear::BabyBear,
Expand Down
49 changes: 49 additions & 0 deletions ceno_recursion/src/field_ext.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
use openvm_stark_backend::p3_field::PrimeCharacteristicRing;

pub trait CanonicalFieldExt: PrimeCharacteristicRing {
#[allow(clippy::inline_always)]
fn from_canonical_u64(value: u64) -> Self {
let mut v = value;
let mut result = Self::ZERO;
let mut base = Self::ONE;
while v > 0 {
if v & 1 == 1 {
result += base.clone();
}
base += base.clone();
v >>= 1;
}
result
}

#[inline(always)]
fn from_canonical_u32(value: u32) -> Self {
Self::from_canonical_u64(u64::from(value))
}

#[inline(always)]
fn from_canonical_u16(value: u16) -> Self {
Self::from_canonical_u64(u64::from(value))
}

#[inline(always)]
fn from_canonical_u8(value: u8) -> Self {
Self::from_canonical_u64(u64::from(value))
}

#[inline(always)]
fn from_canonical_usize(value: usize) -> Self {
Self::from_canonical_u64(value as u64)
}

#[inline(always)]
fn from_isize(value: isize) -> Self {
if value >= 0 {
Self::from_canonical_usize(value as usize)
} else {
-Self::from_canonical_usize(value.unsigned_abs() as usize)
}
}
}

impl<T> CanonicalFieldExt for T where T: PrimeCharacteristicRing {}
1 change: 1 addition & 0 deletions ceno_recursion/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#![allow(clippy::too_many_arguments)]
mod arithmetics;
mod basefold_verifier;
mod field_ext;
pub mod constants;
mod tower_verifier;
mod transcript;
Expand Down
5 changes: 3 additions & 2 deletions ceno_recursion/src/tower_verifier/program.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ use openvm_native_recursion::{
challenger::{FeltChallenger, duplex::DuplexChallengerVariable},
vars::HintSlice,
};
use openvm_stark_backend::p3_field::FieldAlgebra;
use openvm_stark_backend::p3_field::PrimeCharacteristicRing as FieldAlgebra;
use crate::field_ext::CanonicalFieldExt;
const NATIVE_SUMCHECK_CTX_LEN: usize = 10;

pub fn iop_verifier_state_verify<C: Config>(
Expand Down Expand Up @@ -435,7 +436,7 @@ pub fn verify_tower_proof<C: Config>(
// use p3_baby_bear::BabyBear;
// use p3_field::extension::BinomialExtensionField;
// use p3_field::Field;
// use p3_field::FieldAlgebra;
// use p3_field::PrimeCharacteristicRing as FieldAlgebra;
// use rand::thread_rng;
//
// type F = BabyBear;
Expand Down
32 changes: 1 addition & 31 deletions ceno_recursion/src/transcript/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ use openvm_native_compiler::prelude::*;
use openvm_native_recursion::challenger::{
CanObserveVariable, CanSampleBitsVariable, duplex::DuplexChallengerVariable,
};
use openvm_stark_backend::p3_field::FieldAlgebra;

use crate::arithmetics::challenger_multi_observe;
use crate::field_ext::CanonicalFieldExt;

pub fn transcript_observe_label<C: Config>(
builder: &mut Builder<C>,
Expand Down Expand Up @@ -54,32 +53,3 @@ pub fn transcript_check_pow_witness<C: Config>(
builder.assert_eq::<Var<C::N>>(bit, Usize::from(0));
});
}

pub fn clone_challenger_state<C: Config>(
builder: &mut Builder<C>,
src: &DuplexChallengerVariable<C>,
) -> DuplexChallengerVariable<C> {
let dst = DuplexChallengerVariable::new(builder);
builder
.range(0, dst.sponge_state.len())
.for_each(|idx_vec, builder| {
let value = builder.get(&src.sponge_state, idx_vec[0]);
builder.set(&dst.sponge_state, idx_vec[0], value);
});

let input_offset = src.input_ptr - src.io_empty_ptr;
builder.assign(&dst.input_ptr, input_offset + dst.io_empty_ptr);

let output_offset = src.output_ptr - src.io_empty_ptr;
builder.assign(&dst.output_ptr, output_offset + dst.io_empty_ptr);
dst
}

pub fn challenger_add_forked_index<C: Config>(
builder: &mut Builder<C>,
challenger: &mut DuplexChallengerVariable<C>,
index: &Usize<C::N>,
) {
let felt = builder.unsafe_cast_var_to_felt(index.get_var());
challenger.observe(builder, felt);
}
3 changes: 2 additions & 1 deletion ceno_recursion/src/zkvm_verifier/binding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use crate::{
},
utils::read_hint_slice,
},
field_ext::CanonicalFieldExt,
tower_verifier::binding::{
IOPProverMessage, IOPProverMessageVec, IOPProverMessageVecVariable, PointVariable,
ThreeDimensionalVecVariable, ThreeDimensionalVector,
Expand All @@ -31,7 +32,7 @@ use openvm_native_recursion::{
hints::{Hintable, VecAutoHintable},
vars::HintSlice,
};
use openvm_stark_backend::p3_field::{FieldAlgebra, extension::BinomialExtensionField};
use openvm_stark_backend::p3_field::{PrimeCharacteristicRing as FieldAlgebra, extension::BinomialExtensionField};
use openvm_stark_sdk::p3_baby_bear::BabyBear;
use p3::field::FieldExtensionAlgebra;
use std::cmp::max;
Expand Down
Loading
Loading