Create Package
π‘
We recommend installing the Aptos CLI before beginning. If you havenβt already installed the Aptos CLI, see the CLI section
aptos move init
In a new project directory, initialize a Move package by running:
Terminal
aptos move init --name <PROJECT_NAME>
You should now have a Move project that looks like so:
- Move.toml
π‘
You can also create a Move package from a template.
Update Move.toml
In Move.toml
, fill in the following key information:
name
: name of your packageversion
: package version (default is"0.0.0"
)addresses
: Describes which address the module will be deployed to. These are named addresses that can be used as aliases. In the below example, we will usehello_blockchain
as the named address.dependencies
: You will likely want to useAptosFramework
and other Third Party Dependencies
Below is an example
Move.toml
[package]
name = "Examples"
version = "0.0.0"
[addresses]
hello_blockchain = "_"
[dependencies.AptosFramework]
git = "https://github.com/aptos-labs/aptos-framework.git"
rev = "mainnet"
subdir = "aptos-framework"
Add to sources
directory
Add your code in the sources
directory. Here we have a hello_blockchain.move
example.
module hello_blockchain::message {
use std::error;
use std::signer;
use std::string;
use aptos_framework::event;
#[test_only]
use std::debug;
//:!:>resource
struct MessageHolder has key {
message: string::String,
}
//<:!:resource
#[event]
struct MessageChange has drop, store {
account: address,
from_message: string::String,
to_message: string::String,
}
/// There is no message present
const ENO_MESSAGE: u64 = 0;
#[view]
public fun get_message(addr: address): string::String acquires MessageHolder {
assert!(exists<MessageHolder>(addr), error::not_found(ENO_MESSAGE));
borrow_global<MessageHolder>(addr).message
}
public entry fun set_message(account: signer, message: string::String)
acquires MessageHolder {
let account_addr = signer::address_of(&account);
if (!exists<MessageHolder>(account_addr)) {
move_to(&account, MessageHolder {
message,
})
} else {
let old_message_holder = borrow_global_mut<MessageHolder>(account_addr);
let from_message = old_message_holder.message;
event::emit(MessageChange {
account: account_addr,
from_message,
to_message: copy message,
});
old_message_holder.message = message;
}
}
#[test(account = @0x1)]
public entry fun sender_can_set_message(account: signer) acquires MessageHolder {
let msg: string::String = string::utf8(b"Running test for sender_can_set_message...");
debug::print(&msg);
let addr = signer::address_of(&account);
aptos_framework::account::create_account_for_test(addr);
set_message(account, string::utf8(b"Hello, Blockchain"));
assert!(
get_message(addr) == string::utf8(b"Hello, Blockchain"),
ENO_MESSAGE
);
}
}