创建包
💡
我们建议在开始之前安装 Aptos CLI。 如果您还没有安装 Aptos CLI,请参阅 CLI 部分
aptos move init
在一个新的项目目录中,通过运行以下命令初始化一个 Move 包:
Terminal
aptos move init --name <PROJECT_NAME>
现在,您应该有一个 Move 项目,如下所示:
- Move.toml
💡
您还可以从 模板 创建一个 Move 包。
更新 Move.toml
在 Move.toml
中,填写以下关键信息:
name
: 您包的名称version
: 包的版本(默认是 “0.0.0”)addresses
: 描述模块将部署到哪个地址。这些是可以用作别名的命名地址。在下面的示例中,我们将使用hello_blockchain
作为命名地址。dependencies
: 您可能希望使用AptosFramework
和其他 第三方依赖
以下是一个示例
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"
添加到 sources
目录
将您的代码添加到 sources
目录。这里我们有一个 hello_blockchain.move
示例。
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
);
}
}