Skip to content

Create Package (Move)

  1. aptos move init

    In a new project directory, initialize a Move package by running:

    Terminal window
    aptos move init --name <PROJECT_NAME>

    You should now have a Move project that looks like so:

    • Directoryscripts/
    • Directorysources/
    • Directorytests/
    • Move.toml
  2. 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

    [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. Add to sources directory

    Add your code in the sources directory. Here we have a hello_blockchain.move example.

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