sov_zk_cycle_utils/
lib.rs1use risc0_zkvm_platform::syscall::SyscallName;
2
3pub fn get_syscall_name() -> SyscallName {
4 let cycle_string = "cycle_metrics\0";
5 let bytes = cycle_string.as_bytes();
6 SyscallName::from_bytes_with_nul(bytes.as_ptr())
7}
8
9#[cfg(feature = "native")]
10pub fn cycle_count_callback(input: risc0_zkvm::Bytes) -> risc0_zkvm::Result<risc0_zkvm::Bytes> {
11 if input.len() == std::mem::size_of::<usize>() {
12 let mut array = [0u8; std::mem::size_of::<usize>()];
13 array.copy_from_slice(&input);
14 println!("== syscall ==> {}", usize::from_le_bytes(array));
15 } else {
16 println!("NONE");
17 }
18 Ok(risc0_zkvm::Bytes::new())
19}
20
21pub fn get_syscall_name_cycles() -> SyscallName {
22 let cycle_string = "cycle_count\0";
23 let bytes = cycle_string.as_bytes();
24 SyscallName::from_bytes_with_nul(bytes.as_ptr())
25}
26
27pub fn print_cycle_count() {
28 let metrics_syscall_name = get_syscall_name_cycles();
29 let serialized = (risc0_zkvm::guest::env::get_cycle_count() as u64).to_le_bytes();
30 risc0_zkvm::guest::env::send_recv_slice::<u8, u8>(metrics_syscall_name, &serialized);
31}