Multiple implementations of Solana programs across languages: Rust, Zig, C, and even assembly.
More programs will be added over time!
- Install Rust: https://www.rust-lang.org/tools/install
- Install Solana tools
./install-solana.sh
- Go to a program directory
cd helloworld
- Build a program
cargo build-sbf
- Test a program
cargo test-sbf
- Get the compiler
./install-solana-zig.sh
- Go to the Zig implementation of a program
cd helloworld/zig
- Build the program
../../solana-zig/zig build
- Test it
cd ..
SBF_OUT_DIR="./zig/zig-out/lib" cargo test
- OR use the helper from the root of this repo to build and test
./test-zig.sh helloworld
- Install Solana C compiler
./install-solana-c.sh
- Install Solana tools
./install-solana.sh
- Go to a program directory
cd helloworld/c
- Build a program
make
- Test it
cd ..
SBF_OUT_DIR="./c/out" cargo test
- OR use the helper from the root of this repo to build and test
./test-c.sh helloworld
- Install Solana LLVM tools
./install-solana-llvm.sh
- Go to a program directory
cd helloworld/asm
- Build a program
make
- Test it
cd ..
SBF_OUT_DIR="./asm/out" cargo test
- OR use the helper from the root of this repo to build and test
./test-asm.sh helloworld
- Helloworld: logs a static string using the
sol_log_
syscall
Language | CU Usage |
---|---|
Rust | 105 |
Zig | 105 |
C | 105 |
Assembly | 104 |
Since this is just doing a syscall, all the languages behave the same. The only difference is that the Assembly version doesn't set the return code to 0, and lets the VM assume it worked.
- Transfer-Lamports: moves 5 lamports from a source account to a destination
Language | CU Usage |
---|---|
Rust | 464 |
Zig | 469 |
C | 103 |
Assembly | 23 |
This one starts to get interesting since it requires parsing the instruction input. Since the assembly version knows exactly where to find everything, it can be hyper-optimized. The C version is also very performant.