diff --git a/Cargo.lock b/Cargo.lock index d0ee30820..bba2d7e08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -410,7 +410,7 @@ dependencies = [ "tempfile", "tracing", "tracing-forest", - "tracing-subscriber 0.3.19", + "tracing-subscriber", "vergen-git2", ] diff --git a/ceno_zkvm/src/e2e.rs b/ceno_zkvm/src/e2e.rs index e377442d4..73c16ccc6 100644 --- a/ceno_zkvm/src/e2e.rs +++ b/ceno_zkvm/src/e2e.rs @@ -20,10 +20,10 @@ use ceno_emul::{ Tracer, VMState, WORD_SIZE, WordAddr, }; use clap::ValueEnum; -use ff_ext::{ExtensionField, GoldilocksExt2}; +use ff_ext::{BabyBearExt4, ExtensionField, GoldilocksExt2}; use itertools::{Itertools, MinMaxResult, chain}; use mpcs::{Basefold, BasefoldRSParams, PolynomialCommitmentScheme}; -use p3::goldilocks::Goldilocks; +use p3::{babybear::BabyBear, goldilocks::Goldilocks}; use std::{ collections::{BTreeSet, HashMap, HashSet}, sync::Arc, @@ -31,9 +31,13 @@ use std::{ use tracing::info; use transcript::{BasicTranscript as Transcript, BasicTranscriptWithStat, StatisticRecorder}; -pub type E = GoldilocksExt2; -pub type B = Goldilocks; -pub type Pcs = Basefold; +// pub type E = GoldilocksExt2; +// pub type B = Goldilocks; +// pub type Pcs = Basefold; + +pub type E = BabyBearExt4; +pub type B = BabyBear; +pub type Pcs = Basefold; pub struct FullMemState { mem: Vec, @@ -417,6 +421,7 @@ pub enum Checkpoint { Keygen, PrepE2EProving, PrepWitnessGen, + PrepProof, PrepSanityCheck, Complete, } @@ -553,6 +558,13 @@ pub fn run_e2e_with_checkpoint< let verifier = ZKVMVerifier::new(vk.clone()); + if let Checkpoint::PrepProof = checkpoint { + return ( + (Some(zkvm_proof.clone()), Some(vk)), + Box::new(move || run_e2e_verify::(&verifier, zkvm_proof, exit_code, max_steps)), + ); + } + run_e2e_verify::(&verifier, zkvm_proof.clone(), exit_code, max_steps); if let Checkpoint::PrepSanityCheck = checkpoint { diff --git a/ceno_zkvm/src/instructions/riscv/rv32im.rs b/ceno_zkvm/src/instructions/riscv/rv32im.rs index 0b6e5a824..f34ab3c40 100644 --- a/ceno_zkvm/src/instructions/riscv/rv32im.rs +++ b/ceno_zkvm/src/instructions/riscv/rv32im.rs @@ -63,14 +63,14 @@ pub struct Rv32imConfig { pub sra_config: as Instruction>::InstructionConfig, pub slt_config: as Instruction>::InstructionConfig, pub sltu_config: as Instruction>::InstructionConfig, - pub mul_config: as Instruction>::InstructionConfig, - pub mulh_config: as Instruction>::InstructionConfig, - pub mulhsu_config: as Instruction>::InstructionConfig, - pub mulhu_config: as Instruction>::InstructionConfig, - pub divu_config: as Instruction>::InstructionConfig, - pub remu_config: as Instruction>::InstructionConfig, - pub div_config: as Instruction>::InstructionConfig, - pub rem_config: as Instruction>::InstructionConfig, + // pub mul_config: as Instruction>::InstructionConfig, + // pub mulh_config: as Instruction>::InstructionConfig, + // pub mulhsu_config: as Instruction>::InstructionConfig, + // pub mulhu_config: as Instruction>::InstructionConfig, + // pub divu_config: as Instruction>::InstructionConfig, + // pub remu_config: as Instruction>::InstructionConfig, + // pub div_config: as Instruction>::InstructionConfig, + // pub rem_config: as Instruction>::InstructionConfig, // ALU with imm pub addi_config: as Instruction>::InstructionConfig, @@ -133,14 +133,14 @@ impl Rv32imConfig { let sra_config = cs.register_opcode_circuit::>(); let slt_config = cs.register_opcode_circuit::>(); let sltu_config = cs.register_opcode_circuit::>(); - let mul_config = cs.register_opcode_circuit::>(); - let mulh_config = cs.register_opcode_circuit::>(); - let mulhsu_config = cs.register_opcode_circuit::>(); - let mulhu_config = cs.register_opcode_circuit::>(); - let divu_config = cs.register_opcode_circuit::>(); - let remu_config = cs.register_opcode_circuit::>(); - let div_config = cs.register_opcode_circuit::>(); - let rem_config = cs.register_opcode_circuit::>(); + // let mul_config = cs.register_opcode_circuit::>(); + // let mulh_config = cs.register_opcode_circuit::>(); + // let mulhsu_config = cs.register_opcode_circuit::>(); + // let mulhu_config = cs.register_opcode_circuit::>(); + // let divu_config = cs.register_opcode_circuit::>(); + // let remu_config = cs.register_opcode_circuit::>(); + // let div_config = cs.register_opcode_circuit::>(); + // let rem_config = cs.register_opcode_circuit::>(); // alu with imm opcodes let addi_config = cs.register_opcode_circuit::>(); @@ -200,14 +200,14 @@ impl Rv32imConfig { sra_config, slt_config, sltu_config, - mul_config, - mulh_config, - mulhsu_config, - mulhu_config, - divu_config, - remu_config, - div_config, - rem_config, + // mul_config, + // mulh_config, + // mulhsu_config, + // mulhu_config, + // divu_config, + // remu_config, + // div_config, + // rem_config, // alu with imm addi_config, andi_config, @@ -268,14 +268,14 @@ impl Rv32imConfig { fixed.register_opcode_circuit::>(cs); fixed.register_opcode_circuit::>(cs); fixed.register_opcode_circuit::>(cs); - fixed.register_opcode_circuit::>(cs); - fixed.register_opcode_circuit::>(cs); - fixed.register_opcode_circuit::>(cs); - fixed.register_opcode_circuit::>(cs); - fixed.register_opcode_circuit::>(cs); - fixed.register_opcode_circuit::>(cs); - fixed.register_opcode_circuit::>(cs); - fixed.register_opcode_circuit::>(cs); + // fixed.register_opcode_circuit::>(cs); + // fixed.register_opcode_circuit::>(cs); + // fixed.register_opcode_circuit::>(cs); + // fixed.register_opcode_circuit::>(cs); + // fixed.register_opcode_circuit::>(cs); + // fixed.register_opcode_circuit::>(cs); + // fixed.register_opcode_circuit::>(cs); + // fixed.register_opcode_circuit::>(cs); // alu with imm fixed.register_opcode_circuit::>(cs); fixed.register_opcode_circuit::>(cs); @@ -370,14 +370,14 @@ impl Rv32imConfig { assign_opcode!(SRA, SraInstruction, sra_config); assign_opcode!(SLT, SltInstruction, slt_config); assign_opcode!(SLTU, SltuInstruction, sltu_config); - assign_opcode!(MUL, MulInstruction, mul_config); - assign_opcode!(MULH, MulhInstruction, mulh_config); - assign_opcode!(MULHSU, MulhsuInstruction, mulhsu_config); - assign_opcode!(MULHU, MulhuInstruction, mulhu_config); - assign_opcode!(DIVU, DivuInstruction, divu_config); - assign_opcode!(REMU, RemuInstruction, remu_config); - assign_opcode!(DIV, DivInstruction, div_config); - assign_opcode!(REM, RemInstruction, rem_config); + // assign_opcode!(MUL, MulInstruction, mul_config); + // assign_opcode!(MULH, MulhInstruction, mulh_config); + // assign_opcode!(MULHSU, MulhsuInstruction, mulhsu_config); + // assign_opcode!(MULHU, MulhuInstruction, mulhu_config); + // assign_opcode!(DIVU, DivuInstruction, divu_config); + // assign_opcode!(REMU, RemuInstruction, remu_config); + // assign_opcode!(DIV, DivInstruction, div_config); + // assign_opcode!(REM, RemInstruction, rem_config); // alu with imm assign_opcode!(ADDI, AddiInstruction, addi_config); assign_opcode!(ANDI, AndiInstruction, andi_config); @@ -411,11 +411,11 @@ impl Rv32imConfig { // ecall / halt witness.assign_opcode_circuit::>(cs, &self.halt_config, halt_records)?; - assert_eq!( - all_records.keys().cloned().collect::>(), - // these are opcodes that haven't been implemented - [INVALID, ECALL].into_iter().collect::>(), - ); + // assert_eq!( + // all_records.keys().cloned().collect::>(), + // // these are opcodes that haven't been implemented + // [INVALID, ECALL].into_iter().collect::>(), + // ); Ok(GroupedSteps(all_records)) } @@ -621,7 +621,7 @@ impl DummyExtraConfig { let _ = steps.remove(&INVALID); let keys: Vec<&InsnKind> = steps.keys().collect::>(); - assert!(steps.is_empty(), "unimplemented opcodes: {:?}", keys); + // assert!(steps.is_empty(), "unimplemented opcodes: {:?}", keys); Ok(()) } } diff --git a/ceno_zkvm/src/scheme/verifier.rs b/ceno_zkvm/src/scheme/verifier.rs index 7de1b0a64..e39c1aa32 100644 --- a/ceno_zkvm/src/scheme/verifier.rs +++ b/ceno_zkvm/src/scheme/verifier.rs @@ -30,6 +30,7 @@ use super::{ ZKVMOpcodeProof, ZKVMProof, ZKVMTableProof, constants::MAINCONSTRAIN_SUMCHECK_BATCH_SIZE, }; +#[derive(Clone)] pub struct ZKVMVerifier> { pub(crate) vk: ZKVMVerifyingKey, } diff --git a/poseidon/Cargo.toml b/poseidon/Cargo.toml index 6dd73d7b9..5bb2ce735 100644 --- a/poseidon/Cargo.toml +++ b/poseidon/Cargo.toml @@ -19,3 +19,8 @@ unroll = "0.1" [dev-dependencies] ark-std.workspace = true rand.workspace = true + +[features] +default = ["babybear"] +babybear = [] +goldilocks = [] diff --git a/poseidon/src/constants.rs b/poseidon/src/constants.rs index 7b38b0ffb..e948ad39b 100644 --- a/poseidon/src/constants.rs +++ b/poseidon/src/constants.rs @@ -1 +1,5 @@ +#[cfg(not(feature = "babybear"))] pub const DIGEST_WIDTH: usize = 4; + +#[cfg(feature = "babybear")] +pub const DIGEST_WIDTH: usize = 8;