1. Create a Smart Contract
This is the first chapter of the tutorial on building an end-to-end dapp on Aptos. If you haven’t done it, review that introduction, and ensure your environment meets the prerequisites listed there.
Now that you are all set up and at your terminal:
-
cdinto themy-first-dapproot directory, and create a newmovedirectory. -
cdinto the newmovedirectory and run:aptos move init --name my_todo_listThat command creates asources/directory andMove.tomlfile inside themovedirectory. -
Your new
movedirectory should now resemble:
What is a Move.toml file?
A Move.toml file is a manifest file that contains metadata such as name, version, and dependencies for the package.
Take a look at the new Move.toml file. You should see your package information and an AptosFramework dependency. Note that the name property is the same --name attribute we passed to the aptos move init command before. The AptosFramework dependency points to the aptos-core/aptos-move/framework/aptos-framework GitHub repo main branch.
Why sources directory?
The sources directory holds a collection of .move modules files. And later when we want to compile the package using the CLI, the compiler will look for that sources directory and its Move.toml file.
Create a Move module
An account is needed to publish a Move module. So first we need to create an account. Once we have the account's private key, we can create a module under its account address and publish the module using that account.
-
In our
movedirectory, runaptos init --network devnet. Press enter when prompted.This creates for us a
.aptosdirectory with aconfig.yamlfile that holds our profile information. In theconfig.yamlfile, we now have our profiles list that holds adefaultprofile. If you open that file, you will see content resembling:profiles:
default:
private_key: "0xee8f387ef0b4bb0018c4b91d1c0f71776a9b85935b4c6ec2823d6c0022fbf5cb"
public_key: "0xc6c07218d79a806380ca67761905063ec7a78d41f79619f4562462a0f8b6be11"
account: cbddf398841353776903dbab2fdaefc54f181d07e114ae818b1a67af28d1b018
rest_url: "https://api.devnet.aptoslabs.com"
faucet_url: "https://faucet.devnet.aptoslabs.com"From now on, whenever we run a CLI command in this
movedirectory, it will run with that default profile. We use thedevnetnetwork flag so eventually when we publish our package it will get published to thedevnetnetwork.ヒントYou just created a new account on the Aptos (dev) network! Yay! You can see it by going to the Aptos Explorer Devnet network view, pasting the
accountaddress value from your configuration file into the search field, and clicking on the dropdown option!
As mentioned, our sources directory holds our .move module files; so let’s add our first Move file.
- Open the
Move.tomlfile. - Add the following code to that Move file, substituting your actual default profile account address from
.aptos/config.yaml:
[addresses]
todolist_addr='<default-profile-account-address>'
If the default profile account address is cbddf398841353776903dbab2fdaefc54f181d07e114ae818b1a67af28d1b018, your Move.toml file should look like:
[addresses]
todolist_addr='cbddf398841353776903dbab2fdaefc54f181d07e114ae818b1a67af28d1b018'
- Create a new
todolist.movefile within thesourcesdirectory and add the following to that file:
module todolist_addr::todolist {
}
A Move module is stored under an address (so when it published anyone can access it using that address); the syntax for a Move module is
module <account-address>::<module-name> {
}