Contract creation
The easiest and recommended way to start working on a new CosmWasm contract is to generate it from
the cw-template
(opens in a new tab).
cargo generate CosmWasm/cw-template
The cw-template
(opens in a new tab) will generate a lot of code for you.
Because this tutorial aims to guide you step-by-step through the process of creating your first
contract we will omit the use of the template and show you how to create it from the start.
New project
As smart contracts are Rust library crates, we will start with creating one:
cargo new --lib ./contract
You created a simple Rust library, but it is not yet ready to be a smart contract. The first thing to do is to update the Cargo.toml file:
[package]
name = "contract"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
cosmwasm-std = { version = "2.1.4", features = ["staking"] }
As you can see, I added a crate-type
field for the library section. Generating the cdylib
is
required to create a proper web assembly binary. The downside of this is that such a library cannot
be used as a dependency for other Rust crates - for now, it is not needed, but later we will show
how to approach reusing contracts as dependencies.
Additionally, there is one core dependency for smart contracts: the
cosmwasm-std
(opens in a new tab). This crate is a standard
library for smart contracts. It provides essential utilities for communication with the outside
world and a couple of helper functions and types. Every smart contract we will build will use this
dependency.