Beginner
How to setup, build, and deploy your first Rust based Solana program to the blockchain.
This tutorial provides a step-by-step guide to setup, build, and deploy a Rust based Solana program to the blockchain. It covers the installation of the Rust language and Cargo, the Rust package manager, running a localhost validator using the Solana CLI, creating a new Rust library using Cargo, coding a basic Solana program in Rust, building the program using the cargo build-bpf command, and deploying the program to the blockchain using the solana program deploy command. By the end of the tutorial, you will have successfully created and deployed a Solana program that logs the message “Hello, world!” to the blockchain.
What you will learn
-
Guide to Installing Rust Locally
-
Initializing a Solana Rust Program
-
Coding a Basic Solana Program in Rust
-
Deploying the Rust Program
Install Rust and Cargo
To be able to compile Rust based Solana programs, install the Rust language and Cargo (the Rust package manager) using Rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Run your localhost validator
The Solana CLI comes with the test validator built in. This command line tool will allow you to run a full blockchain cluster on your machine.
solana-test-validator
PRO TIP: Run the Solana test validator in a new/separate terminal window that will remain open. This command line program must remain running for your localhost validator to remain online and ready for action.
Configure your Solana CLI to use your localhost validator for all your future terminal commands and Solana program deployment:
solana config set --url localhost
Create a new Rust library with Cargo
Solana programs written in Rust are libraries which are compiled to BPF bytecode and saved in the .so
format.
Initialize a new Rust library named hello_world
via the Cargo command line:
cargo init hello_world --lib cd hello_world
Add the solana-program
crate to your new Rust library:
cargo add solana-program
Open your Cargo.toml
file and add these required Rust library configuration settings, updating your project name as appropriate:
[lib] name = "hello_world" crate-type = ["cdylib", "lib"]
Create your first Solana program
The code for your Rust based Solana program will live in your src/lib.rs
file. Inside src/lib.rs
you will be able to import your Rust crates and define your logic. Open your src/lib.rs
file in your favorite editor.
At the top of lib.rs
, import the solana-program
crate and bring our needed items into the local namespace:
use solana_program::{ account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, pubkey::Pubkey, msg, };
Every Solana program must define an entrypoint
that tells the Solana runtime where to start executing your on chain code. Your program’s entrypoint should provide a public function named process_instruction
:
// declare and export the program's entrypoint entrypoint!(process_instruction); // program entrypoint's implementation pub fn process_instruction( program_id: &Pubkey, accounts: &[AccountInfo], instruction_data: &[u8] ) -> ProgramResult { // log a message to the blockchain msg!("Hello, world!"); // gracefully exit the program Ok(()) }
Every on chain program should return the Ok
result enum with a value of ()
. This tells the Solana runtime that your program executed successfully without errors.
This program above will simply log a message of “Hello, world!” to the blockchain cluster, then gracefully exit with Ok(())
.
Build your Rust program
Inside a terminal window, you can build your Solana Rust program by running in the root of your project (i.e. the directory with your Cargo.toml
file):
cargo build-bpf
NOTE: After each time you build your Solana program, the above command will output the build path of your compiled program’s
.so
file and the default keyfile that will be used for the program’s address.
Deploy your Solana program
Using the Solana CLI, you can deploy your program to your currently selected cluster:
solana program deploy ./target/deploy/hello_world.so
Once your Solana program has been deployed (and the transaction finalized), the above command will output your program’s public address (aka its “program id”).
# example output Program Id: EFH95fWg49vkFNbAdw9vy75tM7sWZ2hQbTTUmuACGip3
Congratulations!
You have successfully setup, built, and deployed a Solana program using the Rust language.
PS: Check your Solana wallet’s balance again after you deployed. See how much SOL it cost to deploy your simple program?