Setting up a smart contract project

A smart contract in Rust is written as an ordinary Rust library crate. The library is then compiled to Wasm using the Rust target wasm32-unknown-unknown and, since it is just a Rust library, we can use Cargo for dependency management.

To set up a new smart contract project, first create a project directory. Inside the project directory run the following in a terminal:

$cargo init --lib

This will set up a default Rust library project by creating a few files and directories. Your directory should now contain a Cargo.toml file and a src directory and some hidden files.

To be able to build Wasm we need to tell cargo the right crate-type. This is done by adding the following in the file Cargo.toml:

crate-type = ["cdylib", "rlib"]

Adding the smart contract standard library

The next step is to add concordium-std as a dependency. It is a library for Rust containing procedural macros and functions for writing small and efficient smart contracts.

The library is added by opening Cargo.toml and adding the line concordium-std = "*" (preferably, replace the * with the latest version of concordium-std) in the [dependencies] section:

concordium-std = "0.4"

The crate documentation can be found on


If you wish to use a modified version of this crate, you will have to clone the repository with concordium-std and have the dependency point at the directory instead, by adding the following to Cargo.toml:

concordium-std = { path = "./path/to/concordium-std" }

That is it! You are now ready to develop your own smart contract.