wasm-deploy is a fully featured deployment suite for complex, multicontract cosmwasm projects
https://user-images.githubusercontent.com/8366997/198078221-5fa01e97-a921-4441-b054-f75f4d1ff272.mp4
deploy d
you can build, instantiate, set your configs, and execute any set up for numerous contracts.The first step is installing wasm-opt and ensuring that it is in your path. Run
bash
wasm-opt --version
to ensure that it is installed correctly.
Install cargo generate with
bash
cargo install cargo-generate
generate the example project with
bash
cargo generate cryptechdev/wasm-deploy workspace_example
and name the project whatever you like. We will use my-contracts
for the rest of this example. During this step you can also pick the name for the binary. The default binary name is deploy
which we will use in the rest of this example.
Run cd my-contracts
and install wasm-deploy globally with
bash
cargo install --path deployment
Then you should be able to run
bash
deploy init
This will initialize the deployment config and will prompt you for a bunch of information. Please ensure you fill out the optional RPC endpoint as it is the only client which is currently fully working.
Before you deploy the contracts, please be sure to change the ADMIN constant in deployment/src/defaults.rs to your personal dev address.
Deploy all contracts with
bash
deploy d
Or specific ones with
bash
deploy d -c contract_1,contract_2
after deploying them to the chain, you can execute the contract with
bash
deploy execute <contract_name>
in this case, use cw20base in place of contractname.
If you make changes to your contract API or deployment code you will need to update the wasm-deploy binary by running
bash
deploy u
This currently will install the binary globally.
To see a list of commands please run
bash
deploy --help
Code Ids and addresses of local contracts can be fetched using get_code_id(contract_name: &str)
and get_addr(contract_name: &str)
. This allows you to send messages to other contracts without having to manually insert the address.
First ensure you have cargo-generate and wasm-opt installed as above.
Then cd into your project cd my-contracts
and run
bash
cargo generate --init cryptechdev/wasm-deploy workspace_example
and be sure to name the project after your folder, and pick a custom name for the binary/executable, such as projd
, that will replace the deploy
name.
Install wasm-deploy globally with
bash
cargo install --path deployment
Important Note: The generated deployment folder is a template only. You will have to modify BOTH deployment/src/contract.rs deployment/src/defaults.rs to match your project. The template will not work out of the box. The generated files should have the correct skeleton and plenty of comments to help you along.
In my opinion, the most powerful cosmwasm deployment software ever built. It is infinitely configurable, automatically interfaces with the apis of your contracts, and is super easy to set up.
Seamless upgrades to newer versions or a super quick initial installation. Since every smart contract workspace requires custom logic for how deployments should proceed, setting up wasm-deploy requires an inherent underlying complexity. This project is made almost entirely in my spare time and is extremely young. I have plans to support it for quite a long while to come, and I should be very responsive to any issues you may have, so please open an issue on github if you run into one. Or better yet, please contribute and submit a PR. This crate is still VERY much in early Alpha stage. This means the entire API is subject to change, Error messages are not likely to be very helpful, and improper use or edge cases are likely to error or cause a panic.
workspace-root/
├─ artifacts/
│ ├─ contract_1.wasm
│ ├─ contract_2.wasm
├─ target/
│ ├─ debug/
│ │ ├─ deploy
├─ deploy -> target/debug/deploy
├─ deployment/
│ ├─ src/
│ │ ├─ contracts.rs
│ │ ├─ main.rs
│ │ ├─ Cargo.toml
├─ contracts/
│ ├─ contract_1/
│ │ ├─ Cargo.toml
│ │ ├─ src/
│ ├─ contract_2/
│ │ ├─ Cargo.toml
│ │ ├─ src/
├─ packages/
│ ├─ my_project/
│ │ ├─ contract_1.rs
│ │ ├─ contract_2.rs