Quick Start
In this quick-start tutorial we will create a simple EOSIO smart contract in Rust that accepts an account name and prints a greeting message.
Create a new Rust library:
cargo new hello --lib
Edit Cargo.toml
:
[package]
name = "hello"
version = "0.1.0"
edition = "2018"
publish = false
[lib]
crate-type = ["cdylib"]
doc = false
[dependencies]
eosio = { path = "../../crates/eosio" }
eosio_cdt = { path = "../../crates/eosio_cdt" }
Edit src/lib.rs
:
#[eosio::action]
fn hi(name: eosio::AccountName) {
eosio_cdt::print!("Hello, ", name, "!");
}
eosio::abi!(hi);
Compile with the following command:
RUSTFLAGS="-C link-args=-zstack-size=48000" \
cargo build --release -target=wasm32-unknown-unknown
The smart contract should now be built at target/wasm32-unknown-unknown/release/hello.wasm
Deploying
Create a new file called abi.json
(in future versions this will be automatically generated):
{
"version": "eosio::abi/1.0",
"structs": [
{
"name": "hi",
"base": "",
"fields": [
{
"name": "name",
"type": "name"
}
]
}
],
"actions": [
{
"name": "hi",
"type": "hi"
}
]
}
Assuming you have cleos
setup and have created the hello
account:
cleos set abi hello abi.json
cleos set code hello target/wasm32-unknown-unknown/release/hello.wasm
Say Hello
Finally, say hello:
cleos push action hello hi '["world"]' -p 'hello@active'
If all went well you should see Hello, world
in the console. Otherwise, if the transaction was sent successfully but you don't see any output, you may need to use the --contract-console
option with nodeos
.