Skip to content
🎉 Welcome to the new Aptos Docs! Click here to submit an issue.
构建Smart Contracts (Move)Create Package | 创建包

创建包

💡

我们建议在开始之前安装 Aptos CLI。 如果您还没有安装 Aptos CLI,请参阅 CLI 部分

aptos move init

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

Terminal
aptos move init --name <PROJECT_NAME>

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

        • Move.toml
        💡

        您还可以从 模板 创建一个 Move 包。

        更新 Move.toml

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

        1. name: 您包的名称
        2. version: 包的版本(默认是 “0.0.0”)
        3. addresses: 描述模块将部署到哪个地址。这些是可以用作别名的命名地址。在下面的示例中,我们将使用 hello_blockchain 作为命名地址。
        4. 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
                );
            }
        }