Skip to content
🎉 Welcome! Translations are currently experimental. | 翻訳は現在実験的です。 | 翻译目前处于实验阶段。
Click here to submit feedback! | ここをクリックしてフィードバックを送信してください! | 点击这里提交反馈!

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:

        1. name: name of your package
        2. version: package version (default is "0.0.0")
        3. 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 use hello_blockchain as the named address.
        4. dependencies: You will likely want to use AptosFramework 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
                );
            }
        }