您的第一个Move模块
Aptos区块链允许开发者使用安全设计的Move语言编写图灵完备的智能合约(称为”模块”)。智能合约不仅能让用户通过区块链发送资金,还能编写任意代码,甚至游戏!这一切都始于使用Aptos CLI创建一个账户,该账户将存储已部署(“发布”)的Move模块。
本教程将通过指导您设置最小的Aptos环境,然后如何在Aptos区块链上编译、测试、发布和与Move模块交互,帮助您理解Move模块。您将学习如何:
- 设置环境,安装CLI
- 创建开发网账户并为其提供资金
- 编译和测试Move模块
- 将Move模块发布(或”部署”)到Aptos区块链
- 与模块交互
- 继续使用Aptos构建(下一步)
对区块链的更改称为”交易”,它们需要一个账户来支付网络费用(“gas费”)。我们需要创建一个拥有一些APT的账户来支付该费用并拥有已发布的合约。为了做到这一点,我们需要使用Aptos CLI。
-
安装Aptos CLI
安装Aptos CLI(如果您还没有安装)。
-
打开新终端
打开新的终端窗口或标签。
-
验证安装
运行
aptos --version
来验证您已安装。Terminal window aptos --version您应该看到类似
aptos 4.6.1
的响应。 -
创建项目文件夹
通过运行以下命令为本教程创建新文件夹:
Terminal window mkdir my-first-module -
导航到项目文件夹
运行
cd my-first-module
进入您的新文件夹。 -
初始化您的账户
运行
aptos init
并为每个设置步骤按”回车”,在devnet
上创建测试账户。您应该看到这样的成功消息:
Terminal window ---Aptos CLI is now set up for account 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba as profile default!{"Result": "Success"}
2. 创建Move模块
Section titled “2. 创建Move模块”现在让我们创建一个简单的Move模块。
-
初始化Move包
运行以下命令创建一个新的Move包:
Terminal window aptos move init --name hello_blockchain这将创建一个基本的Move项目结构:
my-first-module/├── Move.toml└── sources/ -
创建模块文件
在
sources/
目录中创建一个名为hello_blockchain.move
的文件:module hello_blockchain::message {use std::error;use std::signer;use std::string;use aptos_framework::account;use aptos_framework::event;//:!:>resourcestruct MessageHolder has key {message: string::String,}//<:!:resource#[event]struct MessageChange has drop, store {account: address,from_message: string::String,to_message: string::String,}/// 没有消息时抛出的错误const E_NO_MESSAGE: u64 = 0;#[view]public fun get_message(addr: address): string::String acquires MessageHolder {assert!(exists<MessageHolder>(addr), error::not_found(E_NO_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 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"),E_NO_MESSAGE);}}
3. 编译和测试模块
Section titled “3. 编译和测试模块”-
编译模块
Terminal window aptos move compile如果编译成功,您将看到:
Terminal window Compiling, may take a little while to download git dependencies...INCLUDING DEPENDENCY AptosFrameworkINCLUDING DEPENDENCY AptosStdlibINCLUDING DEPENDENCY MoveStdlibBUILDING hello_blockchain{"Result": "Success"} -
运行测试
Terminal window aptos move test您应该看到测试通过:
Terminal window INCLUDING DEPENDENCY AptosFrameworkINCLUDING DEPENDENCY AptosStdlibINCLUDING DEPENDENCY MoveStdlibBUILDING hello_blockchainRunning Move unit tests[ PASS ] 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba::message::sender_can_set_messageTest result: OK. Total tests: 1; passed: 1; failed: 0{"Result": "Success"}
4. 发布模块
Section titled “4. 发布模块”现在让我们将模块发布到区块链。
-
发布模块
Terminal window aptos move publish系统会询问您是否要发布,键入
yes
并按回车:Terminal window Compiling, may take a little while to download git dependencies...INCLUDING DEPENDENCY AptosFrameworkINCLUDING DEPENDENCY AptosStdlibINCLUDING DEPENDENCY MoveStdlibBUILDING hello_blockchainpackage size 1755 bytesDo you want to publish this package at address 0x9ec1cfa30b885a5c9d595f32f3381ec16d208734913b587be9e210f60be9f9ba [yes/no] >发布成功后,您将看到:
Terminal window {"Result": "Success"}
5. 与模块交互
Section titled “5. 与模块交互”现在我们的模块已发布,让我们与它交互。
-
设置消息
Terminal window aptos move run \--function-id 'default::message::set_message' \--args 'string:Hello, Aptos!'您应该看到交易成功:
Terminal window {"Result": "Success"} -
查看消息
Terminal window aptos move view \--function-id 'default::message::get_message' \--args 'address:default'您应该看到您的消息:
Terminal window {"Result": ["Hello, Aptos!"]}
6. 理解代码
Section titled “6. 理解代码”让我们分解一下您刚刚创建的Move模块:
module hello_blockchain::message {
这声明了一个名为message
的模块,位于hello_blockchain
地址。
struct MessageHolder has key { message: string::String,}
这定义了一个可以存储在账户中的资源(has key
)。
set_message
: 允许账户设置或更新他们的消息get_message
: 允许任何人读取存储在地址上的消息
#[test(account = @0x1)]public entry fun sender_can_set_message(account: signer) acquires MessageHolder {
这是一个单元测试,验证模块按预期工作。
恭喜!您已经成功:
- ✅ 设置了Aptos开发环境
- ✅ 创建了您的第一个Move模块
- ✅ 编译和测试了模块
- ✅ 将模块发布到区块链
- ✅ 与已发布的模块交互