Creating a new project
For our first project, we will be creating a multiplayer counter contract. The contract will have the following features:
- A data store that keeps a counter per principal.
- A public function
count-upthat increments the counter for
- A public function
get-countthat returns the current counter value for the passed principal.
Once the contract is finished, we will look at how we can interact with the project manually and how to write automated tests.
Initialising the project folder
Let us start by creating a new folder that will contain the various projects. We
will simply call it
projects. Open the folder in Visual Studio Code and open
the built-in terminal emulator by going to the Terminal menu and choosing New
We will create a new project called
counter using Clarinet. Type the following
in the Terminal screen:
clarinet new counter
Clarinet will create a number of directories and files. We will go over these files momentarily.
Creating directory counter Creating directory counter/contracts Creating directory counter/settings Creating directory counter/tests Creating file counter/Clarinet.toml Creating file counter/settings/Devnet.toml Creating file counter/settings/Mocknet.toml Creating directory counter/.vscode Creating file counter/.vscode/settings.json
counter directory will be our working directory. You can either reopen the
folder in Visual Studio Code or navigate into it in the terminal session with
Adding a new contract
counter folder, we create a new Clarity contract with the command:
clarinet contract new counter
Clarinet will create a boilerplate Clarity and test file, and add the contract to the configuration file.
Creating file contracts/counter.clar Creating file tests/counter_test.ts Adding contract counter to Clarinet.toml
Let us now open
Clarinet.toml. This is the Clarinet configuration file for the
project. It contains a reference to all contract files and their dependencies.
In our case, only one contract is listed, but for multi-contract projects you
can specify their relationship to each other.
[project] name = "counter" requirements =  [contracts.counter] path = "contracts/counter.clar"
The files found in the
settings directory are used for deployment:
Devnet.tomlcontains configuration that is used when running tests and in console mode.
Testnet.tomlis a template for deploying on a testnet chain.
Mainnet.tomlis a template for deploying on a mainnet chain.
We will take a closer look at them later. Their contents are not important for our project but it is good to know what they are used for.
Here is what the end result looks like. You can see your project files on the left, the terminal window on the bottom right, and your editor on the top right. Please note that the directories shown in the image may differ with the current version.