mirror of
https://github.com/eth-act/ere.git
synced 2026-04-25 03:00:10 -04:00
zkVK methods return public values (#106)
This commit is contained in:
@@ -6,5 +6,6 @@ edition = "2021"
|
||||
[workspace]
|
||||
|
||||
[dependencies]
|
||||
bincode = "1.3.3"
|
||||
openvm = { git = "https://github.com/openvm-org/openvm.git", features = ["std"], tag = "v1.2.0" }
|
||||
test-utils = { path = "../../../crates/test-utils" }
|
||||
|
||||
@@ -1,16 +1,30 @@
|
||||
use core::array::from_fn;
|
||||
use openvm::io::{read, read_vec, reveal_u32};
|
||||
use test_utils::guest::BasicStruct;
|
||||
use test_utils::guest::{BasicStruct, BASIC_PROGRAM_BYTES_LENGTH};
|
||||
|
||||
fn main() {
|
||||
// Read `Hello world` bytes.
|
||||
// Read `bytes`.
|
||||
let bytes = read_vec();
|
||||
assert_eq!(String::from_utf8_lossy(&bytes), "Hello world");
|
||||
|
||||
// Read `BasicStruct`.
|
||||
// Read `basic_struct`.
|
||||
let basic_struct = read::<BasicStruct>();
|
||||
let output = basic_struct.output();
|
||||
|
||||
output.chunks(4).enumerate().for_each(|(idx, bytes)| {
|
||||
reveal_u32(u32::from_le_bytes(bytes.try_into().unwrap()), idx);
|
||||
});
|
||||
// Check `bytes` length is as expected.
|
||||
assert_eq!(bytes.len(), BASIC_PROGRAM_BYTES_LENGTH);
|
||||
|
||||
// Do some computation on `basic_struct`.
|
||||
let basic_struct_output = basic_struct.output();
|
||||
|
||||
// Write reversed `bytes` and `basic_struct_output`
|
||||
let public_values = core::iter::empty()
|
||||
.chain(bytes.into_iter().rev())
|
||||
.chain(bincode::serialize(&basic_struct_output).unwrap())
|
||||
.collect::<Vec<_>>();
|
||||
public_values
|
||||
.chunks(4)
|
||||
.enumerate()
|
||||
.for_each(|(idx, bytes)| {
|
||||
let bytes = from_fn(|i| bytes.get(i).copied().unwrap_or_default());
|
||||
reveal_u32(u32::from_le_bytes(bytes), idx);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,19 +1,24 @@
|
||||
#![no_main]
|
||||
|
||||
use pico_sdk::io::{commit, read_as, read_vec};
|
||||
use test_utils::guest::BasicStruct;
|
||||
use pico_sdk::io::{commit, commit_bytes, read_as, read_vec};
|
||||
use test_utils::guest::{BasicStruct, BASIC_PROGRAM_BYTES_LENGTH};
|
||||
|
||||
pico_sdk::entrypoint!(main);
|
||||
|
||||
pub fn main() {
|
||||
// Read `Hello world` bytes.
|
||||
// Read `bytes`.
|
||||
let bytes = read_vec();
|
||||
assert_eq!(String::from_utf8_lossy(&bytes), "Hello world");
|
||||
|
||||
// Read `BasicStruct`.
|
||||
// Read `basic_struct`.
|
||||
let basic_struct = read_as::<BasicStruct>();
|
||||
let output = basic_struct.output();
|
||||
|
||||
// Write `output`
|
||||
commit(&output);
|
||||
// Check `bytes` length is as expected.
|
||||
assert_eq!(bytes.len(), BASIC_PROGRAM_BYTES_LENGTH);
|
||||
|
||||
// Do some computation on `basic_struct`.
|
||||
let basic_struct_output = basic_struct.output();
|
||||
|
||||
// Write reversed `bytes` and `basic_struct_output`
|
||||
commit_bytes(&bytes.into_iter().rev().collect::<Vec<_>>());
|
||||
commit(&basic_struct_output);
|
||||
}
|
||||
|
||||
@@ -7,4 +7,5 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
risc0-zkvm = { version = "3.0.1", default-features = false, features = ["std", "unstable"] }
|
||||
risc0-zkvm-platform = { version = "=2.0.4" }
|
||||
test-utils = { path = "../../../crates/test-utils" }
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
use risc0_zkvm::guest::env;
|
||||
use test_utils::guest::BasicStruct;
|
||||
use test_utils::guest::{BasicStruct, BASIC_PROGRAM_BYTES_LENGTH};
|
||||
|
||||
fn main() {
|
||||
// Read `Hello world` bytes.
|
||||
// Read `bytes`.
|
||||
let bytes = env::read_frame();
|
||||
assert_eq!(String::from_utf8_lossy(&bytes), "Hello world");
|
||||
|
||||
// Read `BasicStruct`.
|
||||
// Read `basic_struct`.
|
||||
let basic_struct = env::read::<BasicStruct>();
|
||||
let output = basic_struct.output();
|
||||
|
||||
// Write `output`
|
||||
env::commit(&output);
|
||||
// Check `bytes` length is as expected.
|
||||
assert_eq!(bytes.len(), BASIC_PROGRAM_BYTES_LENGTH);
|
||||
|
||||
// Do some computation on `basic_struct`.
|
||||
let basic_struct_output = basic_struct.output();
|
||||
|
||||
// Write reversed `bytes` and `basic_struct_output`
|
||||
env::commit_slice(&bytes.into_iter().rev().collect::<Vec<_>>());
|
||||
env::commit(&basic_struct_output);
|
||||
}
|
||||
|
||||
@@ -1,18 +1,23 @@
|
||||
#![no_main]
|
||||
|
||||
use test_utils::guest::BasicStruct;
|
||||
use test_utils::guest::{BasicStruct, BASIC_PROGRAM_BYTES_LENGTH};
|
||||
|
||||
sp1_zkvm::entrypoint!(main);
|
||||
|
||||
pub fn main() {
|
||||
// Read `Hello world` bytes.
|
||||
// Read `bytes`.
|
||||
let bytes = sp1_zkvm::io::read_vec();
|
||||
assert_eq!(String::from_utf8_lossy(&bytes), "Hello world");
|
||||
|
||||
// Read `BasicStruct`.
|
||||
// Read `basic_struct`.
|
||||
let basic_struct = sp1_zkvm::io::read::<BasicStruct>();
|
||||
let output = basic_struct.output();
|
||||
|
||||
// Write `output`
|
||||
sp1_zkvm::io::commit(&output);
|
||||
// Check `bytes` length is as expected.
|
||||
assert_eq!(bytes.len(), BASIC_PROGRAM_BYTES_LENGTH);
|
||||
|
||||
// Do some computation on `basic_struct`.
|
||||
let basic_struct_output = basic_struct.output();
|
||||
|
||||
// Write reversed `bytes` and `basic_struct_output`
|
||||
sp1_zkvm::io::commit_slice(&bytes.into_iter().rev().collect::<Vec<_>>());
|
||||
sp1_zkvm::io::commit(&basic_struct_output);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#![no_main]
|
||||
|
||||
use test_utils::guest::BasicStruct;
|
||||
use core::array::from_fn;
|
||||
use test_utils::guest::{BasicStruct, BASIC_PROGRAM_BYTES_LENGTH};
|
||||
|
||||
ziskos::entrypoint!(main);
|
||||
|
||||
@@ -8,15 +9,31 @@ fn main() {
|
||||
let input = ziskos::read_input();
|
||||
let mut input = input.as_slice();
|
||||
|
||||
// Read `Hello world` bytes.
|
||||
// Read `bytes`.
|
||||
let bytes: Vec<u8> = bincode::deserialize_from(&mut input).unwrap();
|
||||
assert_eq!(String::from_utf8_lossy(&bytes), "Hello world");
|
||||
|
||||
// Read `BasicStruct`.
|
||||
// Read `basic_struct`.
|
||||
let basic_struct: BasicStruct = bincode::deserialize_from(&mut input).unwrap();
|
||||
let output = basic_struct.output();
|
||||
|
||||
output.chunks(4).enumerate().for_each(|(idx, bytes)| {
|
||||
ziskos::set_output(idx, u32::from_le_bytes(bytes.try_into().unwrap()));
|
||||
});
|
||||
// Check input is fully read.
|
||||
assert!(input.is_empty());
|
||||
|
||||
// Check `bytes` length is as expected.
|
||||
assert_eq!(bytes.len(), BASIC_PROGRAM_BYTES_LENGTH);
|
||||
|
||||
// Do some computation on `basic_struct`.
|
||||
let basic_struct_output = basic_struct.output();
|
||||
|
||||
// Write reversed `bytes` and `basic_struct_output`
|
||||
let public_values = core::iter::empty()
|
||||
.chain(bytes.into_iter().rev())
|
||||
.chain(bincode::serialize(&basic_struct_output).unwrap())
|
||||
.collect::<Vec<_>>();
|
||||
public_values
|
||||
.chunks(4)
|
||||
.enumerate()
|
||||
.for_each(|(idx, bytes)| {
|
||||
let bytes = from_fn(|i| bytes.get(i).copied().unwrap_or_default());
|
||||
ziskos::set_output(idx, u32::from_le_bytes(bytes));
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user