Using the Rust Toolchain
For basic instructions on using the Rust to Valida compiler toolchain, see QUICK START: Valida Compiler Toolchain. This page covers more advanced usage instructions for the Rust to Valida toolchain.
Input and output
Valida programs can interact with the environment using the input and output tapes. In the Valida zk-VM, the input tape is mapped to stdin
, or the input file specified on the command line. The output tape is mapped to stdout
, and the output file specified on the command line for valida run
.
The println
macro is known to work. The following methods are known to work on stdin
: read
, read_line
, read_until
, lines
, read_to_string
, and read_to_end
. There may be some issues with signaling end of input via ctrl+D on the command line. Sometimes it may have to be signaled more than once. This is a known issue as of release 0.7.0-alpha, which is being worked on.
The Rust toolchain provides functions for line-based interaction with the input and output tapes:
valida_rs::io::read_line<T>() -> Result<T, Box<dyn Error>>
Reads a line from the input tape and returns the result
T: std::str::FromStr
<T as std::str::FromStr>::Err: std::error::Error + 'static
valida_rs::io::read() -> Result<Vec<u8>, Box<dyn Error>>
: reads all of the input from the input tape and returns itvalida_rs::io::read_until(stop_char: u8) -> Result<Vec<u8>, Box<dyn Error>>
: reads from the input tape until reaching the end of input orstop_char
valida_rs::io::read_n(n: usize) -> Result<Vec<u8>, Box<dyn Error>>
: readsn
many bytes from the input tapevalida_rs::io::write_vec(v: impl AsRef<[u8]>) -> Result<(), Box<dyn Error>>
: writes the contents ofv
to the output tapevalida_rs::io::read_and_deserialize<T: DeserializeOwned>() -> Result<T, Box<dyn Error>>
: reads and deserializes an object from the input tapevalida_rs::io::write<T: Serialize>(value: &T) -> Result<(), Box<dyn Error>>
: serializes and writesvalue
to the output tape
Pseudo-random numbers
The Rust toolchain provides the following function for generating pseudo-random numbers:
valida_rand(s: &mut [u8]) - > Result<(), getrandom::Error>
: populatess
with pseudo-randomly generated bytes
Note that currently this function uses a static seed and thus behaves deterministically, producing the same result on each run of a program.
Last updated