Writing a smart contract in Rust
Sample contract functionality
Sample smart contract code
use std::env;
fn get_env(key: String, default: String) -> String {
env::var(key).unwrap_or(default)
}
fn atoi(val: String) -> i32 {
val.parse().unwrap_or(0)
}
fn main() {
let args: Vec<String> = env::args().collect();
// THIS SAMPLE ONLY SUPPORTS THE "register" FUNCTION
if args.len() == 3 && args[1] == "register" {
// GET THE CURRENT USER'S NAME OR DEFAULT TO "unknown" IF THIS IS THE FIRST CALL
let previous_name = get_env("DB_USER_CURRENT".to_string(),"unknown".to_string());
// GET THE TOTAL USER COUNT
let total_user_count= atoi(get_env("DB_TOTALUSERS".to_string(),"0".to_string()));
// WRITE PREVIOUS USER NAME TO STDOUT
println!("OUT=prevname: {}", previous_name);
// UPDATE CURRENT USER NAME BY WRITING IT TO DB
println!("DBW=USER_CURRENT={}", args[2]);
// STORE USER NAME UNDER A STORAGE SLOT FOR PERSISTENCE (CURRENT GETS OVERWRITTEN ON EACH CALL)
println!("DBW=USER_{}={}", total_user_count, args[2]);
// INCREMENT THE TOTAL USER COUNT
println!("DBW=TOTALUSERS={}", total_user_count+1);
std::process::exit(0);
}
if args.len() >= 2 {
eprintln!("Wrong CMD: {}", args[1]);
std::process::exit(1);
}
eprintln!("Wrong args!");
std::process::exit(1);
}Save the smart contract
Compiling a smart contract in RustLast updated