Rust Usage
Usage Instructions for Rust
For examples of how to build a Rust program which compiles and runs on Valida, see the /valida-toolchain/examples
directory in a docker image or the examples
directory in the release tarball. You can use any of these examples as a starting point for developing your own programs using the Valida toolchain.
You can start from an empty project as well:
cargo new valida-project
.cd
into the project:
cd valida-project
Enter the Valida shell or the Docker toolchain shell, following the instructions specific to your selected installation method.
Build the project:
cargo +valida build --release
Run the code:
valida run --fast target/valida-unknown-baremetal-gnu/release/valida-project log
Randomness in Rust programs
If your program uses randomness then most probably it depends on the getrandom
crate. You can check if it does by inspecting the output of the cargo tree
command. In that's the case a patched version of that crate must be used. Update your Cargo.toml
by adding patch
section:
[patch.crates-io]
getrandom = { git = "https://github.com/lita-xyz/getrandom.git", branch = "v0.2.16-valida" }
or
[patch.crates-io]
getrandom = { git = "https://github.com/lita-xyz/getrandom.git", branch = "v0.3.3-valida" }
depending on whether your program depends on getrandom
0.2.* or 0.3.*
After modifying Cargo.toml make sure that the Valida version of getrandom
is used by running:
cargo update getrandom
Note that currently the random number generator uses a static seed and thus behaves deterministically, producing the same result on each run of a program.
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
.
Last updated