From ee46ca6580ede9764b2159b967c629728001f57c Mon Sep 17 00:00:00 2001 From: eyusufatik Date: Mon, 21 Oct 2024 14:07:00 +0300 Subject: [PATCH 01/10] add cuda feature flags --- Cargo.lock | 122 +++++++++++++++++++++++++++++++- bin/citrea/Cargo.toml | 2 +- crates/risc0-bonsai/Cargo.toml | 1 + crates/risc0-bonsai/src/host.rs | 7 +- 4 files changed, 128 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6761b4ab6a..e31299abd3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -683,6 +683,15 @@ version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "aquamarine" version = "0.5.0" @@ -2393,6 +2402,52 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "cust" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "cust_core", + "cust_derive", + "cust_raw", + "find_cuda_helper", +] + +[[package]] +name = "cust_core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" +dependencies = [ + "cust_derive", + "glam", + "mint", + "vek", +] + +[[package]] +name = "cust_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cust_raw" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" +dependencies = [ + "find_cuda_helper", +] + [[package]] name = "darling" version = "0.20.9" @@ -2916,6 +2971,15 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "find_cuda_helper" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" +dependencies = [ + "glob", +] + [[package]] name = "fixed-hash" version = "0.8.0" @@ -3136,6 +3200,15 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +dependencies = [ + "num-traits", +] + [[package]] name = "glob" version = "0.3.1" @@ -4519,6 +4592,12 @@ dependencies = [ "adler", ] +[[package]] +name = "mint" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" + [[package]] name = "mio" version = "1.0.2" @@ -6499,7 +6578,7 @@ dependencies = [ "rayon", "sha2", "tempfile", - "which", + "which 6.0.1", ] [[package]] @@ -6511,6 +6590,7 @@ dependencies = [ "anyhow", "bytemuck", "cfg-if", + "cust", "downloader", "hex", "lazy-regex", @@ -6537,6 +6617,7 @@ dependencies = [ "risc0-build-kernel", "risc0-core", "risc0-sys", + "sppark", ] [[package]] @@ -6550,6 +6631,7 @@ dependencies = [ "cfg-if", "crossbeam", "crypto-bigint", + "cust", "derive-debug", "lazy-regex", "metal", @@ -6576,6 +6658,7 @@ dependencies = [ "risc0-build-kernel", "risc0-core", "risc0-sys", + "sppark", ] [[package]] @@ -6621,7 +6704,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a3afe2e8e95cec6317a75bb6eb13519f643e22c53c67a22a31c355117b7c447" dependencies = [ "cc", + "cust", "risc0-build-kernel", + "sppark", ] [[package]] @@ -6635,6 +6720,7 @@ dependencies = [ "borsh", "bytemuck", "cfg-if", + "cust", "digest 0.10.7", "ff", "hex", @@ -8103,6 +8189,16 @@ dependencies = [ "der", ] +[[package]] +name = "sppark" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55f3833d30846a26110dccb1d5366314c2c52516a9173b74238c16b24b1a9f9" +dependencies = [ + "cc", + "which 4.4.2", +] + [[package]] name = "stability" version = "0.2.1" @@ -8943,6 +9039,18 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vek" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" +dependencies = [ + "approx", + "num-integer", + "num-traits", + "rustc_version 0.4.0", +] + [[package]] name = "version_check" version = "0.9.4" @@ -9093,6 +9201,18 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "which" version = "6.0.1" diff --git a/bin/citrea/Cargo.toml b/bin/citrea/Cargo.toml index 46de0048fd..f26b2fab49 100644 --- a/bin/citrea/Cargo.toml +++ b/bin/citrea/Cargo.toml @@ -90,7 +90,7 @@ citrea-e2e = { git = "https://github.com/chainwayxyz/citrea-e2e", rev = "fc12cb0 [features] default = [] # Deviate from convention by making the "native" feature active by default. This aligns with how this package is meant to be used (as a binary first, library second). - +cuda = ["citrea-risc0-bonsai-adapter/cuda"] bench = ["hex"] # "sov-risc0-adapter/bench", "risc0/bench"] [[bin]] diff --git a/crates/risc0-bonsai/Cargo.toml b/crates/risc0-bonsai/Cargo.toml index ef7022cb49..3252b28884 100644 --- a/crates/risc0-bonsai/Cargo.toml +++ b/crates/risc0-bonsai/Cargo.toml @@ -36,3 +36,4 @@ native = [ "sov-rollup-interface/native", ] bench = ["native"] +cuda = ["risc0-zkvm/cuda"] diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index 50fad19e8b..e37d7a20b4 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -9,7 +9,8 @@ use bonsai_sdk::blocking::Client; use borsh::{BorshDeserialize, BorshSerialize}; use risc0_zkvm::sha::Digest; use risc0_zkvm::{ - compute_image_id, ExecutorEnvBuilder, ExecutorImpl, Journal, LocalProver, Prover, Receipt, + compute_image_id, ExecutorEnvBuilder, ExecutorImpl, Journal, LocalProver, Prover, ProverOpts, + Receipt, }; use sov_db::ledger_db::{LedgerDB, ProvingServiceLedgerOps}; use sov_risc0_adapter::guest::Risc0Guest; @@ -322,7 +323,9 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { .unwrap(); let prover = LocalProver::new("citrea"); - let receipt = prover.prove(env, self.elf)?.receipt; + let receipt = prover + .prove_with_opts(env, self.elf, &ProverOpts::groth16())? + .receipt; tracing::info!("Local proving completed"); From 123b90e8b5b8aef0f89eb4c0cc18aa98a23ad6e0 Mon Sep 17 00:00:00 2001 From: eyusufatik Date: Mon, 21 Oct 2024 14:27:28 +0300 Subject: [PATCH 02/10] add some stats and some temp modifications for my testing --- crates/bitcoin-da/src/service.rs | 16 +++++++++------- crates/prover/src/proving.rs | 15 +++++++++++++++ crates/risc0-bonsai/src/host.rs | 19 ++++++++++++++----- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/crates/bitcoin-da/src/service.rs b/crates/bitcoin-da/src/service.rs index ae6b221cda..9de4d42891 100644 --- a/crates/bitcoin-da/src/service.rs +++ b/crates/bitcoin-da/src/service.rs @@ -886,13 +886,15 @@ impl DaService for BitcoinService { &self, da_data: DaData, ) -> Result<::TransactionId, Self::Error> { - let queue = self.get_send_transaction_queue(); - let (tx, rx) = oneshot_channel(); - queue.send(Some(SenderWithNotifier { - da_data, - notify: tx, - }))?; - rx.await? + Ok(TxidWrapper(Txid::from_slice(&[1u8; 32]).unwrap())) + + // let queue = self.get_send_transaction_queue(); + // let (tx, rx) = oneshot_channel(); + // queue.send(Some(SenderWithNotifier { + // da_data, + // notify: tx, + // }))?; + // rx.await? } fn get_send_transaction_queue( diff --git a/crates/prover/src/proving.rs b/crates/prover/src/proving.rs index 3268c2190a..1370df6ff1 100644 --- a/crates/prover/src/proving.rs +++ b/crates/prover/src/proving.rs @@ -267,6 +267,21 @@ where Ps: ProverService, Da: DaService, { + tracing::error!( + "Submitting for proving. L1 height: {}\tL2 blocks: #{}-#{}", + transition_data.da_block_header_of_commitments.height(), + transition_data.soft_confirmations[0][0].l2_height(), + transition_data + .soft_confirmations + .iter() + .last() + .unwrap() + .iter() + .last() + .unwrap() + .l2_height() + ); + prover_service.submit_witness(transition_data).await; prover_service.prove(hash.clone()).await?; diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index e37d7a20b4..402739c82e 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -323,17 +323,26 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { .unwrap(); let prover = LocalProver::new("citrea"); - let receipt = prover - .prove_with_opts(env, self.elf, &ProverOpts::groth16())? - .receipt; + + let start = std::time::Instant::now(); + let proving_session = + prover.prove_with_opts(env, self.elf, &ProverOpts::groth16())?; + let end = std::time::Instant::now(); tracing::info!("Local proving completed"); - receipt.verify(self.image_id)?; + proving_session.receipt.verify(self.image_id)?; tracing::info!("Verified the receipt"); - let serialized_receipt = bincode::serialize(&receipt)?; + tracing::error!( + "Proving stats:\tuser cycles: {}\ttotal cycles: {}\ttotal time: {}", + proving_session.stats.user_cycles, + proving_session.stats.total_cycles, + (end - start).as_secs_f64() + ); + + let serialized_receipt = bincode::serialize(&proving_session.receipt)?; Ok(Proof::Full(serialized_receipt)) } From 7c2995da08bbc9927945bff7e8008a8d9468b1b0 Mon Sep 17 00:00:00 2001 From: yaziciahmet Date: Tue, 22 Oct 2024 13:36:51 +0200 Subject: [PATCH 03/10] Use ExternalProver --- crates/risc0-bonsai/src/host.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index 402739c82e..d4a9febf7e 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -1,4 +1,7 @@ //! This module implements the [`ZkvmHost`] trait for the RISC0 VM. +use core::str; +use std::path::PathBuf; +use std::process::Command; use std::thread; use std::time::Duration; @@ -9,8 +12,7 @@ use bonsai_sdk::blocking::Client; use borsh::{BorshDeserialize, BorshSerialize}; use risc0_zkvm::sha::Digest; use risc0_zkvm::{ - compute_image_id, ExecutorEnvBuilder, ExecutorImpl, Journal, LocalProver, Prover, ProverOpts, - Receipt, + compute_image_id, ExecutorEnvBuilder, ExecutorImpl, ExternalProver, Journal, Prover, ProverOpts, Receipt }; use sov_db::ledger_db::{LedgerDB, ProvingServiceLedgerOps}; use sov_risc0_adapter::guest::Risc0Guest; @@ -322,7 +324,8 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { .build() .unwrap(); - let prover = LocalProver::new("citrea"); + // let prover = LocalProver::new("citrea"); + let prover = ExternalProver::new("citrea", get_r0vm_path()); let start = std::time::Instant::now(); let proving_session = @@ -485,3 +488,14 @@ impl<'host> Zkvm for Risc0BonsaiHost<'host> { )?) } } + +fn get_r0vm_path() -> PathBuf { + let output = Command::new("which") + .arg("r0vm") + .output() + .expect("Failed to execute `which r0vm` command"); + assert!(output.status.success(), "r0vm binary must be available in PATH"); + + let path = str::from_utf8(&output.stdout).expect("Invalid UTF-8 output"); + path.into() +} From 35db8ecac2e9316a1f158dc9aba206bae00dcf18 Mon Sep 17 00:00:00 2001 From: yaziciahmet Date: Tue, 22 Oct 2024 13:59:35 +0200 Subject: [PATCH 04/10] Trim newline --- crates/risc0-bonsai/src/host.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index d4a9febf7e..f50385e3d1 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -497,5 +497,6 @@ fn get_r0vm_path() -> PathBuf { assert!(output.status.success(), "r0vm binary must be available in PATH"); let path = str::from_utf8(&output.stdout).expect("Invalid UTF-8 output"); + let path = path.trim_matches('\n'); path.into() } From 2c93809febb6527970648529cab23dc2b5687ff6 Mon Sep 17 00:00:00 2001 From: yaziciahmet Date: Wed, 23 Oct 2024 11:07:15 +0200 Subject: [PATCH 05/10] Simplify getr0vmpath --- crates/risc0-bonsai/src/host.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index f50385e3d1..2b3d183956 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -497,6 +497,5 @@ fn get_r0vm_path() -> PathBuf { assert!(output.status.success(), "r0vm binary must be available in PATH"); let path = str::from_utf8(&output.stdout).expect("Invalid UTF-8 output"); - let path = path.trim_matches('\n'); - path.into() + path.trim().into() } From 6990e331ff808fbe1c9a1db309efec8cccba41f4 Mon Sep 17 00:00:00 2001 From: eyusufatik Date: Wed, 23 Oct 2024 22:04:59 +0300 Subject: [PATCH 06/10] set segment limit po2 to 21 --- crates/risc0-bonsai/src/host.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index 2b3d183956..6838b80c0c 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -12,7 +12,8 @@ use bonsai_sdk::blocking::Client; use borsh::{BorshDeserialize, BorshSerialize}; use risc0_zkvm::sha::Digest; use risc0_zkvm::{ - compute_image_id, ExecutorEnvBuilder, ExecutorImpl, ExternalProver, Journal, Prover, ProverOpts, Receipt + compute_image_id, ExecutorEnvBuilder, ExecutorImpl, ExternalProver, Journal, Prover, + ProverOpts, Receipt, }; use sov_db::ledger_db::{LedgerDB, ProvingServiceLedgerOps}; use sov_risc0_adapter::guest::Risc0Guest; @@ -319,10 +320,11 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { } // Local proving (None, true) => { - let env = add_benchmarking_callbacks(ExecutorEnvBuilder::default()) - .write_slice(&self.env) - .build() - .unwrap(); + let env = + add_benchmarking_callbacks(ExecutorEnvBuilder::default().segment_limit_po2(21)) + .write_slice(&self.env) + .build() + .unwrap(); // let prover = LocalProver::new("citrea"); let prover = ExternalProver::new("citrea", get_r0vm_path()); @@ -494,7 +496,10 @@ fn get_r0vm_path() -> PathBuf { .arg("r0vm") .output() .expect("Failed to execute `which r0vm` command"); - assert!(output.status.success(), "r0vm binary must be available in PATH"); + assert!( + output.status.success(), + "r0vm binary must be available in PATH" + ); let path = str::from_utf8(&output.stdout).expect("Invalid UTF-8 output"); path.trim().into() From 3a6f567c7ee4c0f7821353b1df0453ce6a872262 Mon Sep 17 00:00:00 2001 From: eyusufatik Date: Wed, 23 Oct 2024 22:08:43 +0300 Subject: [PATCH 07/10] absolute path to r0vm --- crates/risc0-bonsai/src/host.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index 6838b80c0c..b7ff4d9725 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -327,7 +327,8 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { .unwrap(); // let prover = LocalProver::new("citrea"); - let prover = ExternalProver::new("citrea", get_r0vm_path()); + let prover = + ExternalProver::new("citrea", "/home/ubuntu/risc0/target/release/r0vm"); let start = std::time::Instant::now(); let proving_session = From 40e0377791865564e7422c0c3e762b08d58835c7 Mon Sep 17 00:00:00 2001 From: eyusufatik Date: Wed, 23 Oct 2024 22:09:30 +0300 Subject: [PATCH 08/10] fix --- crates/risc0-bonsai/src/host.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index b7ff4d9725..e3e2b45a5d 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -320,11 +320,15 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { } // Local proving (None, true) => { - let env = - add_benchmarking_callbacks(ExecutorEnvBuilder::default().segment_limit_po2(21)) - .write_slice(&self.env) + let env = add_benchmarking_callbacks( + ExecutorEnvBuilder::default() + .segment_limit_po2(21) .build() - .unwrap(); + .unwrap(), + ) + .write_slice(&self.env) + .build() + .unwrap(); // let prover = LocalProver::new("citrea"); let prover = From a422a8d5415201b616f4beb0ce9db19673a4127b Mon Sep 17 00:00:00 2001 From: eyusufatik Date: Wed, 23 Oct 2024 22:15:32 +0300 Subject: [PATCH 09/10] more fixes --- crates/risc0-bonsai/src/host.rs | 20 +++++++------------ .../sovereign-sdk/adapters/risc0/src/host.rs | 8 ++------ 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index e3e2b45a5d..a728af6e32 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -306,10 +306,9 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { let proof = match (self.client.as_ref(), with_proof) { // Local execution. If mode is Execute, we always do local execution. (_, false) => { - let env = add_benchmarking_callbacks(ExecutorEnvBuilder::default()) - .write_slice(&self.env) - .build() - .unwrap(); + let mut env = ExecutorEnvBuilder::default(); + add_benchmarking_callbacks(&mut env); + let env = env.write_slice(&self.env).build().unwrap(); let mut executor = ExecutorImpl::from_elf(env, self.elf)?; let session = executor.run()?; @@ -320,15 +319,10 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { } // Local proving (None, true) => { - let env = add_benchmarking_callbacks( - ExecutorEnvBuilder::default() - .segment_limit_po2(21) - .build() - .unwrap(), - ) - .write_slice(&self.env) - .build() - .unwrap(); + let mut env = ExecutorEnvBuilder::default(); + env.segment_limit_po2(21); + add_benchmarking_callbacks(&mut env); + let env = env.write_slice(&self.env).build().unwrap(); // let prover = LocalProver::new("citrea"); let prover = diff --git a/crates/sovereign-sdk/adapters/risc0/src/host.rs b/crates/sovereign-sdk/adapters/risc0/src/host.rs index 61f1465923..2c47452aad 100644 --- a/crates/sovereign-sdk/adapters/risc0/src/host.rs +++ b/crates/sovereign-sdk/adapters/risc0/src/host.rs @@ -3,13 +3,11 @@ use risc0_zkvm::ExecutorEnvBuilder; #[cfg(not(feature = "bench"))] /// Add benchmarking callbacks to the executor environment. -pub fn add_benchmarking_callbacks(env: ExecutorEnvBuilder<'_>) -> ExecutorEnvBuilder<'_> { - env -} +pub fn add_benchmarking_callbacks(env: &mut ExecutorEnvBuilder<'_>) {} #[cfg(feature = "bench")] /// Add benchmarking callbacks to the executor environment. -pub fn add_benchmarking_callbacks(mut env: ExecutorEnvBuilder<'_>) -> ExecutorEnvBuilder<'_> { +pub fn add_benchmarking_callbacks(env: &mut ExecutorEnvBuilder<'_>) { use sov_zk_cycle_utils::{cycle_count_callback, get_syscall_name, get_syscall_name_cycles}; use crate::metrics::metrics_callback; @@ -19,6 +17,4 @@ pub fn add_benchmarking_callbacks(mut env: ExecutorEnvBuilder<'_>) -> ExecutorEn let cycles_syscall_name = get_syscall_name_cycles(); env.io_callback(cycles_syscall_name, cycle_count_callback); - - env } From 7627f18170dd0ae3a2c3b5217bb6c540b7c76c4a Mon Sep 17 00:00:00 2001 From: eyusufatik Date: Mon, 28 Oct 2024 14:00:01 +0300 Subject: [PATCH 10/10] review fixes --- crates/bitcoin-da/src/service.rs | 16 +++--- crates/prover/src/proving.rs | 15 ----- crates/risc0-bonsai/src/host.rs | 56 ++++++++----------- .../sovereign-sdk/adapters/risc0/src/host.rs | 20 ------- .../sovereign-sdk/adapters/risc0/src/lib.rs | 3 - 5 files changed, 30 insertions(+), 80 deletions(-) delete mode 100644 crates/sovereign-sdk/adapters/risc0/src/host.rs diff --git a/crates/bitcoin-da/src/service.rs b/crates/bitcoin-da/src/service.rs index 9de4d42891..ae6b221cda 100644 --- a/crates/bitcoin-da/src/service.rs +++ b/crates/bitcoin-da/src/service.rs @@ -886,15 +886,13 @@ impl DaService for BitcoinService { &self, da_data: DaData, ) -> Result<::TransactionId, Self::Error> { - Ok(TxidWrapper(Txid::from_slice(&[1u8; 32]).unwrap())) - - // let queue = self.get_send_transaction_queue(); - // let (tx, rx) = oneshot_channel(); - // queue.send(Some(SenderWithNotifier { - // da_data, - // notify: tx, - // }))?; - // rx.await? + let queue = self.get_send_transaction_queue(); + let (tx, rx) = oneshot_channel(); + queue.send(Some(SenderWithNotifier { + da_data, + notify: tx, + }))?; + rx.await? } fn get_send_transaction_queue( diff --git a/crates/prover/src/proving.rs b/crates/prover/src/proving.rs index 1370df6ff1..3268c2190a 100644 --- a/crates/prover/src/proving.rs +++ b/crates/prover/src/proving.rs @@ -267,21 +267,6 @@ where Ps: ProverService, Da: DaService, { - tracing::error!( - "Submitting for proving. L1 height: {}\tL2 blocks: #{}-#{}", - transition_data.da_block_header_of_commitments.height(), - transition_data.soft_confirmations[0][0].l2_height(), - transition_data - .soft_confirmations - .iter() - .last() - .unwrap() - .iter() - .last() - .unwrap() - .l2_height() - ); - prover_service.submit_witness(transition_data).await; prover_service.prove(hash.clone()).await?; diff --git a/crates/risc0-bonsai/src/host.rs b/crates/risc0-bonsai/src/host.rs index a728af6e32..447f4aba74 100644 --- a/crates/risc0-bonsai/src/host.rs +++ b/crates/risc0-bonsai/src/host.rs @@ -1,7 +1,5 @@ //! This module implements the [`ZkvmHost`] trait for the RISC0 VM. use core::str; -use std::path::PathBuf; -use std::process::Command; use std::thread; use std::time::Duration; @@ -17,7 +15,6 @@ use risc0_zkvm::{ }; use sov_db::ledger_db::{LedgerDB, ProvingServiceLedgerOps}; use sov_risc0_adapter::guest::Risc0Guest; -use sov_risc0_adapter::host::add_benchmarking_callbacks; use sov_rollup_interface::zk::{Proof, Zkvm, ZkvmHost}; use tracing::{error, info, warn}; @@ -306,12 +303,20 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { let proof = match (self.client.as_ref(), with_proof) { // Local execution. If mode is Execute, we always do local execution. (_, false) => { - let mut env = ExecutorEnvBuilder::default(); - add_benchmarking_callbacks(&mut env); - let env = env.write_slice(&self.env).build().unwrap(); + let env = ExecutorEnvBuilder::default() + .write_slice(&self.env) + .build() + .expect("Proving environment should be built"); let mut executor = ExecutorImpl::from_elf(env, self.elf)?; let session = executor.run()?; + + tracing::info!( + "Local execution completed.\nProving stats:\nSegments: {}\nTotal Cycles: {}\nUser Cycles: {}", + session.segments.len(), + session.total_cycles, + session.user_cycles + ); let data = bincode::serialize(&session.journal.expect("Journal shouldn't be empty"))?; @@ -319,14 +324,16 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { } // Local proving (None, true) => { - let mut env = ExecutorEnvBuilder::default(); - env.segment_limit_po2(21); - add_benchmarking_callbacks(&mut env); - let env = env.write_slice(&self.env).build().unwrap(); + let env = ExecutorEnvBuilder::default() + .segment_limit_po2(21) + .write_slice(&self.env) + .build() + .expect("Proving environment should be built"); - // let prover = LocalProver::new("citrea"); - let prover = - ExternalProver::new("citrea", "/home/ubuntu/risc0/target/release/r0vm"); + // RISC0_SERVER_PATH is used to specify the path to the r0vm binary + // As per https://github.com/chainwayxyz/citrea/issues/1381, it's a good idea to + // start using ric0 env var names + let prover = ExternalProver::new("citrea", std::env::var("RISC0_SERVER_PATH")?); let start = std::time::Instant::now(); let proving_session = @@ -337,12 +344,9 @@ impl<'a> ZkvmHost for Risc0BonsaiHost<'a> { proving_session.receipt.verify(self.image_id)?; - tracing::info!("Verified the receipt"); - - tracing::error!( - "Proving stats:\tuser cycles: {}\ttotal cycles: {}\ttotal time: {}", - proving_session.stats.user_cycles, - proving_session.stats.total_cycles, + tracing::info!( + "Proving stats:\n{:?}\nTime: {}", + proving_session.stats, (end - start).as_secs_f64() ); @@ -489,17 +493,3 @@ impl<'host> Zkvm for Risc0BonsaiHost<'host> { )?) } } - -fn get_r0vm_path() -> PathBuf { - let output = Command::new("which") - .arg("r0vm") - .output() - .expect("Failed to execute `which r0vm` command"); - assert!( - output.status.success(), - "r0vm binary must be available in PATH" - ); - - let path = str::from_utf8(&output.stdout).expect("Invalid UTF-8 output"); - path.trim().into() -} diff --git a/crates/sovereign-sdk/adapters/risc0/src/host.rs b/crates/sovereign-sdk/adapters/risc0/src/host.rs deleted file mode 100644 index 2c47452aad..0000000000 --- a/crates/sovereign-sdk/adapters/risc0/src/host.rs +++ /dev/null @@ -1,20 +0,0 @@ -//! RISC0 Host helpers -use risc0_zkvm::ExecutorEnvBuilder; - -#[cfg(not(feature = "bench"))] -/// Add benchmarking callbacks to the executor environment. -pub fn add_benchmarking_callbacks(env: &mut ExecutorEnvBuilder<'_>) {} - -#[cfg(feature = "bench")] -/// Add benchmarking callbacks to the executor environment. -pub fn add_benchmarking_callbacks(env: &mut ExecutorEnvBuilder<'_>) { - use sov_zk_cycle_utils::{cycle_count_callback, get_syscall_name, get_syscall_name_cycles}; - - use crate::metrics::metrics_callback; - - let metrics_syscall_name = get_syscall_name(); - env.io_callback(metrics_syscall_name, metrics_callback); - - let cycles_syscall_name = get_syscall_name_cycles(); - env.io_callback(cycles_syscall_name, cycle_count_callback); -} diff --git a/crates/sovereign-sdk/adapters/risc0/src/lib.rs b/crates/sovereign-sdk/adapters/risc0/src/lib.rs index b99bf2d2c4..73d3aff6b2 100644 --- a/crates/sovereign-sdk/adapters/risc0/src/lib.rs +++ b/crates/sovereign-sdk/adapters/risc0/src/lib.rs @@ -8,9 +8,6 @@ use serde::{Deserialize, Serialize}; use sov_rollup_interface::zk::Matches; pub mod guest; -#[cfg(feature = "native")] -pub mod host; - #[cfg(feature = "bench")] pub mod metrics;