Getting Started with CosmWasm
Installing ccw
Clone the repository, then run:
# Clone the repo
git clone https://github.com/ComposableFi/cw-toolkit
# Install the ccw binary
cargo install --path ./cw-toolkit/cli
Generate a template project
Apart from interacting with pallet-cosmwasm
, you can also create a base CosmWasm project that you can work upon.
Before running the command, you need to install cargo-generate
. Because the command we run generates a new project
from a template by using cargo-generate
.
You can install it by running:
cargo install cargo-generate
Then run the new
command:
ccw new --name get-started --description "Get started with CosmWasm"
As you can see, the tool created a project for you. Let's skim through the project structure really quickly.
tree -a
Output:
.
├── .cargo
│ └── config
├── Cargo.toml
├── .gitignore
├── README.md
└── src
├── bin
│ └── schema.rs
├── contract.rs
├── error.rs
├── integration_tests.rs
├── lib.rs
├── msg.rs
└── state.rs
There are a few notable things:
.cargo/config
defines a fewcargo
aliases to simplify things.Cargo.toml
defines arun-script
calledoptimize
to get an optimized build which is super important when you want to test your contracts on a chain.integration_tests.rs
contains a basic integration test scenario withcosmwasm-orchestrate
. It is our great testing and simulation tool which will cover pretty much all your needs and scenarios.
Build the contract
You can build the contract by running:
cargo wasm
But the thing is, this is not optimized for binary size. So the output binary size will be pretty huge. To upload
and use it in pallet-cosmwasm
, we should get an optimized build.
There are two ways to do this. First is to use the official rust optimizer which needs you have to cargo-run-script
and docker
installed. After installing cargo-run-script
by running cargo install cargo-run-script
and docker
,
run:
cargo run-script optimize
The second and hacky way (in case you don't want to install anything) is building the binary by enabling the binary stripping flags.
RUSTFLAGS='-C link-arg=-s' cargo build --release --lib --target wasm32-unknown-unknown
This is one of the commands that optimize
uses under the hood.