Skip to content

Commit 53cb17e

Browse files
authored
Feat: generate stark in e2e test (#51)
* generate stark in uni t test * add e2e test script * create dir * add unit test in CI * run unit test in release mode
1 parent 8edbb1e commit 53cb17e

File tree

4 files changed

+119
-6
lines changed

4 files changed

+119
-6
lines changed

.github/workflows/ci.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
# Disable Lint
15+
16+
# Lint:
17+
# runs-on: ubuntu-latest
18+
19+
# steps:
20+
# - uses: actions/checkout@v4
21+
# - name: Install stable Rust
22+
# uses: actions-rs/toolchain@v1
23+
# with:
24+
# toolchain: stable
25+
# components: rustfmt, clippy
26+
27+
# - name: Fmt
28+
# run: cargo fmt --check
29+
30+
# - name: Clippy
31+
# run: cargo clippy -- -D warnings
32+
33+
Test:
34+
runs-on: ubuntu-latest
35+
36+
steps:
37+
- uses: actions/checkout@v4
38+
- name: Install stable Rust
39+
uses: actions-rs/toolchain@v1
40+
with:
41+
toolchain: stable
42+
components: clippy
43+
44+
- name: Run e2e test
45+
run: ./scripts/e2e_test.sh
46+
47+
- name: Run unit tests
48+
run: cargo test --release --all-features -- --nocapture

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ Cargo.lock
33
vm_run_output.log
44
*.bin
55
.DS_Store
6-
*.log
6+
*.log
7+
build/ceno

scripts/e2e_test.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/bin/bash
2+
3+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
4+
REPO_ROOT="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel)"
5+
6+
# Clone the ceno repository if it doesn't exist
7+
if [ ! -d "$REPO_ROOT/build/ceno" ] || [ -z "$(ls -A "$REPO_ROOT/build/ceno" 2>/dev/null)" ]; then
8+
git clone https://github.com/scroll-tech/ceno.git "$REPO_ROOT/build/ceno/"
9+
fi
10+
11+
# Enter the ceno directory
12+
cd $REPO_ROOT/build/ceno && git checkout build/smaller_field_support_plonky3_539bbc
13+
14+
# Execute the ceno_zkvm e2e test
15+
RUST_LOG=info cargo run --release --package ceno_zkvm --bin e2e -- --platform=ceno \
16+
--hints=10 --public-io=4191 examples/target/riscv32im-ceno-zkvm-elf/release/examples/fibonacci \
17+
--field=baby-bear
18+
19+
mkdir -p $REPO_ROOT/src/e2e/encoded
20+
21+
# Copy vk.bin and proof.bin to the src/e2e/encoded directory in the parent directory
22+
cp vk.bin $REPO_ROOT/src/e2e/encoded/
23+
cp proof.bin $REPO_ROOT/src/e2e/encoded/
24+
25+
# Return to the root directory
26+
cd $REPO_ROOT
27+
28+
# Execute the test_zkvm_proof_verifier test
29+
RUST_LOG=info cargo test --release --lib test_zkvm_proof_verifier -- --nocapture

src/e2e/mod.rs

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use ff_ext::BabyBearExt4;
99
use itertools::Itertools;
1010
use mpcs::{Basefold, BasefoldRSParams};
1111
use openvm_circuit::arch::{instructions::program::Program, SystemConfig, VmExecutor};
12+
use openvm_circuit::arch::{verify_single, VirtualMachine};
1213
use openvm_native_circuit::{Native, NativeConfig};
1314
use openvm_native_compiler::{
1415
asm::AsmBuilder,
@@ -17,7 +18,10 @@ use openvm_native_compiler::{
1718
};
1819
use openvm_native_recursion::hints::Hintable;
1920
use openvm_stark_backend::config::StarkGenericConfig;
20-
use openvm_stark_sdk::config::setup_tracing_with_log_level;
21+
use openvm_stark_sdk::config::baby_bear_poseidon2::BabyBearPoseidon2Engine;
22+
use openvm_stark_sdk::config::fri_params::standard_fri_params_with_100_bits_conjectured_security;
23+
use openvm_stark_sdk::config::{setup_tracing_with_log_level, FriParameters};
24+
use openvm_stark_sdk::engine::StarkFriEngine;
2125
use openvm_stark_sdk::{
2226
config::baby_bear_poseidon2::BabyBearPoseidon2Config, p3_baby_bear::BabyBear,
2327
};
@@ -259,9 +263,7 @@ pub fn inner_test_thread() {
259263
return ();
260264
*/
261265

262-
let program: Program<
263-
p3_monty_31::MontyField31<openvm_stark_sdk::p3_baby_bear::BabyBearParameters>,
264-
> = convert_program(asm_code, options);
266+
let program: Program<F> = convert_program(asm_code, options);
265267
let mut system_config = SystemConfig::default()
266268
.with_public_values(4)
267269
.with_max_segment_len((1 << 25) - 100);
@@ -271,12 +273,45 @@ pub fn inner_test_thread() {
271273
let executor = VmExecutor::<BabyBear, NativeConfig>::new(config);
272274

273275
let res = executor
274-
.execute_and_then(program, witness_stream, |_, seg| Ok(seg), |err| err)
276+
.execute_and_then(
277+
program.clone(),
278+
witness_stream.clone(),
279+
|_, seg| Ok(seg),
280+
|err| err,
281+
)
275282
.unwrap();
276283

277284
for (i, seg) in res.iter().enumerate() {
278285
println!("=> segment {:?} metrics: {:?}", i, seg.metrics);
279286
}
287+
288+
let poseidon2_max_constraint_degree = 3;
289+
// TODO: use log_blowup = 1 when native multi_observe chip reduces max constraint degree to 3
290+
let log_blowup = 2;
291+
292+
let fri_params = if matches!(std::env::var("OPENVM_FAST_TEST"), Ok(x) if &x == "1") {
293+
FriParameters {
294+
log_blowup,
295+
log_final_poly_len: 0,
296+
num_queries: 10,
297+
proof_of_work_bits: 0,
298+
}
299+
} else {
300+
standard_fri_params_with_100_bits_conjectured_security(log_blowup)
301+
};
302+
303+
let engine = BabyBearPoseidon2Engine::new(fri_params);
304+
let mut config = NativeConfig::aggregation(0, poseidon2_max_constraint_degree);
305+
config.system.memory_config.max_access_adapter_n = 16;
306+
307+
let vm = VirtualMachine::new(engine, config);
308+
309+
let pk = vm.keygen();
310+
let result = vm.execute_and_generate(program, witness_stream).unwrap();
311+
let proofs = vm.prove(&pk, result);
312+
for proof in proofs {
313+
verify_single(&vm.engine, &pk.get_vk(), &proof).expect("Verification failed");
314+
}
280315
}
281316

282317
#[test]

0 commit comments

Comments
 (0)