Create Hello World on Aptos Blockchain

Create Hello World on Aptos Blockchain

Aptos Hello World

We are going to build a basic module to learn how to build on Aptos. Modules in Aptos are like contracts in EVM chains.

  1. Getting started: Clone github.com/aeither/aptos-starter

only the .move files and Move.toml are required to follow this guide.

  • Move.toml
  • sources/

1. Setup Wallet

Install Martian Wallet extension. It's the most Popular wallet with more than 600K downloads

2. Install Aptos CLI

I followed these steps to install on my macOS Ventura:

  • Download zip It has this pattern: aptos-cli-<version>-<platform> ex. aptos-cli-1.0.0-MacOSX-x86_64.zip
  • Unzip the downloaded file. Move the extracted aptos binary file to usr/local/bin/
  • Open terminal and type aptos help to verify it is installed correctly.

If it does not work for you or you are not a Mac user, here is the official guide to install the CLI

3. Setup IDE

Download visual studio code and install move-analyzer extension.

(Optional) The extension for Move (.move) enables syntax highlighting, commenting/uncommenting, simple context-unaware completion suggestions while typing, and other basic language features in Move files. marketplace.visualstudio.com/items?itemName..

4. Initiate the project

Move to the project folder aptos-starter. Remove .aptos. Open the terminal and run:

aptos init

It will generate .aptos/config.yaml config file containing a funded address on devnet with default settings.

If more funds are needed:

aptos account fund-with-faucet --account default

5. Compile

aptos move compile --named-addresses hello_blockchain=default

Terminal response:

Compiling, may take a little while to download git dependencies...
INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
{
  "Result": [
    "21db140d69608013d6791d9d8157102251798317c565350f519e361dd507e963::message"
  ]
}

The --named-addresses is a list of address mappings that must be translated in order for the package to be compiled to be stored in the default account. --save-metadata is required to publish the package.

6. Test

aptos move test --named-addresses hello_blockchain=default

Output:

INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
Running Move unit tests
[ PASS    ] 0x21db140d69608013d6791d9d8157102251798317c565350f519e361dd507e963::message_tests::sender_can_set_message
[ PASS    ] 0x21db140d69608013d6791d9d8157102251798317c565350f519e361dd507e963::message::sender_can_set_message
Test result: OK. Total tests: 2; passed: 2; failed: 0
{
  "Result": "Success"
}

Publish

aptos move publish --named-addresses hello_blockchain=default

Terminal response:

Compiling, may take a little while to download git dependencies...
INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
package size 1813 bytes
Do you want to submit a transaction for a range of [702600 - 1053900] Octas at a gas unit price of 100 Octas? [yes/no] >
yes
{
  "Result": {
    "transaction_hash": "0x1bfe2ac5c916c7f3deffc8c7a37754641b0ffed430ca4323d10d286036445a91",
    "gas_used": 7026,
    "gas_unit_price": 100,
    "sender": "1e5fcba9d2a7b14194b331d04adbe354139e17dd520ac53d9d05ba7bca420e5d",
    "sequence_number": 0,
    "success": true,
    "timestamp_us": 1667203290078387,
    "version": 18058074,
    "vm_status": "Executed successfully"
  }
}

If we go to Aptos Explorer , switch to Devnet and open Modules under our account. We can find the bytecode with the ABI of the contract we just deployed.

PUBLISHED_MODULE

Interact with the module

Calling contract function with:

aptos move run --assume-yes \
  --function-id 'default::message::set_message' \
  --args 'string:hello, blockchain'

It will print out the following on success:

{
  "Result": {
    "transaction_hash": "0x8185fe45c002d41c491005b489a2faeea75b0bf9c4a0be4218e47a3da6a6eaf0",
    "gas_used": 782,
    "gas_unit_price": 100,
    "sender": "1e5fcba9d2a7b14194b331d04adbe354139e17dd520ac53d9d05ba7bca420e5d",
    "sequence_number": 1,
    "success": true,
    "timestamp_us": 1667203753729894,
    "version": 18087040,
    "vm_status": "Executed successfully"
  }
}

We passed --function-id with a value of this <ADDRESS>::<MODULE_ID>::<FUNCTION_NAME> structure.

Head to the explorer and open the resources tab.

SET_HELLO_WORLD

By opening message::MessageHolder you can see the new message.

Conclusion

You can find the original here by Aptos Foundation. This is a modified version where I have added, removed, and modified pieces of content to better fit my journey.

PD: You should NOT expose to the public the .aptos folder as it contain the privateKey.

Learn more: github.com/aeither/aptos-starter/blob/main/..