From 8e82b81726f8483bd1a405bde547f57959551910 Mon Sep 17 00:00:00 2001 From: Ratan Kaliani Date: Fri, 20 Sep 2024 10:36:41 -0700 Subject: [PATCH] feat: Add `cycle-tracking` example with multiple binaries (#1529) --- .github/workflows/main.yml | 36 ++++++++++++++++++ .github/workflows/pr.yml | 6 +++ examples/cycle-tracking/program/Cargo.lock | 6 +-- examples/cycle-tracking/program/Cargo.toml | 8 ++++ examples/cycle-tracking/program/elf/normal | Bin 113976 -> 113992 bytes examples/cycle-tracking/program/elf/report | Bin 112360 -> 112376 bytes .../program/elf/riscv32im-succinct-zkvm-elf | Bin 114032 -> 0 bytes examples/cycle-tracking/program/src/main.rs | 32 ---------------- examples/cycle-tracking/script/build.rs | 11 +++++- examples/cycle-tracking/script/src/main.rs | 33 +++++----------- 10 files changed, 72 insertions(+), 60 deletions(-) delete mode 100755 examples/cycle-tracking/program/elf/riscv32im-succinct-zkvm-elf delete mode 100644 examples/cycle-tracking/program/src/main.rs diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f7b091c40f..328e179d60 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -128,6 +128,42 @@ jobs: cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk SP1_DEV=1 RUST_LOG=info cargo run --release + cycle-tracking: + name: Example (Cycle Tracking) + runs-on: + [ + runs-on, + runner=64cpu-linux-arm64, + spot=false, + "run-id=${{ github.run_id }}", + ] + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Setup CI + uses: ./.github/actions/setup + + - name: Install SP1 toolchain + run: | + curl -L https://sp1.succinct.xyz | bash + ~/.sp1/bin/sp1up + ~/.sp1/bin/cargo-prove prove --version + + - name: Install SP1 CLI + run: | + cd crates/cli + cargo install --force --locked --path . + cd ~ + + - name: Run script + run: | + cd examples/cycle-tracking/script + cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk + SP1_DEV=1 RUST_LOG=info cargo run --release + tendermint: name: Example (Tendermint) runs-on: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 8630a06b18..78289621ad 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -312,4 +312,10 @@ jobs: cd ../script cargo remove sp1-sdk cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk + SP1_DEV=1 RUST_LOG=info cargo run --release + + - name: Run cycle tracking script + run: | + cd examples/cycle-tracking/script + cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk SP1_DEV=1 RUST_LOG=info cargo run --release \ No newline at end of file diff --git a/examples/cycle-tracking/program/Cargo.lock b/examples/cycle-tracking/program/Cargo.lock index 8438fe5e7f..23bebc97ad 100644 --- a/examples/cycle-tracking/program/Cargo.lock +++ b/examples/cycle-tracking/program/Cargo.lock @@ -336,7 +336,7 @@ dependencies = [ [[package]] name = "sp1-derive" -version = "1.1.1" +version = "2.0.0" dependencies = [ "proc-macro2", "quote", @@ -345,7 +345,7 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "1.1.1" +version = "2.0.0" dependencies = [ "anyhow", "bincode", @@ -357,7 +357,7 @@ dependencies = [ [[package]] name = "sp1-zkvm" -version = "1.1.1" +version = "2.0.0" dependencies = [ "bincode", "cfg-if", diff --git a/examples/cycle-tracking/program/Cargo.toml b/examples/cycle-tracking/program/Cargo.toml index 4783257916..54520c0947 100644 --- a/examples/cycle-tracking/program/Cargo.toml +++ b/examples/cycle-tracking/program/Cargo.toml @@ -5,6 +5,14 @@ version = "1.1.0" edition = "2021" publish = false +[[bin]] +name = "normal" +path = "bin/normal.rs" + +[[bin]] +name = "report" +path = "bin/report.rs" + [dependencies] sp1-zkvm = { path = "../../../crates/zkvm/entrypoint" } sp1-derive = { path = "../../../crates/derive" } diff --git a/examples/cycle-tracking/program/elf/normal b/examples/cycle-tracking/program/elf/normal index 812a0f97a384859c1a2f02a834f107853537a4fb..4d5fe97df124469517836c97547a71778462a905 100755 GIT binary patch delta 12521 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 G4f$VvabE8L delta 12471 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 U22=ds0xzxOrQgX-yJ_(M0;lcADF6Tf delta 12260 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 ao(~pkr`BL=_QW5qKA1#3^lq&6t@jD$?YAKS diff --git a/examples/cycle-tracking/program/src/main.rs b/examples/cycle-tracking/program/src/main.rs deleted file mode 100644 index cfffe0efe7..0000000000 --- a/examples/cycle-tracking/program/src/main.rs +++ /dev/null @@ -1,32 +0,0 @@ -#![no_main] -sp1_zkvm::entrypoint!(main); - -#[sp1_derive::cycle_tracker] -pub fn expensive_function(x: usize) -> usize { - let mut y = 1; - for _ in 0..100 { - y *= x; - y %= 7919; - } - y -} - -pub fn main() { - let mut nums = vec![1, 1]; - - // Setup a large vector with Fibonacci-esque numbers. - println!("cycle-tracker-start: setup"); - for _ in 0..100 { - let mut c = nums[nums.len() - 1] + nums[nums.len() - 2]; - c %= 7919; - nums.push(c); - } - println!("cycle-tracker-end: setup"); - - println!("cycle-tracker-start: main-body"); - for i in 0..2 { - let result = expensive_function(nums[nums.len() - i - 1]); - println!("result: {}", result); - } - println!("cycle-tracker-end: main-body"); -} diff --git a/examples/cycle-tracking/script/build.rs b/examples/cycle-tracking/script/build.rs index 2e503ae98c..f359be51ed 100644 --- a/examples/cycle-tracking/script/build.rs +++ b/examples/cycle-tracking/script/build.rs @@ -1,5 +1,12 @@ -use sp1_build::build_program; +use sp1_build::{build_program_with_args, BuildArgs}; fn main() { - build_program("../program") + build_program_with_args("../program", BuildArgs { + binary: "normal".to_string(), + ..Default::default() + }); + build_program_with_args("../program", BuildArgs { + binary: "report".to_string(), + ..Default::default() + }); } diff --git a/examples/cycle-tracking/script/src/main.rs b/examples/cycle-tracking/script/src/main.rs index fad0e8cf93..531b9f8810 100644 --- a/examples/cycle-tracking/script/src/main.rs +++ b/examples/cycle-tracking/script/src/main.rs @@ -1,34 +1,21 @@ -use sp1_sdk::{utils, ProverClient, SP1ProofWithPublicValues, SP1Stdin}; +use sp1_sdk::{utils, ProverClient, SP1Stdin}; /// The ELF we want to execute inside the zkVM. -const ELF: &[u8] = include_bytes!("../../program/elf/riscv32im-succinct-zkvm-elf"); +const REPORT_ELF: &[u8] = include_bytes!("../../program/elf/report"); +const NORMAL_ELF: &[u8] = include_bytes!("../../program/elf/normal"); fn main() { // Setup a tracer for logging. utils::setup_logger(); - // Create an input stream. - let stdin = SP1Stdin::new(); - - // Generate the proof for the given program. + // Execute the normal program. let client = ProverClient::new(); - let (pk, vk) = client.setup(ELF); - let proof = client.prove(&pk, stdin).run().expect("proving failed"); - - // Verify proof. - client.verify(&proof, &vk).expect("verification failed"); - - // Test a round trip of proof serialization and deserialization. - proof - .save("proof-with-pis.bin") - .expect("saving proof failed"); - let deserialized_proof = - SP1ProofWithPublicValues::load("proof-with-pis.bin").expect("loading proof failed"); + let (_, _) = client.execute(NORMAL_ELF, SP1Stdin::new()).run().expect("proving failed"); - // Verify the deserialized proof. - client - .verify(&deserialized_proof, &vk) - .expect("verification failed"); + // Execute the report program. + let (_, report) = client.execute(REPORT_ELF, SP1Stdin::new()).run().expect("proving failed"); - println!("successfully generated and verified proof for the program!") + // Get the "setup" cycle count from the report program. + let setup_cycles = report.cycle_tracker.get("setup").unwrap(); + println!("Using cycle-tracker-report saves the number of cycles to the cycle-tracker mapping in the report.\nHere's the number of cycles used by the setup: {}", setup_cycles); }