Compile a Rust smart contract module#
This guide will show you how to compile smart contract module written in Rust to a Wasm module.
Preparation#
Make sure to have Rust and Cargo installed and the wasm32-unknown-unknown
target, together with cargo-concordium
and the Rust source code for a smart
contract module, you wish to compile.
See also
For instructions on how to install the developer tools see Install tools for development.
Compiling to Wasm#
To help building smart contract modules and to take advantage of features
such as contract schemas, Concordium recommends using the
cargo-concordium
tool for building Rust smart contracts.
In order to build a smart contract, run:
$cargo concordium build
This uses Cargo for building, but runs further optimizations on the result.
Note
If you receive an error similiar to the one below, you need to update your cargo-concordium
to version 3.0 or later.
Error: Could not build smart contract.
Caused by:
0: Could not build module schema.
1: Could not generate module schema from Wasm module.
2: Unsupported instruction 0xc0
If you want a smaller code footprint, enable the wee_alloc feature by using:
$cargo concordium build --features wee_alloc
See also
For building the schema for a smart contract module, some further preparation is required.
Note
It is also possible to compile using Cargo directly by running:
$cargo build --target=wasm32-unknown-unknown [--release]
Note that even with --release
set, the produced Wasm module includes
debug information.
Running the cargo concordium build
command will produce a smart contract module which can be found
relative to your project root folder in ./target/concordium/wasm32-unknown-unknown/release/my_module.wasm.v1
.
Alternatively, you can supply the location where to store the smart contract module using
the --out
option. For example running the following command will output your smart contract module
into the root folder of your project in a file name my_module.wasm.v1
.
$cargo concordium build --out ./my_module.wasm.v1
Note
cargo-concordium
produces several smart contract modules with different suffixes. The suffix corresponds
to the smart contract version, i.e. my_module.wasm/my_module.wasm.v0
for V0 contracts and my_module.wasm.v1
for V1 contracts. Concordium recommends using the wasm module with the .v1
extension
(the most-up-to date smart contract version).
The file my_module.wasm.v1
will be used when deploying a smart contract on-chain.