First contract
This section introduces how to use Rooch CLI to create a Move contract.
Create project
rooch move new hello_rooch
After executing this Rooch CLI command, a Rooch contract project will be created and automatically initialized. The root directory of the project contains a sources
directory for storing the Move contract code, and a manifest file named Move.toml
for declaring the current project. The name, version, address alias (named address) and project dependencies.
Contents of the Move.toml
file of the hello_rooch
project:
[package]
name = "hello_rooch"
version = "0.0.1"
[dependencies]
MoveStdlib = { git = "https://github.com/rooch-network/rooch.git", subdir = "frameworks/move-stdlib", rev = "main" }
MoveosStdlib = { git = "https://github.com/rooch-network/rooch.git", subdir = "frameworks/moveos-stdlib", rev = "main" }
RoochFramework = { git = "https://github.com/rooch-network/rooch.git", subdir = "frameworks/rooch-framework", rev = "main" }
[addresses]
hello_rooch = "0xbc34dd9a140ab26f88f466c9ea7ea14507bc2795dcfd4b6c7ac694dd3c2e1c8d"
std = "0x1"
moveos_std = "0x2"
rooch_framework = "0x3"
Write a contract
We simply write a Move contract to demonstrate storing a "Hello Rooch!" string into Rooch's account storage.
module hello_rooch::hello_rooch {
use moveos_std::account;
use std::string;
struct HelloMessage has key {
text: string::String
}
entry fun say_hello(owner: &signer) {
let hello = HelloMessage { text: string::utf8(b"Hello Rooch!") };
account::move_resource_to(owner, hello);
}
}
Define a HelloMessage
type, which is a structure containing a text
field.
Then define an entry function say_hello
, build a resource instance that stores Hello Rooch!
, and move it to the account storage.