In this section, we will download a sample contract, compile to it to wasm binary executable.
Please first review the client setup instructions, and configure and verify a client, either Go CLI or Node.js console.
Let's download the repo in which we collect
cosmwasm-examples and try out an existing simple
escrow contract that can hold some native tokens and gives the power to an arbiter to release them
to a pre-defined beneficiary. First, clone the repo and try to build the wasm bundle:
After this compiles, it should produce a file in
target/wasm32-unknown-unknown/release/cw_escrow.wasm. A quick
ls -l should show around 2MB. This
is a release build, but not stripped of all unneeded code. To produce a much smaller version, you
can run this which tells the compiler to strip all unused code out:
This produces a file about 174kB. We use this and another optimizer in the next last section to produce the final product uploaded to the blockchain. You don't need to worry about running this yourself (unless you are curious), but you should have an idea of the final size of your contract this way.
Let's try running the unit tests:
After some compilation steps, you should see:
RUST_BACKTRACE=1 will provide you with full stack traces on any error, which is super useful. This
only works for unit tests (which test native rust code, not the compiled wasm). Also, if you want to
cargo wasm and
cargo unit-test come from, they are just aliases defined in
.cargo/config. Take a look there to understand the cargo flags more.
Smart contract binary size must be as small as possible for reduced gas cost. This will not only cost less on deployment, also for every single interaction. Simply, optimize production code using cosmwasm/rust-optimizer. rust-optimizer also produces reproducible builds of cosmwasm smart contracts. This means third parties can verify the contract is the actually the claimed code.