sov_zk_cycle_utils/
lib.rs

1use 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}