跳转到内容

创建包 (Move)

  1. aptos move init

    在一个新的项目目录中,通过运行以下命令初始化一个 Move 包:

    Terminal window
    aptos move init --name <PROJECT_NAME>

    现在,您应该有一个 Move 项目,如下所示:

    • 文件夹scripts/
    • 文件夹sources/
    • 文件夹tests/
    • Move.toml
  2. 更新 Move.toml

    Move.toml 中,填写以下关键信息:

    1. name: 您包的名称
    2. version: 包的版本(默认是 “0.0.0”)
    3. addresses: 描述模块将部署到哪个地址.这些是可以用作别名的命名地址.在下面的示例中,我们将使用 hello_blockchain 作为命名地址.
    4. dependencies: 您可能希望使用 AptosFramework 和其他 第三方依赖

    以下是一个示例

    [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"
  3. 添加到 sources 目录

    将您的代码添加到 sources 目录.这里我们有一个 hello_blockchain.move 示例.

    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
    );
    }
    }