LogoLogo
  • Introduction
  • Sequencer
  • Cross VM Calls
  • Start Building
    • Get Whitelisted
    • Lumio on Optimism Canary Mainnet
    • Lumio on Optimism Testnet
      • Network Information
        • Contracts
      • Use Testnet
        • Pontem Wallet
        • Other Wallets
        • CLI
        • Faucet
        • Bridging
        • Whitelist
      • Deploy on Move VM
      • Deploy on EVM (Hardhat)
      • Deploy on EVM (Foundry)
      • Block Explorer
    • Lumio on Solana Devnet
      • How to connect
      • Native Bridge
      • Deploy on SVM
      • Ecosystem
  • Fees
  • VMs Differences
    • SVM
    • EVM
    • Move VM
  • Running a Node
  • Ecosystem
Powered by GitBook
On this page
Edit on GitHub
  1. Start Building
  2. Lumio on Optimism Testnet

Deploy on Move VM

PreviousWhitelistNextDeploy on EVM (Hardhat)

Last updated 1 year ago

Download the Aptos CLI and follow the installation instructions as described in the .

For an optimized development experience, consider using the IntelliJ plugin developed by Pontem.

To create a new Aptos project, use your IDE. Typically, selecting the Move project type will automatically generate a new project for you.

In the project directory, run the following command:

aptos move init --name l2_coin

Feel free to replace l2_coin with any name you prefer.

You'll need the Aptos CLI. Initialize your account as described in the relevant section:

aptos init

When prompted for the network, choose custom. For the RPC and faucet, use the following URLs:

RPC endpoint: https://mvm.testnet.lumio.io/v1
Faucet: https://faucet.testnet.lumio.io

You can opt to use a newly generated private key or, alternatively, copy your private key from an existing account.

The init command will create a new account, deposit funds from the faucet, and display the address of the newly created account.

Navigate to the newly created Move.toml file and define the new account as follows:

[addresses]
l2_coin = "your address"

Replace your address with the address you created.

Next, create a new module in the sources/ folder named coin.move:

module l2_coin::coin {
    use std::string::utf8;
    use std::signer;
    use aptos_framework::coin;

    // Coin Type.
    struct MyCoin {}

    // Initialize function.
    public entry fun initialize(account: &signer) {
        let (burn_cap, freeze_cap, mint_cap) = coin::initialize<MyCoin>(
            account,
            utf8(b"Coin Name"),
            utf8(b"SYMBOL"),
            6, // Decimals
            true, // Limited supply
        );

        coin::destroy_freeze_cap(freeze_cap);
        coin::destroy_burn_cap(burn_cap);

        // Mint 100 million coins.
        let minted_coins = coin::mint(100000000000000, &mint_cap);

        // Deposit coins into the minter's account.
        coin::register<MyCoin>(account);
        coin::deposit(signer::address_of(account), minted_coins);

        coin::destroy_mint_cap(mint_cap);
    }
}

This module, when deployed, will create a new coin type MyCoin and deposit 100 million coins into the creator's account.

Now, let's move on to publishing our module.

aptos move publish

You should see a status message "vm_status": "success", indicating that the module was deployed correctly.

Next, let’s initiate the minting of your new coin by running the initialize function:

aptos move run --function-id <your address>::l2_coin::initialize

Make sure to replace <your address> with your actual address before executing the call.

Upon successful completion of this call, you will see a success status along with a transaction ID. You can verify the result in the explorer.

To confirm that your coin has been deployed, access the API and substitute the URL with your address:

aptos move run --function-id <your address>::coin::initialize

Search for the <your address>::l2_coin::MyCoin type associated with your account.

Alternatively, you can import your account into a wallet like Pontem, Petra, etc., using the private key found in the .aptos/config.yml directory. If your coin doesn’t automatically appear in the wallet, you can manually import it using its path:

<your address>::l2_coin::MyCoin
section